# 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
