[PATCH 0/1] MR3874: dbghelp: Check that dwarf unwinder did actually unwind.
Wine-Bug-Id: https://bugs.winehq.org/show_bug.cgi?id=55560 Signed-off-by: Eric Pouech <epouech(a)codeweavers.com> -- https://gitlab.winehq.org/wine/wine/-/merge_requests/3874
From: Eric Pouech <epouech(a)codeweavers.com> Wine-Bug-Id: https://bugs.winehq.org/show_bug.cgi?id=55560 Signed-off-by: Eric Pouech <epouech(a)codeweavers.com> --- dlls/dbghelp/cpu_x86_64.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dlls/dbghelp/cpu_x86_64.c b/dlls/dbghelp/cpu_x86_64.c index c653c5fa9dd..957ce36cc5d 100644 --- a/dlls/dbghelp/cpu_x86_64.c +++ b/dlls/dbghelp/cpu_x86_64.c @@ -611,7 +611,8 @@ static BOOL fetch_next_frame(struct cpu_stack_walk *csw, union ctx *pcontext, DWORD64 cfa; RUNTIME_FUNCTION* rtf; DWORD64 base; - CONTEXT *context = &pcontext->ctx; + CONTEXT *context = &pcontext->ctx; + DWORD64 input_Rip = context->Rip; if (!curr_pc || !(base = sw_module_base(csw, curr_pc))) return FALSE; rtf = sw_table_access(csw, curr_pc); @@ -620,7 +621,7 @@ static BOOL fetch_next_frame(struct cpu_stack_walk *csw, union ctx *pcontext, { return interpret_function_table_entry(csw, context, rtf, base); } - else if (dwarf2_virtual_unwind(csw, curr_pc, pcontext, &cfa)) + else if (dwarf2_virtual_unwind(csw, curr_pc, pcontext, &cfa) && input_Rip != context->Rip) { context->Rsp = cfa; TRACE("next function rip=%016Ix\n", context->Rip); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/3874
participants (2)
-
Eric Pouech -
eric pouech (@epo)