aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Wilson <bob.wilson@acm.org>2006-10-12 21:56:19 +0000
committerBob Wilson <bob.wilson@acm.org>2006-10-12 21:56:19 +0000
commita77dc2cc26f789c3ee32ca4666750d27af07a6b9 (patch)
tree6ec27222509b02e59e9c587b0c304745151331d3
parent8c008720ebce20b40126b31392808cfd5a2408bc (diff)
downloadfsf-binutils-gdb-a77dc2cc26f789c3ee32ca4666750d27af07a6b9.zip
fsf-binutils-gdb-a77dc2cc26f789c3ee32ca4666750d27af07a6b9.tar.gz
fsf-binutils-gdb-a77dc2cc26f789c3ee32ca4666750d27af07a6b9.tar.bz2
bfd/
* elf32-xtensa.c (elf_xtensa_action_discarded): New. (elf_backend_action_discarded): Define. ld/ * emultempl/xtensaelf.em (is_inconsistent_linkonce_section): Check for linkonce XCC exception tables (".e" and ".h").
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elf32-xtensa.c14
-rw-r--r--ld/ChangeLog5
-rw-r--r--ld/emultempl/xtensaelf.em19
4 files changed, 36 insertions, 7 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index b7db1d8..db0ee24 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2006-10-12 Bob Wilson <bob.wilson@acm.org>
+
+ * elf32-xtensa.c (elf_xtensa_action_discarded): New.
+ (elf_backend_action_discarded): Define.
+
2006-10-11 Bob Wilson <bob.wilson@acm.org>
* elf32-xtensa.c (elf_xtensa_relocate_section): Return after
diff --git a/bfd/elf32-xtensa.c b/bfd/elf32-xtensa.c
index a5d76b2..2a6c695 100644
--- a/bfd/elf32-xtensa.c
+++ b/bfd/elf32-xtensa.c
@@ -2969,6 +2969,19 @@ elf_xtensa_ignore_discarded_relocs (asection *sec)
return xtensa_is_property_section (sec);
}
+
+static unsigned int
+elf_xtensa_action_discarded (asection *sec)
+{
+ if (strcmp (".xt_except_table", sec->name) == 0)
+ return 0;
+
+ if (strcmp (".xt_except_desc", sec->name) == 0)
+ return 0;
+
+ return _bfd_elf_default_action_discarded (sec);
+}
+
/* Support for core dump NOTE sections. */
@@ -9832,5 +9845,6 @@ static const struct bfd_elf_special_section elf_xtensa_special_sections[] =
#define elf_backend_relocate_section elf_xtensa_relocate_section
#define elf_backend_size_dynamic_sections elf_xtensa_size_dynamic_sections
#define elf_backend_special_sections elf_xtensa_special_sections
+#define elf_backend_action_discarded elf_xtensa_action_discarded
#include "elf32-target.h"
diff --git a/ld/ChangeLog b/ld/ChangeLog
index f2b8ea3..77d813c 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,8 @@
+2006-10-12 Bob Wilson <bob.wilson@acm.org>
+
+ * emultempl/xtensaelf.em (is_inconsistent_linkonce_section): Check
+ for linkonce XCC exception tables (".e" and ".h").
+
2006-10-11 Bob Wilson <bob.wilson@acm.org>
* emulparams/elf32xtensa.sh (TEXT_PLT): Enable.
diff --git a/ld/emultempl/xtensaelf.em b/ld/emultempl/xtensaelf.em
index bbee546..cf3f774 100644
--- a/ld/emultempl/xtensaelf.em
+++ b/ld/emultempl/xtensaelf.em
@@ -1184,7 +1184,7 @@ input_section_linked (asection *sec)
}
-/* Strip out any linkonce literal sections or property tables where the
+/* Strip out any linkonce property tables or XCC exception tables where the
associated linkonce text is from a different object file. Normally,
a matching set of linkonce sections is taken from the same object file,
but sometimes the files are compiled differently so that some of the
@@ -1199,17 +1199,22 @@ is_inconsistent_linkonce_section (asection *sec)
{
bfd *abfd = sec->owner;
const char *sec_name = bfd_get_section_name (abfd, sec);
- const char *name = 0;
+ const char *name;
if ((bfd_get_section_flags (abfd, sec) & SEC_LINK_ONCE) == 0
|| strncmp (sec_name, ".gnu.linkonce.", linkonce_len) != 0)
return FALSE;
- /* Check if this is an Xtensa property section. */
- if (CONST_STRNEQ (sec_name + linkonce_len, "p."))
- name = sec_name + linkonce_len + 2;
- else if (CONST_STRNEQ (sec_name + linkonce_len, "prop."))
- name = strchr (sec_name + linkonce_len + 5, '.') + 1;
+ /* Check if this is an Xtensa property section or an exception table
+ for Tensilica's XCC compiler. */
+ name = sec_name + linkonce_len;
+ if (CONST_STRNEQ (name, "prop."))
+ name = strchr (name + 5, '.') + 1;
+ else if (name[1] == '.'
+ && (name[0] == 'p' || name[0] == 'e' || name[0] == 'h'))
+ name += 2;
+ else
+ name = 0;
if (name)
{