[PATCH 2/2] widl: Optimise the generated code by skipping calls calling the type function directly for some reference pointers.

Alexandre Julliard julliard at winehq.org
Mon Jan 12 10:18:54 CST 2009


"Rob Shearman" <robertshearman at gmail.com> writes:

> Skip calling the Pointer marshalling/unmarshalling/buffer
> sizing/freeing function in this case.
>
> Output code for calling union marshalling/unmarshalling/buffer
> sizing/freeing functions.

Now it breaks the tests:

../../../tools/runtest -q -P wine -M qmgr.dll -T ../../.. -p qmgr_test.exe.so file.c && touch file.ok
wine: Unhandled page fault on read access to 0x001322a8 at address 0x7b86122d (thread 0032), starting debugger...
Unhandled exception: page fault on read access to 0x001322a8 in 32-bit code (0x7b86122d).
Register dump:
 CS:0023 SS:002b DS:002b ES:002b FS:0063 GS:006b
 EIP:7b86122d ESP:0032fcf0 EBP:0032fd18 EFLAGS:00010246(   - 00      -RIZP1)
 EAX:001322a8 EBX:7b8b5818 ECX:7bc904c4 EDX:001322a8
 ESI:ffffffff EDI:00000000
Stack dump:
0x0032fcf0:  00000001 0032fd04 00110014 6055221c
0x0032fd00:  00000001 00000409 0032fd18 7b8b5818
0x0032fd10:  60552980 001322a8 0032fd48 7b863944
0x0032fd20:  00000409 00000000 001322a8 ffffffff
0x0032fd30:  60552980 ffffffff 0032fd58 6055221c
0x0032fd40:  00000000 60550060 0032fd78 6054ca20
Backtrace:
=>0 0x7b86122d CompareStringW+0x12d(lcid=1033, style=0, str1=0x1322a8, len1=0, str2=0x60552980, len2=-1) [/home/julliard/wine/wine/dlls/kernel32/../../include/wine/unicode.h:216] in kernel32 (0x0032fd18)
  1 0x7b863944 lstrcmpW+0x64(str1=<register EDI not in topmost frame>, str2=<register ESI not in topmost frame>) [/home/julliard/wine/wine/dlls/kernel32/locale.c:2830] in kernel32 (0x0032fd48)
  2 0x6054ca20 test_GetRemoteName+0x90() [/home/julliard/wine/wine/dlls/qmgr/tests/file.c:127] in qmgr_test (0x0032fd78)
  3 0x6054ccf4 func_file+0x274() [/home/julliard/wine/wine/dlls/qmgr/tests/file.c:108] in qmgr_test (0x00320000)
  4 0x00000000 (0x00000000)
0x7b86122d CompareStringW+0x12d [/home/julliard/wine/wine/dlls/kernel32/../../include/wine/unicode.h:216] in kernel32: cmpw	$0,0x0(%eax)
216	    while (*s) s++;


-- 
Alexandre Julliard
julliard at winehq.org



More information about the wine-devel mailing list