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 <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. gdbserver/ChangeLog 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.
This commit is contained in:
parent
3c76026df8
commit
d41b524f45
5 changed files with 39 additions and 14 deletions
|
@ -1,3 +1,9 @@
|
|||
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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
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)
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue