diff options
author | Bob Wilson <bob.wilson@acm.org> | 2008-02-04 23:13:24 +0000 |
---|---|---|
committer | Bob Wilson <bob.wilson@acm.org> | 2008-02-04 23:13:24 +0000 |
commit | 3fcbae3bda62d85abbd4b3f4f8038505f75e8cc7 (patch) | |
tree | 88a312051c9e67df33f6cae07908efaedc38b0e8 | |
parent | 150c9a27a3eb396158363d64c65275ef4423daa5 (diff) | |
download | binutils-redhat-3fcbae3bda62d85abbd4b3f4f8038505f75e8cc7.tar.gz |
* elf32-xtensa (elf_xtensa_relocate_section): After finding an invalid
relocation, do not continue processing it. Ignore R_XTENSA_ASM_EXPAND
relocations against dynamic symbols.
(elf_xtensa_finish_dynamic_sections): Do not fail if there is no
.xt.lit section.
-rw-r--r-- | bfd/ChangeLog | 8 | ||||
-rw-r--r-- | bfd/elf32-xtensa.c | 23 |
2 files changed, 25 insertions, 6 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 4bf8ef74da..6c9e79908a 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,11 @@ +2008-02-04 Bob Wilson <bob.wilson@acm.org> + + * elf32-xtensa (elf_xtensa_relocate_section): After finding an invalid + relocation, do not continue processing it. Ignore R_XTENSA_ASM_EXPAND + relocations against dynamic symbols. + (elf_xtensa_finish_dynamic_sections): Do not fail if there is no + .xt.lit section. + 2008-02-04 Kai Tietz <kai.tietz@onevision.com> H.J. Lu <hongjiu.lu@intel.com> diff --git a/bfd/elf32-xtensa.c b/bfd/elf32-xtensa.c index 43ef7d802d..05ee9dfcf3 100644 --- a/bfd/elf32-xtensa.c +++ b/bfd/elf32-xtensa.c @@ -2164,6 +2164,7 @@ elf_xtensa_relocate_section (bfd *output_bfd, (info, error_message, input_bfd, input_section, rel->r_offset))) return FALSE; + continue; } else if ((r_type == R_XTENSA_32 || r_type == R_XTENSA_PLT) && (input_section->flags & SEC_ALLOC) != 0 @@ -2244,6 +2245,13 @@ elf_xtensa_relocate_section (bfd *output_bfd, BFD_ASSERT (sizeof (Elf32_External_Rela) * srel->reloc_count <= srel->size); } + else if (r_type == R_XTENSA_ASM_EXPAND && dynamic_symbol) + { + /* This should only happen for non-PIC code, which is not + supposed to be used on systems with dynamic linking. + Just ignore these relocations. */ + continue; + } } /* Dynamic relocs are not propagated for SEC_DEBUGGING sections @@ -2467,7 +2475,7 @@ elf_xtensa_finish_dynamic_sections (bfd *output_bfd, bfd *dynobj; asection *sdyn, *srelplt, *sgot, *sxtlit, *sgotloc; Elf32_External_Dyn *dyncon, *dynconend; - int num_xtlit_entries; + int num_xtlit_entries = 0; if (! elf_hash_table (info)->dynamic_sections_created) return TRUE; @@ -2592,11 +2600,14 @@ elf_xtensa_finish_dynamic_sections (bfd *output_bfd, BFD_ASSERT (! info->relocatable); sxtlit = bfd_get_section_by_name (output_bfd, ".xt.lit"); sgotloc = htab->sgotloc; - BFD_ASSERT (sxtlit && sgotloc); - num_xtlit_entries = - elf_xtensa_combine_prop_entries (output_bfd, sxtlit, sgotloc); - if (num_xtlit_entries < 0) - return FALSE; + BFD_ASSERT (sgotloc); + if (sxtlit) + { + num_xtlit_entries = + elf_xtensa_combine_prop_entries (output_bfd, sxtlit, sgotloc); + if (num_xtlit_entries < 0) + return FALSE; + } dyncon = (Elf32_External_Dyn *) sdyn->contents; dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->size); |