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").
This commit is contained in:
parent
8c008720eb
commit
a77dc2cc26
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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.
|
||||
|
@ -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)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user