From 2c1d95e8697f64713d0f60f7b9231d13a3f6a145 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 8 Apr 2020 14:33:35 -0600 Subject: [PATCH] Move wait_for_debug_event to nat/windows-nat.c This moves the wait_for_debug_event helper function to nat/windows-nat.c, and changes gdbserver to use it. wait_for_debug_event is a wrapper for WaitForDebugEvent that also sets last_wait_event when appropriate. This is needed to properly handle queued stops. gdb/ChangeLog 2020-04-08 Tom Tromey * windows-nat.c (wait_for_debug_event): Move to nat/windows-nat.c. * nat/windows-nat.h (wait_for_debug_event): Declare. * nat/windows-nat.c (wait_for_debug_event): Move from windows-nat.c. No longer static. gdbserver/ChangeLog 2020-04-08 Tom Tromey * win32-low.c (win32_kill, get_child_debug_event): Use wait_for_debug_event. --- gdb/ChangeLog | 8 ++++++++ gdb/nat/windows-nat.c | 10 ++++++++++ gdb/nat/windows-nat.h | 5 +++++ gdb/windows-nat.c | 11 ----------- gdbserver/ChangeLog | 5 +++++ gdbserver/win32-low.cc | 6 +++--- 6 files changed, 31 insertions(+), 14 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 738c6c2d779..3c3ae28dd85 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2020-04-08 Tom Tromey + + * windows-nat.c (wait_for_debug_event): Move to + nat/windows-nat.c. + * nat/windows-nat.h (wait_for_debug_event): Declare. + * nat/windows-nat.c (wait_for_debug_event): Move from + windows-nat.c. No longer static. + 2020-04-08 Tom Tromey * windows-nat.c (get_windows_debug_event): Use diff --git a/gdb/nat/windows-nat.c b/gdb/nat/windows-nat.c index 823471eb4da..bb28e9b13c7 100644 --- a/gdb/nat/windows-nat.c +++ b/gdb/nat/windows-nat.c @@ -385,5 +385,15 @@ continue_last_debug_event (DWORD continue_status, bool debug_events) continue_status); } +/* See nat/windows-nat.h. */ + +BOOL +wait_for_debug_event (DEBUG_EVENT *event, DWORD timeout) +{ + BOOL result = WaitForDebugEvent (event, timeout); + if (result) + last_wait_event = *event; + return result; +} } diff --git a/gdb/nat/windows-nat.h b/gdb/nat/windows-nat.h index 68b72d4bbd2..846fa67f407 100644 --- a/gdb/nat/windows-nat.h +++ b/gdb/nat/windows-nat.h @@ -245,6 +245,11 @@ extern gdb::optional fetch_pending_stop (bool debug_events); extern BOOL continue_last_debug_event (DWORD continue_status, bool debug_events); +/* A simple wrapper for WaitForDebugEvent that also sets + 'last_wait_event' on success. */ + +extern BOOL wait_for_debug_event (DEBUG_EVENT *event, DWORD timeout); + } #endif diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c index 2ee7a2412a9..cdaca8d0cbf 100644 --- a/gdb/windows-nat.c +++ b/gdb/windows-nat.c @@ -1495,17 +1495,6 @@ ctrl_c_handler (DWORD event_type) return TRUE; } -/* A wrapper for WaitForDebugEvent that sets "last_wait_event" - appropriately. */ -static BOOL -wait_for_debug_event (DEBUG_EVENT *event, DWORD timeout) -{ - BOOL result = WaitForDebugEvent (event, timeout); - if (result) - last_wait_event = *event; - return result; -} - /* Get the next event from the child. Returns a non-zero thread id if the event requires handling by WFI (or whatever). */ diff --git a/gdbserver/ChangeLog b/gdbserver/ChangeLog index 6793795376e..792834077fe 100644 --- a/gdbserver/ChangeLog +++ b/gdbserver/ChangeLog @@ -1,3 +1,8 @@ +2020-04-08 Tom Tromey + + * win32-low.c (win32_kill, get_child_debug_event): Use + wait_for_debug_event. + 2020-04-08 Tom Tromey * win32-low.c (child_continue): Call continue_last_debug_event. diff --git a/gdbserver/win32-low.cc b/gdbserver/win32-low.cc index 33f64700153..d151505e9f8 100644 --- a/gdbserver/win32-low.cc +++ b/gdbserver/win32-low.cc @@ -797,7 +797,7 @@ win32_process_target::kill (process_info *process) { if (!child_continue (DBG_CONTINUE, -1)) break; - if (!WaitForDebugEvent (¤t_event, INFINITE)) + if (!wait_for_debug_event (¤t_event, INFINITE)) break; if (current_event.dwDebugEventCode == EXIT_PROCESS_DEBUG_EVENT) break; @@ -1231,7 +1231,7 @@ get_child_debug_event (DWORD *continue_status, happen is the user will see a spurious breakpoint. */ current_event.dwDebugEventCode = 0; - if (!WaitForDebugEvent (¤t_event, 0)) + if (!wait_for_debug_event (¤t_event, 0)) { OUTMSG2(("no attach events left\n")); fake_breakpoint_event (); @@ -1246,7 +1246,7 @@ get_child_debug_event (DWORD *continue_status, /* Keep the wait time low enough for comfortable remote interruption, but high enough so gdbserver doesn't become a bottleneck. */ - if (!WaitForDebugEvent (¤t_event, 250)) + if (!wait_for_debug_event (¤t_event, 250)) { DWORD e = GetLastError(); -- 2.30.2