Module: wine Branch: master Commit: 51bce9b049aa6f7fe96212bb5788a0cf28e985e9 URL: http://source.winehq.org/git/wine.git/?a=commit;h=51bce9b049aa6f7fe96212bb57...
Author: Eric Pouech eric.pouech@orange.fr Date: Thu Apr 1 21:24:07 2010 +0200
dbghelp: Implement the new register methods for x86.
---
dlls/dbghelp/cpu_i386.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 62 insertions(+), 1 deletions(-)
diff --git a/dlls/dbghelp/cpu_i386.c b/dlls/dbghelp/cpu_i386.c index 094b241..7a951f7 100644 --- a/dlls/dbghelp/cpu_i386.c +++ b/dlls/dbghelp/cpu_i386.c @@ -452,12 +452,73 @@ reg: fop 31
static void* i386_fetch_context_reg(CONTEXT* ctx, unsigned regno, unsigned* size) { - FIXME("NIY\n"); +#ifdef __i386__ + switch (regno) + { + case CV_REG_EAX: *size = sizeof(ctx->Eax); return &ctx->Eax; + case CV_REG_EDX: *size = sizeof(ctx->Edx); return &ctx->Edx; + case CV_REG_ECX: *size = sizeof(ctx->Ecx); return &ctx->Ecx; + case CV_REG_EBX: *size = sizeof(ctx->Ebx); return &ctx->Ebx; + case CV_REG_ESI: *size = sizeof(ctx->Esi); return &ctx->Esi; + case CV_REG_EDI: *size = sizeof(ctx->Edi); return &ctx->Edi; + case CV_REG_EBP: *size = sizeof(ctx->Ebp); return &ctx->Ebp; + case CV_REG_ESP: *size = sizeof(ctx->Esp); return &ctx->Esp; + case CV_REG_EIP: *size = sizeof(ctx->Eip); return &ctx->Eip; + + case CV_REG_ST0 + 0: *size = sizeof(long double); return &ctx->FloatSave.RegisterArea[0*sizeof(long double)]; + case CV_REG_ST0 + 1: *size = sizeof(long double); return &ctx->FloatSave.RegisterArea[1*sizeof(long double)]; + case CV_REG_ST0 + 2: *size = sizeof(long double); return &ctx->FloatSave.RegisterArea[2*sizeof(long double)]; + case CV_REG_ST0 + 3: *size = sizeof(long double); return &ctx->FloatSave.RegisterArea[3*sizeof(long double)]; + case CV_REG_ST0 + 4: *size = sizeof(long double); return &ctx->FloatSave.RegisterArea[4*sizeof(long double)]; + case CV_REG_ST0 + 5: *size = sizeof(long double); return &ctx->FloatSave.RegisterArea[5*sizeof(long double)]; + case CV_REG_ST0 + 6: *size = sizeof(long double); return &ctx->FloatSave.RegisterArea[6*sizeof(long double)]; + case CV_REG_ST0 + 7: *size = sizeof(long double); return &ctx->FloatSave.RegisterArea[7*sizeof(long double)]; + + case CV_REG_EFLAGS: *size = sizeof(ctx->EFlags); return &ctx->EFlags; + case CV_REG_ES: *size = sizeof(ctx->SegEs); return &ctx->SegEs; + case CV_REG_CS: *size = sizeof(ctx->SegCs); return &ctx->SegCs; + case CV_REG_SS: *size = sizeof(ctx->SegSs); return &ctx->SegSs; + case CV_REG_DS: *size = sizeof(ctx->SegDs); return &ctx->SegDs; + case CV_REG_FS: *size = sizeof(ctx->SegFs); return &ctx->SegFs; + case CV_REG_GS: *size = sizeof(ctx->SegGs); return &ctx->SegGs; + + } +#endif + FIXME("Unknown register %x\n", regno); return NULL; }
static const char* i386_fetch_regname(unsigned regno) { + switch (regno) + { + case CV_REG_EAX: return "eax"; + case CV_REG_EDX: return "edx"; + case CV_REG_ECX: return "ecx"; + case CV_REG_EBX: return "ebx"; + case CV_REG_ESI: return "esi"; + case CV_REG_EDI: return "edi"; + case CV_REG_EBP: return "ebp"; + case CV_REG_ESP: return "esp"; + case CV_REG_EIP: return "eip"; + + case CV_REG_ST0 + 0: return "st0"; + case CV_REG_ST0 + 1: return "st1"; + case CV_REG_ST0 + 2: return "st2"; + case CV_REG_ST0 + 3: return "st3"; + case CV_REG_ST0 + 4: return "st4"; + case CV_REG_ST0 + 5: return "st5"; + case CV_REG_ST0 + 6: return "st6"; + case CV_REG_ST0 + 7: return "st7"; + + case CV_REG_EFLAGS: return "eflags"; + case CV_REG_ES: return "es"; + case CV_REG_CS: return "cs"; + case CV_REG_SS: return "ss"; + case CV_REG_DS: return "ds"; + case CV_REG_FS: return "fs"; + case CV_REG_GS: return "gs"; + } FIXME("Unknown register %x\n", regno); return NULL; }