From 66f1c7d0df80834cd640fad657aefaf8dbcd6819 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A0=D1=83=D1=81=D0=BB=D0=B0=D0=BD=20=D0=98=D0=B6=D0=B1=D1?= =?UTF-8?q?=83=D0=BB=D0=B0=D1=82=D0=BE=D0=B2?= Date: Sat, 29 Sep 2012 03:33:01 +0400 Subject: [PATCH] Make gdb JIT-capable (W32) Adds the signal-event command (W32-only) that signals an event with user-provided ID. Used to resume crashing process when attached to it via W32 JIT debugging (AeDebug). PR gdb/14529 --- gdb/doc/gdb.texinfo | 5 +++++ gdb/windows-nat.c | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 5fcbada..9dc559d 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -18859,6 +18859,11 @@ This is a Cygwin-specific alias of @code{info shared}. This command loads symbols from a dll similarly to add-sym command but without the need to specify a base address. +@kindex signal-event +@item signal-event @var{id} +This command signals an event with user-provided @var{id}. Used to resume crashing +process when attached to it using W32 JIT debugging (AeDebug). + @kindex set cygwin-exceptions @cindex debugging the Cygwin DLL @cindex Cygwin DLL, debugging diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c index 905d4bf..f003ece 100644 --- a/gdb/windows-nat.c +++ b/gdb/windows-nat.c @@ -933,6 +933,25 @@ dll_symbol_command (char *args, int from_tty) safe_symbol_file_add (args, from_tty, NULL, 0, OBJF_SHARED | OBJF_USERLOADED); } +static void +signal_event_command (char *args, int from_tty) +{ + uintptr_t event_id = 0; + char *endargs = NULL; + + if (args == NULL) + error (_("signal-event requires an argument (integer event id)")); + + event_id = strtoumax (args, &endargs, 10); + + if ((errno == ERANGE) || (event_id == 0) || (event_id > UINTPTR_MAX) || + ((HANDLE) event_id == INVALID_HANDLE_VALUE)) + error (_("Failed to convert `%s' to event id"), args); + + SetEvent ((HANDLE) event_id); + 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. */ @@ -2547,6 +2566,9 @@ _initialize_windows_nat (void) cygwin_internal (CW_SET_DOS_FILE_WARNING, 0); #endif + c = add_com ("signal-event", class_run, signal_event_command, + _("Signal an object with ID.")); + c = add_com ("dll-symbols", class_files, dll_symbol_command, _("Load dll library symbols from FILE.")); set_cmd_completer (c, filename_completer); -- 1.7.11