/* Checks that BOLT correctly processes a user-provided function list file, * reorder functions according to this list, update hot_start and hot_end * symbols and insert a function to perform hot text mapping during program * startup. */ #include int foo(int x) { return x + 1; } int fib(int x) { if (x < 2) return x; return fib(x - 1) + fib(x - 2); } int bar(int x) { return x - 1; } int main(int argc, char **argv) { printf("fib(%d) = %d\n", argc, fib(argc)); return 0; } /* REQUIRES: system-linux,bolt-runtime RUN: %clang %cflags -no-pie %s -o %t.exe -Wl,-q RUN: llvm-bolt %t.exe --relocs=1 --lite --reorder-functions=user \ RUN: --hugify --function-order=%p/Inputs/user_func_order.txt -o %t RUN: llvm-bolt %t.exe --relocs=1 --lite --reorder-functions=user \ RUN: --function-order=%p/Inputs/user_func_order.txt -o %t.nohugify RUN: llvm-nm --numeric-sort --print-armap %t | \ RUN: FileCheck %s -check-prefix=CHECK-NM RUN: %t 1 2 3 | FileCheck %s -check-prefix=CHECK-OUTPUT RUN: llvm-nm --numeric-sort --print-armap %t.nohugify | \ RUN: FileCheck %s -check-prefix=CHECK-NM-NOHUGIFY RUN: %t.nohugify 1 2 3 | FileCheck %s -check-prefix=CHECK-OUTPUT-NOHUGIFY CHECK-NM: W __hot_start CHECK-NM: T main CHECK-NM-NEXT: T fib CHECK-NM-NEXT: W __hot_end CHECK-NM: t __bolt_hugify_start_program CHECK-NM-NEXT: W __bolt_runtime_start CHECK-NM-NOHUGIFY: W __hot_start CHECK-NM-NOHUGIFY: T main CHECK-NM-NOHUGIFY-NEXT: T fib CHECK-NM-NOHUGIFY-NEXT: W __hot_end CHECK-OUTPUT: fib(4) = 3 CHECK-OUTPUT-NOHUGIFY: fib(4) = 3 */