18331f75eSAmir Ayupov# Check that llvm-bolt retpoline all indirect branches and the resulting binary 28331f75eSAmir Ayupov# correctly runs. 38331f75eSAmir Ayupov 48331f75eSAmir AyupovREQUIRES: x86_64-linux 58331f75eSAmir Ayupov 68331f75eSAmir AyupovRUN: %clangxx %S/Inputs/retpoline_synthetic.cpp -fno-jump-tables -Wl,-q,-znow \ 78331f75eSAmir AyupovRUN: -O2 -o %t.exe 8d648aa1bSMaksim PanchenkoRUN: llvm-bolt %t.exe -o %t --insert-retpolines --trap-old-code 98331f75eSAmir Ayupov 10e9ee2ca1SAmir Ayupov# Check indirect calls in the original binary 11e9ee2ca1SAmir AyupovRUN: llvm-objdump -d %t.exe | FileCheck %s -check-prefix=CHECK-CALL-ORIG 12e9ee2ca1SAmir AyupovCHECK-CALL-ORIG: callq * 13e9ee2ca1SAmir Ayupov# No indirect jumps 14e9ee2ca1SAmir AyupovRUN: llvm-objdump -d -j ".text" %t | FileCheck %s -check-prefix=CHECK-JUMP-ORIG 15e9ee2ca1SAmir AyupovCHECK-JUMP-ORIG-NOT: jmpq * 16e9ee2ca1SAmir Ayupov 17e9ee2ca1SAmir Ayupov# Check that there are no indirect calls or jumps in the resulting binary 18e9ee2ca1SAmir AyupovRUN: llvm-objdump -d %t | FileCheck %s -check-prefix=CHECK-CALL 19e9ee2ca1SAmir AyupovCHECK-CALL-NOT: callq * 20e9ee2ca1SAmir AyupovRUN: llvm-objdump -d -j ".text" %t | FileCheck %s -check-prefix=CHECK-JUMP 21e9ee2ca1SAmir AyupovCHECK-JUMP-NOT: jmpq * 22e9ee2ca1SAmir Ayupov 23*19941b04SAmir Ayupov# Check generated retpoline stub names 24*19941b04SAmir AyupovRUN: llvm-strings %t | FileCheck %s -check-prefix=CHECK-STRINGS 25*19941b04SAmir AyupovCHECK-STRINGS-DAG: __retpoline_%rax_ 26*19941b04SAmir AyupovCHECK-STRINGS-DAG: __retpoline_mem_%rip+DATAat0x[[#]] 27*19941b04SAmir AyupovCHECK-STRINGS-DAG: __retpoline_mem_%rax+0 28*19941b04SAmir Ayupov 29e9ee2ca1SAmir AyupovRUN: %t 1000 3 | FileCheck %s 30e9ee2ca1SAmir AyupovCHECK: 30000000 31