about summary refs log tree commit diff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2012-05-10 19:24:54 -0700
committerH.J. Lu <hjl.tools@gmail.com>2012-05-10 19:24:54 -0700
commit0a10fb9eecc1f890cc247ae0dd4bdd4c20e7343e (patch)
treea88c9589cd7491e68943674e118a18cd8c9d6223
parentdf8a552f6f93f62c494177a49ee49d3bf40949b8 (diff)
downloadglibc-0a10fb9eecc1f890cc247ae0dd4bdd4c20e7343e.tar.gz
glibc-0a10fb9eecc1f890cc247ae0dd4bdd4c20e7343e.tar.xz
glibc-0a10fb9eecc1f890cc247ae0dd4bdd4c20e7343e.zip
Don't handle R_X86_64_RELATIVE64 in ld.so
-rw-r--r--ChangeLog5
-rw-r--r--sysdeps/x86_64/dl-machine.h2
2 files changed, 7 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 2f0880257c..b7a5055da3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 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>
+
 	* 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 e3bab5f22d..32814b14f7 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;