PING: [PATCH] Print <unavailable> for unavailable registers
Andrew Burgess
aburgess@broadcom.com
Wed Aug 28 15:26:00 GMT 2013
On 06/08/2013 2:09 PM, Andrew Burgess wrote:
> Following on from (but unrelated to) this mail:
> http://sourceware.org/ml/gdb-patches/2013-08/msg00170.html
>
> Printing "*value not available*" for unavailable values within
> "info registers" seems inconsistent to me, if we just print an
> unavailable register we'll get "<unavailable>".
>
> The patch below makes "info registers" print "<unavailable>".
The original patch was supposed to be applied after [1],
however I never managed to get [1] accepted. I've flipped
the ordering, so that this patch can be applied first, if
this gets merged I'll post a revised version of [1] later,
just for the record.
To my reading, Mark seems to imply in this mail:
http://sourceware.org/ml/gdb-patches/2013-08/msg00322.html
that he does not disagree with displaying registers as
"<unavailable>", so I feel it's acceptable to push this
patch forward.
After this patch "info registers" will display unavailable
(for example, not collected by tracing) as <unavailable>,
while optimized out register values will still be displayed
using the old "*value not available*" string.
The previous version of this patch included some sh64 changes,
I've removed them from this patch to try and increase the chance
of acceptance.
[1] http://sourceware.org/ml/gdb-patches/2013-08/msg00170.html
OK?
Andrew
gdb/ChangeLog
2013-08-19 Andrew Burgess <aburgess@broadcom.com>
* infcmd.c (default_print_one_register_info): use
val_print_unavailable for unavailable register values, continue as
before for optimized out register values.
(default_print_registers_info): Switch to using
get_frame_register_value.
gdb/testsuite/ChangeLog
2013-08-19 Andrew Burgess <aburgess@broadcom.com>
* gdb.trace/unavailable.exp (gdb_unavailable_registers_test):
Change expected pattern for unavailable registers to
<unavailable>.
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index 154cde2..83e0323 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -2030,6 +2030,12 @@ default_print_one_register_info (struct ui_file *file,
if (!value_entirely_available (val))
{
+ val_print_unavailable (file);
+ fprintf_filtered (file, "\n");
+ return;
+ }
+ else if (value_optimized_out (val))
+ {
fprintf_filtered (file, "*value not available*\n");
return;
}
@@ -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));
}
}
diff --git a/gdb/testsuite/gdb.trace/unavailable.exp b/gdb/testsuite/gdb.trace/unavailable.exp
index 8e2e105..ed14798 100644
--- a/gdb/testsuite/gdb.trace/unavailable.exp
+++ b/gdb/testsuite/gdb.trace/unavailable.exp
@@ -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"
More information about the Gdb-patches
mailing list