diff options
Diffstat (limited to 'gdb/gdbserver/remote-utils.c')
-rw-r--r-- | gdb/gdbserver/remote-utils.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/gdb/gdbserver/remote-utils.c b/gdb/gdbserver/remote-utils.c index 6078348..bb31456 100644 --- a/gdb/gdbserver/remote-utils.c +++ b/gdb/gdbserver/remote-utils.c @@ -1115,16 +1115,20 @@ prepare_resume_reply (char *buf, ptid_t ptid, { case TARGET_WAITKIND_STOPPED: case TARGET_WAITKIND_FORKED: + case TARGET_WAITKIND_VFORKED: { struct thread_info *saved_thread; const char **regp; struct regcache *regcache; - if (status->kind == TARGET_WAITKIND_FORKED && report_fork_events) + if ((status->kind == TARGET_WAITKIND_FORKED && report_fork_events) + || (status->kind == TARGET_WAITKIND_VFORKED && report_vfork_events)) { enum gdb_signal signal = GDB_SIGNAL_TRAP; + const char *event = (status->kind == TARGET_WAITKIND_FORKED + ? "fork" : "vfork"); - sprintf (buf, "T%02xfork:", signal); + sprintf (buf, "T%02x%s:", signal, event); buf += strlen (buf); buf = write_ptid (buf, status->value.related_pid); strcat (buf, ";"); @@ -1244,6 +1248,16 @@ prepare_resume_reply (char *buf, ptid_t ptid, else sprintf (buf, "X%02x", status->value.sig); break; + case TARGET_WAITKIND_VFORK_DONE: + if (report_vfork_events) + { + enum gdb_signal signal = GDB_SIGNAL_TRAP; + + sprintf (buf, "T%02xvforkdone:;", signal); + } + else + sprintf (buf, "T%02x", GDB_SIGNAL_0); + break; default: error ("unhandled waitkind"); break; |