This test includes a source that will produce basic blocks and hence sections with -fbasic-block-sections=all.

The test reorders the basic blocks to be dis-contiguous in the address space and checks if the back trace contains the right symbol.

Reviewed By: labath

Differential Revision: https://reviews.llvm.org/D89179
This commit is contained in:
Sriraman Tallam 2020-10-16 21:28:18 -07:00
parent 701cf4b5a5
commit 2e5b701d93
2 changed files with 67 additions and 0 deletions

View File

@ -0,0 +1,18 @@
int k = 1;
int bar() {
return 0;
}
int foo() {
return bar();
}
int main() {
// Control flow to create basic block sections.
if (k)
foo();
else
bar();
return 0;
}

View File

@ -0,0 +1,49 @@
# Test to check if using basic block sections to reorder basic blocks at
# run-time still produces the right backtraces with lldb.
# UNSUPPORTED: system-darwin, system-windows
# REQUIRES: target-x86_64
# REQUIRES: lld
# RUN: %clang_host %p/Inputs/basic-block-sections.c -o %t
# RUN: %lldb %t -s %s -o exit | FileCheck %s --check-prefix=DEFAULT
# RUN: %clang_host %p/Inputs/basic-block-sections.c -o %t -fbasic-block-sections=all
# RUN: %lldb %t -s %s -o exit | FileCheck %s --check-prefix=BBSECTIONS
# Reorder basic blocks so that main's basic blocks are discontiguous
# RUN: echo "main.3" > %t.order
# RUN: echo "bar" >> %t.order
# RUN: echo "main" >> %t.order
# RUN: echo "main.2" >> %t.order
# RUN: echo "foo" >> %t.order
# RUN: echo "main.1" >> %t.order
# RUN: %clang_host %p/Inputs/basic-block-sections.c -o %t -fbasic-block-sections=all -fuse-ld=lld -Wl,--symbol-ordering-file,%t.order -Wl,--warn-symbol-ordering -Wl,--fatal-warnings
# RUN: %lldb %t -s %s -o exit | FileCheck %s --check-prefix=BBSECTIONS
# Test the reverse permutation too.
# RUN: echo "main.1" > %t.order
# RUN: echo "foo" >> %t.order
# RUN: echo "main.2" >> %t.order
# RUN: echo "main" >> %t.order
# RUN: echo "bar" >> %t.order
# RUN: echo "main.3" >> %t.order
# RUN: %clang_host %p/Inputs/basic-block-sections.c -o %t -fbasic-block-sections=all -fuse-ld=lld -Wl,--symbol-ordering-file,%t.order -Wl,--warn-symbol-ordering -Wl,--fatal-warnings
# RUN: %lldb %t -s %s -o exit | FileCheck %s --check-prefix=BBSECTIONS
breakpoint set -n bar
# DEFAULT: Breakpoint 1: where = {{.*}}`bar
# BBSECTIONS: Breakpoint 1: where = {{.*}}`bar
process launch
# DEFAULT: stop reason = breakpoint 1.1
# BBSECTIONS: stop reason = breakpoint 1.1
thread backtrace
# DEFAULT: frame #0: {{.*}}`bar
# DEFAULT: frame #1: {{.*}}`foo
# DEFAULT: frame #2: {{.*}}`main +
# BBSECTIONS: frame #0: {{.*}}`bar
# BBSECTIONS: frame #1: {{.*}}`foo
# BBSECTIONS: frame #2: {{.*}}`main.1 +