summaryrefslogtreecommitdiffstats
path: root/libexec/rtld-elf/rtld.c
diff options
context:
space:
mode:
authormarcel <marcel@FreeBSD.org>2002-04-27 05:32:51 +0000
committermarcel <marcel@FreeBSD.org>2002-04-27 05:32:51 +0000
commit501b6d42e17a542a70f152fa4d619d86d7e39709 (patch)
tree21865bc2302c3bdcb47e7ffbbd8f555822a06081 /libexec/rtld-elf/rtld.c
parent366bb5db9c60a9b4622d929aafa3affb3d390fc2 (diff)
downloadFreeBSD-src-501b6d42e17a542a70f152fa4d619d86d7e39709.zip
FreeBSD-src-501b6d42e17a542a70f152fa4d619d86d7e39709.tar.gz
Fix handling of weak references to undefined symbols on ia64:
o Set st_shndx for sym_zero to SHN_UNDEF instead of SHN_ABS. This gives us something to reliably test against. o For weak references to undefined sysmbols (as indicated by having st_shndx equals SHN_UNDEF) in the context of OPDs, the address of the OPD is to be zero, not the address of the function it contains. o For weak references to undefined symbols in all other cases (only DIR64LSB at this time), the actual relocated value is to be zero, not the value prior to relocating. Roughly speaking, weak references to undefined symbols are no-ops. Tested on: i386, ia64
Diffstat (limited to 'libexec/rtld-elf/rtld.c')
-rw-r--r--libexec/rtld-elf/rtld.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c
index 2ddab86..8f3f4d4 100644
--- a/libexec/rtld-elf/rtld.c
+++ b/libexec/rtld-elf/rtld.c
@@ -357,7 +357,7 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_proc, Obj_Entry **objp)
/* Initialize a fake symbol for resolving undefined weak references. */
sym_zero.st_info = ELF_ST_INFO(STB_GLOBAL, STT_NOTYPE);
- sym_zero.st_shndx = SHN_ABS;
+ sym_zero.st_shndx = SHN_UNDEF;
dbg("loading LD_PRELOAD libraries");
if (load_preload_objects() == -1)
OpenPOWER on IntegriCloud