Commit 7416b04
[libunwind] Fix aarch64 unwinding with a debugger attached
See LuaJIT/LuaJIT#593 (comment)
for the original explanation of the problem.
In short; when a debugger is attached, there's a
function KiUserExceptionDispatcher in the stack that is being
unwound. The function KiUserExceptionDispatcher contains
a CONTEXT, with a copy of the context from where the exception
was raised. When unwinding through this function, this
whole CONTEXT gets restored.
This CONTEXT is what we receive a pointer to in the callbacks,
as the ms_ctx pointer.
When we unwind manually using RtlUnwindEx, the unwinding
overwrites the CONTEXT that is passed to it. Thus, to avoid
clobbering the CONTEXT that needs to be restored by
KiUserExceptionDispatcher, we could either declare a new
temporary CONTEXT on the stack before calling RtlUnwindEx,
or just use disp->ContextRecord as we already have
available.
Fixes: #161851
Co-authored-by: Peter Cawley <[email protected]>
Co-authored-by: Hannes Domani <[email protected]>1 parent a29d7a1 commit 7416b04
1 file changed
+2
-1
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
174 | 174 | | |
175 | 175 | | |
176 | 176 | | |
177 | | - | |
| 177 | + | |
| 178 | + | |
178 | 179 | | |
179 | 180 | | |
180 | 181 | | |
| |||
0 commit comments