* 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.
This commit is contained in:
Bob Wilson 2008-02-04 23:13:24 +00:00
parent f7f57253b1
commit d9ab3f2902
2 changed files with 25 additions and 6 deletions

View File

@ -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>

View File

@ -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);