From: Andrew Burgess Date: Tue, 14 Apr 2026 20:36:09 +0000 (+0200) Subject: gdb: use get_current_frame consistently in print_stop_location X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f309da3e15052c84158e897861b748928e3bb0fb;p=thirdparty%2Fbinutils-gdb.git gdb: use get_current_frame consistently in print_stop_location In print_stop_location, in the PRINT_UNKNOWN case we currently use a strange mix of get_current_frame and get_selected_frame. This works fine because at the point print_stop_location is called the selected frame will always be the current frame, but calling these two different functions is confusing, at least for me. Since bpstat_print selects the frame to print (which usually is the current frame, but not always), the correct frame to use is the selected frame after the bpstat_print call. Assign the selected frame to a variable print_frame, and use it throughout the function. There should be no user visible changes after this commit. Co-Authored-By: Tom de Vries Approved-By: Andrew Burgess --- diff --git a/gdb/infrun.c b/gdb/infrun.c index dea2a2cbd48..19836c4d89e 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -9349,7 +9349,12 @@ print_stop_location (const target_waitstatus &ws) struct thread_info *tp = inferior_thread (); bpstat_ret = bpstat_print (tp->control.stop_bpstat, ws.kind ()); - switch (bpstat_ret) + /* Function bpstat_print selects the frame to print. Typically, that is the + stop frame, in other words get_current_frame (). But bpstat_print may + select a different frame, see for instance ada_catchpoint::print_it. */ + frame_info_ptr print_frame = get_selected_frame (nullptr); + + switch (bpstat_ret) { case PRINT_UNKNOWN: /* FIXME: cagney/2002-12-01: Given that a frame ID does (or @@ -9357,10 +9362,10 @@ print_stop_location (const target_waitstatus &ws) that when doing a frame comparison. */ if (tp->control.stop_step && (tp->control.step_frame_id - == get_frame_id (get_current_frame ())) - && tp->control.in_step_start_function (get_current_frame ())) + == get_frame_id (print_frame)) + && tp->control.in_step_start_function (print_frame)) { - symtab_and_line sal = find_frame_sal (get_selected_frame (nullptr)); + symtab_and_line sal = find_frame_sal (print_frame); if (sal.symtab != tp->current_symtab) { /* Finished step in same frame but into different file, print @@ -9403,7 +9408,7 @@ print_stop_location (const target_waitstatus &ws) LOCATION: Print only location SRC_AND_LOC: Print location and source line. */ if (do_frame_printing) - print_stack_frame (get_selected_frame (nullptr), 0, source_flag, 1); + print_stack_frame (print_frame, 0, source_flag, 1); } /* See `print_stop_event` in infrun.h. */