* elf32-xtensa.c (elf_xtensa_relocate_section): Return after
unresolvable relocation error. (elf_xtensa_finish_dynamic_symbol): Set value of undefined, weak symbols to zero.
This commit is contained in:
parent
fbb00ad021
commit
bf1747ded8
|
@ -1,3 +1,10 @@
|
||||||
|
2006-10-11 Bob Wilson <bob.wilson@acm.org>
|
||||||
|
|
||||||
|
* elf32-xtensa.c (elf_xtensa_relocate_section): Return after
|
||||||
|
unresolvable relocation error.
|
||||||
|
(elf_xtensa_finish_dynamic_symbol): Set value of undefined, weak
|
||||||
|
symbols to zero.
|
||||||
|
|
||||||
2006-10-10 Bob Wilson <bob.wilson@acm.org>
|
2006-10-10 Bob Wilson <bob.wilson@acm.org>
|
||||||
|
|
||||||
* elf32-xtensa.c (elf_xtensa_size_dynamic_sections): Add DT_DEBUG
|
* elf32-xtensa.c (elf_xtensa_size_dynamic_sections): Add DT_DEBUG
|
||||||
|
|
|
@ -2259,13 +2259,16 @@ elf_xtensa_relocate_section (bfd *output_bfd,
|
||||||
if (unresolved_reloc
|
if (unresolved_reloc
|
||||||
&& !((input_section->flags & SEC_DEBUGGING) != 0
|
&& !((input_section->flags & SEC_DEBUGGING) != 0
|
||||||
&& h->def_dynamic))
|
&& h->def_dynamic))
|
||||||
(*_bfd_error_handler)
|
{
|
||||||
(_("%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'"),
|
(*_bfd_error_handler)
|
||||||
input_bfd,
|
(_("%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'"),
|
||||||
input_section,
|
input_bfd,
|
||||||
(long) rel->r_offset,
|
input_section,
|
||||||
howto->name,
|
(long) rel->r_offset,
|
||||||
h->root.root.string);
|
howto->name,
|
||||||
|
h->root.root.string);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* There's no point in calling bfd_perform_relocation here.
|
/* There's no point in calling bfd_perform_relocation here.
|
||||||
Just go directly to our "special function". */
|
Just go directly to our "special function". */
|
||||||
|
@ -2326,12 +2329,17 @@ elf_xtensa_finish_dynamic_symbol (bfd *output_bfd ATTRIBUTE_UNUSED,
|
||||||
struct elf_link_hash_entry *h,
|
struct elf_link_hash_entry *h,
|
||||||
Elf_Internal_Sym *sym)
|
Elf_Internal_Sym *sym)
|
||||||
{
|
{
|
||||||
if (h->needs_plt
|
if (h->needs_plt && !h->def_regular)
|
||||||
&& !h->def_regular)
|
|
||||||
{
|
{
|
||||||
/* Mark the symbol as undefined, rather than as defined in
|
/* Mark the symbol as undefined, rather than as defined in
|
||||||
the .plt section. Leave the value alone. */
|
the .plt section. Leave the value alone. */
|
||||||
sym->st_shndx = SHN_UNDEF;
|
sym->st_shndx = SHN_UNDEF;
|
||||||
|
/* If the symbol is weak, we do need to clear the value.
|
||||||
|
Otherwise, the PLT entry would provide a definition for
|
||||||
|
the symbol even if the symbol wasn't defined anywhere,
|
||||||
|
and so the symbol would never be NULL. */
|
||||||
|
if (!h->ref_regular_nonweak)
|
||||||
|
sym->st_value = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */
|
/* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */
|
||||||
|
|
Loading…
Reference in New Issue