Print <unavailable> for unavailable registers in info register output.
authorAndrew Burgess <aburgess@broadcom.com>
Tue, 29 Oct 2013 13:24:11 +0000 (13:24 +0000)
committerAndrew Burgess <aburgess@broadcom.com>
Tue, 29 Oct 2013 13:26:49 +0000 (13:26 +0000)
  https://sourceware.org/ml/gdb-patches/2013-08/msg00171.html

gdb/ChangeLog

* infcmd.c (default_print_one_register_info): Use val_print to
print all values even optimized out or unavailable ones.  Don't
try to print a raw form of optimized out or unavailable values.

gdb/testsuite/ChangeLog

* gdb.trace/unavailable.exp (gdb_unavailable_registers_test):
Expect <unavailable> pattern.

gdb/ChangeLog
gdb/infcmd.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.trace/unavailable.exp

index d050c23..7089f66 100644 (file)
@@ -1,3 +1,9 @@
+2013-10-29  Andrew Burgess  <aburgess@broadcom.com>
+
+       * infcmd.c (default_print_one_register_info): Use val_print to
+       print all values even optimized out or unavailable ones.  Don't
+       try to print a raw form of optimized out or unavailable values.
+
 2013-10-29  Yao Qi  <yao@codesourcery.com>
 
        * auto-load.c (auto_load_pspace_data_cleanup): Get data from
index 4ad8ad3..d678e9f 100644 (file)
@@ -2028,21 +2028,13 @@ default_print_one_register_info (struct ui_file *file,
                                 struct value *val)
 {
   struct type *regtype = value_type (val);
+  int print_raw_format;
 
   fputs_filtered (name, file);
   print_spaces_filtered (15 - strlen (name), file);
 
-  if (!value_entirely_available (val))
-    {
-      fprintf_filtered (file, "*value not available*\n");
-      return;
-    }
-  else if (value_optimized_out (val))
-    {
-      val_print_optimized_out (val, file);
-      fprintf_filtered (file, "\n");
-      return;
-    }
+  print_raw_format = (value_entirely_available (val)
+                     && !value_optimized_out (val));
 
   /* If virtual format is floating, print it that way, and in raw
      hex.  */
@@ -2062,9 +2054,12 @@ default_print_one_register_info (struct ui_file *file,
                 value_embedded_offset (val), 0,
                 file, 0, val, &opts, current_language);
 
-      fprintf_filtered (file, "\t(raw ");
-      print_hex_chars (file, valaddr, TYPE_LENGTH (regtype), byte_order);
-      fprintf_filtered (file, ")");
+      if (print_raw_format)
+       {
+         fprintf_filtered (file, "\t(raw ");
+         print_hex_chars (file, valaddr, TYPE_LENGTH (regtype), byte_order);
+         fprintf_filtered (file, ")");
+       }
     }
   else
     {
@@ -2079,7 +2074,7 @@ default_print_one_register_info (struct ui_file *file,
                 file, 0, val, &opts, current_language);
       /* If not a vector register, print it also according to its
         natural format.  */
-      if (TYPE_VECTOR (regtype) == 0)
+      if (print_raw_format && TYPE_VECTOR (regtype) == 0)
        {
          get_user_print_options (&opts);
          opts.deref_ref = 1;
index e8f4a08..4ff52cb 100644 (file)
@@ -1,3 +1,8 @@
+2013-10-29  Andrew Burgess  <aburgess@broadcom.com>
+
+       * gdb.trace/unavailable.exp (gdb_unavailable_registers_test):
+       Expect <unavailable> pattern.
+
 2013-10-28  Tom de Vries  <tom@codesourcery.com>
 
        * gdb.arch/thumb2-it.S (it_8): Fix typo.
index 8e2e105..ed14798 100644 (file)
@@ -297,11 +297,11 @@ proc gdb_unavailable_registers_test { } {
        test_register "\$pc"
 
        gdb_test "info registers" \
-           "\\*value not available\\*.*\\*value not available\\*" \
+           "<unavailable>.*<unavailable>" \
            "info registers, multiple registers not available"
 
        gdb_test "info registers \$$spreg" \
-           "\\*value not available\\*" \
+           "<unavailable>" \
            "info registers \$$spreg reports not available"
 
        gdb_test "tfind none" "#0  end .*" "cease trace debugging"