forked from OSchip/llvm-project
Fix retpoline PLT for x86-64 when used for >4GB address.
Previously, we wrote only the least significant 32 bits. llvm-svn: 333313
This commit is contained in:
parent
95d6ca52ac
commit
1fa3c728b9
|
|
@ -497,7 +497,7 @@ template <class ELFT> Retpoline<ELFT>::Retpoline() {
|
||||||
|
|
||||||
template <class ELFT>
|
template <class ELFT>
|
||||||
void Retpoline<ELFT>::writeGotPlt(uint8_t *Buf, const Symbol &S) const {
|
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 {
|
template <class ELFT> void Retpoline<ELFT>::writePltHeader(uint8_t *Buf) const {
|
||||||
|
|
|
||||||
|
|
@ -4,13 +4,21 @@
|
||||||
// RUN: ld.lld -o %t.so -shared %t1.o
|
// RUN: ld.lld -o %t.so -shared %t1.o
|
||||||
|
|
||||||
// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t2.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: ld.lld -o %t1.exe %t2.o %t.so -image-base=0xcafe00000000
|
||||||
// RUN: llvm-objdump -s -j .got.plt %t.exe | FileCheck %s
|
// RUN: llvm-objdump -s -j .got.plt %t1.exe | FileCheck %s
|
||||||
|
|
||||||
// CHECK: Contents of section .got.plt:
|
// CHECK: Contents of section .got.plt:
|
||||||
// CHECK-NEXT: cafe00002000 00300000 feca0000 00000000 00000000
|
// CHECK-NEXT: cafe00002000 00300000 feca0000 00000000 00000000
|
||||||
// CHECK-NEXT: cafe00002010 00000000 00000000 26100000 feca0000
|
// 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
|
.global _start
|
||||||
_start:
|
_start:
|
||||||
jmp bar@PLT
|
jmp bar@PLT
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue