# Test to check if machine function splitter still produces the right backtraces # with lldb when a function is split into a hot and cold part and the cold part # is executed. The cold part has the same function symbol name but with a # ".cold" suffix and this test checks that the back trace is clear. # UNSUPPORTED: system-darwin, system-windows # REQUIRES: target-x86_64 # REQUIRES: lld # RUN: split-file %s %t.split # # RUN: %clang_host %p/Inputs/split-machine-functions.ll -o %t # RUN: %lldb %t -s %t.split/commands -o exit | FileCheck %s --check-prefix=DEFAULT # # RUN: %clang_host %p/Inputs/split-machine-functions.ll -fsplit-machine-functions -o %t # RUN: %lldb %t -s %t.split/commands -o exit | FileCheck %s --check-prefix=SPLIT # # Test a permutation where foo.cold is very far from foo. The default ordering does not # ensure that there will be a gap between foo and foo.cold. Using a symbol ordering # file guarantees this # RUN: %clang_host %p/Inputs/split-machine-functions.ll -fsplit-machine-functions -o %t -fuse-ld=lld -Wl,--symbol-ordering-file,%t.split/sym_order_1.txt -Wl,--warn-symbol-ordering -Wl,--fatal-warnings # RUN: %lldb %t -s %t.split/commands -o exit | FileCheck %s --check-prefix=SPLIT #--- commands breakpoint set -n bar # DEFAULT: Breakpoint 1: where = {{.*}}`bar # SPLIT: Breakpoint 1: where = {{.*}}`bar process launch # DEFAULT: stop reason = breakpoint 1.1 # SPLIT: stop reason = breakpoint 1.1 thread backtrace # DEFAULT: frame #0: {{.*}}`bar # DEFAULT: frame #1: {{.*}}`foo() + # DEFAULT: frame #2: {{.*}}`main + # SPLIT: frame #0: {{.*}}`bar # SPLIT: frame #1: {{.*}}`foo() (.cold) + # SPLIT: frame #2: {{.*}}`main + #--- sym_order_1.txt _Z3foov main _Z3barv _Z3bazv _Z3foov.cold