]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit
gdb/record: print frame information when exiting a recursive call
authorGuinevere Larsen <blarsen@redhat.com>
Fri, 1 Sep 2023 11:47:32 +0000 (13:47 +0200)
committerGuinevere Larsen <blarsen@redhat.com>
Mon, 20 Nov 2023 09:54:03 +0000 (10:54 +0100)
commitbf2813aff8f2988ad3d53e819a0415abf295c91f
tree05d1bbc97043c285887ee94f602d16651dcfd076
parent11788869e0a3713e847733be8712e4b3b5e4dfd9
gdb/record: print frame information when exiting a recursive call

Currently,  when GDB is reverse stepping out of a function into the same
function due to a recursive call, it doesn't print frame information, as
reported by PR record/29178. This happens because when the inferior
leaves the current frame, GDB decides to refresh the step information,
clobbering the original step_frame_id, making it impossible to figure
out later on that the frame has been changed.

This commit changes GDB so that, if we notice we're in this exact
situation, we won't refresh the step information.

Because of implementation details, this change can cause some debug
information to be read when it normally wouldn't before, which showed up
as a regression on gdb.dwarf2/dw2-out-of-range-end-of-seq. Since that
isn't a problem, the test was changed to allow for the new output.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29178
Approved-By: Tom Tromey <tom@tromey.com>
gdb/infrun.c
gdb/testsuite/gdb.dwarf2/dw2-out-of-range-end-of-seq.exp
gdb/testsuite/gdb.reverse/recursion.c [new file with mode: 0644]
gdb/testsuite/gdb.reverse/recursion.exp [new file with mode: 0644]