This test checks the thread backtrace for entries of intermediate frames that aren't aligned to 16 bytes. In order to do that, it sets a single breakpoint and makes sure we stop there. It seems sufficient, however, to check that we hit the breakpoint itself and not which particular site.
27 lines
1.0 KiB
Plaintext
27 lines
1.0 KiB
Plaintext
# Test unwinding through stack frames that aren't aligned to 16 bytes.
|
|
# (In real world code, this happens when unwinding through
|
|
# KiUserExceptionDispatcher and KiUserCallbackDispatcher in ntdll.dll.)
|
|
|
|
# REQUIRES: target-x86_64, native, system-windows
|
|
|
|
# RUN: %build %p/Inputs/windows-unaligned-x86_64.cpp %p/Inputs/windows-unaligned-x86_64-asm.s -o %t
|
|
# RUN: %lldb %t -s %s -o exit | FileCheck %s
|
|
|
|
# Future TODO: If %build could compile the source file in C mode, the symbol
|
|
# name handling would be easier across msvc and mingw build configurations.
|
|
# (In mingw mode, the extern C symbol "func" is printed as "::func" while
|
|
# it's plain "func" in msvc mode. Without the extern C, it's "func(..." in
|
|
# mingw mode, but "void __cdecl func(..." in msvc mode.)
|
|
|
|
breakpoint set -n func
|
|
# CHECK: Breakpoint 1: where = {{.*}}`{{(::)?}}func
|
|
|
|
process launch
|
|
# CHECK: stop reason = breakpoint 1
|
|
|
|
thread backtrace
|
|
# CHECK: frame #0: {{.*}}`{{(::)?}}func
|
|
# CHECK: frame #1: {{.*}}`realign_stack
|
|
# CHECK: frame #2: {{.*}}`call_func
|
|
# CHECK: frame #3: {{.*}}`main
|