dbghelp: Implement the new register methods for x86.

This commit is contained in:
Eric Pouech 2010-04-01 21:24:07 +02:00 committed by Alexandre Julliard
parent 45e0e3df47
commit 51bce9b049

View File

@ -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;
}