Strange crash

Dmitry Timoshkov dmitry at sloboda.ru
Wed Apr 18 07:08:12 CDT 2001


"Rein Klazes" <rklazes at xs4all.nl> 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?
-------------- next part --------------
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>


More information about the wine-devel mailing list