From 467b267632bcc7276dbdf09ee3f9275a79e9f1ae Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Wed, 17 May 2023 14:34:53 +0100 Subject: Windows gdb+gdbserver: Eliminate struct pending_stop 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 | 17 +++++------------ gdb/windows-nat.c | 14 +++++++------- 2 files changed, 12 insertions(+), 19 deletions(-) (limited to 'gdb') diff --git a/gdb/nat/windows-nat.h b/gdb/nat/windows-nat.h index af96811..6283ff0 100644 --- a/gdb/nat/windows-nat.h +++ b/gdb/nat/windows-nat.h @@ -32,16 +32,6 @@ 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 @@ -106,8 +96,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. */ diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c index 4871d18..f71a741 100644 --- a/gdb/windows-nat.c +++ b/gdb/windows-nat.c @@ -1364,7 +1364,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", @@ -1569,18 +1569,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); @@ -1805,7 +1805,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); @@ -1821,7 +1821,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 -- cgit v1.1