2012-07-20 Pedro Alves <palves@redhat.com>
authorPedro Alves <palves@redhat.com>
Fri, 20 Jul 2012 16:57:32 +0000 (16:57 +0000)
committerPedro Alves <palves@redhat.com>
Fri, 20 Jul 2012 16:57:32 +0000 (16:57 +0000)
* linux-nat.c (linux_nat_wait): Dump the passed in target options.
* target.c (target_wait): Likewise.
(str_comma_list_concat_elem, do_option, target_options_to_string):
New functions.
* target.h (target_options_to_string): Declare.

gdb/ChangeLog
gdb/linux-nat.c
gdb/target.c
gdb/target.h

index 8b4a5c44607b3c9a6f69bebcc04faf33598a0fba..4b660e4c618fda1b3bbb37b18ce8197a4de0dc4a 100644 (file)
@@ -1,3 +1,11 @@
+2012-07-20  Pedro Alves  <palves@redhat.com>
+
+       * linux-nat.c (linux_nat_wait): Dump the passed in target options.
+       * target.c (target_wait): Likewise.
+       (str_comma_list_concat_elem, do_option, target_options_to_string):
+       New functions.
+       * target.h (target_options_to_string): Declare.
+
 2012-07-20  Jan Kratochvil <jan.kratochvil@redhat.com>
            Tom Tromey  <tromey@redhat.com>
 
index d2a529ae6d40216237e6390fffff05ad05f7738c..c25f1559ef2201bda13bfde12bb60e7ec95acd71 100644 (file)
@@ -3929,8 +3929,16 @@ linux_nat_wait (struct target_ops *ops,
   ptid_t event_ptid;
 
   if (debug_linux_nat)
-    fprintf_unfiltered (gdb_stdlog,
-                       "linux_nat_wait: [%s]\n", target_pid_to_str (ptid));
+    {
+      char *options_string;
+
+      options_string = target_options_to_string (target_options);
+      fprintf_unfiltered (gdb_stdlog,
+                         "linux_nat_wait: [%s], [%s]\n",
+                         target_pid_to_str (ptid),
+                         options_string);
+      xfree (options_string);
+    }
 
   /* Flush the async file first.  */
   if (target_can_async_p ())
index bb8eae8e8e3808015ed873a251b9f9d932904bf9..ae3141579560557ba2e58b9b76645781254dbdfc 100644 (file)
@@ -2629,13 +2629,17 @@ target_wait (ptid_t ptid, struct target_waitstatus *status, int options)
          if (targetdebug)
            {
              char *status_string;
+             char *options_string;
 
              status_string = target_waitstatus_to_string (status);
+             options_string = target_options_to_string (options);
              fprintf_unfiltered (gdb_stdlog,
-                                 "target_wait (%d, status) = %d,   %s\n",
-                                 PIDGET (ptid), PIDGET (retval),
-                                 status_string);
+                                 "target_wait (%d, status, options={%s})"
+                                 " = %d,   %s\n",
+                                 PIDGET (ptid), options_string,
+                                 PIDGET (retval), status_string);
              xfree (status_string);
+             xfree (options_string);
            }
 
          return retval;
@@ -3885,6 +3889,54 @@ target_waitstatus_to_string (const struct target_waitstatus *ws)
     }
 }
 
+/* Concatenate ELEM to LIST, a comma separate list, and return the
+   result.  The LIST incoming argument is released.  */
+
+static char *
+str_comma_list_concat_elem (char *list, const char *elem)
+{
+  if (list == NULL)
+    return xstrdup (elem);
+  else
+    return reconcat (list, list, ", ", elem, (char *) NULL);
+}
+
+/* Helper for target_options_to_string.  If OPT is present in
+   TARGET_OPTIONS, append the OPT_STR (string version of OPT) in RET.
+   Returns the new resulting string.  OPT is removed from
+   TARGET_OPTIONS.  */
+
+static char *
+do_option (int *target_options, char *ret,
+          int opt, char *opt_str)
+{
+  if ((*target_options & opt) != 0)
+    {
+      ret = str_comma_list_concat_elem (ret, opt_str);
+      *target_options &= ~opt;
+    }
+
+  return ret;
+}
+
+char *
+target_options_to_string (int target_options)
+{
+  char *ret = NULL;
+
+#define DO_TARG_OPTION(OPT) \
+  ret = do_option (&target_options, ret, OPT, #OPT)
+
+  DO_TARG_OPTION (TARGET_WNOHANG);
+
+  if (target_options != 0)
+    ret = str_comma_list_concat_elem (ret, "unknown???");
+
+  if (ret == NULL)
+    ret = xstrdup ("");
+  return ret;
+}
+
 static void
 debug_print_register (const char * func,
                      struct regcache *regcache, int regno)
index 54c58d634484798451f603ea77ff7ec2c574b1e5..95cfbe2dcdac4988acc3cb9e172e4dc001d7805b 100644 (file)
@@ -198,6 +198,10 @@ struct syscall
    Space for the result is malloc'd, caller must free.  */
 extern char *target_waitstatus_to_string (const struct target_waitstatus *);
 
+/* Return a pretty printed form of TARGET_OPTIONS.
+   Space for the result is malloc'd, caller must free.  */
+extern char *target_options_to_string (int target_options);
+
 /* Possible types of events that the inferior handler will have to
    deal with.  */
 enum inferior_event_type