From 463888ab6be549e8dcc9eac36dc07c1c237e2968 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=D0=A0=D1=83=D1=81=D0=BB=D0=B0=D0=BD=20=D0=98=D0=B6=D0=B1?= =?utf8?q?=D1=83=D0=BB=D0=B0=D1=82=D0=BE=D0=B2?= Date: Sat, 23 Jul 2016 11:38:03 +0300 Subject: [PATCH] Support JIT debugging on MS-Windows MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit gdb/ChangeLog: 2016-06-30 Руслан Ижбулатов PR gdb/14529 * windows-nat.c (signal_event_command): New command 'signal-event' for W32 JIT debug support. * NEWS: Add an entry about the new 'signal-event' command. gdb/doc/ChangeLog: 2016-06-30 Руслан Ижбулатов * gdb.texinfo (Cygwin Native): Document the new 'signal-event' command. --- gdb/ChangeLog | 7 +++++++ gdb/NEWS | 7 +++++++ gdb/doc/ChangeLog | 6 ++++++ gdb/doc/gdb.texinfo | 29 +++++++++++++++++++++++++++++ gdb/windows-nat.c | 27 +++++++++++++++++++++++++++ 5 files changed, 76 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 014c0bf9d03..0f4a8b64196 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2016-06-30 Руслан Ижбулатов + + PR gdb/14529 + * windows-nat.c (signal_event_command): New command 'signal-event' + for W32 JIT debug support. + * NEWS: Add an entry about the new 'signal-event' command. + 2016-07-22 Tom Tromey PR rust/20162: diff --git a/gdb/NEWS b/gdb/NEWS index c29e69af488..0e339dd7fbb 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -85,6 +85,13 @@ new-ui INTERP TTY ** gdb.Breakpoint objects have a new attribute "pending", which indicates whether the breakpoint is pending. +signal-event EVENTID + Signal ("set") the given MS-Windows event object. This is used in + conjunction with the Windows JIT debugging (AeDebug) support, where + the OS suspends a crashing process until a debugger can attach to + it. Resuming the crashing process, in order to debug it, is done by + signalling an event. + * Support for tracepoints and fast tracepoints on s390-linux and s390x-linux was added in GDBserver, including JIT compiling fast tracepoint's conditional expression bytecode into native code. diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index f133f334918..e45d92558b3 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,8 @@ +2016-06-30 Руслан Ижбулатов + + * gdb.texinfo (Cygwin Native): Document the new 'signal-event' + command. + 2016-07-13 Tom Tromey PR python/15620, PR python/18620: @@ -11724,4 +11729,5 @@ mode: change-log left-margin: 8 fill-column: 74 version-control: never +coding: utf-8 End: diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index a068622defd..285a912bbb0 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -21520,6 +21520,35 @@ This command displays thread specific information stored in the Thread Information Block (readable on the X86 CPU family using @code{$fs} selector for 32-bit programs and @code{$gs} for 64-bit programs). +@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 MS-Windows JIT debugging (AeDebug). + +To use it, create or edit the following keys in +@code{HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug} and/or +@code{HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug} +(for x86_64 versions): + +@itemize @minus +@item +@code{Debugger} (REG_SZ) --- a command to launch the debugger. +Suggested command is: @code{@var{fully-qualified-path-to-gdb.exe} -ex +"attach %ld" -ex "signal-event %ld" -ex "continue"}. + +The first @code{%ld} will be replaced by the process ID of the +crashing process, the second @code{%ld} will be replaced by the ID of +the event that blocks the crashing process, waiting for @value{GDBN} +to attach. + +@item +@code{Auto} (REG_SZ) --- either @code{1} or @code{0}. @code{1} will +make the system run debugger specified by the Debugger key +automatically, @code{0} will cause a dialog box with ``OK'' and +``Cancel'' buttons to appear, which allows the user to either +terminate the crashing process (OK) or debug it (Cancel). +@end itemize + @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 c95dc9a3c59..3f67486975c 100644 --- a/gdb/windows-nat.c +++ b/gdb/windows-nat.c @@ -56,6 +56,7 @@ #include "solist.h" #include "solib.h" #include "xml-support.h" +#include "inttypes.h" #include "i386-tdep.h" #include "i387-tdep.h" @@ -825,6 +826,25 @@ windows_clear_solib (void) solib_end = &solib_start; } +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. */ @@ -2550,6 +2570,13 @@ _initialize_windows_nat (void) cygwin_internal (CW_SET_DOS_FILE_WARNING, 0); #endif + add_com ("signal-event", class_run, signal_event_command, _("\ +Signal a crashed process with event ID, to allow its debugging.\n\ +This command is needed in support of setting up GDB as JIT debugger on \ +MS-Windows. The command should be invoked from the GDB command line using \ +the '-ex' command-line option. The ID of the event that blocks the \ +crashed process will be supplied by the Windows JIT debugging mechanism.")); + #ifdef __CYGWIN__ add_setshow_boolean_cmd ("shell", class_support, &useshell, _("\ Set use of shell to start subprocess."), _("\ -- 2.30.2