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);