diff options
author | nwhitehorn <nwhitehorn@FreeBSD.org> | 2010-09-12 17:04:51 +0000 |
---|---|---|
committer | nwhitehorn <nwhitehorn@FreeBSD.org> | 2010-09-12 17:04:51 +0000 |
commit | 67010066267d8cb2dae3ad95759307d7637c70fb (patch) | |
tree | b482662e841f2f28f586dc6a8b870326a55c3c57 /libexec/rtld-elf/powerpc64/reloc.c | |
parent | 599c1ac5992e739b3f945171e5410c2f0906139e (diff) | |
download | FreeBSD-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/reloc.c')
-rw-r--r-- | libexec/rtld-elf/powerpc64/reloc.c | 9 |
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; |