* target.h (target_waitstatus_to_string): Declare.
authorDoug Evans <dje@google.com>
Sun, 1 Feb 2009 23:31:03 +0000 (23:31 +0000)
committerDoug Evans <dje@google.com>
Sun, 1 Feb 2009 23:31:03 +0000 (23:31 +0000)
* 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.

gdb/ChangeLog
gdb/infrun.c
gdb/target.c
gdb/target.h

index add82e4907251081b2ff3644488636ad6d2f435c..416b38968121844d08abdeb734bb142ccd2721a6 100644 (file)
@@ -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.
index 2b74beb6049d5cbe8fa318be61559d98326a0bf9..3a67ac5400a64bfbebc54e2e9c8b6c17adf398a6 100644 (file)
@@ -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
index 78a0a1b0af48fb619274002b6ca3029363864fc9..a289e896f798849985b1425249923a08e8b55e4b 100644 (file)
@@ -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;
 }
index 188c9a4f95c965b1e9116a174df15f485d8c8b9a..7cdd81e4e8693c7499bee56b5a96b7b75816257a 100644 (file)
@@ -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