Blob Blame History Raw
2012-06-08  Jakub Jelinek  <jakub@redhat.com>

	* dwarf.c (read_and_display_attr_value): Handle
	DW_FORM_GNU_ref_alt and DW_FORM_GNU_strp_alt.
	(display_debug_macro): Handle DW_MACRO_GNU_define_indirect_alt,
	DW_MACRO_GNU_undef_indirect_alt and
	DW_MACRO_GNU_transparent_include_alt.

	* dwarf2.def (DW_FORM_GNU_ref_alt, DW_FORM_GNU_strp_alt): New
	forms.
	* dwarf2.h (enum dwarf_macro_record_type): Add
	DW_MACRO_GNU_define_indirect_alt, DW_MACRO_GNU_undef_indirect_alt
	and DW_MACRO_GNU_transparent_include_alt.

--- binutils/dwarf.c	17 May 2012 10:00:35 -0000	1.115
+++ binutils/dwarf.c	8 Jun 2012 19:07:33 -0000	1.116
@@ -1284,6 +1284,8 @@ read_and_display_attr_value (unsigned lo
 
     case DW_FORM_strp:
     case DW_FORM_sec_offset:
+    case DW_FORM_GNU_ref_alt:
+    case DW_FORM_GNU_strp_alt:
       uvalue = byte_get (data, offset_size);
       data += offset_size;
       break;
@@ -1349,6 +1351,11 @@ read_and_display_attr_value (unsigned lo
 	printf (" <0x%s>", dwarf_vmatoa ("x",uvalue));
       break;
 
+    case DW_FORM_GNU_ref_alt:
+      if (!do_loc)
+	printf (" <alt 0x%s>", dwarf_vmatoa ("x",uvalue));
+      break;
+
     case DW_FORM_ref1:
     case DW_FORM_ref2:
     case DW_FORM_ref4:
@@ -1458,6 +1465,12 @@ read_and_display_attr_value (unsigned lo
         }
       break;
 
+    case DW_FORM_GNU_strp_alt:
+      if (!do_loc)
+	printf (_(" (alt indirect string, offset: 0x%s)"),
+		dwarf_vmatoa ("x", uvalue));
+      break;
+
     case DW_FORM_indirect:
       /* Handled above.  */
       break;
@@ -1796,7 +1809,8 @@ read_and_display_attr_value (unsigned lo
 
     case DW_AT_import:
       {
-        if (form == DW_FORM_ref_sig8)
+	if (form == DW_FORM_ref_sig8
+	    || form == DW_FORM_GNU_ref_alt)
           break;
 
 	if (form == DW_FORM_ref1
@@ -3629,6 +3643,31 @@ display_debug_macro (struct dwarf_sectio
 		      (unsigned long) offset);
 	      break;
 
+	    case DW_MACRO_GNU_define_indirect_alt:
+	      lineno = read_leb128 (curr, &bytes_read, 0);
+	      curr += bytes_read;
+	      offset = byte_get (curr, offset_size);
+	      curr += offset_size;
+	      printf (_(" DW_MACRO_GNU_define_indirect_alt - lineno : %d macro offset : 0x%lx\n"),
+		      lineno, (unsigned long) offset);
+	      break;
+
+	    case DW_MACRO_GNU_undef_indirect_alt:
+	      lineno = read_leb128 (curr, &bytes_read, 0);
+	      curr += bytes_read;
+	      offset = byte_get (curr, offset_size);
+	      curr += offset_size;
+	      printf (_(" DW_MACRO_GNU_undef_indirect_alt - lineno : %d macro offset : 0x%lx\n"),
+		      lineno, (unsigned long) offset);
+	      break;
+
+	    case DW_MACRO_GNU_transparent_include_alt:
+	      offset = byte_get (curr, offset_size);
+	      curr += offset_size;
+	      printf (_(" DW_MACRO_GNU_transparent_include_alt - offset : 0x%lx\n"),
+		      (unsigned long) offset);
+	      break;
+
 	    default:
 	      if (extended_ops == NULL || extended_ops[op] == NULL)
 		{
--- include/dwarf2.def	22 May 2012 18:05:30 -0000	1.4
+++ include/dwarf2.def	8 Jun 2012 19:01:23 -0000	1.5
@@ -205,6 +205,10 @@ DW_FORM (DW_FORM_ref_sig8, 0x20)
 /* Extensions for Fission.  See http://gcc.gnu.org/wiki/DebugFission.  */
 DW_FORM (DW_FORM_GNU_addr_index, 0x1f01)
 DW_FORM (DW_FORM_GNU_str_index, 0x1f02)
+/* Extensions for DWZ multifile.
+   See http://www.dwarfstd.org/ShowIssue.php?issue=120604.1&type=open .  */
+DW_FORM (DW_FORM_GNU_ref_alt, 0x1f20)
+DW_FORM (DW_FORM_GNU_strp_alt, 0x1f21)
 DW_END_FORM
 
 DW_FIRST_AT (DW_AT_sibling, 0x01)
--- include/dwarf2.h	27 Apr 2012 18:03:18 -0000	1.29
+++ include/dwarf2.h	8 Jun 2012 19:01:23 -0000	1.30
@@ -333,6 +333,11 @@ enum dwarf_macro_record_type
     DW_MACRO_GNU_define_indirect = 5,
     DW_MACRO_GNU_undef_indirect = 6,
     DW_MACRO_GNU_transparent_include = 7,
+    /* Extensions for DWZ multifile.
+       See http://www.dwarfstd.org/ShowIssue.php?issue=120604.1&type=open .  */
+    DW_MACRO_GNU_define_indirect_alt = 8,
+    DW_MACRO_GNU_undef_indirect_alt = 9,
+    DW_MACRO_GNU_transparent_include_alt = 10,
     DW_MACRO_GNU_lo_user = 0xe0,
     DW_MACRO_GNU_hi_user = 0xff
   };