dwarf2.h (DW64_CIE_ID): Define.
authorJoseph Myers <joseph@codesourcery.com>
Sat, 1 Apr 2006 00:21:46 +0000 (01:21 +0100)
committerJoseph Myers <jsm28@gcc.gnu.org>
Sat, 1 Apr 2006 00:21:46 +0000 (01:21 +0100)
* dwarf2.h (DW64_CIE_ID): Define.
* dwarf2out.c (DWARF_CIE_ID): Define.
(output_call_frame_info): Output 0xffffffff before standard 8-byte
length header.  Use DWARF_CIE_ID.
(value_format): Use DW_FORM_data4 or DW_FORM_data8 for
dw_val_class_loc_list depending on DWARF_OFFSET_SIZE.

From-SVN: r112601

gcc/ChangeLog
gcc/dwarf2.h
gcc/dwarf2out.c

index d76e2c1..2266b33 100644 (file)
@@ -1,3 +1,12 @@
+2006-04-01  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * dwarf2.h (DW64_CIE_ID): Define.
+       * dwarf2out.c (DWARF_CIE_ID): Define.
+       (output_call_frame_info): Output 0xffffffff before standard 8-byte
+       length header.  Use DWARF_CIE_ID.
+       (value_format): Use DW_FORM_data4 or DW_FORM_data8 for
+       dw_val_class_loc_list depending on DWARF_OFFSET_SIZE.
+
 2006-03-31  Kaz Kojima  <kkojima@gcc.gnu.org>
 
        * config/sh/linux-atomic.asm: New file.
index b5c342e..3118837 100644 (file)
@@ -757,6 +757,7 @@ enum dwarf_call_frame_info
   };
 
 #define DW_CIE_ID        0xffffffff
+#define DW64_CIE_ID      0xffffffffffffffffULL
 #define DW_CIE_VERSION   1
 
 #define DW_CFA_extended   0
index 5b1894c..e400eb3 100644 (file)
@@ -288,6 +288,14 @@ dw_fde_node;
 #endif
 #endif
 
+/* CIE identifier.  */
+#if HOST_BITS_PER_WIDE_INT >= 64
+#define DWARF_CIE_ID \
+  (unsigned HOST_WIDE_INT) (DWARF_OFFSET_SIZE == 4 ? DW_CIE_ID : DW64_CIE_ID)
+#else
+#define DWARF_CIE_ID DW_CIE_ID
+#endif
+
 /* A pointer to the base of a table that contains frame description
    information for each routine.  */
 static GTY((length ("fde_table_allocated"))) dw_fde_ref fde_table;
@@ -2218,6 +2226,9 @@ output_call_frame_info (int for_eh)
   /* Output the CIE.  */
   ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
   ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
+  if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
+    dw2_asm_output_data (4, 0xffffffff,
+      "Initial length escape value indicating 64-bit DWARF extension");
   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
                        "Length of Common Information Entry");
   ASM_OUTPUT_LABEL (asm_out_file, l1);
@@ -2225,7 +2236,7 @@ output_call_frame_info (int for_eh)
   /* Now that the CIE pointer is PC-relative for EH,
      use 0 to identify the CIE.  */
   dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
-                      (for_eh ? 0 : DW_CIE_ID),
+                      (for_eh ? 0 : DWARF_CIE_ID),
                       "CIE Identifier Tag");
 
   dw2_asm_output_data (1, DW_CIE_VERSION, "CIE Version");
@@ -2350,6 +2361,9 @@ output_call_frame_info (int for_eh)
       targetm.asm_out.internal_label (asm_out_file, FDE_LABEL, for_eh + i * 2);
       ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + i * 2);
       ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + i * 2);
+      if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
+       dw2_asm_output_data (4, 0xffffffff,
+                            "Initial length escape value indicating 64-bit DWARF extension");
       dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
                            "FDE Length");
       ASM_OUTPUT_LABEL (asm_out_file, l1);
@@ -6775,6 +6789,7 @@ value_format (dw_attr_ref a)
       return DW_FORM_addr;
     case dw_val_class_range_list:
     case dw_val_class_offset:
+    case dw_val_class_loc_list:
       switch (DWARF_OFFSET_SIZE)
        {
        case 4:
@@ -6784,10 +6799,6 @@ value_format (dw_attr_ref a)
        default:
          gcc_unreachable ();
        }
-    case dw_val_class_loc_list:
-      /* FIXME: Could be DW_FORM_data8, with a > 32 bit size
-        .debug_loc section */
-      return DW_FORM_data4;
     case dw_val_class_loc:
       switch (constant_size (size_of_locs (AT_loc (a))))
        {