aboutsummaryrefslogtreecommitdiff
path: root/libexec
diff options
context:
space:
mode:
authorEd Maste <emaste@FreeBSD.org>2017-01-16 14:49:29 +0000
committerEd Maste <emaste@FreeBSD.org>2017-01-16 14:49:29 +0000
commitebf89346522a0970c197d49ab5a89b5d09cd4ef1 (patch)
tree962c78fd2195d8864e7dec0ef1964aacef154b53 /libexec
parent7d03ff1fe9cbc4b5a3fcc5423bfa4cc11389b78b (diff)
Notes
Diffstat (limited to 'libexec')
-rw-r--r--libexec/rtld-elf/amd64/rtld_machdep.h4
-rw-r--r--libexec/rtld-elf/amd64/rtld_start.S12
2 files changed, 14 insertions, 2 deletions
diff --git a/libexec/rtld-elf/amd64/rtld_machdep.h b/libexec/rtld-elf/amd64/rtld_machdep.h
index df6fc3391321f..0a6354f3ded69 100644
--- a/libexec/rtld-elf/amd64/rtld_machdep.h
+++ b/libexec/rtld-elf/amd64/rtld_machdep.h
@@ -35,8 +35,8 @@
struct Struct_Obj_Entry;
/* Return the address of the .dynamic section in the dynamic linker. */
-#define rtld_dynamic(obj) \
- ((const Elf_Dyn *)((obj)->relocbase + (Elf_Addr)&_DYNAMIC))
+Elf_Dyn *rtld_dynamic_addr(void);
+#define rtld_dynamic(obj) rtld_dynamic_addr()
/* Fixup the jump slot at "where" to transfer control to "target". */
static inline Elf_Addr
diff --git a/libexec/rtld-elf/amd64/rtld_start.S b/libexec/rtld-elf/amd64/rtld_start.S
index 387d26cb144c0..72240a92c0638 100644
--- a/libexec/rtld-elf/amd64/rtld_start.S
+++ b/libexec/rtld-elf/amd64/rtld_start.S
@@ -156,4 +156,16 @@ _rtld_bind_start:
.cfi_endproc
.size _rtld_bind_start, . - _rtld_bind_start
+ .align 4
+ .globl rtld_dynamic_addr
+ .type rtld_dynamic_addr,@function
+rtld_dynamic_addr:
+ .cfi_startproc
+ .weak _DYNAMIC
+ .hidden _DYNAMIC
+ lea _DYNAMIC(%rip),%rax
+ ret
+ .cfi_endproc
+ .size rtld_dynamic_addr, . - rtld_dynamic_addr
+
.section .note.GNU-stack,"",%progbits