aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog7
-rw-r--r--gdb/testsuite/ChangeLog7
-rw-r--r--gdb/testsuite/gdb.trace/unavailable.exp41
-rw-r--r--gdb/valprint.c9
4 files changed, 41 insertions, 23 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index b15bee9..41c43d4 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,10 @@
+2013-11-28 Andrew Burgess <aburgess@broadcom.com>
+ Pedro Alves <palves@redhat.com>
+
+ * valprint.c (value_check_printable): If the value is entirely
+ unavailable, print a single "<unavailable>" instead of printing
+ all subfields.
+
2013-11-28 Pedro Alves <palves@redhat.com>
* frame.c (get_prev_frame_1) <stop_reason != UNWIND_NO_REASON>:
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 8697d63..6015172 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2013-11-28 Andrew Burgess <aburgess@broadcom.com>
+
+ * gdb.trace/unavailable.exp (gdb_collect_args_test): Update
+ expected results.
+ (gdb_collect_locals_test): Likewise.
+ (gdb_collect_globals_test): Likewise.
+
2013-11-28 Yao Qi <yao@codesourcery.com>
* lib/gdb.exp (with_gdb_prompt): New proc.
diff --git a/gdb/testsuite/gdb.trace/unavailable.exp b/gdb/testsuite/gdb.trace/unavailable.exp
index ed14798..40319d5 100644
--- a/gdb/testsuite/gdb.trace/unavailable.exp
+++ b/gdb/testsuite/gdb.trace/unavailable.exp
@@ -169,15 +169,14 @@ proc gdb_collect_args_test {} {
# struct arg as one of several args (near end of list)
- gdb_test "print argstruct" \
- " = \{memberc = <unavailable>, memberi = <unavailable>, memberf = <unavailable>, memberd = <unavailable>\}"
+ gdb_test "print argstruct" " = <unavailable>"
gdb_test "print argstruct.memberc" " = <unavailable>"
gdb_test "print argstruct.memberi" " = <unavailable>"
gdb_test "print argstruct.memberf" " = <unavailable>"
gdb_test "print argstruct.memberd" " = <unavailable>"
- gdb_test "print argarray" " = \\(int \\*\\) <unavailable>"
+ gdb_test "print argarray" " = <unavailable>"
gdb_test "print &argarray" \
"Can't take address of \"argarray\" which isn't an lvalue\."
@@ -190,7 +189,7 @@ proc gdb_collect_args_test {} {
set r "${r}argi = <unavailable>${cr}"
set r "${r}argf = <unavailable>${cr}"
set r "${r}argd = <unavailable>${cr}"
- set r "${r}argstruct = {memberc = <unavailable>, memberi = <unavailable>, memberf = <unavailable>, memberd = <unavailable>}${cr}"
+ set r "${r}argstruct = <unavailable>${cr}"
set r "${r}argarray = <unavailable>${cr}"
gdb_test "info args" "$r" "info args"
@@ -237,11 +236,11 @@ proc gdb_collect_locals_test { func msg } {
set r ""
set r "${r}locf = <unavailable>${cr}"
set r "${r}locd = <unavailable>${cr}"
- set r "${r}locst = {memberc = <unavailable>, memberi = <unavailable>, memberf = <unavailable>, memberd = <unavailable>}${cr}"
- set r "${r}locar = {<unavailable>, <unavailable>, <unavailable>, <unavailable>}${cr}"
+ set r "${r}locst = <unavailable>${cr}"
+ set r "${r}locar = <unavailable>${cr}"
set r "${r}i = <unavailable>${cr}"
if { $func == "local_test_func" } {
- set r "${r}locdefst = {<No data fields>}${cr}"
+ set r "${r}locdefst = <unavailable>${cr}"
}
set r "${r}locc = <unavailable>${cr}"
set r "${r}loci = <unavailable>${cr}"
@@ -398,8 +397,7 @@ proc gdb_collect_globals_test { } {
gdb_test "print globalstruct.memberf" " = <unavailable>"
gdb_test "print globalstruct.memberd" " = <unavailable>"
- gdb_test "print globalstruct" \
- " = {memberc = <unavailable>, memberi = <unavailable>, memberf = <unavailable>, memberd = <unavailable>}"
+ gdb_test "print globalstruct" " = <unavailable>"
gdb_test "print globalp == &globalstruct" \
"value is not available" \
@@ -449,8 +447,7 @@ proc gdb_collect_globals_test { } {
# Static fields
- gdb_test "print struct_b.static_struct_a" \
- " = {a = <unavailable>, b = <unavailable>, array = {<unavailable> <repeats 10000 times>}, ptr = <unavailable>, bitfield = <unavailable>}"
+ gdb_test "print struct_b.static_struct_a" " = <unavailable>"
# Bitfields
@@ -468,8 +465,7 @@ proc gdb_collect_globals_test { } {
"\\$\[0-9\]+ = <unavailable>$cr" \
"referenced integer was not collected (taking address of reference)"
- gdb_test "print *g_structref_p" \
- " = {d = <unavailable>, ref = <unavailable>}"
+ gdb_test "print *g_structref_p" " = <unavailable>"
# Strings
@@ -483,7 +479,7 @@ proc gdb_collect_globals_test { } {
"printing constant string through collected pointer"
gdb_test "print g_string_unavail" \
- " = \{<unavailable> <repeats 12 times>\}" \
+ " = <unavailable>" \
"printing non collected string"
# Incomplete strings print as an array.
@@ -521,15 +517,15 @@ proc gdb_collect_globals_test { } {
# unavailable-ness is propagated. History values are easy
# non-lazy values, so use those. The first test just sets up for
# the second.
- gdb_test "print g_smallstruct" " = \\{member = <unavailable>\\}"
+ gdb_test "print g_smallstruct" " = <unavailable>"
gdb_test "print \$.member" " = <unavailable>"
# Cast to baseclass, checking the unavailable-ness is propagated.
- gdb_test "print (small_struct) g_smallstruct_b" " = \\{member = <unavailable>\\}"
+ gdb_test "print (small_struct) g_smallstruct_b" " = <unavailable>"
# Same cast, but starting from a non-lazy, value.
- gdb_test "print g_smallstruct_b" " = \\{<small_struct> = \\{member = <unavailable>\\}, <No data fields>\\}"
- gdb_test "print (small_struct) \$" " = \\{member = <unavailable>\\}"
+ gdb_test "print g_smallstruct_b" " = <unavailable>"
+ gdb_test "print (small_struct) \$" " = <unavailable>"
gdb_test_no_output "set print object on"
@@ -538,11 +534,10 @@ proc gdb_collect_globals_test { } {
# the pointed-to object, to check its run-time type. Make
# sure that fails gracefully and transparently when the
# pointer itself is unavailable.
- gdb_test "print virtualp" " = \\(Virtual \\*\\) <unavailable>"
+ gdb_test "print virtualp" " = <unavailable>"
# no vtable pointer available
- gdb_test "print derived_unavail" \
- " = {<Middle> = <unavailable>, _vptr.Derived = <unavailable>, z = <unavailable>}"
+ gdb_test "print derived_unavail" " = <unavailable>"
# vtable pointer available, but nothing else
gdb_test "print derived_partial" \
@@ -556,11 +551,11 @@ proc gdb_collect_globals_test { } {
gdb_test_no_output "set print object off"
with_test_prefix "print object off" {
- gdb_test "print virtualp" " = \\(Virtual \\*\\) <unavailable>"
+ gdb_test "print virtualp" " = <unavailable>"
# no vtable pointer available
gdb_test "print derived_unavail" \
- " = {<Middle> = <unavailable>, _vptr.Derived = <unavailable>, z = <unavailable>}"
+ " = <unavailable>"
# vtable pointer available, but nothing else
gdb_test "print derived_partial" \
diff --git a/gdb/valprint.c b/gdb/valprint.c
index ecc3411..0124934 100644
--- a/gdb/valprint.c
+++ b/gdb/valprint.c
@@ -812,6 +812,15 @@ value_check_printable (struct value *val, struct ui_file *stream,
return 0;
}
+ if (value_entirely_unavailable (val))
+ {
+ if (options->summary && !val_print_scalar_type_p (value_type (val)))
+ fprintf_filtered (stream, "...");
+ else
+ val_print_unavailable (stream);
+ return 0;
+ }
+
if (TYPE_CODE (value_type (val)) == TYPE_CODE_INTERNAL_FUNCTION)
{
fprintf_filtered (stream, _("<internal function %s>"),