diff options
author | Doug Evans <dje@google.com> | 2009-02-01 23:31:03 +0000 |
---|---|---|
committer | Doug Evans <dje@google.com> | 2009-02-01 23:31:03 +0000 |
commit | f00150c95d261f2fac4fbab21d60eceb2ccb7d3e (patch) | |
tree | 8125185686eb132d5fda0af5da87b9b38bebb5bb /gdb | |
parent | 273f4430f86503a7e746f8710c6165f794a360bd (diff) | |
download | binutils-f00150c95d261f2fac4fbab21d60eceb2ccb7d3e.zip binutils-f00150c95d261f2fac4fbab21d60eceb2ccb7d3e.tar.gz binutils-f00150c95d261f2fac4fbab21d60eceb2ccb7d3e.tar.bz2 |
* target.h (target_waitstatus_to_string): Declare.
* target.c (target_waitstatus_to_string): New function. Copied from
debug_to_wait. Add missing entries for TARGET_WAITKIND_SYSCALL_ENTRY,
TARGET_WAITKIND_SYSCALL_RETURN, TARGET_WAITKIND_IGNORE,
TARGET_WAITKIND_NO_HISTORY.
(debug_to_wait): Call it.
* infrun.c (wait_for_inferior): If debug_infrun, print result of
target_wait.
(fetch_inferior_event): Ditto.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 12 | ||||
-rw-r--r-- | gdb/infrun.c | 20 | ||||
-rw-r--r-- | gdb/target.c | 75 | ||||
-rw-r--r-- | gdb/target.h | 4 |
4 files changed, 80 insertions, 31 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index add82e4..416b389 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +2009-02-01 Doug Evans <dje@google.com> + + * target.h (target_waitstatus_to_string): Declare. + * target.c (target_waitstatus_to_string): New function. Copied from + debug_to_wait. Add missing entries for TARGET_WAITKIND_SYSCALL_ENTRY, + TARGET_WAITKIND_SYSCALL_RETURN, TARGET_WAITKIND_IGNORE, + TARGET_WAITKIND_NO_HISTORY. + (debug_to_wait): Call it. + * infrun.c (wait_for_inferior): If debug_infrun, print result of + target_wait. + (fetch_inferior_event): Ditto. + 2009-01-30 Tom Tromey <tromey@redhat.com> * Makefile.in (HFILES_NO_SRCDIR): Remove i386-cygwin-tdep.h. diff --git a/gdb/infrun.c b/gdb/infrun.c index 2b74beb..3a67ac5 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -1789,6 +1789,16 @@ wait_for_inferior (int treat_exec_as_sigtrap) else ecs->ptid = target_wait (waiton_ptid, &ecs->ws); + if (debug_infrun) + { + char *status_string = target_waitstatus_to_string (&ecs->ws); + fprintf_unfiltered (gdb_stdlog, + "infrun: target_wait (%d, status) = %d, %s\n", + PIDGET (waiton_ptid), PIDGET (ecs->ptid), + status_string); + xfree (status_string); + } + if (treat_exec_as_sigtrap && ecs->ws.kind == TARGET_WAITKIND_EXECD) { xfree (ecs->ws.value.execd_pathname); @@ -1864,6 +1874,16 @@ fetch_inferior_event (void *client_data) else ecs->ptid = target_wait (waiton_ptid, &ecs->ws); + if (debug_infrun) + { + char *status_string = target_waitstatus_to_string (&ecs->ws); + fprintf_unfiltered (gdb_stdlog, + "infrun: target_wait (%d, status) = %d, %s\n", + PIDGET (waiton_ptid), PIDGET (ecs->ptid), + status_string); + xfree (status_string); + } + if (non_stop && ecs->ws.kind != TARGET_WAITKIND_IGNORE && ecs->ws.kind != TARGET_WAITKIND_EXITED diff --git a/gdb/target.c b/gdb/target.c index 78a0a1b..a289e89 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -2603,50 +2603,63 @@ debug_to_resume (ptid_t ptid, int step, enum target_signal siggnal) target_signal_to_name (siggnal)); } -static ptid_t -debug_to_wait (ptid_t ptid, struct target_waitstatus *status) -{ - ptid_t retval; +/* Return a pretty printed form of target_waitstatus. + Space for the result is malloc'd, caller must free. */ - retval = debug_target.to_wait (ptid, status); +char * +target_waitstatus_to_string (const struct target_waitstatus *ws) +{ + const char *kind_str = "status->kind = "; - fprintf_unfiltered (gdb_stdlog, - "target_wait (%d, status) = %d, ", PIDGET (ptid), - PIDGET (retval)); - fprintf_unfiltered (gdb_stdlog, "status->kind = "); - switch (status->kind) + switch (ws->kind) { case TARGET_WAITKIND_EXITED: - fprintf_unfiltered (gdb_stdlog, "exited, status = %d\n", - status->value.integer); - break; + return xstrprintf ("%sexited, status = %d", + kind_str, ws->value.integer); case TARGET_WAITKIND_STOPPED: - fprintf_unfiltered (gdb_stdlog, "stopped, signal = %s\n", - target_signal_to_name (status->value.sig)); - break; + return xstrprintf ("%sstopped, signal = %s", + kind_str, target_signal_to_name (ws->value.sig)); case TARGET_WAITKIND_SIGNALLED: - fprintf_unfiltered (gdb_stdlog, "signalled, signal = %s\n", - target_signal_to_name (status->value.sig)); - break; + return xstrprintf ("%ssignalled, signal = %s", + kind_str, target_signal_to_name (ws->value.sig)); case TARGET_WAITKIND_LOADED: - fprintf_unfiltered (gdb_stdlog, "loaded\n"); - break; + return xstrprintf ("%sloaded", kind_str); case TARGET_WAITKIND_FORKED: - fprintf_unfiltered (gdb_stdlog, "forked\n"); - break; + return xstrprintf ("%sforked", kind_str); case TARGET_WAITKIND_VFORKED: - fprintf_unfiltered (gdb_stdlog, "vforked\n"); - break; + return xstrprintf ("%svforked", kind_str); case TARGET_WAITKIND_EXECD: - fprintf_unfiltered (gdb_stdlog, "execd\n"); - break; + return xstrprintf ("%sexecd", kind_str); + case TARGET_WAITKIND_SYSCALL_ENTRY: + return xstrprintf ("%ssyscall-entry", kind_str); + case TARGET_WAITKIND_SYSCALL_RETURN: + return xstrprintf ("%ssyscall-return", kind_str); case TARGET_WAITKIND_SPURIOUS: - fprintf_unfiltered (gdb_stdlog, "spurious\n"); - break; + return xstrprintf ("%sspurious", kind_str); + case TARGET_WAITKIND_IGNORE: + return xstrprintf ("%signore", kind_str); + case TARGET_WAITKIND_NO_HISTORY: + return xstrprintf ("%sno-history", kind_str); default: - fprintf_unfiltered (gdb_stdlog, "unknown???\n"); - break; + return xstrprintf ("%sunknown???", kind_str); } +} + +static ptid_t +debug_to_wait (ptid_t ptid, struct target_waitstatus *status) +{ + ptid_t retval; + char *status_string; + + retval = debug_target.to_wait (ptid, status); + + fprintf_unfiltered (gdb_stdlog, + "target_wait (%d, status) = %d, ", PIDGET (ptid), + PIDGET (retval)); + + status_string = target_waitstatus_to_string (status); + fprintf_unfiltered (gdb_stdlog, "%s\n", status_string); + xfree (status_string); return retval; } diff --git a/gdb/target.h b/gdb/target.h index 188c9a4..7cdd81e 100644 --- a/gdb/target.h +++ b/gdb/target.h @@ -151,6 +151,10 @@ struct target_waitstatus value; }; +/* Return a pretty printed form of target_waitstatus. + Space for the result is malloc'd, caller must free. */ +extern char *target_waitstatus_to_string (const struct target_waitstatus *); + /* Possible types of events that the inferior handler will have to deal with. */ enum inferior_event_type |