summaryrefslogtreecommitdiffstats
path: root/libexec/rtld-elf/powerpc64
diff options
context:
space:
mode:
authornwhitehorn <nwhitehorn@FreeBSD.org>2010-09-12 17:04:51 +0000
committernwhitehorn <nwhitehorn@FreeBSD.org>2010-09-12 17:04:51 +0000
commit67010066267d8cb2dae3ad95759307d7637c70fb (patch)
treeb482662e841f2f28f586dc6a8b870326a55c3c57 /libexec/rtld-elf/powerpc64
parent599c1ac5992e739b3f945171e5410c2f0906139e (diff)
downloadFreeBSD-src-67010066267d8cb2dae3ad95759307d7637c70fb.zip
FreeBSD-src-67010066267d8cb2dae3ad95759307d7637c70fb.tar.gz
Check for undefined weak symbols during PLT binding on powerpc64, and do
not attempt to copy NULL function descriptors. This fixes LD_BIND_NOW on powerpc64 after r211706. Reviewed by: kib
Diffstat (limited to 'libexec/rtld-elf/powerpc64')
-rw-r--r--libexec/rtld-elf/powerpc64/reloc.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/libexec/rtld-elf/powerpc64/reloc.c b/libexec/rtld-elf/powerpc64/reloc.c
index b35be18..d2430e7 100644
--- a/libexec/rtld-elf/powerpc64/reloc.c
+++ b/libexec/rtld-elf/powerpc64/reloc.c
@@ -405,8 +405,13 @@ reloc_jmpslots(Obj_Entry *obj)
(void *)target, basename(defobj->path));
#endif
- reloc_jmpslot(where, target, defobj, obj,
- (const Elf_Rel *) rela);
+ if (def == &sym_zero) {
+ /* Zero undefined weak symbols */
+ bzero(where, sizeof(struct funcdesc));
+ } else {
+ reloc_jmpslot(where, target, defobj, obj,
+ (const Elf_Rel *) rela);
+ }
}
obj->jmpslots_done = true;
OpenPOWER on IntegriCloud