Floating point problem in WineEngGetGlyphOutline

Jeff L lats at yless4u.com.au
Mon Mar 6 05:57:16 CST 2006


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;




More information about the wine-devel mailing list