blob: a6a17d081970d0ccbd45205d63c185056bec60ae [file] [log] [blame] [edit]
# Test handing of the dwarf val_offset() rule which can be used to reconstruct
# the value of a register that is neither in a live register or saved on the
# stack but is computable with CFA + offset.
# UNSUPPORTED: system-windows, ld_new-bug
# REQUIRES: target-x86_64, native
# RUN: %clang_host %p/Inputs/call-asm.c %p/Inputs/eh-frame-dwarf-unwind-val-offset.s -o %t
# RUN: %lldb %t -s %s -o exit | FileCheck %s
breakpoint set -n asm_main
# CHECK: Breakpoint 1: where = {{.*}}`asm_main
breakpoint set -n bar
# CHECK: Breakpoint 2: where = {{.*}}`bar
process launch
# CHECK: stop reason = breakpoint 1.1
stepi
stepi
stepi
register read -G x r12
# CHECK: r12 = 0x[[#%.16x,R12:]]{{$}}
continue
# CHECK: stop reason = breakpoint 2.1
thread backtrace
# CHECK: frame #0: {{.*}}`bar
# CHECK: frame #1: {{.*}}`foo + 12
# CHECK: frame #2: {{.*}}`asm_main + 29
target modules show-unwind -n bar
# CHECK: eh_frame UnwindPlan:
# CHECK: row[0]: 0: CFA=rsp +8 => rip=[CFA-8]
target modules show-unwind -n foo
# CHECK: eh_frame UnwindPlan:
# CHECK: row[0]: 0: CFA=rsp +8 => r12=CFA+32 rip=DW_OP_lit8, DW_OP_minus, DW_OP_deref, DW_OP_const1u 0x47, DW_OP_minus
target modules show-unwind -n asm_main
# CHECK: eh_frame UnwindPlan:
# CHECK: row[0]: 0: CFA=rsp +8 => rip=[CFA-8]
# CHECK: row[1]: 1: CFA=rsp+16 => rbp=[CFA-16] rip=[CFA-8]
# CHECK: row[2]: 11: CFA=rbp+16 => rbp=[CFA-16] rip=[CFA-8]
# CHECK: row[3]: 30: CFA=rsp +8 => rbp=[CFA-16] rip=[CFA-8]
register read -G x r12
# CHECK: r12 = 0x0000000000000456
frame select 1
register read -G x r12
# CHECK: r12 = 0x0000000000000456
frame select 2
register read -G x r12
# CHECK: r12 = 0x[[#R12 + 32]]