[commit: ghc] ghc-8.0: Add relocation type R_X86_64_REX_GOTPCRELX (efc7ef6)

git at git.haskell.org git at git.haskell.org
Wed Aug 24 22:18:30 UTC 2016


Repository : ssh://git@git.haskell.org/ghc

On branch  : ghc-8.0
Link       : http://ghc.haskell.org/trac/ghc/changeset/efc7ef67d3fe2064dc8f40e73d88026d57bd836f/ghc

>---------------------------------------------------------------

commit efc7ef67d3fe2064dc8f40e73d88026d57bd836f
Author: Tamar Christina <tamar at zhox.com>
Date:   Sun Jun 5 09:59:05 2016 +0200

    Add relocation type R_X86_64_REX_GOTPCRELX
    
    Summary:
    Adding support for the `R_X86_64_REX_GOTPCRELX` relocation type.
    This relocation is treated by the linker the same as the `R_X86_64_GOTPCRELX` type
    `G + GOT + A - P` to generate relative offsets to the GOT.
    The `REX` prefix has no influence in this stage.
    
    This is based on https://github.com/hjl-tools/x86-psABI/wiki/x86-64-psABI-r252.pdf
    
    Test Plan: ./validate
    
    Reviewers: erikd, austin, bgamari, simonmar
    
    Reviewed By: erikd
    
    Subscribers: thomie, #ghc_windows_task_force
    
    Differential Revision: https://phabricator.haskell.org/D2303
    
    GHC Trac Issues: #12147
    
    (cherry picked from commit 0d963caf40da4391028a3beb95b5082c87985e7d)


>---------------------------------------------------------------

efc7ef67d3fe2064dc8f40e73d88026d57bd836f
 rts/Linker.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/rts/Linker.c b/rts/Linker.c
index d670f1d..7e80664 100644
--- a/rts/Linker.c
+++ b/rts/Linker.c
@@ -5968,7 +5968,13 @@ do_Elf_Rela_relocations ( ObjectCode* oc, char* ehdrC,
           *(Elf64_Sword *)P = (Elf64_Sword)value;
 #endif
           break;
-
+/* These two relocations were introduced in glibc 2.23 and binutils 2.26.
+    But in order to use them the system which compiles the bindist for GHC needs
+    to have glibc >= 2.23. So only use them if they're defined. */
+#if defined(R_X86_64_REX_GOTPCRELX) && defined(R_X86_64_GOTPCRELX)
+      case R_X86_64_REX_GOTPCRELX:
+      case R_X86_64_GOTPCRELX:
+#endif
       case R_X86_64_GOTPCREL:
       {
           StgInt64 gotAddress = (StgInt64) &makeSymbolExtra(oc, ELF_R_SYM(info), S)->addr;



More information about the ghc-commits mailing list