dwarf2out.c (dwarf2out_frame_debug): Assume that in a PARALLEL prologue insn, only the first elt is significant.

* dwarf2out.c (dwarf2out_frame_debug): Assume that in a PARALLEL
 	prologue insn, only the first elt is significant.
	(output_call_frame_info): For exception handling, always use 4-byte
 	fields as specified by the dwarf2 spec.
	Don't skip trivial FDEs.

From-SVN: r15154
This commit is contained in:
Jason Merrill 1997-09-08 08:53:21 +00:00 committed by Jason Merrill
parent 0c82f6bfae
commit 267c09ab53
2 changed files with 22 additions and 6 deletions

View File

@ -13,6 +13,14 @@ Sun Sep 7 18:44:50 1997 Jim Wilson <wilson@cygnus.com>
* m68k/m68k.h (TARGET_SWITCHES): For 68000, 68302, subtract MASK_68881. * m68k/m68k.h (TARGET_SWITCHES): For 68000, 68302, subtract MASK_68881.
For 68303, 68332, cpu32, subtract MASK_68040_ONLY. For 68303, 68332, cpu32, subtract MASK_68040_ONLY.
Sun Sep 7 18:30:46 1997 Jason Merrill <jason@yorick.cygnus.com>
* dwarf2out.c (dwarf2out_frame_debug): Assume that in a PARALLEL
prologue insn, only the first elt is significant.
(output_call_frame_info): For exception handling, always use 4-byte
fields as specified by the dwarf2 spec.
Don't skip trivial FDEs.
Sun Sep 7 14:19:39 1997 Jeffrey A Law (law@cygnus.com) Sun Sep 7 14:19:39 1997 Jeffrey A Law (law@cygnus.com)
* version.c: Bump for snapshot. * version.c: Bump for snapshot.

View File

@ -860,6 +860,10 @@ dwarf2out_frame_debug (insn)
label = dwarf2out_cfi_label (); label = dwarf2out_cfi_label ();
insn = PATTERN (insn); insn = PATTERN (insn);
/* Assume that in a PARALLEL prologue insn, only the first elt is
significant. Currently this is true. */
if (GET_CODE (insn) == PARALLEL)
insn = XVECEXP (insn, 0, 0);
assert (GET_CODE (insn) == SET); assert (GET_CODE (insn) == SET);
src = SET_SRC (insn); src = SET_SRC (insn);
@ -1239,7 +1243,10 @@ output_call_frame_info (for_eh)
/* Output the CIE. */ /* Output the CIE. */
ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh); ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh); ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
ASM_OUTPUT_DWARF_DELTA (asm_out_file, l2, l1); if (for_eh)
ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, l2, l1);
else
ASM_OUTPUT_DWARF_DELTA (asm_out_file, l2, l1);
if (flag_verbose_asm) if (flag_verbose_asm)
fprintf (asm_out_file, "\t%s Length of Common Information Entry", fprintf (asm_out_file, "\t%s Length of Common Information Entry",
ASM_COMMENT_START); ASM_COMMENT_START);
@ -1252,7 +1259,7 @@ output_call_frame_info (for_eh)
fprintf (asm_out_file, "\t%s CIE Identifier Tag", ASM_COMMENT_START); fprintf (asm_out_file, "\t%s CIE Identifier Tag", ASM_COMMENT_START);
fputc ('\n', asm_out_file); fputc ('\n', asm_out_file);
if (DWARF_OFFSET_SIZE == 8) if (for_eh ? PTR_SIZE == 8 : DWARF_OFFSET_SIZE == 8)
{ {
ASM_OUTPUT_DWARF_DATA4 (asm_out_file, DW_CIE_ID); ASM_OUTPUT_DWARF_DATA4 (asm_out_file, DW_CIE_ID);
fputc ('\n', asm_out_file); fputc ('\n', asm_out_file);
@ -1315,12 +1322,13 @@ output_call_frame_info (for_eh)
for (i = 0; i < fde_table_in_use; ++i) for (i = 0; i < fde_table_in_use; ++i)
{ {
fde = &fde_table[i]; fde = &fde_table[i];
if (fde->dw_fde_cfi == NULL)
continue;
ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_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); ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + i*2);
ASM_OUTPUT_DWARF_DELTA (asm_out_file, l2, l1); if (for_eh)
ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, l2, l1);
else
ASM_OUTPUT_DWARF_DELTA (asm_out_file, l2, l1);
if (flag_verbose_asm) if (flag_verbose_asm)
fprintf (asm_out_file, "\t%s FDE Length", ASM_COMMENT_START); fprintf (asm_out_file, "\t%s FDE Length", ASM_COMMENT_START);
fputc ('\n', asm_out_file); fputc ('\n', asm_out_file);
@ -1380,7 +1388,7 @@ output_call_frame_info (for_eh)
if (for_eh) if (for_eh)
{ {
/* Emit terminating zero for table. */ /* Emit terminating zero for table. */
ASM_OUTPUT_DWARF_DATA (asm_out_file, 0); ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0);
fputc ('\n', asm_out_file); fputc ('\n', asm_out_file);
} }
#endif #endif