summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/ELF/Arch/X86_64.cpp2
-rw-r--r--lld/test/ELF/x86-64-plt-high-addr.s12
2 files changed, 11 insertions, 3 deletions
diff --git a/lld/ELF/Arch/X86_64.cpp b/lld/ELF/Arch/X86_64.cpp
index 605e2c19982..8fd28d3bb27 100644
--- a/lld/ELF/Arch/X86_64.cpp
+++ b/lld/ELF/Arch/X86_64.cpp
@@ -497,7 +497,7 @@ template <class ELFT> Retpoline<ELFT>::Retpoline() {
template <class ELFT>
void Retpoline<ELFT>::writeGotPlt(uint8_t *Buf, const Symbol &S) const {
- write32le(Buf, S.getPltVA() + 17);
+ write64le(Buf, S.getPltVA() + 17);
}
template <class ELFT> void Retpoline<ELFT>::writePltHeader(uint8_t *Buf) const {
diff --git a/lld/test/ELF/x86-64-plt-high-addr.s b/lld/test/ELF/x86-64-plt-high-addr.s
index 0626abd31ae..4acccb63f4a 100644
--- a/lld/test/ELF/x86-64-plt-high-addr.s
+++ b/lld/test/ELF/x86-64-plt-high-addr.s
@@ -4,13 +4,21 @@
// RUN: ld.lld -o %t.so -shared %t1.o
// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t2.o
-// RUN: ld.lld -o %t.exe %t2.o %t.so -image-base=0xcafe00000000
-// RUN: llvm-objdump -s -j .got.plt %t.exe | FileCheck %s
+// RUN: ld.lld -o %t1.exe %t2.o %t.so -image-base=0xcafe00000000
+// RUN: llvm-objdump -s -j .got.plt %t1.exe | FileCheck %s
// CHECK: Contents of section .got.plt:
// CHECK-NEXT: cafe00002000 00300000 feca0000 00000000 00000000
// CHECK-NEXT: cafe00002010 00000000 00000000 26100000 feca0000
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t2.o
+// RUN: ld.lld -o %t2.exe %t2.o %t.so -image-base=0xcafe00000000 -z retpolineplt
+// RUN: llvm-objdump -s -j .got.plt %t2.exe | FileCheck -check-prefix=RETPOLINE %s
+
+// RETPOLINE: Contents of section .got.plt:
+// RETPOLINE-NEXT: cafe00002000 00300000 feca0000 00000000 00000000
+// RETPOLINE-NEXT: cafe00002010 00000000 00000000 51100000 feca0000
+
.global _start
_start:
jmp bar@PLT
OpenPOWER on IntegriCloud