diff options
author | Tamar Christina <tamar@zhox.com> | 2016-06-05 09:59:05 +0200 |
---|---|---|
committer | Tamar Christina <tamar@zhox.com> | 2016-06-05 10:50:13 +0200 |
commit | 0d963caf40da4391028a3beb95b5082c87985e7d (patch) | |
tree | 16553654cfd6463b3f72aae5dcc136e6ae38b505 | |
parent | 59651173a52e2400f965e38acd0beb9d0cc14cfe (diff) | |
download | haskell-0d963caf40da4391028a3beb95b5082c87985e7d.tar.gz |
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
-rw-r--r-- | rts/Linker.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/rts/Linker.c b/rts/Linker.c index 5a6a8c2d4c..a1f72e5cca 100644 --- a/rts/Linker.c +++ b/rts/Linker.c @@ -5681,7 +5681,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; |