]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
[gdb] Add thread_control_state::step_start_function methods
authorTom de Vries <tdevries@suse.de>
Tue, 14 Apr 2026 20:36:09 +0000 (22:36 +0200)
committerTom de Vries <tdevries@suse.de>
Tue, 14 Apr 2026 20:36:09 +0000 (22:36 +0200)
Factor out all uses of thread_control_state::step_start_function into
methods, and make the field private.

Tested on x86_64-linux.

Co-Authored-By: Andrew Burgess <aburgess@redhat.com>
Approved-By: Andrew Burgess <aburgess@redhat.com>
gdb/gdbthread.h
gdb/infcmd.c
gdb/infrun.c

index d64bf6e5a0112a4bb545a6b68356ef9c3dc27e25..224e6e4b657bd0ac9583b284773821db18777aec 100644 (file)
@@ -154,8 +154,36 @@ struct thread_control_state
   CORE_ADDR step_range_start = 0;      /* Inclusive */
   CORE_ADDR step_range_end = 0;                /* Exclusive */
 
-  /* Function the thread was in as of last it started stepping.  */
-  struct symbol *step_start_function = nullptr;
+  /* Set m_step_start_function according to PC.  */
+  void set_step_start_function (CORE_ADDR pc)
+  {
+    m_step_start_function = find_symbol_for_pc (pc);
+  }
+
+  /* Reset m_step_start_function.  */
+  void reset_step_start_function ()
+  {
+    m_step_start_function = nullptr;
+  }
+
+  /* Return true if the function symbol for PC matches
+     m_step_start_function.  */
+  bool in_step_start_function (CORE_ADDR pc)
+  {
+    return m_step_start_function == find_symbol_for_pc (pc);
+  }
+
+  /* Return true if m_step_start_function is set.  */
+  bool step_start_function_p ()
+  {
+    return m_step_start_function != nullptr;
+  }
+
+  /* Return m_step_start_function.  */
+  struct symbol *step_start_function ()
+  {
+    return m_step_start_function;
+  }
 
   /* If GDB issues a target step request, and this is nonzero, the
      target should single-step this thread once, and then continue
@@ -208,6 +236,10 @@ struct thread_control_state
 
   /* True if the thread is evaluating a BP condition.  */
   bool in_cond_eval = false;
+
+private:
+  /* Function the thread was in as of last it started stepping.  */
+  struct symbol *m_step_start_function = nullptr;
 };
 
 /* Inferior thread specific part of `struct infcall_suspend_state'.  */
index fa7b273ae57f74276f957f75b01890613690b829..a1df59e09f23cfb45b1f96d2319e5b95fc923992 100644 (file)
@@ -899,7 +899,7 @@ set_step_frame (thread_info *tp)
   set_step_info (tp, frame, sal);
 
   CORE_ADDR pc = get_frame_pc (frame);
-  tp->control.step_start_function = find_symbol_for_pc (pc);
+  tp->control.set_step_start_function (pc);
 }
 
 /* Step until outside of current statement.  */
index 2c9a27325afd119c2106d170643b64f21b64c0c6..becd68a21adbe9451c239512e17dd7b1e8c3db0d 100644 (file)
@@ -3098,7 +3098,7 @@ clear_proceed_status_thread (struct thread_info *tp)
   tp->control.step_frame_id = null_frame_id;
   tp->control.step_stack_frame_id = null_frame_id;
   tp->control.step_over_calls = STEP_OVER_UNDEBUGGABLE;
-  tp->control.step_start_function = nullptr;
+  tp->control.reset_step_start_function ();
   tp->stop_requested = false;
 
   tp->control.stop_step = 0;
@@ -7745,9 +7745,9 @@ process_event_stop_test (struct execution_control_state *ecs)
   if (execution_direction != EXEC_REVERSE
       && ecs->event_thread->control.step_over_calls == STEP_OVER_UNDEBUGGABLE
       && in_solib_dynsym_resolve_code (ecs->event_thread->stop_pc ())
-      && (ecs->event_thread->control.step_start_function == nullptr
+      && (!ecs->event_thread->control.step_start_function_p ()
          || !in_solib_dynsym_resolve_code (
-              ecs->event_thread->control.step_start_function->value_block ()
+              ecs->event_thread->control.step_start_function ()->value_block ()
                ->entry_pc ())))
     {
       CORE_ADDR pc_after_resolver =
@@ -7871,8 +7871,8 @@ process_event_stop_test (struct execution_control_state *ecs)
           == ecs->event_thread->control.step_stack_frame_id)
          && ((ecs->event_thread->control.step_stack_frame_id
               != outer_frame_id)
-             || (ecs->event_thread->control.step_start_function
-                 != find_symbol_for_pc (ecs->event_thread->stop_pc ())))))
+             || !ecs->event_thread->control.in_step_start_function
+                   (ecs->event_thread->stop_pc ()))))
     {
       CORE_ADDR stop_pc = ecs->event_thread->stop_pc ();
       CORE_ADDR real_stop_pc;
@@ -9359,8 +9359,7 @@ print_stop_location (const target_waitstatus &ws)
       if (tp->control.stop_step
          && (tp->control.step_frame_id
              == get_frame_id (get_current_frame ()))
-         && (tp->control.step_start_function
-             == find_symbol_for_pc (tp->stop_pc ())))
+         && tp->control.in_step_start_function (tp->stop_pc ()))
        {
          symtab_and_line sal = find_frame_sal (get_selected_frame (nullptr));
          if (sal.symtab != tp->current_symtab)