diff options
-rw-r--r-- | lld/ELF/Target.cpp | 2 | ||||
-rw-r--r-- | lld/test/ELF/Inputs/gotpcrelx.o | bin | 0 -> 896 bytes | |||
-rw-r--r-- | lld/test/ELF/gotpcrelx.s | 17 |
3 files changed, 19 insertions, 0 deletions
diff --git a/lld/ELF/Target.cpp b/lld/ELF/Target.cpp index 5d1332ebf73..0e07fae502b 100644 --- a/lld/ELF/Target.cpp +++ b/lld/ELF/Target.cpp @@ -651,6 +651,8 @@ RelExpr X86_64TargetInfo::getRelExpr(uint32_t Type, const SymbolBody &S) const { case R_X86_64_GOT32: return R_GOT_FROM_END; case R_X86_64_GOTPCREL: + case R_X86_64_GOTPCRELX: + case R_X86_64_REX_GOTPCRELX: case R_X86_64_GOTTPOFF: return R_GOT_PC; } diff --git a/lld/test/ELF/Inputs/gotpcrelx.o b/lld/test/ELF/Inputs/gotpcrelx.o Binary files differnew file mode 100644 index 00000000000..030065881e8 --- /dev/null +++ b/lld/test/ELF/Inputs/gotpcrelx.o diff --git a/lld/test/ELF/gotpcrelx.s b/lld/test/ELF/gotpcrelx.s new file mode 100644 index 00000000000..c85d484bb05 --- /dev/null +++ b/lld/test/ELF/gotpcrelx.s @@ -0,0 +1,17 @@ +// RUN: ld.lld %p/Inputs/gotpcrelx.o -o %t.so -shared +// RUN: llvm-readobj -s -r %t.so | FileCheck %s + +// CHECK: Name: .got +// CHECK-NEXT: Type: SHT_PROGBITS +// CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_ALLOC +// CHECK-NEXT: SHF_WRITE +// CHECK-NEXT: ] +// CHECK-NEXT: Address: 0x2090 + +// CHECK: Relocations [ +// CHECK-NEXT: Section ({{.*}}) .rela.dyn { +// CHECK-NEXT: 0x2090 R_X86_64_GLOB_DAT foo 0x0 +// CHECK-NEXT: 0x2098 R_X86_64_GLOB_DAT bar 0x0 +// CHECK-NEXT: } +// CHECK-NEXT: ] |