xref: /llvm-project/lldb/test/Shell/Unwind/split-machine-functions.test (revision 9aa7a721ce3dc84d0ad2d987af72cf14ff76d8a7)
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