Summary: This fixes a bug in the logic for choosing the unwind plan. Based on the comment in UnwindAssembly-x86, the intention was that a plan which describes the function epilogue correctly does not need to be augmented (and it should be used directly). However, the way this was implemented (by returning false) meant that the higher level code (FuncUnwinders::GetEHFrameAugmentedUnwindPlan) interpreted this as a failure to produce _any_ plan and proceeded with other fallback options. The fallback usually chosed for "asynchronous" plans was the "instruction emulation" plan, which tended to fall over on certain functions with multiple epilogues (that's a separate bug). This patch simply changes the function to return true, which signals the caller that the unmodified plan is ready to be used. The attached test case demonstrates the case where we would previously fall back to the instruction emulation plan, and unwind incorrectly -- the test asserts that the "augmented" eh_frame plan is used, and that the unwind is correct. Reviewers: jasonmolenda, jankratochvil Subscribers: davide, echristo, lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D82378
23 lines
494 B
ArmAsm
23 lines
494 B
ArmAsm
# A function whose prologue and epilogue are described perfectly. eh_frame
|
|
# augmentation machinery should detect that no augmentation is needed and use
|
|
# eh_frame directly.
|
|
|
|
.text
|
|
.globl foo
|
|
foo:
|
|
.cfi_startproc
|
|
pushq %rax
|
|
.cfi_def_cfa_offset 16
|
|
int3
|
|
pop %rcx
|
|
.cfi_def_cfa_offset 8
|
|
retq
|
|
.cfi_endproc
|
|
|
|
.globl asm_main
|
|
asm_main:
|
|
.cfi_startproc
|
|
callq foo
|
|
retq
|
|
.cfi_endproc
|