* 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:
Bob Wilson 2006-10-12 21:56:19 +00:00
parent 8c008720eb
commit a77dc2cc26
4 changed files with 36 additions and 7 deletions

View File

@ -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> 2006-10-11 Bob Wilson <bob.wilson@acm.org>
* elf32-xtensa.c (elf_xtensa_relocate_section): Return after * elf32-xtensa.c (elf_xtensa_relocate_section): Return after

View File

@ -2969,6 +2969,19 @@ elf_xtensa_ignore_discarded_relocs (asection *sec)
return xtensa_is_property_section (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. */ /* 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_relocate_section elf_xtensa_relocate_section
#define elf_backend_size_dynamic_sections elf_xtensa_size_dynamic_sections #define elf_backend_size_dynamic_sections elf_xtensa_size_dynamic_sections
#define elf_backend_special_sections elf_xtensa_special_sections #define elf_backend_special_sections elf_xtensa_special_sections
#define elf_backend_action_discarded elf_xtensa_action_discarded
#include "elf32-target.h" #include "elf32-target.h"

View File

@ -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> 2006-10-11 Bob Wilson <bob.wilson@acm.org>
* emulparams/elf32xtensa.sh (TEXT_PLT): Enable. * emulparams/elf32xtensa.sh (TEXT_PLT): Enable.

View File

@ -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, associated linkonce text is from a different object file. Normally,
a matching set of linkonce sections is taken from the same object file, 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 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; bfd *abfd = sec->owner;
const char *sec_name = bfd_get_section_name (abfd, sec); 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 if ((bfd_get_section_flags (abfd, sec) & SEC_LINK_ONCE) == 0
|| strncmp (sec_name, ".gnu.linkonce.", linkonce_len) != 0) || strncmp (sec_name, ".gnu.linkonce.", linkonce_len) != 0)
return FALSE; return FALSE;
/* Check if this is an Xtensa property section. */ /* Check if this is an Xtensa property section or an exception table
if (CONST_STRNEQ (sec_name + linkonce_len, "p.")) for Tensilica's XCC compiler. */
name = sec_name + linkonce_len + 2; name = sec_name + linkonce_len;
else if (CONST_STRNEQ (sec_name + linkonce_len, "prop.")) if (CONST_STRNEQ (name, "prop."))
name = strchr (sec_name + linkonce_len + 5, '.') + 1; 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) if (name)
{ {