# Check that llvm-bolt retpoline all indirect branches and the resulting binary # correctly runs. REQUIRES: x86_64-linux RUN: %clangxx %S/Inputs/retpoline_synthetic.cpp -fno-jump-tables -Wl,-q,-znow \ RUN: -O2 -o %t.exe RUN: llvm-bolt %t.exe -o %t --insert-retpolines --trap-old-code # Check indirect calls in the original binary RUN: llvm-objdump -d %t.exe | FileCheck %s -check-prefix=CHECK-CALL-ORIG CHECK-CALL-ORIG: callq * # No indirect jumps RUN: llvm-objdump -d -j ".text" %t | FileCheck %s -check-prefix=CHECK-JUMP-ORIG CHECK-JUMP-ORIG-NOT: jmpq * # Check that there are no indirect calls or jumps in the resulting binary RUN: llvm-objdump -d %t | FileCheck %s -check-prefix=CHECK-CALL CHECK-CALL-NOT: callq * RUN: llvm-objdump -d -j ".text" %t | FileCheck %s -check-prefix=CHECK-JUMP CHECK-JUMP-NOT: jmpq * # Check generated retpoline stub names RUN: llvm-strings %t | FileCheck %s -check-prefix=CHECK-STRINGS CHECK-STRINGS-DAG: __retpoline_%rax_ CHECK-STRINGS-DAG: __retpoline_mem_%rip+DATAat0x[[#]] CHECK-STRINGS-DAG: __retpoline_mem_%rax+0 RUN: %t 1000 3 | FileCheck %s CHECK: 30000000