1*9aa7a721SSriraman Tallam# Test to check if machine function splitter still produces the right backtraces 2*9aa7a721SSriraman Tallam# with lldb when a function is split into a hot and cold part and the cold part 3*9aa7a721SSriraman Tallam# is executed. The cold part has the same function symbol name but with a 4*9aa7a721SSriraman Tallam# ".cold" suffix and this test checks that the back trace is clear. 5*9aa7a721SSriraman Tallam 6*9aa7a721SSriraman Tallam# UNSUPPORTED: system-darwin, system-windows 7*9aa7a721SSriraman Tallam# REQUIRES: target-x86_64 8*9aa7a721SSriraman Tallam# REQUIRES: lld 9*9aa7a721SSriraman Tallam 10*9aa7a721SSriraman Tallam# RUN: split-file %s %t.split 11*9aa7a721SSriraman Tallam# 12*9aa7a721SSriraman Tallam# RUN: %clang_host %p/Inputs/split-machine-functions.ll -o %t 13*9aa7a721SSriraman Tallam# RUN: %lldb %t -s %t.split/commands -o exit | FileCheck %s --check-prefix=DEFAULT 14*9aa7a721SSriraman Tallam# 15*9aa7a721SSriraman Tallam# RUN: %clang_host %p/Inputs/split-machine-functions.ll -fsplit-machine-functions -o %t 16*9aa7a721SSriraman Tallam# RUN: %lldb %t -s %t.split/commands -o exit | FileCheck %s --check-prefix=SPLIT 17*9aa7a721SSriraman Tallam# 18*9aa7a721SSriraman Tallam# Test a permutation where foo.cold is very far from foo. The default ordering does not 19*9aa7a721SSriraman Tallam# ensure that there will be a gap between foo and foo.cold. Using a symbol ordering 20*9aa7a721SSriraman Tallam# file guarantees this 21*9aa7a721SSriraman Tallam# 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 22*9aa7a721SSriraman Tallam# RUN: %lldb %t -s %t.split/commands -o exit | FileCheck %s --check-prefix=SPLIT 23*9aa7a721SSriraman Tallam 24*9aa7a721SSriraman Tallam#--- commands 25*9aa7a721SSriraman Tallambreakpoint set -n bar 26*9aa7a721SSriraman Tallam# DEFAULT: Breakpoint 1: where = {{.*}}`bar 27*9aa7a721SSriraman Tallam# SPLIT: Breakpoint 1: where = {{.*}}`bar 28*9aa7a721SSriraman Tallam 29*9aa7a721SSriraman Tallamprocess launch 30*9aa7a721SSriraman Tallam# DEFAULT: stop reason = breakpoint 1.1 31*9aa7a721SSriraman Tallam# SPLIT: stop reason = breakpoint 1.1 32*9aa7a721SSriraman Tallam 33*9aa7a721SSriraman Tallamthread backtrace 34*9aa7a721SSriraman Tallam# DEFAULT: frame #0: {{.*}}`bar 35*9aa7a721SSriraman Tallam# DEFAULT: frame #1: {{.*}}`foo() + 36*9aa7a721SSriraman Tallam# DEFAULT: frame #2: {{.*}}`main + 37*9aa7a721SSriraman Tallam# SPLIT: frame #0: {{.*}}`bar 38*9aa7a721SSriraman Tallam# SPLIT: frame #1: {{.*}}`foo() (.cold) + 39*9aa7a721SSriraman Tallam# SPLIT: frame #2: {{.*}}`main + 40*9aa7a721SSriraman Tallam 41*9aa7a721SSriraman Tallam#--- sym_order_1.txt 42*9aa7a721SSriraman Tallam_Z3foov 43*9aa7a721SSriraman Tallammain 44*9aa7a721SSriraman Tallam_Z3barv 45*9aa7a721SSriraman Tallam_Z3bazv 46*9aa7a721SSriraman Tallam_Z3foov.cold 47