mirror of git://sourceware.org/git/glibc.git
Don't handle R_X86_64_RELATIVE64 in ld.so
This commit is contained in:
parent
df8a552f6f
commit
0a10fb9eec
|
@ -1,3 +1,8 @@
|
||||||
|
2012-05-10 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
* sysdeps/x86_64/dl-machine.h (elf_machine_rela_relative): Handle
|
||||||
|
R_X86_64_RELATIVE64 only if RTLD_BOOTSTRAP isn't defined.
|
||||||
|
|
||||||
2012-05-10 H.J. Lu <hongjiu.lu@intel.com>
|
2012-05-10 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* elf/elf.h (R_X86_64_RELATIVE64): New.
|
* elf/elf.h (R_X86_64_RELATIVE64): New.
|
||||||
|
|
|
@ -487,11 +487,13 @@ elf_machine_rela_relative (ElfW(Addr) l_addr, const ElfW(Rela) *reloc,
|
||||||
void *const reloc_addr_arg)
|
void *const reloc_addr_arg)
|
||||||
{
|
{
|
||||||
ElfW(Addr) *const reloc_addr = reloc_addr_arg;
|
ElfW(Addr) *const reloc_addr = reloc_addr_arg;
|
||||||
|
#if !defined RTLD_BOOTSTRAP
|
||||||
/* l_addr + r_addend may be > 0xffffffff and R_X86_64_RELATIVE64
|
/* l_addr + r_addend may be > 0xffffffff and R_X86_64_RELATIVE64
|
||||||
relocation updates the whole 64-bit entry. */
|
relocation updates the whole 64-bit entry. */
|
||||||
if (__builtin_expect (ELFW(R_TYPE) (reloc->r_info) == R_X86_64_RELATIVE64, 0))
|
if (__builtin_expect (ELFW(R_TYPE) (reloc->r_info) == R_X86_64_RELATIVE64, 0))
|
||||||
*(Elf64_Addr *) reloc_addr = (Elf64_Addr) l_addr + reloc->r_addend;
|
*(Elf64_Addr *) reloc_addr = (Elf64_Addr) l_addr + reloc->r_addend;
|
||||||
else
|
else
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
assert (ELFW(R_TYPE) (reloc->r_info) == R_X86_64_RELATIVE);
|
assert (ELFW(R_TYPE) (reloc->r_info) == R_X86_64_RELATIVE);
|
||||||
*reloc_addr = l_addr + reloc->r_addend;
|
*reloc_addr = l_addr + reloc->r_addend;
|
||||||
|
|
Loading…
Reference in New Issue