I haven't noticed any access to DR7. The code looks like DR2 should be written at some point, but I haven't been able to find where. I think it would help if we could implement an exception handler for DR0..3 read/write accesses which would just store the value somewhere in memory and return it when the DR registers are read.
let me know if this helps A+
Index: memory/instr.c =================================================================== RCS file: /home/cvs/cvsroot/wine/wine/memory/instr.c,v retrieving revision 1.14 diff -u -r1.14 instr.c --- memory/instr.c 10 Mar 2002 00:18:34 -0000 1.14 +++ memory/instr.c 21 Mar 2002 22:17:01 -0000 @@ -525,6 +525,52 @@ } /* fallthrough to illegal instruction */ break; + case 0x23: /* mov e?a, drX */ + { + BYTE *addr = INSTR_GetOperandAddr(context, instr + 2, + long_addr, segprefix, &len ); + unsigned dr_idx = (instr[2]-0xC0)/8; + + if (addr && dr_idx <= 7 && dr_idx != 4 && dr_idx != 5) + { + switch (dr_idx) + { + case 0: context->Dr0 = *(DWORD*)addr; break; + case 1: context->Dr1 = *(DWORD*)addr; break; + case 2: context->Dr2 = *(DWORD*)addr; break; + case 3: context->Dr3 = *(DWORD*)addr; break; + case 6: context->Dr6 = *(DWORD*)addr; break; + case 7: context->Dr7 = *(DWORD*)addr; break; + } + context->Eip += prefixlen+3; + return TRUE; + } + } + /* fallthrough to illegal instruction */ + break; + case 0x21: /* mov drX, e?x */ + { + BYTE *addr = INSTR_GetOperandAddr(context, instr + 2, + long_addr, segprefix, &len ); + int dr_idx = (instr[2]-0xC0)/8; + + if (addr && dr_idx <= 7 && dr_idx != 4 && dr_idx != 5) + { + switch (dr_idx) + { + case 0: *(DWORD*)addr = context->Dr0; break; + case 1: *(DWORD*)addr = context->Dr1; break; + case 2: *(DWORD*)addr = context->Dr2; break; + case 3: *(DWORD*)addr = context->Dr3; break; + case 6: *(DWORD*)addr = context->Dr6; break; + case 7: *(DWORD*)addr = context->Dr7; break; + } + context->Eip += prefixlen+3; + return TRUE; + } + } + /* fallthrough to illegal instruction */ + break; case 0xa1: /* pop fs */ { WORD seg = *(WORD *)get_stack( context );