* dw2gencfi.c (all_fde_data): Export.
authorRichard Henderson <rth@redhat.com>
Sun, 7 Aug 2011 16:32:20 +0000 (16:32 +0000)
committerRichard Henderson <rth@redhat.com>
Sun, 7 Aug 2011 16:32:20 +0000 (16:32 +0000)
        * dw2gencfi.h (all_fde_data): Declare.
        * config/tc-alpha.c (alpha_elf_md_end): Don't convert legacy unwind
        info to cfi unwind info if the user already has supplied some.

gas/ChangeLog
gas/config/tc-alpha.c
gas/dw2gencfi.c
gas/dw2gencfi.h

index e40ab83259a7a7f33c86429ae393bb726011a36f..110c77e9f04f13e08e7bbe7f85643f9536a84334 100644 (file)
@@ -1,3 +1,10 @@
+2011-08-06  Richard Henderson  <rth@redhat.com>
+
+       * dw2gencfi.c (all_fde_data): Export.
+       * dw2gencfi.h (all_fde_data): Declare.
+       * config/tc-alpha.c (alpha_elf_md_end): Don't convert legacy unwind
+       info to cfi unwind info if the user already has supplied some.
+
 2011-08-06  Richard Sandiford  <rdsandiford@googlemail.com>
 
        * config/tc-mips.c (emit_nop): Delete.
index 9523adaaba67605a638658cde0d0be50e386896b..db3f8b4a17a7360ee150b8a0ee5250b2d7f4809d 100644 (file)
@@ -4042,6 +4042,14 @@ alpha_elf_md_end (void)
   if (bfd_get_section_by_name (stdoutput, ".eh_frame") != NULL)
     return;
 
+  /* ??? In theory we could look for functions for which we have
+     generated unwind info via CFI directives, and those we have not.
+     Those we have not could still get their unwind info from here.
+     For now, do nothing if we've seen any CFI directives.  Note that
+     the above test will not trigger, as we've not emitted data yet.  */
+  if (all_fde_data != NULL)
+    return;
+
   /* Generate .eh_frame data for the unwind directives specified.  */
   for (p = all_frame_data; p ; p = p->next)
     if (p->prologue_sym)
index 85f2cbb01e73048202ff16dd1e7470996e3ac44d..163b8dea74f4b0e26c132f0546b0398053158e5e 100644 (file)
@@ -287,7 +287,7 @@ struct cie_entry
 
 /* List of FDE entries.  */
 
-static struct fde_entry *all_fde_data;
+struct fde_entry *all_fde_data;
 static struct fde_entry **last_fde_data = &all_fde_data;
 
 /* List of CIEs so that they could be reused.  */
index 0226cdd388eb2ef450daf3a30d86f93e761aed79..7f834966b90e08c554f2dac87fa8db18d77a8f3a 100644 (file)
@@ -118,6 +118,9 @@ struct fde_entry
 #endif
 };
 
+/* The list of all FDEs that have been collected.  */
+extern struct fde_entry *all_fde_data;
+
 /* Fake CFI type; outside the byte range of any real CFI insn.  */
 #define CFI_adjust_cfa_offset  0x100
 #define CFI_return_column      0x101