From: Rafael Espindola Date: Mon, 25 Apr 2016 14:05:44 +0000 (+0000) Subject: Add support for R_X86_64_PC64. X-Git-Tag: llvmorg-3.9.0-rc1~8061 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=926bff8c3e3f3fd12395968423380b84caf087f1;p=platform%2Fupstream%2Fllvm.git Add support for R_X86_64_PC64. llvm-svn: 267409 --- diff --git a/lld/ELF/Target.cpp b/lld/ELF/Target.cpp index ceb3ef5..31d72bb 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 0000000..e185094 --- /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 - .