aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog7
-rw-r--r--gas/config/tc-alpha.c8
-rw-r--r--gas/dw2gencfi.c2
-rw-r--r--gas/dw2gencfi.h3
4 files changed, 19 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index e40ab83..110c77e 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -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.
diff --git a/gas/config/tc-alpha.c b/gas/config/tc-alpha.c
index 9523ada..db3f8b4 100644
--- a/gas/config/tc-alpha.c
+++ b/gas/config/tc-alpha.c
@@ -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)
diff --git a/gas/dw2gencfi.c b/gas/dw2gencfi.c
index 85f2cbb..163b8de 100644
--- a/gas/dw2gencfi.c
+++ b/gas/dw2gencfi.c
@@ -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. */
diff --git a/gas/dw2gencfi.h b/gas/dw2gencfi.h
index 0226cdd..7f83496 100644
--- a/gas/dw2gencfi.h
+++ b/gas/dw2gencfi.h
@@ -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