aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog8
-rw-r--r--bfd/elf32-xtensa.c23
2 files changed, 25 insertions, 6 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 4bf8ef7..6c9e799 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 43ef7d8..05ee9df 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);