mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-26 09:08:59 +00:00
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
This commit is contained in:
@@ -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. */
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -848,7 +848,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;
|
||||
}
|
||||
|
||||
@@ -992,10 +992,10 @@ get_child_debug_event (DWORD *continue_status,
|
||||
auto *th = (windows_thread_info *) thread_target_data (thread);
|
||||
|
||||
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));
|
||||
@@ -1155,13 +1155,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
|
||||
|
||||
Reference in New Issue
Block a user