Module: wine Branch: master Commit: 9a28dbfb272491d584d5485c5eae44746b36c7bd URL: https://gitlab.winehq.org/wine/wine/-/commit/9a28dbfb272491d584d5485c5eae447...
Author: Eric Pouech epouech@codeweavers.com Date: Mon Sep 18 10:00:08 2023 +0200
dbghelp: Check that dwarf unwinder did actually unwind.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55560 Signed-off-by: Eric Pouech epouech@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);