From: Tom Tromey Date: Wed, 8 Apr 2020 20:33:35 +0000 (-0600) Subject: Normalize handle_output_debug_string API X-Git-Url: http://git.efficios.com/?a=commitdiff_plain;h=d41b524f45fa1f02716bc41f64fb85a42dcec164;p=deliverable%2Fbinutils-gdb.git Normalize handle_output_debug_string API This changes gdbserver's implementation of handle_output_debug_string to have the same calling convention as that of gdb. This allows for sharing some more code in a subsequent patch. gdb/ChangeLog 2020-04-08 Tom Tromey * windows-nat.c (windows_nat::handle_output_debug_string): Rename. No longer static. * nat/windows-nat.h (handle_output_debug_string): Declare. gdbserver/ChangeLog 2020-04-08 Tom Tromey * win32-low.c (handle_output_debug_string): Add parameter. Change return type. (win32_kill, get_child_debug_event): Update. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index caf72cf296..aeab1ffa85 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2020-04-08 Tom Tromey + + * 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 * windows-nat.c (current_process_handle, current_process_id) diff --git a/gdb/nat/windows-nat.h b/gdb/nat/windows-nat.h index 501147b2c9..f438befbc9 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 83bf339423..7ccd124ac2 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 s; int retval = 0; diff --git a/gdbserver/ChangeLog b/gdbserver/ChangeLog index ce547c13e4..c6aceced19 100644 --- a/gdbserver/ChangeLog +++ b/gdbserver/ChangeLog @@ -1,3 +1,9 @@ +2020-04-08 Tom Tromey + + * win32-low.c (handle_output_debug_string): Add parameter. Change + return type. + (win32_kill, get_child_debug_event): Update. + 2020-04-08 Tom Tromey * win32-low.c (current_process_handle, current_process_id) diff --git a/gdbserver/win32-low.cc b/gdbserver/win32-low.cc index 7060b6d152..2130366747 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: