mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-27 22:48:57 +08:00
* elf32-ppc.c (ppc_elf_finish_dynamic_sections): Handle vxworks
_GLOBAL_OFFSET_TABLE_ in .got.plt section. Add BFD_ASSERTs.
This commit is contained in:
@ -1,3 +1,8 @@
|
|||||||
|
2008-09-19 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
|
* elf32-ppc.c (ppc_elf_finish_dynamic_sections): Handle vxworks
|
||||||
|
_GLOBAL_OFFSET_TABLE_ in .got.plt section. Add BFD_ASSERTs.
|
||||||
|
|
||||||
2008-09-17 Bob Wilson <bob.wilson@acm.org>
|
2008-09-17 Bob Wilson <bob.wilson@acm.org>
|
||||||
|
|
||||||
* elf32-xtensa.c (elf_xtensa_check_relocs): Check for negative refcount.
|
* elf32-xtensa.c (elf_xtensa_check_relocs): Check for negative refcount.
|
||||||
|
@ -7727,29 +7727,38 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add a blrl instruction at _GLOBAL_OFFSET_TABLE_-4 so that a function can
|
|
||||||
easily find the address of the _GLOBAL_OFFSET_TABLE_. */
|
|
||||||
if (htab->got != NULL)
|
if (htab->got != NULL)
|
||||||
{
|
{
|
||||||
if (htab->elf.hgot->root.u.def.section == htab->got)
|
if (htab->elf.hgot->root.u.def.section == htab->got
|
||||||
|
|| htab->elf.hgot->root.u.def.section == htab->sgotplt)
|
||||||
{
|
{
|
||||||
unsigned char *p = htab->got->contents;
|
unsigned char *p = htab->elf.hgot->root.u.def.section->contents;
|
||||||
bfd_vma val;
|
|
||||||
|
|
||||||
p += htab->elf.hgot->root.u.def.value;
|
p += htab->elf.hgot->root.u.def.value;
|
||||||
if (htab->plt_type == PLT_OLD)
|
if (htab->plt_type == PLT_OLD)
|
||||||
bfd_put_32 (output_bfd, 0x4e800021 /* blrl */, p - 4);
|
{
|
||||||
|
/* Add a blrl instruction at _GLOBAL_OFFSET_TABLE_-4
|
||||||
|
so that a function can easily find the address of
|
||||||
|
_GLOBAL_OFFSET_TABLE_. */
|
||||||
|
BFD_ASSERT (htab->elf.hgot->root.u.def.value - 4
|
||||||
|
< htab->elf.hgot->root.u.def.section->size);
|
||||||
|
bfd_put_32 (output_bfd, 0x4e800021, p - 4);
|
||||||
|
}
|
||||||
|
|
||||||
val = 0;
|
|
||||||
if (sdyn != NULL)
|
if (sdyn != NULL)
|
||||||
val = sdyn->output_section->vma + sdyn->output_offset;
|
{
|
||||||
|
bfd_vma val = sdyn->output_section->vma + sdyn->output_offset;
|
||||||
|
BFD_ASSERT (htab->elf.hgot->root.u.def.value
|
||||||
|
< htab->elf.hgot->root.u.def.section->size);
|
||||||
bfd_put_32 (output_bfd, val, p);
|
bfd_put_32 (output_bfd, val, p);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
(*_bfd_error_handler) (_("%s not defined in linker created %s"),
|
(*_bfd_error_handler) (_("%s not defined in linker created %s"),
|
||||||
htab->elf.hgot->root.root.string,
|
htab->elf.hgot->root.root.string,
|
||||||
htab->got->name);
|
(htab->sgotplt != NULL
|
||||||
|
? htab->sgotplt->name : htab->got->name));
|
||||||
bfd_set_error (bfd_error_bad_value);
|
bfd_set_error (bfd_error_bad_value);
|
||||||
ret = FALSE;
|
ret = FALSE;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user