bfd/
* elf32-ppc.c (ppc_elf_check_relocs): Don't bother with dynamic relocs in non-SEC_ALLOC sections. (ppc_elf_gc_sweep_hook): Likewise. (ppc_elf_relax_section): Likewise. (ppc_elf_relocate_section): Likewise. ld/testsuite/ * ld-powerpc/reloc.d: Update to suit removal of non-alloc relocs.
This commit is contained in:
parent
eed0d89a39
commit
c87b5a93b2
|
@ -1,3 +1,11 @@
|
||||||
|
2005-04-19 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
|
* elf32-ppc.c (ppc_elf_check_relocs): Don't bother with
|
||||||
|
dynamic relocs in non-SEC_ALLOC sections.
|
||||||
|
(ppc_elf_gc_sweep_hook): Likewise.
|
||||||
|
(ppc_elf_relax_section): Likewise.
|
||||||
|
(ppc_elf_relocate_section): Likewise.
|
||||||
|
|
||||||
2005-04-18 Nick Clifton <nickc@redhat.com>
|
2005-04-18 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
* aix5ppc-core.c (xcoff64_core_p): Fix compile time warning
|
* aix5ppc-core.c (xcoff64_core_p): Fix compile time warning
|
||||||
|
|
|
@ -2581,6 +2581,15 @@ ppc_elf_check_relocs (bfd *abfd,
|
||||||
if (info->relocatable)
|
if (info->relocatable)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
|
/* Don't do anything special with non-loaded, non-alloced sections.
|
||||||
|
In particular, any relocs in such sections should not affect GOT
|
||||||
|
and PLT reference counting (ie. we don't allow them to create GOT
|
||||||
|
or PLT entries), there's no possibility or desire to optimize TLS
|
||||||
|
relocs, and there's not much point in propagating relocs to shared
|
||||||
|
libs that the dynamic linker won't relocate. */
|
||||||
|
if ((sec->flags & SEC_ALLOC) == 0)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
_bfd_error_handler ("ppc_elf_check_relocs called for section %A in %B",
|
_bfd_error_handler ("ppc_elf_check_relocs called for section %A in %B",
|
||||||
sec, abfd);
|
sec, abfd);
|
||||||
|
@ -2902,7 +2911,6 @@ ppc_elf_check_relocs (bfd *abfd,
|
||||||
|| !h->def_regular))))
|
|| !h->def_regular))))
|
||||||
|| (ELIMINATE_COPY_RELOCS
|
|| (ELIMINATE_COPY_RELOCS
|
||||||
&& !info->shared
|
&& !info->shared
|
||||||
&& (sec->flags & SEC_ALLOC) != 0
|
|
||||||
&& h != NULL
|
&& h != NULL
|
||||||
&& (h->root.type == bfd_link_hash_defweak
|
&& (h->root.type == bfd_link_hash_defweak
|
||||||
|| !h->def_regular)))
|
|| !h->def_regular)))
|
||||||
|
@ -2941,9 +2949,8 @@ ppc_elf_check_relocs (bfd *abfd,
|
||||||
|
|
||||||
sreloc = bfd_make_section (htab->elf.dynobj, name);
|
sreloc = bfd_make_section (htab->elf.dynobj, name);
|
||||||
flags = (SEC_HAS_CONTENTS | SEC_READONLY
|
flags = (SEC_HAS_CONTENTS | SEC_READONLY
|
||||||
| SEC_IN_MEMORY | SEC_LINKER_CREATED);
|
| SEC_IN_MEMORY | SEC_LINKER_CREATED
|
||||||
if ((sec->flags & SEC_ALLOC) != 0)
|
| SEC_ALLOC | SEC_LOAD);
|
||||||
flags |= SEC_ALLOC | SEC_LOAD;
|
|
||||||
if (sreloc == NULL
|
if (sreloc == NULL
|
||||||
|| ! bfd_set_section_flags (htab->elf.dynobj,
|
|| ! bfd_set_section_flags (htab->elf.dynobj,
|
||||||
sreloc, flags)
|
sreloc, flags)
|
||||||
|
@ -3147,6 +3154,9 @@ ppc_elf_gc_sweep_hook (bfd *abfd,
|
||||||
bfd_signed_vma *local_got_refcounts;
|
bfd_signed_vma *local_got_refcounts;
|
||||||
const Elf_Internal_Rela *rel, *relend;
|
const Elf_Internal_Rela *rel, *relend;
|
||||||
|
|
||||||
|
if ((sec->flags & SEC_ALLOC) == 0)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
elf_section_data (sec)->local_dynrel = NULL;
|
elf_section_data (sec)->local_dynrel = NULL;
|
||||||
|
|
||||||
htab = ppc_elf_hash_table (info);
|
htab = ppc_elf_hash_table (info);
|
||||||
|
@ -4185,8 +4195,11 @@ ppc_elf_relax_section (bfd *abfd,
|
||||||
|
|
||||||
*again = FALSE;
|
*again = FALSE;
|
||||||
|
|
||||||
/* Nothing to do if there are no relocations. */
|
/* Nothing to do if there are no relocations, and no need to do
|
||||||
if ((isec->flags & SEC_RELOC) == 0 || isec->reloc_count == 0)
|
anything with non-alloc sections. */
|
||||||
|
if ((isec->flags & SEC_ALLOC) == 0
|
||||||
|
|| (isec->flags & SEC_RELOC) == 0
|
||||||
|
|| isec->reloc_count == 0)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
trampoff = (isec->size + 3) & (bfd_vma) -4;
|
trampoff = (isec->size + 3) & (bfd_vma) -4;
|
||||||
|
@ -5354,6 +5367,10 @@ ppc_elf_relocate_section (bfd *output_bfd,
|
||||||
break;
|
break;
|
||||||
/* Fall thru. */
|
/* Fall thru. */
|
||||||
|
|
||||||
|
if ((input_section->flags & SEC_ALLOC) == 0)
|
||||||
|
break;
|
||||||
|
/* Fall thru. */
|
||||||
|
|
||||||
if ((info->shared
|
if ((info->shared
|
||||||
&& (h == NULL
|
&& (h == NULL
|
||||||
|| ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
|| ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
||||||
|
@ -5362,7 +5379,6 @@ ppc_elf_relocate_section (bfd *output_bfd,
|
||||||
|| !SYMBOL_CALLS_LOCAL (info, h)))
|
|| !SYMBOL_CALLS_LOCAL (info, h)))
|
||||||
|| (ELIMINATE_COPY_RELOCS
|
|| (ELIMINATE_COPY_RELOCS
|
||||||
&& !info->shared
|
&& !info->shared
|
||||||
&& (input_section->flags & SEC_ALLOC) != 0
|
|
||||||
&& h != NULL
|
&& h != NULL
|
||||||
&& h->dynindx != -1
|
&& h->dynindx != -1
|
||||||
&& !h->non_got_ref
|
&& !h->non_got_ref
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
2005-04-19 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
|
* ld-powerpc/reloc.d: Update to suit removal of non-alloc relocs.
|
||||||
|
|
||||||
2005-04-15 Alan Modra <amodra@bigpond.net.au>
|
2005-04-15 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
* ld-d10v/default_layout.d: Update for unused section removal.
|
* ld-d10v/default_layout.d: Update for unused section removal.
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Test that orphan reloc sections are placed before .rela.plt even when
|
# Test that orphan reloc sections are placed before .rela.plt even when
|
||||||
# .rela.plt is the only reloc section. Also tests that orphan non-alloc
|
# .rela.plt is the only reloc section.
|
||||||
# reloc sections go after alloc sections.
|
|
||||||
|
|
||||||
#source: reloc.s
|
#source: reloc.s
|
||||||
#ld: -shared -z nocombreloc
|
#ld: -shared -z nocombreloc
|
||||||
|
@ -11,6 +10,4 @@
|
||||||
.*\.relaplatypus.*
|
.*\.relaplatypus.*
|
||||||
#...
|
#...
|
||||||
.*\.rela\.plt.*
|
.*\.rela\.plt.*
|
||||||
#...
|
|
||||||
.*\.relaechidna.*
|
|
||||||
#pass
|
#pass
|
||||||
|
|
Loading…
Reference in New Issue