aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2006-03-17 20:10:47 +0000
committerJoseph Myers <joseph@codesourcery.com>2006-03-17 20:10:47 +0000
commit6f7daaf297924992b71922e946f7d8c7e087db68 (patch)
treecfcdd8c6b05126cbd907d696013b68007832603b
parent0b237ba1cd4e4a22784a48c7ce34df0e0803ef8a (diff)
* gcc/dwarf2.h (DW64_CIE_ID): Define.
* gcc/dwarf2out.c (DWARF_CIE_ID): Define. (output_call_frame_info): Output 0xffffffff before standard 8-byte length header. Use DWARF_CIE_ID. git-svn-id: https://gcc.gnu.org/svn/gcc/branches/csl-gxxpro-3_4-branch@112183 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--ChangeLog.csl7
-rw-r--r--gcc/dwarf2.h1
-rw-r--r--gcc/dwarf2out.c16
3 files changed, 23 insertions, 1 deletions
diff --git a/ChangeLog.csl b/ChangeLog.csl
index 1a8fd096853..07300e0e020 100644
--- a/ChangeLog.csl
+++ b/ChangeLog.csl
@@ -1,3 +1,10 @@
+2006-03-17 Joseph Myers <joseph@codesourcery.com>
+
+ * gcc/dwarf2.h (DW64_CIE_ID): Define.
+ * gcc/dwarf2out.c (DWARF_CIE_ID): Define.
+ (output_call_frame_info): Output 0xffffffff before standard 8-byte
+ length header. Use DWARF_CIE_ID.
+
2006-03-17 Carlos O'Donell <carlos@codesourcery.com>
* gcc/cp/search.c (maybe_suppress_debug_info): Exit if
diff --git a/gcc/dwarf2.h b/gcc/dwarf2.h
index 0e98a455fab..652a8aa8962 100644
--- a/gcc/dwarf2.h
+++ b/gcc/dwarf2.h
@@ -562,6 +562,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
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index c99236ca272..2a3fb3e7b47 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -301,6 +301,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;
@@ -1975,6 +1983,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);
@@ -1982,7 +1993,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");
@@ -2104,6 +2115,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);