* elf32-cris.c (cris_elf_gc_sweep_hook) <R_CRIS_16_GOTPLT>
<R_CRIS_32_GOTPLT>: Fix missing update of gotplt refcount for global symbols. <R_CRIS_8, R_CRIS_16, R_CRIS_32>: New cases for similar missing updates of the plt refcount. (elf_cris_adjust_gotplt_to_got): Assert integrity of the gotplt refcount in relation to the plt refcount.
This commit is contained in:
parent
357f012bf4
commit
970d488d05
2 changed files with 22 additions and 0 deletions
|
@ -1,3 +1,13 @@
|
|||
2011-10-14 Hans-Peter Nilsson <hp@axis.com>
|
||||
|
||||
* elf32-cris.c (cris_elf_gc_sweep_hook) <R_CRIS_16_GOTPLT>
|
||||
<R_CRIS_32_GOTPLT>: Fix missing update of gotplt refcount for
|
||||
global symbols.
|
||||
<R_CRIS_8, R_CRIS_16, R_CRIS_32>: New cases for similar missing
|
||||
updates of the plt refcount.
|
||||
(elf_cris_adjust_gotplt_to_got): Assert integrity of the gotplt
|
||||
refcount in relation to the plt refcount.
|
||||
|
||||
2011-10-13 Richard Sandiford <richard.sandiford@linaro.org>
|
||||
|
||||
* elf32-arm.c (elf32_arm_final_link_relocate): Mark PLT calls via
|
||||
|
|
|
@ -2663,6 +2663,9 @@ cris_elf_gc_sweep_hook (bfd *abfd,
|
|||
/* For local symbols, treat these like GOT relocs. */
|
||||
if (h == NULL)
|
||||
goto local_got_reloc;
|
||||
else
|
||||
/* For global symbols, adjust the reloc-specific refcount. */
|
||||
elf_cris_hash_entry (h)->gotplt_refcount--;
|
||||
/* Fall through. */
|
||||
|
||||
case R_CRIS_32_PLT_GOTREL:
|
||||
|
@ -2671,10 +2674,14 @@ cris_elf_gc_sweep_hook (bfd *abfd,
|
|||
local_got_refcounts[-1]--;
|
||||
/* Fall through. */
|
||||
|
||||
case R_CRIS_8:
|
||||
case R_CRIS_16:
|
||||
case R_CRIS_32:
|
||||
case R_CRIS_8_PCREL:
|
||||
case R_CRIS_16_PCREL:
|
||||
case R_CRIS_32_PCREL:
|
||||
case R_CRIS_32_PLT_PCREL:
|
||||
/* Negate the increment we did in cris_elf_check_relocs. */
|
||||
if (h != NULL)
|
||||
{
|
||||
if (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
||||
|
@ -2733,6 +2740,11 @@ elf_cris_adjust_gotplt_to_got (h, p)
|
|||
{
|
||||
struct bfd_link_info *info = (struct bfd_link_info *) p;
|
||||
|
||||
/* A GOTPLT reloc, when activated, is supposed to be included into
|
||||
the PLT refcount. */
|
||||
BFD_ASSERT (h->gotplt_refcount == 0
|
||||
|| h->gotplt_refcount <= h->root.plt.refcount);
|
||||
|
||||
/* If nobody wanted a GOTPLT with this symbol, we're done. */
|
||||
if (h->gotplt_refcount <= 0)
|
||||
return TRUE;
|
||||
|
|
Loading…
Reference in a new issue