From 0a10fb9eecc1f890cc247ae0dd4bdd4c20e7343e Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 10 May 2012 19:24:54 -0700 Subject: [PATCH] Don't handle R_X86_64_RELATIVE64 in ld.so --- ChangeLog | 5 +++++ sysdeps/x86_64/dl-machine.h | 2 ++ 2 files changed, 7 insertions(+) diff --git a/ChangeLog b/ChangeLog index 2f08802..b7a5055 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2012-05-10 H.J. Lu + * 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 + * elf/elf.h (R_X86_64_RELATIVE64): New. (R_X86_64_NUM): Updated. * sysdeps/x86_64/dl-machine.h (elf_machine_rela): Handle diff --git a/sysdeps/x86_64/dl-machine.h b/sysdeps/x86_64/dl-machine.h index e3bab5f..32814b1 100644 --- a/sysdeps/x86_64/dl-machine.h +++ b/sysdeps/x86_64/dl-machine.h @@ -487,11 +487,13 @@ elf_machine_rela_relative (ElfW(Addr) l_addr, const ElfW(Rela) *reloc, void *const 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 relocation updates the whole 64-bit entry. */ 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; else +#endif { assert (ELFW(R_TYPE) (reloc->r_info) == R_X86_64_RELATIVE); *reloc_addr = l_addr + reloc->r_addend; -- 2.7.4