Consistent display of "<optimized out>" for register values.
authorAndrew Burgess <aburgess@broadcom.com>
Wed, 18 Sep 2013 14:02:31 +0000 (14:02 +0000)
committerAndrew Burgess <aburgess@broadcom.com>
Wed, 18 Sep 2013 14:02:31 +0000 (14:02 +0000)
  https://sourceware.org/ml/gdb-patches/2013-08/msg00170.html

gdb/ChangeLog

        * infcmd.c (default_print_one_register_info): Add detection of
        optimized out values.
        (default_print_registers_info): Switch to using
        get_frame_register_value.

gdb/testsuite/ChangeLog

        * gdb.dwarf2/dw2-reg-undefined.exp: Change pattern for info
        register to "<optimized out>", and also print the registers.

gdb/ChangeLog
gdb/infcmd.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.dwarf2/dw2-reg-undefined.exp

index 49660b4dc19a0391c240887599841192fc25eead..7ab79da31eafc4f68f85c1aad9ed7391abc5a3ce 100644 (file)
@@ -1,3 +1,10 @@
+2013-09-18  Andrew Burgess  <aburgess@broadcom.com>
+
+       * infcmd.c (default_print_one_register_info): Add detection of
+       optimized out values.
+       (default_print_registers_info): Switch to using
+       get_frame_register_value.
+
 2013-09-18  Markus Metzger  <markus.t.metzger@intel.com>
 
        * infrun.c (handle_inferior_event): Check if we know the
index 242aac1158454a07b66b6459c3f44caf62ccddb9..e29dcdeea096ebda616bd2bcc877888ff4c8748b 100644 (file)
@@ -2033,6 +2033,12 @@ default_print_one_register_info (struct ui_file *file,
       fprintf_filtered (file, "*value not available*\n");
       return;
     }
+  else if (value_optimized_out (val))
+    {
+      val_print_optimized_out (file);
+      fprintf_filtered (file, "\n");
+      return;
+    }
 
   /* If virtual format is floating, print it that way, and in raw
      hex.  */
@@ -2107,9 +2113,6 @@ default_print_registers_info (struct gdbarch *gdbarch,
 
   for (i = 0; i < numregs; i++)
     {
-      struct type *regtype;
-      struct value *val;
-
       /* Decide between printing all regs, non-float / vector regs, or
          specific reg.  */
       if (regnum == -1)
@@ -2137,16 +2140,9 @@ default_print_registers_info (struct gdbarch *gdbarch,
          || *(gdbarch_register_name (gdbarch, i)) == '\0')
        continue;
 
-      regtype = register_type (gdbarch, i);
-      val = allocate_value (regtype);
-
-      /* Get the data in raw format.  */
-      if (! deprecated_frame_register_read (frame, i, value_contents_raw (val)))
-       mark_value_bytes_unavailable (val, 0, TYPE_LENGTH (value_type (val)));
-
       default_print_one_register_info (file,
                                       gdbarch_register_name (gdbarch, i),
-                                      val);
+                                      get_frame_register_value (frame, i));
     }
 }
 
index 4074b8c26f531f6a5b27cd8a85308b8cfc8330e0..9ea731c3ea7d5468f49d5e5072541a3e8d955cad 100644 (file)
@@ -1,3 +1,8 @@
+2013-09-18  Andrew Burgess  <aburgess@broadcom.com>
+
+       * gdb.dwarf2/dw2-reg-undefined.exp: Change pattern for info
+       register to "<optimized out>", and also print the registers.
+
 2013-09-18  Pedro Alves  <palves@redhat.com>
 
        PR server/15967
index 7b7b4d19a08bf7f2b1f61ad8a9facacd00cb0842..468664827a9b0c2c4fbebc74305993f3513ba11c 100644 (file)
@@ -38,22 +38,34 @@ if ![runto stop_frame] {
 gdb_test "bt" "#0  (0x\[0-9a-f\]+ in )?stop_frame \[^\r\n\]*\r\n#1  \[^\r\n\]*first_frame \[^\r\n\]*\r\n#2  \[^\r\n\]*main\[^\r\n\]*" \
     "backtrace from stop_frame"
 
-set value_pattern "0x\[0-9a-f\]+\\s+\[0-9\]+"
-set opt_out_pattern "\\*value not available\\*"
-
 for {set f 0} {$f < 3} {incr f} {
     if {${f} == 0} {
-       set pattern_rax_rbx_rcx ${value_pattern}
-       set pattern_r8_r9 ${value_pattern}
+       set pattern_rax_rbx_rcx_print "$hex"
+       set pattern_rax_rbx_rcx_info "$hex\\s+$decimal"
+       set pattern_r8_r9_print "$hex"
+       set pattern_r8_r9_info "$hex\\s+$decimal"
     } else {
-       set pattern_rax_rbx_rcx ${opt_out_pattern}
-       set pattern_r8_r9 ${value_pattern}
+       set pattern_rax_rbx_rcx_print "<optimized out>"
+       set pattern_rax_rbx_rcx_info "<optimized out>"
+       set pattern_r8_r9_print "$hex"
+       set pattern_r8_r9_info "$hex\\s+$decimal"
     }
 
     # Select frame.
     gdb_test "frame ${f}" "#${f}.*" "Switch to frame ${f}"
 
+    gdb_test "p/x \$rax" ".*$pattern_rax_rbx_rcx_print.*" \
+       "print \$rax in frame ${f}"
+    gdb_test "p/x \$rbx" "$pattern_rax_rbx_rcx_print" \
+       "print \$rbx in frame ${f}"
+    gdb_test "p/x \$rcx" "$pattern_rax_rbx_rcx_print" \
+       "print \$rcx in frame ${f}"
+
+    gdb_test "p/x \$r8" "$pattern_r8_r9_print" "print \$r8 in frame ${f}"
+    gdb_test "p/x \$r9" "$pattern_r8_r9_print" "print \$r9 in frame ${f}"
+
+
     # Display register values.
-    gdb_test "info registers rax rbx rcx r8 r9" "rax\\s+${pattern_rax_rbx_rcx}\\s*\r\nrbx\\s+${pattern_rax_rbx_rcx}\\s*\r\nrcx\\s+${pattern_rax_rbx_rcx}\\s*\r\nr8\\s+${pattern_r8_r9}\\s*\r\nr9\\s+${pattern_r8_r9}\\s*" \
+    gdb_test "info registers rax rbx rcx r8 r9" "rax\\s+${pattern_rax_rbx_rcx_info}\\s*\r\nrbx\\s+${pattern_rax_rbx_rcx_info}\\s*\r\nrcx\\s+${pattern_rax_rbx_rcx_info}\\s*\r\nr8\\s+${pattern_r8_r9_info}\\s*\r\nr9\\s+${pattern_r8_r9_info}\\s*" \
        "Check values of rax, rbx, rcx, r8, r9 in frame ${f}"
 }