This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [GLIBC][AARCH64]Rewrite elf_machine_load_address using _DYNAMIC symbol
- From: Roland McGrath <roland at hack dot frob dot com>
- To: Renlin Li <renlin dot li at foss dot arm dot com>
- Cc: libc-alpha at sourceware dot org, Marcus Shawcroft <Marcus dot Shawcroft at arm dot com>, Richard Earnshaw <Richard dot Earnshaw at arm dot com>
- Date: Fri, 4 Nov 2016 14:24:40 -0700 (PDT)
- Subject: Re: [GLIBC][AARCH64]Rewrite elf_machine_load_address using _DYNAMIC symbol
- Authentication-results: sourceware.org; auth=none
- References: <581C57FF.2090901@foss.arm.com>
On many or perhaps all machines, elf_machine_load_address could now be
implemented purely in C by using a link-time trick.
In C, just:
static inline ElfW(Addr) __attribute__ ((unused))
elf_machine_load_address (void)
{
extern const char _BASE[] __attribute__ ((visibility ("hidden")));
return (ElfW(Addr)) _BASE;
}
Then add a trivial input linker script to the ld.so link:
PROVIDE_HIDDEN(_BASE = 0);
I know this works for x86_64 and aarch64, and does not require a load.
(On x86_64 it's a single lea; on aarch64 it's a single adr+add pair.)