Skip to content
Commit 5266f5c2 authored by Lancelot SIX's avatar Lancelot SIX
Browse files

gdb/infrun: lazily load curr_frame_id in process_event_stop_test

A recent(ish) change in gdb/infrun.c made process_event_stop_test load
debug information where it would not have done so previously.  The
change is:

    commit bf2813af
    AuthorDate: Fri Sep 1 13:47:32 2023 +0200
    CommitDate: Mon Nov 20 10:54:03 2023 +0100

        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



Although there is nothing wrong with this change in principle, it
happens to break most of the tests in gdb/testsuite/gdb.rocm/*.exp.
This is because those tests do rely on GDB not loading debug
information.  This is necessary because the debug information produced
for AMDGPU code is using DWARF extensions which are not supported by GDB
at this point.

In this patch, I propose to use a lazy loading mechanism so the frame_id
for the current frame is only computed when required instead of when
entering process_event_stop_test.  The lazy_loader class is currently
defined locally in infrun.c, but if it turns out to be useful elsewhere,
it could go somewhere under gdbsupport.

This patch should restore the behavior GDB had before
bf2813af when it comes to load debug
info.

Another approach could have been to revert
fb84fbf8 (gdb/infrun: simplify
process_event_stop_test) and adjust the implementation of
bf2813af (gdb/record: print frame
information when exiting a recursive call).  However, I think that the
lazy loading works well with the simplification done recently, so I went
down that route.

Regression tested on x86_64-linux (Ubuntu 22.04) with AMDGPU support.

Change-Id: Ib63a162128130d1786a77c98623e9e3dcbc363b7
Approved-by: default avatarKevin Buettner <kevinb@redhat.com>
parent 32ee2b4b
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment