This is the mail archive of the binutils@sourceware.org mailing list for the binutils 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]

ping: [patch] Print register names also for DWARF loc/expr


Hi,

ping, original post/description/testing:
	http://sourceware.org/ml/binutils/2010-07/msg00374.html

Provided patch will print:
    Offset   Begin    End      Expression
    000002d4 00000000004015d5 00000000004015d9 (DW_OP_breg0 (rax): 0; DW_OP_lit3; DW_OP_shl; DW_OP_breg3 (rbx): 0; DW_OP_plus; DW_OP_plus_uconst: 8)
    000002d4 00000000004015d9 0000000000401622 (DW_OP_reg6 (rbp))
    000002d4 <End of list>
    <fc1>   DW_AT_location    : 1 byte block: 55        (DW_OP_reg5 (rdi))


Thanks,
Jan

	
On Fri, 23 Jul 2010 11:31:28 +0200, Jan Kratochvil wrote:

binutils/
2010-07-23  Jan Kratochvil  <jan.kratochvil@redhat.com>
	    Jakub Jelinek  <jakub@redhat.com>

	* dwarf.c (regname): New declaration.
	(decode_location_expression): Print for registers also regname output.

binutils/testsuite/
2010-07-23  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* binutils-all/objdump.W: Update DW_OP_reg5 expected output.

gas/testsuite/
2010-07-23  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* gas/elf/dwarf2-1.d: Update DW_OP_reg5 expected output.
	* gas/elf/dwarf2-2.d: Likewise.
	* gas/i386/dw2-compress-1.d: Likewise.

--- a/binutils/dwarf.c
+++ b/binutils/dwarf.c
@@ -27,6 +27,8 @@
 #include "dwarf2.h"
 #include "dwarf.h"
 
+static const char *regname (unsigned int regno, int row);
+
 static int have_frame_base;
 static int need_base_address;
 
@@ -936,7 +938,8 @@ decode_location_expression (unsigned char * data,
 	case DW_OP_reg29:
 	case DW_OP_reg30:
 	case DW_OP_reg31:
-	  printf ("DW_OP_reg%d", op - DW_OP_reg0);
+	  printf ("DW_OP_reg%d (%s)", op - DW_OP_reg0,
+		  regname (op - DW_OP_reg0, 1));
 	  break;
 
 	case DW_OP_breg0:
@@ -971,14 +974,16 @@ decode_location_expression (unsigned char * data,
 	case DW_OP_breg29:
 	case DW_OP_breg30:
 	case DW_OP_breg31:
-	  printf ("DW_OP_breg%d: %ld", op - DW_OP_breg0,
+	  printf ("DW_OP_breg%d (%s): %ld", op - DW_OP_breg0,
+		  regname (op - DW_OP_breg0, 1),
 		  read_leb128 (data, &bytes_read, 1));
 	  data += bytes_read;
 	  break;
 
 	case DW_OP_regx:
-	  printf ("DW_OP_regx: %lu", read_leb128 (data, &bytes_read, 0));
+	  uvalue = read_leb128 (data, &bytes_read, 0);
 	  data += bytes_read;
+	  printf ("DW_OP_regx: %lu (%s)", uvalue, regname (uvalue, 1));
 	  break;
 	case DW_OP_fbreg:
 	  need_frame_base = 1;
@@ -988,7 +993,7 @@ decode_location_expression (unsigned char * data,
 	case DW_OP_bregx:
 	  uvalue = read_leb128 (data, &bytes_read, 0);
 	  data += bytes_read;
-	  printf ("DW_OP_bregx: %lu %ld", uvalue,
+	  printf ("DW_OP_bregx: %lu (%s) %ld", uvalue, regname (uvalue, 1),
 		  read_leb128 (data, &bytes_read, 1));
 	  data += bytes_read;
 	  break;
--- a/binutils/testsuite/binutils-all/objdump.W
+++ b/binutils/testsuite/binutils-all/objdump.W
@@ -23,7 +23,7 @@ Contents of the .debug_info section:
     <3c>   DW_AT_type        : <0x4a>	
     <40>   DW_AT_low_pc      : 0x.	
     <44>   DW_AT_high_pc     : 0x.	
-    <48>   DW_AT_frame_base  : 1 byte block: 55 	\(DW_OP_reg5\)
+    <48>   DW_AT_frame_base  : 1 byte block: 55 	\(DW_OP_reg5 \([^()]*\)\)
  <1><4a>: Abbrev Number: 3 \(DW_TAG_base_type\)
     <4b>   DW_AT_name        : int	
     <4f>   DW_AT_byte_size   : 4	
--- a/gas/testsuite/gas/elf/dwarf2-1.d
+++ b/gas/testsuite/gas/elf/dwarf2-1.d
@@ -24,7 +24,7 @@ Contents of the .debug_info section:
     <3c>   DW_AT_type        : <0x4a>	
     <40>   DW_AT_low_pc      : 0x.	
     <44>   DW_AT_high_pc     : 0x.	
-    <48>   DW_AT_frame_base  : 1 byte block: 55 	\(DW_OP_reg5\)
+    <48>   DW_AT_frame_base  : 1 byte block: 55 	\(DW_OP_reg5 \([^()]*\)\)
  <1><4a>: Abbrev Number: 3 \(DW_TAG_base_type\)
     <4b>   DW_AT_name        : int	
     <4f>   DW_AT_byte_size   : 4	
--- a/gas/testsuite/gas/elf/dwarf2-2.d
+++ b/gas/testsuite/gas/elf/dwarf2-2.d
@@ -24,7 +24,7 @@ Contents of the .debug_info section:
     <3c>   DW_AT_type        : <0x4a>	
     <40>   DW_AT_low_pc      : 0x.	
     <44>   DW_AT_high_pc     : 0x.	
-    <48>   DW_AT_frame_base  : 1 byte block: 55 	\(DW_OP_reg5\)
+    <48>   DW_AT_frame_base  : 1 byte block: 55 	\(DW_OP_reg5 \([^()]*\)\)
  <1><4a>: Abbrev Number: 3 \(DW_TAG_base_type\)
     <4b>   DW_AT_name        : int	
     <4f>   DW_AT_byte_size   : 4	
--- a/gas/testsuite/gas/i386/dw2-compress-1.d
+++ b/gas/testsuite/gas/i386/dw2-compress-1.d
@@ -24,7 +24,7 @@ Contents of the .zdebug_info section:
     <3c>   DW_AT_type        : <0x4a>	
     <40>   DW_AT_low_pc      : 0x0	
     <44>   DW_AT_high_pc     : 0x4	
-    <48>   DW_AT_frame_base  : 1 byte block: 55 	\(DW_OP_reg5\)
+    <48>   DW_AT_frame_base  : 1 byte block: 55 	\(DW_OP_reg5 \([^()]*\)\)
  <1><4a>: Abbrev Number: 3 \(DW_TAG_base_type\)
     <4b>   DW_AT_name        : int	
     <4f>   DW_AT_byte_size   : 4	


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