mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
arm: Update elf_machine_load_address for static PIE
When --enable-static-pie is used to configure glibc, we need to use _dl_relocate_static_pie to compute load address in static PIE. * sysdeps/arm/dl-machine.h (elf_machine_load_address): Use _dl_relocate_static_pie instead of _dl_start to compute load address in static PIE. Return 0 if _DYNAMIC is undefined for static executable.
This commit is contained in:
parent
54464e749d
commit
8172aad937
@ -1,3 +1,10 @@
|
||||
2017-09-29 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* sysdeps/arm/dl-machine.h (elf_machine_load_address): Use
|
||||
_dl_relocate_static_pie instead of _dl_start to compute load
|
||||
address in static PIE. Return 0 if _DYNAMIC is undefined for
|
||||
static executable.
|
||||
|
||||
2017-09-29 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* sysdeps/mips/dl-machine.h (elf_machine_dynamic): Return 0 if
|
||||
|
@ -53,10 +53,20 @@ elf_machine_dynamic (void)
|
||||
static inline Elf32_Addr __attribute__ ((unused))
|
||||
elf_machine_load_address (void)
|
||||
{
|
||||
Elf32_Addr pcrel_addr;
|
||||
#ifdef SHARED
|
||||
extern Elf32_Addr __dl_start (void *) asm ("_dl_start");
|
||||
Elf32_Addr got_addr = (Elf32_Addr) &__dl_start;
|
||||
Elf32_Addr pcrel_addr;
|
||||
asm ("adr %0, _dl_start" : "=r" (pcrel_addr));
|
||||
#else
|
||||
extern Elf32_Dyn _DYNAMIC[] __attribute__((weak, visibility ("hidden")));
|
||||
if (!_DYNAMIC)
|
||||
return 0;
|
||||
extern Elf32_Addr __dl_relocate_static_pie (void *)
|
||||
asm ("_dl_relocate_static_pie") attribute_hidden;
|
||||
Elf32_Addr got_addr = (Elf32_Addr) &__dl_relocate_static_pie;
|
||||
asm ("adr %0, _dl_relocate_static_pie" : "=r" (pcrel_addr));
|
||||
#endif
|
||||
#ifdef __thumb__
|
||||
/* Clear the low bit of the function address.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user