diff --git a/lldb/test/Shell/Unwind/Inputs/basic-block-sections.c b/lldb/test/Shell/Unwind/Inputs/basic-block-sections.c new file mode 100644 index 00000000000000..728291aaa2d921 --- /dev/null +++ b/lldb/test/Shell/Unwind/Inputs/basic-block-sections.c @@ -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; +} diff --git a/lldb/test/Shell/Unwind/basic-block-sections.test b/lldb/test/Shell/Unwind/basic-block-sections.test new file mode 100644 index 00000000000000..7b24a867586362 --- /dev/null +++ b/lldb/test/Shell/Unwind/basic-block-sections.test @@ -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 +