[binutils-gdb] gdb: use get_current_frame consistently in print_stop_location

Tom de Vries via Gdb-cvs <[email protected]>
Newsgroups gmane.comp.gdb.cvs
Message-ID <[email protected]>
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=f309da3e15052c84158e897861b748928e3bb0fb

commit f309da3e15052c84158e897861b748928e3bb0fb
Author: Andrew Burgess <[email protected]>
Date:   Tue Apr 14 22:36:09 2026 +0200

    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 <[email protected]>
    Approved-By: Andrew Burgess <[email protected]>

Diff:
---
 gdb/infrun.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

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.  */
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.