diff options
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/nat/windows-nat.h | 11 | ||||
-rw-r--r-- | gdb/windows-nat.c | 9 | ||||
-rw-r--r-- | gdbserver/ChangeLog | 6 | ||||
-rw-r--r-- | gdbserver/win32-low.cc | 21 |
5 files changed, 39 insertions, 14 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index caf72cf..aeab1ff 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,11 @@ 2020-04-08 Tom Tromey <tromey@adacore.com> + * windows-nat.c (windows_nat::handle_output_debug_string): + Rename. No longer static. + * nat/windows-nat.h (handle_output_debug_string): Declare. + +2020-04-08 Tom Tromey <tromey@adacore.com> + * windows-nat.c (current_process_handle, current_process_id) (main_thread_id, last_sig, current_event, last_wait_event) (current_windows_thread, desired_stop_thread_id, pending_stops) diff --git a/gdb/nat/windows-nat.h b/gdb/nat/windows-nat.h index 501147b..f438bef 100644 --- a/gdb/nat/windows-nat.h +++ b/gdb/nat/windows-nat.h @@ -114,6 +114,17 @@ enum thread_disposition_type extern windows_thread_info *thread_rec (ptid_t ptid, thread_disposition_type disposition); + +/* Handle OUTPUT_DEBUG_STRING_EVENT from child process. Updates + OURSTATUS and returns the thread id if this represents a thread + change (this is specific to Cygwin), otherwise 0. + + Cygwin prepends its messages with a "cygwin:". Interpret this as + a Cygwin signal. Otherwise just print the string as a warning. + + This function must be supplied by the embedding application. */ +extern int handle_output_debug_string (struct target_waitstatus *ourstatus); + /* Currently executing process */ extern HANDLE current_process_handle; extern DWORD current_process_id; diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c index 83bf339..7ccd124 100644 --- a/gdb/windows-nat.c +++ b/gdb/windows-nat.c @@ -1004,11 +1004,10 @@ signal_event_command (const char *args, int from_tty) CloseHandle ((HANDLE) event_id); } -/* Handle DEBUG_STRING output from child process. - Cygwin prepends its messages with a "cygwin:". Interpret this as - a Cygwin signal. Otherwise just print the string as a warning. */ -static int -handle_output_debug_string (struct target_waitstatus *ourstatus) +/* See nat/windows-nat.h. */ + +int +windows_nat::handle_output_debug_string (struct target_waitstatus *ourstatus) { gdb::unique_xmalloc_ptr<char> s; int retval = 0; diff --git a/gdbserver/ChangeLog b/gdbserver/ChangeLog index ce547c1..c6acece 100644 --- a/gdbserver/ChangeLog +++ b/gdbserver/ChangeLog @@ -1,5 +1,11 @@ 2020-04-08 Tom Tromey <tromey@adacore.com> + * win32-low.c (handle_output_debug_string): Add parameter. Change + return type. + (win32_kill, get_child_debug_event): Update. + +2020-04-08 Tom Tromey <tromey@adacore.com> + * win32-low.c (current_process_handle, current_process_id) (main_thread_id, last_sig, current_event, siginfo_er): Move to nat/windows-nat.c. diff --git a/gdbserver/win32-low.cc b/gdbserver/win32-low.cc index 7060b6d..2130366 100644 --- a/gdbserver/win32-low.cc +++ b/gdbserver/win32-low.cc @@ -733,9 +733,10 @@ win32_process_target::attach (unsigned long pid) (int) err, strwinerror (err)); } -/* Handle OUTPUT_DEBUG_STRING_EVENT from child process. */ -static void -handle_output_debug_string (void) +/* See nat/windows-nat.h. */ + +int +windows_nat::handle_output_debug_string (struct target_waitstatus *ourstatus) { #define READ_BUFFER_LEN 1024 CORE_ADDR addr; @@ -743,7 +744,7 @@ handle_output_debug_string (void) DWORD nbytes = current_event.u.DebugString.nDebugStringLength; if (nbytes == 0) - return; + return 0; if (nbytes > READ_BUFFER_LEN) nbytes = READ_BUFFER_LEN; @@ -756,13 +757,13 @@ handle_output_debug_string (void) in Unicode. */ WCHAR buffer[(READ_BUFFER_LEN + 1) / sizeof (WCHAR)] = { 0 }; if (read_inferior_memory (addr, (unsigned char *) buffer, nbytes) != 0) - return; + return 0; wcstombs (s, buffer, (nbytes + 1) / sizeof (WCHAR)); } else { if (read_inferior_memory (addr, (unsigned char *) s, nbytes) != 0) - return; + return 0; } if (!startswith (s, "cYg")) @@ -770,12 +771,14 @@ handle_output_debug_string (void) if (!server_waiting) { OUTMSG2(("%s", s)); - return; + return 0; } monitor_output (s); } #undef READ_BUFFER_LEN + + return 0; } static void @@ -804,7 +807,7 @@ win32_process_target::kill (process_info *process) if (current_event.dwDebugEventCode == EXIT_PROCESS_DEBUG_EVENT) break; else if (current_event.dwDebugEventCode == OUTPUT_DEBUG_STRING_EVENT) - handle_output_debug_string (); + handle_output_debug_string (nullptr); } win32_clear_inferiors (); @@ -1504,7 +1507,7 @@ get_child_debug_event (struct target_waitstatus *ourstatus) "for pid=%u tid=%x\n", (unsigned) current_event.dwProcessId, (unsigned) current_event.dwThreadId)); - handle_output_debug_string (); + handle_output_debug_string (nullptr); break; default: |