]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Windows gdb+gdbserver: Eliminate struct pending_stop
authorPedro Alves <pedro@palves.net>
Wed, 17 May 2023 13:34:53 +0000 (14:34 +0100)
committerPedro Alves <pedro@palves.net>
Mon, 9 Jun 2025 17:09:15 +0000 (18:09 +0100)
After the previous patches, struct pending_stop only contains one
field.  So move that field into the windows_thread_info structure
directly, and eliminate struct pending_stop.

Change-Id: I7955884b3f378d8b39b908f6252d215f6568b367

gdb/nat/windows-nat.h
gdb/windows-nat.c
gdbserver/win32-low.cc

index d0978f899fd372442605076e77d66c9d1c476272..4ec2f4575be2853622e751c186d4819c5ea0f41d 100644 (file)
 namespace windows_nat
 {
 
-/* Info about a potential pending stop.  Each thread holds one of
-   these.  See "windows_thread_info::pending_stop" for more
-   information.  */
-struct pending_stop
-{
-  /* The target waitstatus we computed.  TARGET_WAITKIND_IGNORE if the
-     thread does not have a pending stop.  */
-  target_waitstatus status;
-};
-
 struct windows_process_info;
 
 /* Thread information structure used to track extra information about
@@ -112,8 +102,11 @@ struct windows_thread_info
    effect of trying to single step thread A -- leaving all other
    threads suspended -- and then seeing a stop in thread B.  To handle
    this scenario, we queue all such "pending" stops here, and then
-   process them once the step has completed.  See PR gdb/22992.  */
-  struct pending_stop pending_stop {};
+   process them once the step has completed.  See PR gdb/22992.
+
+   TARGET_WAITKIND_IGNORE if the thread does not have a pending
+   stop.  */
+  target_waitstatus pending_status;
 
   /* The last Windows event returned by WaitForDebugEvent for this
      thread.  */
index af0ef8da8d9acf4c331ce428e791e4d399c6d53a..cbb66c702f20515bbd8d07fe0987b06a498dc4ee 100644 (file)
@@ -1277,7 +1277,7 @@ windows_nat_target::windows_continue (DWORD continue_status, int id,
     {
       if ((id == -1 || id == (int) th->tid)
          && !th->suspended
-         && th->pending_stop.status.kind () != TARGET_WAITKIND_IGNORE)
+         && th->pending_status.kind () != TARGET_WAITKIND_IGNORE)
        {
          DEBUG_EVENTS ("got matching pending stop event "
                        "for 0x%x, not resuming",
@@ -1469,18 +1469,18 @@ windows_nat_target::get_windows_debug_event
   DWORD thread_id = 0;
 
   /* If there is a relevant pending stop, report it now.  See the
-     comment by the definition of "windows_thread_info::pending_stop"
+     comment by the definition of "windows_thread_info::pending_status"
      for details on why this is needed.  */
   for (auto &th : windows_process.thread_list)
     {
       if (!th->suspended
-         && th->pending_stop.status.kind () != TARGET_WAITKIND_IGNORE)
+         && th->pending_status.kind () != TARGET_WAITKIND_IGNORE)
        {
          DEBUG_EVENTS ("reporting pending event for 0x%x", th->tid);
 
          thread_id = th->tid;
-         *ourstatus = th->pending_stop.status;
-         th->pending_stop.status.set_ignore ();
+         *ourstatus = th->pending_status;
+         th->pending_status.set_ignore ();
          *current_event = th->last_event;
 
          ptid_t ptid (windows_process.process_id, thread_id);
@@ -1705,7 +1705,7 @@ windows_nat_target::get_windows_debug_event
   if (th->suspended)
     {
       /* Pending stop.  See the comment by the definition of
-        "pending_stops" for details on why this is needed.  */
+        "pending_status" for details on why this is needed.  */
       DEBUG_EVENTS ("get_windows_debug_event - "
                    "unexpected stop in suspended thread 0x%x",
                    thread_id);
@@ -1721,7 +1721,7 @@ windows_nat_target::get_windows_debug_event
          th->pc_adjusted = false;
        }
 
-      th->pending_stop.status = *ourstatus;
+      th->pending_status = *ourstatus;
       ourstatus->set_ignore ();
 
       continue_last_debug_event_main_thread
index 834af70678624db33a5e1f0dc35f8f07faf56e9a..4aaadf0d671ee248ecb4113b7a9edc95e76ec671 100644 (file)
@@ -825,7 +825,7 @@ win32_process_target::resume (thread_resume *resume_info, size_t n)
        }
 
       if (!th->suspended
-         && th->pending_stop.status.kind () != TARGET_WAITKIND_IGNORE)
+         && th->pending_status.kind () != TARGET_WAITKIND_IGNORE)
        any_pending = true;
     });
 
@@ -970,10 +970,10 @@ get_child_debug_event (DWORD *continue_status,
        auto *th = static_cast<windows_thread_info *> (thread.target_data ());
 
        if (!th->suspended
-           && th->pending_stop.status.kind () != TARGET_WAITKIND_IGNORE)
+           && th->pending_status.kind () != TARGET_WAITKIND_IGNORE)
          {
-           *ourstatus = th->pending_stop.status;
-           th->pending_stop.status.set_ignore ();
+           *ourstatus = th->pending_status;
+           th->pending_status.set_ignore ();
            *current_event = th->last_event;
            ptid = debug_event_ptid (current_event);
            switch_to_thread (find_thread_ptid (ptid));
@@ -1133,13 +1133,13 @@ get_child_debug_event (DWORD *continue_status,
   if (th != nullptr && th->suspended)
     {
       /* Pending stop.  See the comment by the definition of
-        "windows_thread_info::pending_stop" for details on why this
+        "windows_thread_info::pending_status" for details on why this
         is needed.  */
       OUTMSG2 (("get_windows_debug_event - "
                "unexpected stop in suspended thread 0x%x\n",
                th->tid));
       maybe_adjust_pc (*current_event);
-      th->pending_stop.status = *ourstatus;
+      th->pending_status = *ourstatus;
       ourstatus->set_spurious ();
     }
   else