Use get_frame_address_in_block in print_frame
authorTom Tromey <tom@tromey.com>
Tue, 1 Aug 2023 21:09:49 +0000 (15:09 -0600)
committerTom Tromey <tom@tromey.com>
Sat, 26 Aug 2023 16:10:59 +0000 (10:10 -0600)
commit9030a82d6f700e03ab143f0d002e9f21ae2fd52f
tree6c8cb41f79076800fa6473f430d719d38192c386
parentd2ac569f7b443aef7b2be2f0c80d8ab0d67b4292
Use get_frame_address_in_block in print_frame

The author of 'mold' pointed out that with a certain shared library,
gdb would fail to find the shared library's name in 'bt'.

The function in question appeared at the end of the .so's .text
segment and ended with a call to 'abort'.

This turned out to be a classic case of calling get_frame_pc when
get_frame_address_in_block is needed -- the former will be off-by-one
for purposes of finding the enclosing function or shared library.

The included test fails without the patch on my system.  However, I
imagine it can't be assumed to reliably fail.  Nevertheless it seemed
worth doing.

Regression tested on x86-64 Fedora 38.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29074
Reviewed-by: Kevin Buettner <kevinb@redhat.com>
gdb/stack.c
gdb/testsuite/gdb.base/solib-abort-lib.c [new file with mode: 0644]
gdb/testsuite/gdb.base/solib-abort.c [new file with mode: 0644]
gdb/testsuite/gdb.base/solib-abort.exp [new file with mode: 0644]