[lld] r333313 - Fix retpoline PLT for x86-64 when used for >4GB address.

Rui Ueyama via llvm-commits llvm-commits at lists.llvm.org
Fri May 25 14:14:45 PDT 2018


Author: ruiu
Date: Fri May 25 14:14:45 2018
New Revision: 333313

URL: http://llvm.org/viewvc/llvm-project?rev=333313&view=rev
Log:
Fix retpoline PLT for x86-64 when used for >4GB address.

Previously, we wrote only the least significant 32 bits.

Modified:
    lld/trunk/ELF/Arch/X86_64.cpp
    lld/trunk/test/ELF/x86-64-plt-high-addr.s

Modified: lld/trunk/ELF/Arch/X86_64.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Arch/X86_64.cpp?rev=333313&r1=333312&r2=333313&view=diff
==============================================================================
--- lld/trunk/ELF/Arch/X86_64.cpp (original)
+++ lld/trunk/ELF/Arch/X86_64.cpp Fri May 25 14:14:45 2018
@@ -497,7 +497,7 @@ template <class ELFT> Retpoline<ELFT>::R
 
 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 {

Modified: lld/trunk/test/ELF/x86-64-plt-high-addr.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/x86-64-plt-high-addr.s?rev=333313&r1=333312&r2=333313&view=diff
==============================================================================
--- lld/trunk/test/ELF/x86-64-plt-high-addr.s (original)
+++ lld/trunk/test/ELF/x86-64-plt-high-addr.s Fri May 25 14:14:45 2018
@@ -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 at PLT




More information about the llvm-commits mailing list