aboutsummaryrefslogtreecommitdiff
path: root/ld/ChangeLog-2015
diff options
context:
space:
mode:
authorAndrew Burgess <aburgess@redhat.com>2026-01-23 16:34:01 +0000
committerAndrew Burgess <aburgess@redhat.com>2026-03-05 17:45:29 +0000
commite4fe38115fea0a9f357527959893f18ca8d51a03 (patch)
tree838dfb91a6dab6a79535aa90d61b9e2c074cf97a /ld/ChangeLog-2015
parent99d7dc93ce3a5bbcf30ac6715edf3fb3c0e92d94 (diff)
downloadbinutils-master.zip
binutils-master.tar.gz
binutils-master.tar.bz2
gdb/python: fix gdb.FinishBreakpoint returning to a tail call frameHEADmaster
I noticed that gdb.FinishBreakpoint doesn't work if the parent function is a tail call function. In bpfinishpy_init we use get_frame_pc to find the address at which the finish breakpoint should be placed within the previous frame. However, if the previous frame is a tail call frame, then get_frame_pc will return an address outside of the tail call function, an address which will not be reached on the return path. Unlike other recent tail call fixes I've made, we cannot switch to using something like get_frame_address_in_block here as in the tail call case this will return an address within the function, but not an address that will be executed when we return. What we need to do in the tail call case is create the finish breakpoint in the frame that called the tail call function. Or if that frame is itself a tail call, then we should walk back up the call stack until we find a non-tail call function. This can be achieved by adding a call to skip_tailcall_frames into bpfinishpy_init after our existing call to get_prev_frame. I've extended the existing test case to cover this additional situation. Approved-By: Tom Tromey <tom@tromey.com>
Diffstat (limited to 'ld/ChangeLog-2015')
0 files changed, 0 insertions, 0 deletions