summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2016-04-25 14:05:44 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2016-04-25 14:05:44 +0000
commit926bff8c3e3f3fd12395968423380b84caf087f1 (patch)
tree437f422afdcbe65b8636ac4aca399d1f70fa5e63
parentc3596284c3c1a13f56f0c2264dcbcc3658a65797 (diff)
downloadbcm5719-llvm-926bff8c3e3f3fd12395968423380b84caf087f1.tar.gz
bcm5719-llvm-926bff8c3e3f3fd12395968423380b84caf087f1.zip
Add support for R_X86_64_PC64.
llvm-svn: 267409
-rw-r--r--lld/ELF/Target.cpp2
-rw-r--r--lld/test/ELF/relocation-shared.s35
2 files changed, 37 insertions, 0 deletions
diff --git a/lld/ELF/Target.cpp b/lld/ELF/Target.cpp
index ceb3ef57a72..31d72bbc0e1 100644
--- a/lld/ELF/Target.cpp
+++ b/lld/ELF/Target.cpp
@@ -541,6 +541,7 @@ RelExpr X86_64TargetInfo::getRelExpr(uint32_t Type, const SymbolBody &S) const {
case R_X86_64_PLT32:
return R_PLT_PC;
case R_X86_64_PC32:
+ case R_X86_64_PC64:
return R_PC;
case R_X86_64_GOT32:
return R_GOT_FROM_END;
@@ -750,6 +751,7 @@ void X86_64TargetInfo::relocateOne(uint8_t *Loc, uint32_t Type,
case R_X86_64_64:
case R_X86_64_DTPOFF64:
case R_X86_64_SIZE64:
+ case R_X86_64_PC64:
write64le(Loc, Val);
break;
case R_X86_64_GOTPCREL:
diff --git a/lld/test/ELF/relocation-shared.s b/lld/test/ELF/relocation-shared.s
new file mode 100644
index 00000000000..e1850944c45
--- /dev/null
+++ b/lld/test/ELF/relocation-shared.s
@@ -0,0 +1,35 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+// RUN: ld.lld %t.o -shared -o %t.so
+// RUN: llvm-readobj -r -s -section-data %t.so | FileCheck %s
+
+// CHECK: Name: foo
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x1C8
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: 8
+// CHECK-NEXT: Link: 0
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 1
+// CHECK-NEXT: EntrySize: 0
+// CHECK-NEXT: SectionData (
+// CHECK-NEXT: 0000: 380E0000 00000000
+// 0x1000 - 0x1C8 = 0xE38
+// CHECK-NEXT: )
+
+// CHECK: Name: .text
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_EXECINSTR
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x1000
+
+// CHECK: Relocations [
+// CHECK-NEXT: ]
+
+bar:
+ .section foo,"a",@progbits
+ .quad bar - .
OpenPOWER on IntegriCloud