Index: rtld.c =================================================================== RCS file: /vol/ncvs/src/libexec/rtld-elf/rtld.c,v retrieving revision 1.96 diff -u -r1.96 rtld.c --- rtld.c 28 May 2004 00:05:28 -0000 1.96 +++ rtld.c 17 Jun 2004 21:46:07 -0000 @@ -162,6 +162,9 @@ extern Elf_Dyn _DYNAMIC; #pragma weak _DYNAMIC +#ifndef RTLD_IS_DYNAMIC +#define RTLD_IS_DYNAMIC() (&_DYNAMIC != NULL) +#endif /* * These are the functions the dynamic linker exports to application @@ -1008,7 +1011,7 @@ #ifdef PIC objtmp.relocbase = mapbase; #endif - if (&_DYNAMIC != 0) { + if (RTLD_IS_DYNAMIC()) { objtmp.dynamic = rtld_dynamic(&objtmp); digest_dynamic(&objtmp, 1); assert(objtmp.needed == NULL); Index: sparc64/rtld_machdep.h =================================================================== RCS file: /vol/ncvs/src/libexec/rtld-elf/sparc64/rtld_machdep.h,v retrieving revision 1.5 diff -u -r1.5 rtld_machdep.h --- sparc64/rtld_machdep.h 4 Jul 2003 00:05:15 -0000 1.5 +++ sparc64/rtld_machdep.h 17 Jun 2004 21:34:59 -0000 @@ -37,7 +37,9 @@ struct Struct_Obj_Entry; /* Return the address of the .dynamic section in the dynamic linker. */ -Elf_Dyn *rtld_dynamic(const struct Struct_Obj_Entry *); +Elf_Dyn *rtld_dynamic_addr(); +#define rtld_dynamic(obj) rtld_dynamic_addr() +#define RTLD_IS_DYNAMIC() (rtld_dynamic_addr() != NULL) Elf_Addr reloc_jmpslot(Elf_Addr *, Elf_Addr, const struct Struct_Obj_Entry *, Index: sparc64/rtld_start.S =================================================================== RCS file: /vol/ncvs/src/libexec/rtld-elf/sparc64/rtld_start.S,v retrieving revision 1.5 diff -u -r1.5 rtld_start.S --- sparc64/rtld_start.S 4 Jul 2003 00:05:15 -0000 1.5 +++ sparc64/rtld_start.S 17 Jun 2004 21:20:14 -0000 @@ -71,8 +71,9 @@ * Find the address of _DYNAMIC by disassembling a call instruction to it. * Binutils may not fill in the GOT as expected on other architectures. */ +.weak _DYNAMIC -ENTRY(rtld_dynamic) +ENTRY(rtld_dynamic_addr) save %sp, -CCFSZ, %sp call 1f nop @@ -82,7 +83,7 @@ sra %o0, 0, %o0 ret restore %o0, %o7, %o0 -END(rtld_dynamic) +END(rtld_dynamic_addr) /* * We have two separate entry points to the runtime linker.