mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-22 04:50:07 +00:00
riscv: Drop reliance on _GLOBAL_OFFSET_TABLE_[0]
&__ehdr_start is a better way to get the load address. This is similar to commitsb37b75d269
(x86-64) and43d06ed218
(aarch64). Reviewed-by: Palmer Dabbelt <palmerdabbelt@google.com>
This commit is contained in:
parent
710ba420fd
commit
34b4624b04
@ -76,27 +76,26 @@ elf_machine_matches_host (const ElfW(Ehdr) *ehdr)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Return the run-time load address of the shared object. */
|
||||
static inline ElfW(Addr)
|
||||
elf_machine_load_address (void)
|
||||
{
|
||||
extern const ElfW(Ehdr) __ehdr_start attribute_hidden;
|
||||
return (ElfW(Addr)) &__ehdr_start;
|
||||
}
|
||||
|
||||
/* Return the link-time address of _DYNAMIC. */
|
||||
static inline ElfW(Addr)
|
||||
elf_machine_dynamic (void)
|
||||
{
|
||||
extern ElfW(Addr) _GLOBAL_OFFSET_TABLE_ __attribute__ ((visibility ("hidden")));
|
||||
return _GLOBAL_OFFSET_TABLE_;
|
||||
extern ElfW(Dyn) _DYNAMIC[] attribute_hidden;
|
||||
return (ElfW(Addr)) _DYNAMIC - elf_machine_load_address ();
|
||||
}
|
||||
|
||||
#define STRINGXP(X) __STRING (X)
|
||||
#define STRINGXV(X) STRINGV_ (X)
|
||||
#define STRINGV_(...) # __VA_ARGS__
|
||||
|
||||
/* Return the run-time load address of the shared object. */
|
||||
static inline ElfW(Addr)
|
||||
elf_machine_load_address (void)
|
||||
{
|
||||
ElfW(Addr) load_addr;
|
||||
asm ("lla %0, _DYNAMIC" : "=r" (load_addr));
|
||||
return load_addr - elf_machine_dynamic ();
|
||||
}
|
||||
|
||||
/* Initial entry point code for the dynamic linker.
|
||||
The C function `_dl_start' is the real entry point;
|
||||
its return value is the user program's entry point. */
|
||||
|
Loading…
Reference in New Issue
Block a user