* dwarf.c (decode_location_expression): Handle DW_OP_GNU_const_type,
authorJakub Jelinek <jakub@redhat.com>
Tue, 3 May 2011 08:43:14 +0000 (08:43 +0000)
committerJakub Jelinek <jakub@redhat.com>
Tue, 3 May 2011 08:43:14 +0000 (08:43 +0000)
DW_OP_GNU_regval_type, DW_OP_GNU_deref_type, DW_OP_GNU_convert
and DW_OP_GNU_reinterpret.

binutils/ChangeLog
binutils/dwarf.c

index 3db85fcc93d3fcd59b1691720a7754a16ae0850b..4e709b6f410aac7ad3baa7553625b85cc0c1ef92 100644 (file)
@@ -1,5 +1,9 @@
 2011-05-03  Jakub Jelinek  <jakub@redhat.com>
 
+       * dwarf.c (decode_location_expression): Handle DW_OP_GNU_const_type,
+       DW_OP_GNU_regval_type, DW_OP_GNU_deref_type, DW_OP_GNU_convert
+       and DW_OP_GNU_reinterpret.
+
        * MAINTAINERS: Add myself as DWARF2 maintainer.
 
 2011-05-02  Alan Modra  <amodra@gmail.com>
index d8e66a35bad84781809ba6129992d1cd0425535a..b240af69c7ef28210c1eec49efd3c7a67e963ff8 100644 (file)
@@ -1084,17 +1084,6 @@ decode_location_expression (unsigned char * data,
          display_block (data, uvalue);
          data += uvalue;
          break;
-       case DW_OP_GNU_entry_value:
-         uvalue = read_leb128 (data, &bytes_read, 0);
-         data += bytes_read;
-         printf ("DW_OP_GNU_entry_value: (");
-         if (decode_location_expression (data, pointer_size, offset_size,
-                                         dwarf_version, uvalue,
-                                         cu_offset, section))
-           need_frame_base = 1;
-         putchar (')');
-         data += uvalue;
-         break;
 
          /* GNU extensions.  */
        case DW_OP_GNU_push_tls_address:
@@ -1143,6 +1132,53 @@ decode_location_expression (unsigned char * data,
              data += offset_size + bytes_read;
            }
          break;
+       case DW_OP_GNU_entry_value:
+         uvalue = read_leb128 (data, &bytes_read, 0);
+         data += bytes_read;
+         printf ("DW_OP_GNU_entry_value: (");
+         if (decode_location_expression (data, pointer_size, offset_size,
+                                         dwarf_version, uvalue,
+                                         cu_offset, section))
+           need_frame_base = 1;
+         putchar (')');
+         data += uvalue;
+         break;
+       case DW_OP_GNU_const_type:
+         uvalue = read_leb128 (data, &bytes_read, 0);
+         data += bytes_read;
+         printf ("DW_OP_GNU_const_type: <0x%s> ",
+                 dwarf_vmatoa ("x", cu_offset + uvalue));
+         uvalue = byte_get (data++, 1);
+         display_block (data, uvalue);
+         data += uvalue;
+         break;
+       case DW_OP_GNU_regval_type:
+         uvalue = read_leb128 (data, &bytes_read, 0);
+         data += bytes_read;
+         printf ("DW_OP_GNU_regval_type: %s (%s)",
+                 dwarf_vmatoa ("u", uvalue), regname (uvalue, 1));
+         uvalue = read_leb128 (data, &bytes_read, 0);
+         data += bytes_read;
+         printf (" <0x%s>", dwarf_vmatoa ("x", cu_offset + uvalue));
+         break;
+       case DW_OP_GNU_deref_type:
+         printf ("DW_OP_GNU_deref_type: %ld", (long) byte_get (data++, 1));
+         uvalue = read_leb128 (data, &bytes_read, 0);
+         data += bytes_read;
+         printf (" <0x%s>", dwarf_vmatoa ("x", cu_offset + uvalue));
+         break;
+       case DW_OP_GNU_convert:
+         uvalue = read_leb128 (data, &bytes_read, 0);
+         data += bytes_read;
+         printf ("DW_OP_GNU_convert <0x%s>",
+                 dwarf_vmatoa ("x", cu_offset + uvalue));
+         break;
+       case DW_OP_GNU_reinterpret:
+         uvalue = read_leb128 (data, &bytes_read, 0);
+         data += bytes_read;
+         printf ("DW_OP_GNU_reinterpret <0x%s>",
+                 dwarf_vmatoa ("x", cu_offset + uvalue));
+         break;
 
          /* HP extensions.  */
        case DW_OP_HP_is_value: