diff options
| author | Ed Maste <emaste@FreeBSD.org> | 2017-01-16 14:49:29 +0000 |
|---|---|---|
| committer | Ed Maste <emaste@FreeBSD.org> | 2017-01-16 14:49:29 +0000 |
| commit | ebf89346522a0970c197d49ab5a89b5d09cd4ef1 (patch) | |
| tree | 962c78fd2195d8864e7dec0ef1964aacef154b53 /libexec | |
| parent | 7d03ff1fe9cbc4b5a3fcc5423bfa4cc11389b78b (diff) | |
Notes
Diffstat (limited to 'libexec')
| -rw-r--r-- | libexec/rtld-elf/amd64/rtld_machdep.h | 4 | ||||
| -rw-r--r-- | libexec/rtld-elf/amd64/rtld_start.S | 12 |
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 |
