Eric Pouech : dbghelp: Enhance a couple of register mapping functions for i386.
Alexandre Julliard
julliard at winehq.org
Mon May 2 14:16:13 CDT 2011
Module: wine
Branch: master
Commit: 108b63f5a61c91df6fefeef1c5a097df4a0d1837
URL: http://source.winehq.org/git/wine.git/?a=commit;h=108b63f5a61c91df6fefeef1c5a097df4a0d1837
Author: Eric Pouech <eric.pouech at orange.fr>
Date: Sun May 1 09:46:30 2011 +0200
dbghelp: Enhance a couple of register mapping functions for i386.
---
dlls/dbghelp/cpu_i386.c | 35 +++++++++++++++++++++++++++++++----
1 files changed, 31 insertions(+), 4 deletions(-)
diff --git a/dlls/dbghelp/cpu_i386.c b/dlls/dbghelp/cpu_i386.c
index 73cbe1a..8fe5eac 100644
--- a/dlls/dbghelp/cpu_i386.c
+++ b/dlls/dbghelp/cpu_i386.c
@@ -541,11 +541,11 @@ static unsigned i386_map_dwarf_register(unsigned regno)
case 24: reg = CV_REG_CTRL; break;
case 25: reg = CV_REG_STAT; break;
case 26: reg = CV_REG_TAG; break;
+ case 27: reg = CV_REG_FPCS; break;
+ case 28: reg = CV_REG_FPIP; break;
+ case 29: reg = CV_REG_FPDS; break;
+ case 30: reg = CV_REG_FPDO; break;
/*
-reg: fiseg 27
-reg: fioff 28
-reg: foseg 29
-reg: fooff 30
reg: fop 31
*/
case 32: case 33: case 34: case 35:
@@ -583,6 +583,14 @@ static void* i386_fetch_context_reg(CONTEXT* ctx, unsigned regno, unsigned* size
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_CTRL: *size = sizeof(DWORD); return &ctx->FloatSave.ControlWord;
+ case CV_REG_STAT: *size = sizeof(DWORD); return &ctx->FloatSave.StatusWord;
+ case CV_REG_TAG: *size = sizeof(DWORD); return &ctx->FloatSave.TagWord;
+ case CV_REG_FPCS: *size = sizeof(DWORD); return &ctx->FloatSave.ErrorSelector;
+ case CV_REG_FPIP: *size = sizeof(DWORD); return &ctx->FloatSave.ErrorOffset;
+ case CV_REG_FPDS: *size = sizeof(DWORD); return &ctx->FloatSave.DataSelector;
+ case CV_REG_FPDO: *size = sizeof(DWORD); return &ctx->FloatSave.DataOffset;
+
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;
@@ -627,6 +635,25 @@ static const char* i386_fetch_regname(unsigned regno)
case CV_REG_DS: return "ds";
case CV_REG_FS: return "fs";
case CV_REG_GS: return "gs";
+
+ case CV_REG_CTRL: return "fpControl";
+ case CV_REG_STAT: return "fpStatus";
+ case CV_REG_TAG: return "fpTag";
+ case CV_REG_FPCS: return "fpCS";
+ case CV_REG_FPIP: return "fpIP";
+ case CV_REG_FPDS: return "fpDS";
+ case CV_REG_FPDO: return "fpData";
+
+ case CV_REG_XMM0 + 0: return "xmm0";
+ case CV_REG_XMM0 + 1: return "xmm1";
+ case CV_REG_XMM0 + 2: return "xmm2";
+ case CV_REG_XMM0 + 3: return "xmm3";
+ case CV_REG_XMM0 + 4: return "xmm4";
+ case CV_REG_XMM0 + 5: return "xmm5";
+ case CV_REG_XMM0 + 6: return "xmm6";
+ case CV_REG_XMM0 + 7: return "xmm7";
+
+ case CV_REG_MXCSR: return "MxCSR";
}
FIXME("Unknown register %x\n", regno);
return NULL;
More information about the wine-cvs
mailing list