From: bwilson Date: Thu, 12 Oct 2006 21:56:18 +0000 (+0000) Subject: bfd/ X-Git-Tag: drop_9x_support_start~1492 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=152b6921c4e3bc42db9a641d4591436ef583e4c3;p=pf3gnuchains%2Fpf3gnuchains4x.git 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"). --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index b7db1d8bd9..db0ee249b0 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2006-10-12 Bob Wilson + + * elf32-xtensa.c (elf_xtensa_action_discarded): New. + (elf_backend_action_discarded): Define. + 2006-10-11 Bob Wilson * elf32-xtensa.c (elf_xtensa_relocate_section): Return after diff --git a/bfd/elf32-xtensa.c b/bfd/elf32-xtensa.c index a5d76b214d..2a6c695ccd 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 f2b8ea354e..77d813c3cd 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,8 @@ +2006-10-12 Bob Wilson + + * emultempl/xtensaelf.em (is_inconsistent_linkonce_section): Check + for linkonce XCC exception tables (".e" and ".h"). + 2006-10-11 Bob Wilson * emulparams/elf32xtensa.sh (TEXT_PLT): Enable. diff --git a/ld/emultempl/xtensaelf.em b/ld/emultempl/xtensaelf.em index bbee546202..cf3f774459 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) {