Index: lldb/test/Shell/Unwind/Inputs/basic-block-sections.c =================================================================== --- /dev/null +++ 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 asm_main() { + // Control flow to create basic block sections. + if (k) + foo(); + else + bar(); + return 0; +} Index: lldb/test/Shell/Unwind/Inputs/syms.txt =================================================================== --- /dev/null +++ lldb/test/Shell/Unwind/Inputs/syms.txt @@ -0,0 +1,7 @@ +asm_main.3 +main +asm_main.2 +foo +asm_main.1 +bar +asm_main Index: lldb/test/Shell/Unwind/basic-block-sections.test =================================================================== --- /dev/null +++ lldb/test/Shell/Unwind/basic-block-sections.test @@ -0,0 +1,33 @@ +# Test to check if using basic block sections to reorder basic blocks at +# run-time still produces the right backtraces with lldb. + +# REQUIRES: target-x86_64 + +# RUN: %clang_host %p/Inputs/call-asm.c %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/call-asm.c %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 asm_main's basic blocks are discontiguous +# RUN: %clang_host %p/Inputs/call-asm.c %p/Inputs/basic-block-sections.c -o %t -fbasic-block-sections=all -fuse-ld=lld -Wl,--symbol-ordering-file,%p/Inputs/syms.txt -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: {{.*}}`asm_main + +# DEFAULT: frame #3: {{.*}}`main + +# BBSECTIONS: frame #0: {{.*}}`bar +# BBSECTIONS: frame #1: {{.*}}`foo +# BBSECTIONS: frame #2: {{.*}}`asm_main.1 + +# BBSECTIONS: frame #3: {{.*}}`main