mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
x86_64: Simplify elf_machine_{load_address,dynamic}
and drop reliance on _GLOBAL_OFFSET_TABLE_[0] being the link-time address of _DYNAMIC. &__ehdr_start is a better way to get the load address. Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
This commit is contained in:
parent
33c50ef428
commit
b37b75d269
@ -35,27 +35,20 @@ elf_machine_matches_host (const ElfW(Ehdr) *ehdr)
|
||||
}
|
||||
|
||||
|
||||
/* Return the link-time address of _DYNAMIC. Conveniently, this is the
|
||||
first element of the GOT. This must be inlined in a function which
|
||||
uses global data. */
|
||||
static inline ElfW(Addr) __attribute__ ((unused))
|
||||
elf_machine_dynamic (void)
|
||||
{
|
||||
/* This produces an IP-relative reloc which is resolved at link time. */
|
||||
extern const ElfW(Addr) _GLOBAL_OFFSET_TABLE_[] attribute_hidden;
|
||||
return _GLOBAL_OFFSET_TABLE_[0];
|
||||
}
|
||||
|
||||
|
||||
/* Return the run-time load address of the shared object. */
|
||||
static inline ElfW(Addr) __attribute__ ((unused))
|
||||
elf_machine_load_address (void)
|
||||
{
|
||||
/* Compute the difference between the runtime address of _DYNAMIC as seen
|
||||
by an IP-relative reference, and the link-time address found in the
|
||||
special unrelocated first GOT entry. */
|
||||
extern const ElfW(Ehdr) __ehdr_start attribute_hidden;
|
||||
return (ElfW(Addr)) &__ehdr_start;
|
||||
}
|
||||
|
||||
/* Return the link-time address of _DYNAMIC. */
|
||||
static inline ElfW(Addr) __attribute__ ((unused))
|
||||
elf_machine_dynamic (void)
|
||||
{
|
||||
extern ElfW(Dyn) _DYNAMIC[] attribute_hidden;
|
||||
return (ElfW(Addr)) &_DYNAMIC - elf_machine_dynamic ();
|
||||
return (ElfW(Addr)) _DYNAMIC - elf_machine_load_address ();
|
||||
}
|
||||
|
||||
/* Set up the loaded object described by L so its unrelocated PLT
|
||||
|
Loading…
Reference in New Issue
Block a user