[PATCH 3/3] [DbgHelp]: when unwinding i386 stacks, update CONTEXT with sp/bp/ip
Eric Pouech
eric.pouech at orange.fr
Sun Jun 27 11:55:21 CDT 2010
A+
---
dlls/dbghelp/cpu_i386.c | 14 ++++++++++++++
1 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/dlls/dbghelp/cpu_i386.c b/dlls/dbghelp/cpu_i386.c
index dc00410..3ea1c2f 100644
--- a/dlls/dbghelp/cpu_i386.c
+++ b/dlls/dbghelp/cpu_i386.c
@@ -410,6 +410,20 @@ static BOOL i386_stack_walk(struct cpu_stack_walk* csw, LPSTACKFRAME64 frame, CO
sw_read_mem(csw, frame->AddrFrame.Offset + 2 * sizeof(DWORD),
frame->Params, sizeof(frame->Params));
}
+ if (context)
+ {
+#define SET(field, seg, reg) \
+ switch (frame->field.Mode) \
+ { \
+ case AddrModeFlat: context->reg = frame->field.Offset; break; \
+ case AddrMode1616: context->seg = frame->field.Segment; context->reg = frame->field.Offset; break; \
+ default: assert(0); \
+ }
+ SET(AddrStack, SegSs, Esp);
+ SET(AddrFrame, SegSs, Ebp);
+ SET(AddrReturn, SegCs, Eip);
+#undef SET
+ }
goto done_pep; /* just to ensure done_pep label is referenced */
done_pep:
More information about the wine-patches
mailing list