Hello,
I'm trying to run TaxCut under CVS Wine. The install went smoothly, but when I try to run the software it locks up before any windows appear. From the trace, it seems that it might be related to exception handling in Wine.
The first sign that something is wrong is this:
00000009:Call ntdll.RtlRaiseException(407a2764) ret=40a34052 fs=008f eax=780ca51c ebx=40a54c2c ecx=41915e28 edx=4207c450 esi=407a2764 edi=00000001 ebp=407a27bc esp=407a2764 ds=002b es=002b gs=0000 flags=00000202 00000009:trace:seh:EXC_RtlRaiseException code=80000100 flags=1 addr=0x780ca51c 00000009:trace:seh:EXC_RtlRaiseException info[0]=40a4a400 00000009:trace:seh:EXC_RtlRaiseException info[1]=40a4aa85 00000009:fixme:seh:EXC_RtlRaiseException call to unimplemented function localeconv 0009: queue_exception_event( first=1, record={context={flags=00010007,eax=780ca51c,ebx=40a54c2c,ecx=41915e28,edx=4207c450,esi=407a2764,edi=00000001,ebp=407a27bc,eip=40a34052,esp=407a2764,eflags=00000202,cs=0023,ds=002b,es=002b,fs=008f,gs=0000,dr0=4212a2d0,dr1=000003dc,dr2=4011044c,dr3=407a2544,dr6=4206a3e4,dr7=407a244c,float={400ec340,407a25d4,4011044c,00000000,4206fc84,40110431,4206fc84,4206fc84,40110431,4206fc84,4206fc84,407a247c,4212a2d0,40110827,407a2488,42070836,34613034,66346231,40110827,00000000,66346231,40110827,42047f0d,4212a2d0,00000400,40110428,407a25b8,4206a3e4}},rec={code=80000100,flags=1,rec=(nil),addr=0x780ca51c,params={40a4a400,40a4aa85}} ) 0009: queue_exception_event() = 0 { handle=(nil) }
Then, comes something that looks like uncontrolled recursive behavior:
00000009:trace:seh:EXC_CallHandler calling handler at 0x780e87a6 code=80000100 flags=1 00000009:Call msvcrt.__CxxFrameHandler(407a2764,407a2828,407a2404,407a22ac) ret=400c5842 fs=008f eax=780ee5e8 ebx=400f9144 ecx=40110428 edx=40110480 esi=407a2764 edi=400f8f11 ebp=407a2288 esp=407a225c ds=002b es=002b gs=0000 flags=00000206 00000009:Ret msvcrt.__CxxFrameHandler() retval=00000001 ret=400c5842 fs=008f eax=00000001 ebx=400f9144 ecx=40110428 edx=40110480 esi=407a2764 edi=400f8f11 ebp=407a2288 esp=407a225c ds=002b es=002b gs=0000 flags=00000206 00000009:trace:seh:EXC_CallHandler handler returned 1 00000009:trace:seh:EXC_CallHandler calling handler at 0x780e9f54 code=80000100 flags=1 00000009:Call msvcrt.__CxxFrameHandler(407a2764,407a2854,407a2404,407a22ac) ret=400c5842 fs=008f eax=780f2358 ebx=400f9144 ecx=40110428 edx=40110480 esi=407a2764 edi=400f8f11 ebp=407a2288 esp=407a225c ds=002b es=002b gs=0000 flags=00000206 00000009:Ret msvcrt.__CxxFrameHandler() retval=00000001 ret=400c5842 fs=008f eax=00000001 ebx=400f9144 ecx=40110428 edx=40110480 esi=407a2764 edi=400f8f11 ebp=407a2288 esp=407a225c ds=002b es=002b gs=0000 flags=00000206 00000009:trace:seh:EXC_CallHandler handler returned 1 00000009:trace:seh:EXC_CallHandler calling handler at 0x780e8a1c code=80000100 flags=1 00000009:Call msvcrt.__CxxFrameHandler(407a2764,407a28ac,407a2404,407a22ac) ret=400c5842 fs=008f eax=780eeae8 ebx=400f9144 ecx=40110428 edx=40110480 esi=407a2764 edi=400f8f11 ebp=407a2288 esp=407a225c ds=002b es=002b gs=0000 flags=00000206 00000009:Ret msvcrt.__CxxFrameHandler() retval=00000001 ret=400c5842 fs=008f eax=00000001 ebx=400f9144 ecx=40110428 edx=40110480 esi=407a2764 edi=400f8f11 ebp=407a2288 esp=407a225c ds=002b es=002b gs=0000 flags=00000206 00000009:trace:seh:EXC_CallHandler handler returned 1 00000009:trace:seh:EXC_CallHandler calling handler at 0x780e8c24 code=80000100 flags=1 00000009:Call msvcrt.__CxxFrameHandler(407a2764,407a2990,407a2404,407a22ac) ret=400c5842 fs=008f eax=780eefa8 ebx=400f9144 ecx=40110428 edx=40110480 esi=407a2764 edi=400f8f11 ebp=407a2288 esp=407a225c ds=002b es=002b gs=0000 flags=00000206 00000009:trace:seh:cxx_frame_handler handling C++ exception rec 0x407a2764 frame 0x407a2990 trylevel 2 descr 0x780eefa8 nested_frame (nil) exception type: flags 78 destr 0x419151b9 handler 0x1 type info 0x1f 00000009:trace:seh:EXC_RtlRaiseException code=c0000005 flags=0 addr=0x40a38385 00000009:trace:seh:EXC_RtlRaiseException info[0]=00000000 00000009:trace:seh:EXC_RtlRaiseException info[1]=0000001f 0009: queue_exception_event( first=1, record={context={flags=00000000,eax=0000001f,ebx=40a54c2c,ecx=40110428,edx=4011045e,esi=00000000,edi=407a2814,ebp=407a1db4,eip=40a38385,esp=407a1da4,eflags=00010212,cs=0023,ds=002b,es=002b,fs=008f,gs=0000,dr0=00000000,dr1=00000000,dr2=00000000,dr3=00000000,dr6=00000000,dr7=00000000,float={00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000}},rec={code=c0000005,flags=0,rec=(nil),addr=0x40a38385,params={0,1f}} ) 0009: queue_exception_event() = 0 { handle=(nil) }
And then:
00000009:trace:seh:EXC_CallHandler calling handler at 0x400c5798 code=c0000005 flags=0 00000009:trace:seh:EXC_CallHandler handler returned 2 00000009:trace:seh:EXC_CallHandler calling handler at 0x780e87a6 code=c0000005 flags=10 00000009:Call msvcrt.__CxxFrameHandler(406909d0,407a2828,40690a44,40690960) ret=400c5842 fs=008f eax=780ee5e8 ebx=400f9144 ecx=40110428 edx=40110481 esi=406909d0 edi=400f8f11 ebp=4069093c esp=40690910 ds=002b es=002b gs=0000 flags=00000212 00000009:Ret msvcrt.__CxxFrameHandler() retval=00000001 ret=400c5842 fs=008f eax=00000001 ebx=400f9144 ecx=40110428 edx=40110481 esi=406909d0 edi=400f8f11 ebp=4069093c esp=40690910 ds=002b es=002b gs=0000 flags=00000212 00000009:trace:seh:EXC_CallHandler handler returned 1 00000009:trace:seh:EXC_CallHandler calling handler at 0x780e9f54 code=c0000005 flags=10 00000009:Call msvcrt.__CxxFrameHandler(406909d0,407a2854,40690a44,40690960) ret=400c5842 fs=008f eax=780f2358 ebx=400f9144 ecx=40110428 edx=40110481 esi=406909d0 edi=400f8f11 ebp=4069093c esp=40690910 ds=002b es=002b gs=0000 flags=00000212 00000009:Ret msvcrt.__CxxFrameHandler() retval=00000001 ret=400c5842 fs=008f eax=00000001 ebx=400f9144 ecx=40110428 edx=40110481 esi=406909d0 edi=400f8f11 ebp=4069093c esp=40690910 ds=002b es=002b gs=0000 flags=00000212 00000009:trace:seh:EXC_CallHandler handler returned 1 00000009:trace:seh:EXC_CallHandler calling handler at 0x780e8a1c code=c0000005 flags=10 00000009:Call msvcrt.__CxxFrameHandler(406909d0,407a28ac,40690a44,40690960) ret=400c5842 fs=008f eax=780eeae8 ebx=400f9144 ecx=40110428 edx=40110481 esi=406909d0 edi=400f8f11 ebp=4069093c esp=40690910 ds=002b es=002b gs=0000 flags=00000212 00000009:Ret msvcrt.__CxxFrameHandler() retval=00000001 ret=400c5842 fs=008f eax=00000001 ebx=400f9144 ecx=40110428 edx=40110481 esi=406909d0 edi=400f8f11 ebp=4069093c esp=40690910 ds=002b es=002b gs=0000 flags=00000212 00000009:trace:seh:EXC_CallHandler handler returned 1 00000009:trace:seh:EXC_CallHandler calling handler at 0x780e8c24 code=c0000005 flags=10 00000009:Call msvcrt.__CxxFrameHandler(406909d0,407a2990,40690a44,40690960) ret=400c5842 fs=008f eax=780eefa8 ebx=400f9144 ecx=40110428 edx=40110481 esi=406909d0 edi=400f8f11 ebp=4069093c esp=40690910 ds=002b es=002b gs=0000 flags=00000212 00000009:Call kernel32.TlsGetValue(00000002) ret=40a4961a 00000009:Ret kernel32.TlsGetValue() retval=4028c448 ret=40a4961a 00000009:trace:seh:EXC_RtlRaiseException code=c0000005 flags=0 addr=0x40a389cc 00000009:trace:seh:EXC_RtlRaiseException info[0]=00000000 00000009:trace:seh:EXC_RtlRaiseException info[1]=0000001c 0009: queue_exception_event( first=1, record={context={flags=00000000,eax=4028c448,ebx=40a54c2c,ecx=40110428,edx=00000002,esi=00000000,edi=780eefa8,ebp=40690484,eip=40a389cc,esp=40690474,eflags=00010206,cs=0023,ds=002b,es=002b,fs=008f,gs=0000,dr0=00000000,dr1=00000000,dr2=00000000,dr3=42062320,dr6=400e5fc4,dr7=42062320,float={00000000,00000000,00000000,00000000,42062320,40690338,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,42062320,40690374,00000000,42062320,40690380,00000000,42062320,4069038c,40690390}},rec={code=c0000005,flags=0,rec=(nil),addr=0x40a389cc,params={0,1c}} ) 0009: queue_exception_event() = 0 { handle=(nil) }
Followed by:
00000009:trace:seh:EXC_CallHandler calling handler at 0x400c5798 code=c0000005 flags=0 00000009:trace:seh:EXC_CallHandler handler returned 2 00000009:trace:seh:EXC_CallHandler calling handler at 0x400c5798 code=c0000005 flags=10 00000009:trace:seh:EXC_CallHandler handler returned 2 00000009:trace:seh:EXC_CallHandler calling handler at 0x780e87a6 code=c0000005 flags=10 00000009:Call msvcrt.__CxxFrameHandler(4068fe48,407a2828,4068febc,4068fdd8) ret=400c5842 fs=008f eax=780ee5e8 ebx=400f9144 ecx=40110428 edx=40110481 esi=4068fe48 edi=400f8f11 ebp=4068fdb4 esp=4068fd88 ds=002b es=002b gs=0000 flags=00000212
The pattern that strikes me as odd is how the message: "trace:seh:EXC_CallHandler calling... flags=0" keeps repeating, every time adding one more iteration. This seems to go on forever (or for about a million lines of log messages).
Does this sound familiar to anyone? Any ideas on where to start looking?
Thanks,
-Ori Pessach
"Ori Pessach" mail@oripessach.com wrote:
I'm trying to run TaxCut under CVS Wine. The install went smoothly, but when I try to run the software it locks up before any windows appear. From the trace, it seems that it might be related to exception handling in Wine.
The first sign that something is wrong is this:
00000009:Call ntdll.RtlRaiseException(407a2764) ret=40a34052 fs=008f eax=780ca51c ebx=40a54c2c ecx=41915e28 edx=4207c450 esi=407a2764 edi=00000001 ebp=407a27bc esp=407a2764 ds=002b es=002b gs=0000 flags=00000202 00000009:trace:seh:EXC_RtlRaiseException code=80000100 flags=1 addr=0x780ca51c
#define EXCEPTION_WINE_STUB 0x80000100 /* stub entry point called */
I'm sure you don't want to debug this. Better try to find what stub is called and either implement it or replace affected dll with a native one.
Oh. I think you're right - I don't want to debug this. Unless somebody is already working on localeconv(), I don't mind taking a shot at implementing it.
-Ori Pessach
Dmitry Timoshkov wrote:
#define EXCEPTION_WINE_STUB 0x80000100 /* stub entry point called */
I'm sure you don't want to debug this. Better try to find what stub is called and either implement it or replace affected dll with a native one.
"Ori" == Ori Pessach mail@oripessach.com writes:
Ori> Oh. I think you're right - I don't want to debug this. Unless Ori> somebody is already working on localeconv(), I don't mind taking a Ori> shot at implementing it.
Ori> -Ori Pessach
Ori> Dmitry Timoshkov wrote: >> #define EXCEPTION_WINE_STUB 0x80000100 /* stub entry point called */ >>
A recent wine should be more verbose about that. marcus added a patch.
Bye
"Uwe Bonnes" bon@elektron.ikp.physik.tu-darmstadt.de wrote:
Ori> Oh. I think you're right - I don't want to debug this. Unless Ori> somebody is already working on localeconv(), I don't mind taking a Ori> shot at implementing it. Ori> -Ori Pessach Ori> Dmitry Timoshkov wrote: >> #define EXCEPTION_WINE_STUB 0x80000100 /* stub entry point called */ >>
A recent wine should be more verbose about that. marcus added a patch.
I had a look at this. Current Wine just prints function name in the FIXME message without even a DLL name. IMHO Crossover Office has a better patch which adds printing of the message "fixme:DLLNAME:APINAME: .spec empty stub!" from the __wine_unimplemented() implementation in each generated .spec.c file. That patch could be fairly easily imported and would replace current RtlRaiseException hack.
On February 16, 2003 08:25 am, Dmitry Timoshkov wrote:
IMHO Crossover Office has a better patch which adds printing of the message "fixme:DLLNAME:APINAME: .spec empty stub!"
Doesn't this violate the general format we use for debug messages: <class>:<channel>:<message>
Maybe something like this fits a bit better: "fixme:stub:DLLNAME:APINAME: .spec empty stub!"
But if we have a channel for each DLL, which is actually not a bad idea, maybe it's not that bad afterall... :)
"Dimitrie O. Paun" dpaun@rogers.com wrote:
IMHO Crossover Office has a better patch which adds printing of the message "fixme:DLLNAME:APINAME: .spec empty stub!"
Doesn't this violate the general format we use for debug messages: <class>:<channel>:<message>
IMHO it doesn't. DLLNAME plays the role of the channel there.
Maybe something like this fits a bit better: "fixme:stub:DLLNAME:APINAME: .spec empty stub!"
It should be understandable without mentioning the word "stub" two times what the message is about.
But if we have a channel for each DLL, which is actually not a bad idea, maybe it's not that bad afterall... :)
Well, that's actually not a debug channel of course, but a good approximation (read: fake) of it.
"Dmitry Timoshkov" dmitry@baikal.ru writes:
I had a look at this. Current Wine just prints function name in the FIXME message without even a DLL name. IMHO Crossover Office has a better patch which adds printing of the message "fixme:DLLNAME:APINAME: .spec empty stub!" from the __wine_unimplemented() implementation in each generated .spec.c file. That patch could be fairly easily imported and would replace current RtlRaiseException hack.
IMO it's an even worse hack to do it in the .spec.c file. At least in RtlRaiseException it uses the standard debugging macros, which means you can control it with --debugmsg etc.
Am I correct in assuming that a native msvcrt.dll is useful mostly to people porting Windows applications to architectures other than x86?
Since the native msvcrt.dll works with Wine, and is a redistributable, I'm not sure how useful a Wine implementation of it is going to be. Am I missing something?
TaxCut seems to work almost perfectly with a native msvcrt.dll, and a copy of Comic.TTF in Windows/Fonts, by the way. The update feature fails, but everything else I've tried so far seems to work as expected - I haven't completed a return yet, though.
-Ori Pessach
"Ori Pessach" mail@oripessach.com wrote:
Am I correct in assuming that a native msvcrt.dll is useful mostly to people porting Windows applications to architectures other than x86?
If you will replace the word "native" with "builtin" in the above sentence you will be almost right.
Since the native msvcrt.dll works with Wine, and is a redistributable, I'm not sure how useful a Wine implementation of it is going to be. Am I missing something?
You are missing the eventual goal of the Wine project: to have a Win32 layer for *nix with a completely microsoft free code base.
You are missing the eventual goal of the Wine project: to have a Win32 layer for *nix with a completely microsoft free code base.
Moreover, latest EULA states that redistribution must occur on Windows based OSes, so it might not be legal on Wine/*nix combo
A+
Dmitry Timoshkov wrote:
You are missing the eventual goal of the Wine project: to have a Win32 layer for *nix with a completely microsoft free code base.
No - I get the goal of the project. What I'm not clear about is where to draw the line between system components and application components. Is msvcrt.dll shipped with Windows, or with Windows applications?
Eric Pouech wrote:
Moreover, latest EULA states that redistribution must occur on Windows based OSes, so it might not be legal on Wine/*nix combo
I'm not sure they can impose that restriction, now that they were find to be a monopoly. If they could do that, they could just restrict the distribution of anything you need to distribute with a Windows app to make it work, installer components, for example
-Ori Pessach
Ori Pessach wrote:
Dmitry Timoshkov wrote:
You are missing the eventual goal of the Wine project: to have a Win32 layer for *nix with a completely microsoft free code base.
No - I get the goal of the project. What I'm not clear about is where to draw the line between system components and application components. Is msvcrt.dll shipped with Windows, or with Windows applications?
Both. It is not uncommon for an application to supply its own version of this DLL. However we need to make sure that the built in version works as well as the one supplied by Microsoft.
Eric Pouech wrote:
Moreover, latest EULA states that redistribution must occur on Windows based OSes, so it might not be legal on Wine/*nix combo
I'm not sure they can impose that restriction, now that they were find to be a monopoly. If they could do that, they could just restrict the distribution of anything you need to distribute with a Windows app to make it work, installer components, for example
That, I suppose is up to the lawyers. Regardless of legalities we need to implement it in order for winelib applications to work.
--
Tony Lambregts