aboutsummaryrefslogtreecommitdiff
path: root/libexec/rtld-elf
diff options
context:
space:
mode:
authorThomas Moestl <tmm@FreeBSD.org>2004-06-18 02:01:37 +0000
committerThomas Moestl <tmm@FreeBSD.org>2004-06-18 02:01:37 +0000
commitd05bb9a2a6b462be9633f6173c1c3fcbf3081a38 (patch)
tree1c3fadf8df4209377c2fc2f655828039760b581b /libexec/rtld-elf
parent7ca59a8f46233cfb5ee12e6032800a81d0754f9d (diff)
Notes
Diffstat (limited to 'libexec/rtld-elf')
-rw-r--r--libexec/rtld-elf/rtld.c5
-rw-r--r--libexec/rtld-elf/sparc64/rtld_machdep.h4
-rw-r--r--libexec/rtld-elf/sparc64/rtld_start.S5
3 files changed, 10 insertions, 4 deletions
diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c
index cd8385d1d74d..62ca650116a3 100644
--- a/libexec/rtld-elf/rtld.c
+++ b/libexec/rtld-elf/rtld.c
@@ -162,6 +162,9 @@ static Elf_Sym sym_zero; /* For resolving undefined weak refs. */
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 @@ init_rtld(caddr_t mapbase)
#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);
diff --git a/libexec/rtld-elf/sparc64/rtld_machdep.h b/libexec/rtld-elf/sparc64/rtld_machdep.h
index d92055c71381..27276eeb860f 100644
--- a/libexec/rtld-elf/sparc64/rtld_machdep.h
+++ b/libexec/rtld-elf/sparc64/rtld_machdep.h
@@ -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 *,
diff --git a/libexec/rtld-elf/sparc64/rtld_start.S b/libexec/rtld-elf/sparc64/rtld_start.S
index 146c6314fc63..58bdd1bbc944 100644
--- a/libexec/rtld-elf/sparc64/rtld_start.S
+++ b/libexec/rtld-elf/sparc64/rtld_start.S
@@ -71,8 +71,9 @@ END(.rtld_start)
* 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 @@ ENTRY(rtld_dynamic)
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.