"Rein Klazes" <[EMAIL PROTECTED]> wrote: [...] > | fldcw -2(%edx) > > Load original CW. Now the exception happens, which indicates the PE > maskbit is cleared. I don't see how that can be. (you should check > that the disassembly in winedbg is the same as this code) Attached disassembly is almost the same as assember generated by gcc (not counting garbage instead of jump table and fildl (gcc) vs. filds (winedbg)) > Moreover I cannot reproduce your failure (using gcc 2.95.4 and gnu as > 2.11.90.0.1) If I set the variables to 0 and 0.0, no exception > follows. I'm completely at loss now. I'm debugging very complex application which actually consists of several simultaneously running processes. Perhaps interaction between processes leads to some unexpected behaviour. Also I don't understand why winedbg prints dc->xformWorld2Vport.eM11 = 0.0, though dc->xformWorld2Vport.eM11 is always 1.0 in the log trace (added to X11DRV_PEN_SelectObject right before the GDI_ROUND call). Something wrong, but I don't know how proceed further yet. Any thoughts?
Wine-dbg>disas X11DRV_PEN_SelectObject,0x40858b11 disas X11DRV_PEN_SelectObject,0x40858b11 0x40858970 (X11DRV_PEN_SelectObject [pen.c:70]): pushl %ebp 0x40858971 (X11DRV_PEN_SelectObject+0x1 [pen.c:70]): movl %esp,%ebp 0x40858973 (X11DRV_PEN_SelectObject+0x3 [pen.c:70]): subl $60,%esp 0x40858976 (X11DRV_PEN_SelectObject+0x6 [pen.c:70]): pushl %edi 0x40858977 (X11DRV_PEN_SelectObject+0x7 [pen.c:70]): pushl %esi 0x40858978 (X11DRV_PEN_SelectObject+0x8 [pen.c:70]): pushl %ebx 0x40858979 (X11DRV_PEN_SelectObject+0x9 [pen.c:70]): call 0x4085897e (X11DRV_PEN_SelectObject+0xe [pen.c:70]) 0x4085897e (X11DRV_PEN_SelectObject+0xe [pen.c:70]): popl %ebx 0x4085897f (X11DRV_PEN_SelectObject+0xf [pen.c:70]): addl $0x2462e,%ebx 0x40858985 (X11DRV_PEN_SelectObject+0x15 [pen.c:70]): movl 0x8(%ebp),%ecx 0x40858988 (X11DRV_PEN_SelectObject+0x18 [pen.c:70]): movzwl 0x52(%ecx),%edx 0x4085898c (X11DRV_PEN_SelectObject+0x1c [pen.c:70]): movl %edx,0xffffffc4(%ebp) 0x4085898f (X11DRV_PEN_SelectObject+0x1f [pen.c:70]): movl 0x10(%ebp),%edi 0x40858992 (X11DRV_PEN_SelectObject+0x22 [pen.c:70]): movl 0xc(%ebp),%eax 0x40858995 (X11DRV_PEN_SelectObject+0x25 [pen.c:70]): movw %ax,0x52(%ecx) 0x40858999 (X11DRV_PEN_SelectObject+0x29 [pen.c:70]): movl 0x10(%ecx),%esi 0x4085899c (X11DRV_PEN_SelectObject+0x2c [pen.c:70]): movl 0x8(%edi),%eax 0x4085899f (X11DRV_PEN_SelectObject+0x2f [pen.c:70]): andl $15,%eax 0x408589a2 (X11DRV_PEN_SelectObject+0x32 [pen.c:70]): movl %eax,0xc(%esi) 0x408589a5 (X11DRV_PEN_SelectObject+0x35 [pen.c:70]): movl 0x8(%edi),%edx 0x408589a8 (X11DRV_PEN_SelectObject+0x38 [pen.c:70]): andl $0xf0000,%edx 0x408589ae (X11DRV_PEN_SelectObject+0x3e [pen.c:70]): movl %edx,0x28(%esi) 0x408589b1 (X11DRV_PEN_SelectObject+0x41 [pen.c:70]): movl 0x8(%edi),%eax 0x408589b4 (X11DRV_PEN_SelectObject+0x44 [pen.c:70]): andl $0xf00,%eax 0x408589b9 (X11DRV_PEN_SelectObject+0x49 [pen.c:70]): movl %eax,0x10(%esi) 0x408589bc (X11DRV_PEN_SelectObject+0x4c [pen.c:70]): movl 0x8(%edi),%edx 0x408589bf (X11DRV_PEN_SelectObject+0x4f [pen.c:70]): andl $0xf000,%edx 0x408589c5 (X11DRV_PEN_SelectObject+0x55 [pen.c:70]): movl %edx,0x14(%esi) 0x408589c8 (X11DRV_PEN_SelectObject+0x58 [pen.c:70]): filds 0xc(%edi) 0x408589cb (X11DRV_PEN_SelectObject+0x5b [pen.c:70]): leal 0xffffffe0(%ebp),%edx 0x408589ce (X11DRV_PEN_SelectObject+0x5e [pen.c:70]): fldl 0xffff690c(%ebx) 0x408589d4 (X11DRV_PEN_SelectObject+0x64 [pen.c:70]): fxch %st(1) 0x408589d6 (X11DRV_PEN_SelectObject+0x66 [pen.c:70]): fmuls 0xe8(%ecx) 0x408589dc (X11DRV_PEN_SelectObject+0x6c [pen.c:70]): fld %st(1) 0x408589de (X11DRV_PEN_SelectObject+0x6e [pen.c:70]): fmulp %st,%st(1) 0x408589e0 (X11DRV_PEN_SelectObject+0x70 [pen.c:70]): fstps 0xfffffff8(%ebp) 0x408589e3 (X11DRV_PEN_SelectObject+0x73 [pen.c:70]): flds 0xfffffff8(%ebp) 0x408589e6 (X11DRV_PEN_SelectObject+0x76 [pen.c:70]): faddp %st,%st(1) 0x408589e8 (X11DRV_PEN_SelectObject+0x78 [pen.c:70]): fnstcw 0xfffffffe(%edx) 0x408589eb (X11DRV_PEN_SelectObject+0x7b [pen.c:70]): movzwl 0xfffffffe(%edx),%eax 0x408589ef (X11DRV_PEN_SelectObject+0x7f [pen.c:70]): andb $0xf3,%ah 0x408589f2 (X11DRV_PEN_SelectObject+0x82 [pen.c:70]): orb $0x4,%ah 0x408589f5 (X11DRV_PEN_SelectObject+0x85 [pen.c:70]): movw %ax,0xfffffffc(%edx) 0x408589f9 (X11DRV_PEN_SelectObject+0x89 [pen.c:70]): fldcw 0xfffffffc(%edx) 0x408589fc (X11DRV_PEN_SelectObject+0x8c [pen.c:70]): frndint 0x408589fe (X11DRV_PEN_SelectObject+0x8e [pen.c:70]): fldcw 0xfffffffe(%edx) 0x40858a01 (X11DRV_PEN_SelectObject+0x91 [pen.c:70]): fstpl 0xffffffd0(%ebp) 0x40858a04 (X11DRV_PEN_SelectObject+0x94 [pen.c:70]): fldl 0xffffffd0(%ebp) 0x40858a07 (X11DRV_PEN_SelectObject+0x97 [pen.c:70]): fnstcw 0xffffffce(%ebp) 0x40858a0a (X11DRV_PEN_SelectObject+0x9a [pen.c:70]): movw 0xffffffce(%ebp),%dx 0x40858a0e (X11DRV_PEN_SelectObject+0x9e [pen.c:70]): orw $0xc00,%dx 0x40858a13 (X11DRV_PEN_SelectObject+0xa3 [pen.c:70]): movw %dx,0xffffffcc(%ebp) 0x40858a17 (X11DRV_PEN_SelectObject+0xa7 [pen.c:70]): fldcw 0xffffffcc(%ebp) 0x40858a1a (X11DRV_PEN_SelectObject+0xaa [pen.c:70]): fistps 0xffffffc8(%ebp) 0x40858a1d (X11DRV_PEN_SelectObject+0xad [pen.c:70]): movl 0xffffffc8(%ebp),%eax 0x40858a20 (X11DRV_PEN_SelectObject+0xb0 [pen.c:70]): fldcw 0xffffffce(%ebp) 0x40858a23 (X11DRV_PEN_SelectObject+0xb3 [pen.c:70]): movl %eax,0x1c(%esi) 0x40858a26 (X11DRV_PEN_SelectObject+0xb6 [pen.c:70]): testl %eax,%eax 0x40858a28 (X11DRV_PEN_SelectObject+0xb8 [pen.c:70]): jnl 0x40858a2f (X11DRV_PEN_SelectObject+0xbf [pen.c:70]) 0x40858a2a (X11DRV_PEN_SelectObject+0xba [pen.c:70]): negl %eax 0x40858a2c (X11DRV_PEN_SelectObject+0xbc [pen.c:70]): movl %eax,0x1c(%esi) 0x40858a2f (X11DRV_PEN_SelectObject+0xbf [pen.c:70]): cmpl $1,0x1c(%esi) 0x40858a33 (X11DRV_PEN_SelectObject+0xc3 [pen.c:70]): jnz 0x40858a3c (X11DRV_PEN_SelectObject+0xcc [pen.c:70]) 0x40858a35 (X11DRV_PEN_SelectObject+0xc5 [pen.c:70]): movl $0x0,0x1c(%esi) 0x40858a3c (X11DRV_PEN_SelectObject+0xcc [pen.c:70]): pushl 0x14(%edi) 0x40858a3f (X11DRV_PEN_SelectObject+0xcf [pen.c:70]): pushl %ecx 0x40858a40 (X11DRV_PEN_SelectObject+0xd0 [pen.c:70]): call 0x4083efd0 (_init+0xcf4) 0x40858a45 (X11DRV_PEN_SelectObject+0xd5 [pen.c:70]): movl %eax,0x18(%esi) 0x40858a48 (X11DRV_PEN_SelectObject+0xd8 [pen.c:70]): movl 0x8(%edi),%eax 0x40858a4b (X11DRV_PEN_SelectObject+0xdb [pen.c:70]): andl $15,%eax 0x40858a4e (X11DRV_PEN_SelectObject+0xde [pen.c:70]): addl $8,%esp 0x40858a51 (X11DRV_PEN_SelectObject+0xe1 [pen.c:70]): subl $1,%eax 0x40858a54 (X11DRV_PEN_SelectObject+0xe4 [pen.c:70]): cmpl $7,%eax 0x40858a57 (X11DRV_PEN_SelectObject+0xe7 [pen.c:70]): jnbe 0x40858b07 (X11DRV_PEN_SelectObject+0x197 [pen.c:70]) 0x40858a5d (X11DRV_PEN_SelectObject+0xed [pen.c:70]): movl %ebx,%edx 0x40858a5f (X11DRV_PEN_SelectObject+0xef [pen.c:70]): subl 0xfffdbac4(%ebx,%eax,4),%edx 0x40858a66 (X11DRV_PEN_SelectObject+0xf6 [pen.c:70]): jmp *%edxp 0x40858a68 (X11DRV_PEN_SelectObject+0xf8 [pen.c:70]): nop 0x40858a69 (X11DRV_PEN_SelectObject+0xf9 [pen.c:70]): leal 0x0(%esi),%esi 0x40858a70 (X11DRV_PEN_SelectObject+0x100 [pen.c:70]): sbbb $69,%al 0x40858a72 (X11DRV_PEN_SelectObject+0x102 [pen.c:70]): addb 0x0(%eax),%al 0x40858a74 (X11DRV_PEN_SelectObject+0x104 [pen.c:70]): adcb $69,%al 0x40858a76 (X11DRV_PEN_SelectObject+0x106 [pen.c:70]): addb 0x0(%eax),%al 0x40858a78 (X11DRV_PEN_SelectObject+0x108 [pen.c:70]): cld 0x40858a79 (X11DRV_PEN_SelectObject+0x109 [pen.c:70]): incl %esp 0x40858a7a (X11DRV_PEN_SelectObject+0x10a [pen.c:70]): addb 0x0(%eax),%al 0x40858a7c (X11DRV_PEN_SelectObject+0x10c [pen.c:70]): ljmp 0x0244:0xa5000244 0x40858a83 (X11DRV_PEN_SelectObject+0x113 [pen.c:70]): addb %ah,0xc6000244(%ebp) 0x40858a89 (X11DRV_PEN_SelectObject+0x119 [pen.c:70]): incl %esp 0x40858a8a (X11DRV_PEN_SelectObject+0x11a [pen.c:70]): addb 0x0(%eax),%al 0x40858a8c (X11DRV_PEN_SelectObject+0x11c [pen.c:70]): fadds 0x0(%edx,%eax,1) 0x40858a90 (X11DRV_PEN_SelectObject+0x120 [pen.c:70]): leal 0xffff68b4(%ebx),%eax 0x40858a96 (X11DRV_PEN_SelectObject+0x126 [pen.c:70]): jmp 0x40858ada (X11DRV_PEN_SelectObject+0x16a [pen.c:70]) 0x40858a98 (X11DRV_PEN_SelectObject+0x128 [pen.c:70]): leal 0xffff68b6(%ebx),%edx 0x40858a9e (X11DRV_PEN_SelectObject+0x12e [pen.c:70]): movl %edx,0x20(%esi) 0x40858aa1 (X11DRV_PEN_SelectObject+0x131 [pen.c:70]): movl $0x2,0x24(%esi) 0x40858aa8 (X11DRV_PEN_SelectObject+0x138 [pen.c:70]): jmp 0x40858b07 (X11DRV_PEN_SelectObject+0x197 [pen.c:70]) 0x40858aaa (X11DRV_PEN_SelectObject+0x13a [pen.c:70]): leal 0x0(%esi),%esi 0x40858ab0 (X11DRV_PEN_SelectObject+0x140 [pen.c:70]): leal 0xffff68b8(%ebx),%eax 0x40858ab6 (X11DRV_PEN_SelectObject+0x146 [pen.c:70]): movl %eax,0x20(%esi) 0x40858ab9 (X11DRV_PEN_SelectObject+0x149 [pen.c:70]): movl $0x4,0x24(%esi) 0x40858ac0 (X11DRV_PEN_SelectObject+0x150 [pen.c:70]): jmp 0x40858b07 (X11DRV_PEN_SelectObject+0x197 [pen.c:70]) 0x40858ac2 (X11DRV_PEN_SelectObject+0x152 [pen.c:70]): leal 0xffff68bc(%ebx),%edx 0x40858ac8 (X11DRV_PEN_SelectObject+0x158 [pen.c:70]): movl %edx,0x20(%esi) 0x40858acb (X11DRV_PEN_SelectObject+0x15b [pen.c:70]): movl $0x6,0x24(%esi) 0x40858ad2 (X11DRV_PEN_SelectObject+0x162 [pen.c:70]): jmp 0x40858b07 (X11DRV_PEN_SelectObject+0x197 [pen.c:70]) 0x40858ad4 (X11DRV_PEN_SelectObject+0x164 [pen.c:70]): leal 0xffff68c2(%ebx),%eax 0x40858ada (X11DRV_PEN_SelectObject+0x16a [pen.c:70]): movl %eax,0x20(%esi) 0x40858add (X11DRV_PEN_SelectObject+0x16d [pen.c:70]): movl $0x2,0x24(%esi) 0x40858ae4 (X11DRV_PEN_SelectObject+0x174 [pen.c:70]): jmp 0x40858b07 (X11DRV_PEN_SelectObject+0x197 [pen.c:70]) 0x40858ae6 (X11DRV_PEN_SelectObject+0x176 [pen.c:70]): movl 0x88c(%ebx),%edx 0x40858aec (X11DRV_PEN_SelectObject+0x17c [pen.c:70]): testb $0x1,0x0(%edx) 0x40858aef (X11DRV_PEN_SelectObject+0x17f [pen.c:70]): jz 0x40858b07 (X11DRV_PEN_SelectObject+0x197 [pen.c:70]) 0x40858af1 (X11DRV_PEN_SelectObject+0x181 [pen.c:70]): leal 0xffff68d4(%ebx),%eax 0x40858af7 (X11DRV_PEN_SelectObject+0x187 [pen.c:70]): pushl %eax 0x40858af8 (X11DRV_PEN_SelectObject+0x188 [pen.c:70]): leal 0xffff68f3(%ebx),%eax 0x40858afe (X11DRV_PEN_SelectObject+0x18e [pen.c:70]): pushl %eax 0x40858aff (X11DRV_PEN_SelectObject+0x18f [pen.c:70]): pushl %edx 0x40858b00 (X11DRV_PEN_SelectObject+0x190 [pen.c:70]): pushl $0x0 0x40858b02 (X11DRV_PEN_SelectObject+0x192 [pen.c:70]): call 0x4083ff50 (_init+0x1c74) 0x40858b07 (X11DRV_PEN_SelectObject+0x197 [pen.c:70]): movl 0xffffffc4(%ebp),%eax 0x40858b0a (X11DRV_PEN_SelectObject+0x19a [pen.c:70]): leal 0xffffffb8(%ebp),%esp 0x40858b0d (X11DRV_PEN_SelectObject+0x19d [pen.c:70]): popl %ebx 0x40858b0e (X11DRV_PEN_SelectObject+0x19e [pen.c:70]): popl %esi 0x40858b0f (X11DRV_PEN_SelectObject+0x19f [pen.c:70]): popl %edi 0x40858b10 (X11DRV_PEN_SelectObject+0x1a0 [pen.c:70]): leave 0x40858b11 (X11DRV_PEN_SelectObject+0x1a1 [pen.c:70]): ret Wine-dbg>