dwarf2out.c (dwarf2out_frame_debug): Assume that in a PARALLEL prologue insn, only...
authorJason Merrill <jason@yorick.cygnus.com>
Mon, 8 Sep 1997 08:53:21 +0000 (08:53 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Mon, 8 Sep 1997 08:53:21 +0000 (04:53 -0400)
* 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

gcc/ChangeLog
gcc/dwarf2out.c

index 2416508bd27aa347a3c96d3c1c9efa8a2c579075..0db830df543ba5f7f7ffbb907970e0d636f122af 100644 (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.
        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)
 
        * version.c: Bump for snapshot.
index ff682e4617a9ef723c11000f43ccd3a72cd86b88..fac5135275006b938cc51bea171608d72b235888 100644 (file)
@@ -860,6 +860,10 @@ dwarf2out_frame_debug (insn)
   label = dwarf2out_cfi_label ();
     
   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);
 
   src = SET_SRC (insn);
@@ -1239,7 +1243,10 @@ output_call_frame_info (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);
-  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)
     fprintf (asm_out_file, "\t%s Length of Common Information Entry",
             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);
 
   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);
       fputc ('\n', asm_out_file);
@@ -1315,12 +1322,13 @@ output_call_frame_info (for_eh)
   for (i = 0; i < fde_table_in_use; ++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 (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)
        fprintf (asm_out_file, "\t%s FDE Length", ASM_COMMENT_START);
       fputc ('\n', asm_out_file);
@@ -1380,7 +1388,7 @@ output_call_frame_info (for_eh)
   if (for_eh)
     {
       /* 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);
     }
 #endif