aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.ada/dyn-bit-offset
diff options
context:
space:
mode:
authorAndrew Burgess <aburgess@redhat.com>2025-06-04 19:54:01 +0100
committerAndrew Burgess <aburgess@redhat.com>2025-06-06 23:46:47 +0100
commit2898989ac78f045a961a0b67296a0601abedbfd5 (patch)
tree554ea29b868754c862ae9936808ec484206d2624 /gdb/testsuite/gdb.ada/dyn-bit-offset
parent925908e4995f7ab56349b30b29096e211cce42b0 (diff)
downloadbinutils-2898989ac78f045a961a0b67296a0601abedbfd5.zip
binutils-2898989ac78f045a961a0b67296a0601abedbfd5.tar.gz
binutils-2898989ac78f045a961a0b67296a0601abedbfd5.tar.bz2
gdb/python/guile: remove some explicit calls to xmalloc
In gdbpy_parse_command_name (python/py-cmd.c) there is a call to xmalloc that can easily be replaced with a call to make_unique_xstrndup, which makes the code easier to read (I think). In gdbscm_parse_command_name (guile/scm-cmd.c) the same fix can be applied to remove an identical xmalloc call. And there is an additional xmalloc call, which can also be replaced with make_unique_xstrndup in the same way. The second xmalloc call in gdbscm_parse_command_name was also present in gdbpy_parse_command_name at one point, but was replaced with a use of std::string by this commit: commit 075c55e0cc0a68eeab777027213c2f545618e844 Date: Wed Dec 26 11:05:57 2018 -0700 Remove more calls to xfree from Python I haven't changed the gdbscm_parse_command_name to use std::string though, as that doesn't work well with the guile exception model. Guile exceptions work by performing a longjmp from the function that raises the exception, back to the guile run-time. The consequence of this is that destructors are not run. For example, if gdbscm_parse_command_name calls gdbscm_out_of_range_error, then any function local objects in gdbscm_parse_command_name will not have their destructors called. What this means is that, for the existing `result` and `prefix_text` locals, any allocated memory managed by these objects will be leaked if an exception is called. However, fixing this is pretty easy, one way is to just assign nullptr to these locals before raising the exception, this would cause the allocated memory to be released. But for std::string it is harder to ensure that the managed memory has actually been released. We can call std::string::clear() and then maybe std::string::shrink_to_fit(), but this is still not guaranteed to release any managed memory. In fact, I believe the only way to ensure all managed memory is released, is to call the std::string destructor. And so, for functions that can throw a guile exception, it is easier to just avoid std::string. As for the memory leak that I identify above; I'll fix that in a follow on commit. Approved-By: Tom Tromey <tom@tromey.com>
Diffstat (limited to 'gdb/testsuite/gdb.ada/dyn-bit-offset')
0 files changed, 0 insertions, 0 deletions