Commit 44eed246 authored by Eric Pouech's avatar Eric Pouech Committed by Alexandre Julliard

dbghelp: Fix StackWalk when dwarf or pdb unwinders are called on first frame (CPU i386).

parent c5f329e6
......@@ -217,26 +217,23 @@ static BOOL i386_stack_walk(struct cpu_stack_walk* csw, LPSTACKFRAME64 frame, CO
{
DWORD_PTR xframe;
struct pdb_cmd_pair cpair[4];
CONTEXT newctx = *context;
if (dwarf2_virtual_unwind(csw, frame->AddrPC.Offset - deltapc, context, &xframe))
if (dwarf2_virtual_unwind(csw, frame->AddrPC.Offset - deltapc, &newctx, &xframe))
{
frame->AddrStack.Mode = frame->AddrFrame.Mode = frame->AddrReturn.Mode = AddrModeFlat;
frame->AddrStack.Offset = context->Esp = xframe;
frame->AddrFrame.Offset = context->Ebp;
frame->AddrReturn.Offset = context->Eip;
frame->AddrReturn.Mode = AddrModeFlat;
frame->AddrReturn.Offset = newctx.Eip;
goto done_pep;
}
cpair[0].name = "$ebp"; cpair[0].pvalue = &context->Ebp;
cpair[1].name = "$esp"; cpair[1].pvalue = &context->Esp;
cpair[2].name = "$eip"; cpair[2].pvalue = &context->Eip;
cpair[3].name = NULL; cpair[3].pvalue = NULL;
cpair[0].name = "$ebp"; cpair[0].pvalue = &newctx.Ebp;
cpair[1].name = "$esp"; cpair[1].pvalue = &newctx.Esp;
cpair[2].name = "$eip"; cpair[2].pvalue = &newctx.Eip;
cpair[3].name = NULL; cpair[3].pvalue = NULL;
if (pdb_virtual_unwind(csw, frame->AddrPC.Offset - deltapc, context, cpair))
if (pdb_virtual_unwind(csw, frame->AddrPC.Offset - deltapc, &newctx, cpair))
{
frame->AddrStack.Mode = frame->AddrFrame.Mode = frame->AddrReturn.Mode = AddrModeFlat;
frame->AddrStack.Offset = context->Esp;
frame->AddrFrame.Offset = context->Ebp;
frame->AddrReturn.Offset = context->Eip;
frame->AddrReturn.Mode = AddrModeFlat;
frame->AddrReturn.Offset = newctx.Eip;
goto done_pep;
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment