diff options
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/testsuite/gdb.trace/unavailable.exp | 41 | ||||
-rw-r--r-- | gdb/valprint.c | 9 |
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>"), |