summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/ELF/Target.cpp2
-rw-r--r--lld/test/ELF/Inputs/gotpcrelx.obin0 -> 896 bytes
-rw-r--r--lld/test/ELF/gotpcrelx.s17
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
new file mode 100644
index 00000000000..030065881e8
--- /dev/null
+++ b/lld/test/ELF/Inputs/gotpcrelx.o
Binary files differ
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: ]
OpenPOWER on IntegriCloud