
clang supports option -fsplit-machine-functions and this test checks if the backtraces are sane when functions are split. With -fsplit-machine-functions, a function with profiles can get split into 2 parts, the original function containing hot code and a cold part as determined by the profile info and the cold cutoff threshold.. The cold part gets the ".cold" suffix to disambiguate its symbol from the hot part and can be placed arbitrarily in the address space. This test checks if the back-trace looks correct when the cold part is executed. Differential Revision: https://reviews.llvm.org/D90081
47 lines
1.7 KiB
Plaintext
47 lines
1.7 KiB
Plaintext
# 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
|