[GLIBC][AARCH64]Rewrite elf_machine_load_address using _DYNAMIC symbol

Roland McGrath roland@hack.frob.com
Fri Nov 4 21:24:00 GMT 2016


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.)



More information about the Libc-alpha mailing list