This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PING: Re: [PATCH] Print <unavailable> for unavailable registers


On 18/09/2013 5:06 PM, Pedro Alves wrote:

>> Index: ./gdb/infcmd.c
>> ===================================================================
>> RCS file: /cvs/src/src/gdb/infcmd.c,v
>> retrieving revision 1.335
>> diff -u -p -r1.335 infcmd.c
>> --- ./gdb/infcmd.c	18 Sep 2013 14:02:31 -0000	1.335
>> +++ ./gdb/infcmd.c	18 Sep 2013 14:43:13 -0000
>> @@ -2030,7 +2030,8 @@ default_print_one_register_info (struct 
>>  
>>    if (!value_entirely_available (val))
>>      {
>> -      fprintf_filtered (file, "*value not available*\n");
>> +      val_print_unavailable (file);
>> +      fprintf_filtered (file, "\n");
>>        return;
>>      }
>>    else if (value_optimized_out (val))
> 
> Why do we do this instead of just deferring to val_print though?
> val_print would be able to print partially available registers,
> for instance.
> 
> (We'd need to do something about the "raw" printing bits below
> though.)

OK that's a reasonable point.  I've rewritten this patch to make use
of the val_print call to print the <not-saved> / <unavailable>.

For now I unconditionally skip the second attempt to print the value,
the "raw" form, for optimized-out and unavailable values, we might
be able to do better in the future but I was keen to avoid output
like this: "rax:  <unavailable> <unavailable>" with the
<unavailable> being repeated.  If the value of a register is
partially unavailable, and so we did manage to print something then
it might make sense to try and print the raw form... 

Is this OK to apply?

Thanks,
Andrew


gdb/ChangeLog
    
2013-10-16  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.

gdb/testsuite/ChangeLog
    
2013-10-16  Andrew Burgess  <aburgess@broadcom.com>

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

diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index 20f8857..3b41837 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -2024,21 +2024,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.  */
@@ -2058,9 +2050,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
     {
@@ -2075,7 +2070,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;
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"



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]