summaryrefslogtreecommitdiff
path: root/bfd/elf32-ppc.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@bigpond.net.au>2006-02-17 04:49:34 +0000
committerAlan Modra <amodra@bigpond.net.au>2006-02-17 04:49:34 +0000
commitc596bd133832341d8c03d0ce0f5b5e1198d164fa (patch)
treeaa0e172683000eb722caf0641ec05e6b08d0d2c4 /bfd/elf32-ppc.c
parente664acc094143ab72f26f6d93af73ba9a9aa35bd (diff)
downloadgdb-c596bd133832341d8c03d0ce0f5b5e1198d164fa.tar.gz
PR ld/2218
* elf64-ppc.c (allocate_dynrelocs): Ensure undef weak sym is dynamic. (ppc64_elf_relocate_section): Check output reloc section size. * elf32-ppc.c (allocate_dynrelocs): Simplify undef weak test.
Diffstat (limited to 'bfd/elf32-ppc.c')
-rw-r--r--bfd/elf32-ppc.c25
1 files changed, 12 insertions, 13 deletions
diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c
index e6de049abe0..caa5ed44d9c 100644
--- a/bfd/elf32-ppc.c
+++ b/bfd/elf32-ppc.c
@@ -4546,20 +4546,19 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
/* Also discard relocs on undefined weak syms with non-default
visibility. */
- if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
- && h->root.type == bfd_link_hash_undefweak)
- eh->dyn_relocs = NULL;
-
- /* Make sure undefined weak symbols are output as a dynamic symbol
- in PIEs. */
- if (info->pie
- && eh->dyn_relocs != NULL
- && h->dynindx == -1
- && h->root.type == bfd_link_hash_undefweak
- && !h->forced_local)
+ if (h->root.type == bfd_link_hash_undefweak)
{
- if (! bfd_elf_link_record_dynamic_symbol (info, h))
- return FALSE;
+ if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
+ eh->dyn_relocs = NULL;
+
+ /* Make sure undefined weak symbols are output as a dynamic
+ symbol in PIEs. */
+ else if (h->dynindx == -1
+ && !h->forced_local)
+ {
+ if (! bfd_elf_link_record_dynamic_symbol (info, h))
+ return FALSE;
+ }
}
}
else if (ELIMINATE_COPY_RELOCS)