I have started to get a floating point problem "First chance exception: invalid float operation in 32-bit code (0x00e6b6f9).". I don't know a lot about floating point but from what I have read, the FLDCW most likely is unmasking an interrupt when it reloads the control word. Winedbg does not seem to have support for displaying floating point registers and control word etc. Can someone point me in the direction of getting to the bottom os this?
Jeff Latimer
Wine-dbg> 0x00e6b6d1 WineEngGetGlyphOutline+0x1d9 [/winf/dlls/gdi/freetype.c:2818] in gdi32: movl 0xffffff00(%ebp),%eax 2818 left = (INT)(ft_face->glyph->metrics.horiBearingX * widthRatio) & -64; Wine-dbg> 0x00e6b6d7 WineEngGetGlyphOutline+0x1df [/winf/dlls/gdi/freetype.c:2818] in gdi32: movl 0x54(%eax),%ecx 2818 left = (INT)(ft_face->glyph->metrics.horiBearingX * widthRatio) & -64; Wine-dbg> 0x00e6b6da WineEngGetGlyphOutline+0x1e2 [/winf/dlls/gdi/freetype.c:2818] in gdi32: movl 0x20(%ecx),%edx 2818 left = (INT)(ft_face->glyph->metrics.horiBearingX * widthRatio) & -64; Wine-dbg> 0x00e6b6dd WineEngGetGlyphOutline+0x1e5 [/winf/dlls/gdi/freetype.c:2818] in gdi32: fld %st(0) 2818 left = (INT)(ft_face->glyph->metrics.horiBearingX * widthRatio) & -64; Wine-dbg> 0x00e6b6df WineEngGetGlyphOutline+0x1e7 [/winf/dlls/gdi/freetype.c:2818] in gdi32: pushl %edx 2818 left = (INT)(ft_face->glyph->metrics.horiBearingX * widthRatio) & -64; Wine-dbg> 0x00e6b6e0 WineEngGetGlyphOutline+0x1e8 [/winf/dlls/gdi/freetype.c:2818] in gdi32: fimuls 0x0(%esp) 2818 left = (INT)(ft_face->glyph->metrics.horiBearingX * widthRatio) & -64; Wine-dbg> 0x00e6b6e3 WineEngGetGlyphOutline+0x1eb [/winf/dlls/gdi/freetype.c:2818] in gdi32: fnstcw 0xffffff92(%ebp) 2818 left = (INT)(ft_face->glyph->metrics.horiBearingX * widthRatio) & -64; Wine-dbg> 0x00e6b6e6 WineEngGetGlyphOutline+0x1ee [/winf/dlls/gdi/freetype.c:2818] in gdi32: movw 0xffffff92(%ebp),%ax 2818 left = (INT)(ft_face->glyph->metrics.horiBearingX * widthRatio) & -64; Wine-dbg> 0x00e6b6ea WineEngGetGlyphOutline+0x1f2 [/winf/dlls/gdi/freetype.c:2818] in gdi32: movb $0xc,%ah 2818 left = (INT)(ft_face->glyph->metrics.horiBearingX * widthRatio) & -64; Wine-dbg> 0x00e6b6ec WineEngGetGlyphOutline+0x1f4 [/winf/dlls/gdi/freetype.c:2818] in gdi32: movw %ax,0xffffff90(%ebp) 2818 left = (INT)(ft_face->glyph->metrics.horiBearingX * widthRatio) & -64; Wine-dbg> 0x00e6b6f0 WineEngGetGlyphOutline+0x1f8 [/winf/dlls/gdi/freetype.c:2818] in gdi32: fldcw 0xffffff90(%ebp) 2818 left = (INT)(ft_face->glyph->metrics.horiBearingX * widthRatio) & -64; Wine-dbg> 0x00e6b6f3 WineEngGetGlyphOutline+0x1fb [/winf/dlls/gdi/freetype.c:2818] in gdi32: fistps 0xffffff10(%ebp) 2818 left = (INT)(ft_face->glyph->metrics.horiBearingX * widthRatio) & -64; Wine-dbg> 0x00e6b6f9 WineEngGetGlyphOutline+0x201 [/winf/dlls/gdi/freetype.c:2818] in gdi32: fldcw 0xffffff92(%ebp) 2818 left = (INT)(ft_face->glyph->metrics.horiBearingX * widthRatio) & -64;
Wine-dbg> Register dump: CS:0073 SS:007b DS:007b ES:007b FS:1007 GS:0033 EIP:00e6b6f9 ESP:7fc5cce0 EBP:7fc5ce2c EFLAGS:00200206( - 00 - -IP1) EAX:7d820c72 EBX:00e94bc8 ECX:7d82ed70 EDX:00030840 ESI:7fedcb40 EDI:0000001a Wine-dbg>stepi First chance exception: invalid float operation in 32-bit code (0x00e6b6f9). Register dump: CS:0073 SS:007b DS:007b ES:007b FS:1007 GS:0033 EIP:00e6b6f9 ESP:7fc5cce0 EBP:7fc5ce2c EFLAGS:00210306( - 00 -RITP1) EAX:7d820c72 EBX:00e94bc8 ECX:7d82ed70 EDX:00030840 ESI:7fedcb40 EDI:0000001a Stack dump: 0x7fc5cce0: 00030840 7fe90020 7fe90000 7fc5cd0c 0x7fc5ccf0: 0026d2aa 00000000 00000000 00000002 0x7fc5cd00: 00e94bc8 00000122 7fc5ce10 7fc5cd6c 0x7fc5cd10: 00e71fee 7fe90000 00000000 7fedc218 0x7fc5cd20: 7feddac2 001716ae 00e8edda 7d828d90 0x7fc5cd30: 0000000e 00000010 7d828f00 7d828e68 0200: sel=1007 base=7befc000 limit=00001fff 32-bit rw- Backtrace: =>1 0x00e6b6f9 WineEngGetGlyphOutline+0x201 [/winf/dlls/gdi/freetype.c:2818] in gdi32 (0x00e6b6f9) 2 0x00e72810 WineEngGetTextExtentPoint+0xd0(font=0x7fedc6b0, wstr=0x7fc5e3bc, count=0xa, size=0x7fc5cf54) [/winf/dlls/gdi/freetype.c:3685] in gdi32 (0x00e72810) 3 0x00e64347 GetTextExtentPoint32W+0x47(hdc=0x1c0, str=0x7fc5e3bc, count=0xa, size=0x7fc5cf54) [/winf/dlls/gdi/font.c:1104] in gdi32 (0x00e64347) 4 0x00e67010 GetCharacterPlacementW+0x134(hdc=0x1c0, lpString=0x7fc5e3bc, uCount=0xa, nMaxExtent=0x0, lpResults=0x7fc5e398, dwFlags=0x8103b) [/winf/dlls/gdi/font.c:2780] in gdi32 (0x00e67010) 5 0x004022b5 in script_test (+0x22b5) (0x004022b5) 6 0x00401141 in script_test (+0x1141) (0x00401141) 7 0x3266f6e6 in cc3260 (+0x6f6e6) (0x3266f6e6) 8 0x00000000 (0x00000000) 9 0x00793ccb wine_switch_to_stack+0x17 in libwine.so.1 (0x00793ccb) 0x00e6b6f9 WineEngGetGlyphOutline+0x201 [/winf/dlls/gdi/freetype.c:2818] in gdi32: fldcw 0xffffff92(%ebp) 2818 left = (INT)(ft_face->glyph->metrics.horiBearingX * widthRatio) & -64;