Segmentation fault after new wine update and install

Shachar Shemesh wine-devel at shemesh.biz
Wed Sep 10 10:51:41 CDT 2003


Vincent Béron wrote:

>Le mer 10/09/2003 à 11:13, Vincent Béron a écrit :
>  
>
>>Le mar 09/09/2003 à 12:34, Juraj Hercek a écrit :
>>    
>>
>>>I've fixed the error on my side with 
>>>WINEDLLPATH="/usr/local/lib/wine:.". Anyways I think it's a workaround 
>>>not a solution... Since I don't know much about initialization, I would 
>>>leave the real fix for someone more skillful.
>>>      
>>>
>>It seems like if WINEDLLPATH is set, Wine dlls are only searched for in
>>it and nowhere else. I'll verify if that's the case or not, but that's
>>my gut feeling for now. Is it the behaviour we want?
>>    
>>
>
>Further investigation reveals that the problem lies in kernel32.dll.so
>not being loaded yet when ntdll.dll.so fails to be found in
>dll_paths[i].
>  
>
That's exactly the problem I'm having with compiling Wine without 
optimizations. the wine binary tries to link with ntdll. ntdll needs 
"InterlockedCompareExchange" from kernel32. In my case, this translates 
to a compilation error, which I have not managed to eliminate.

Ok, the tie breaker is in.
On Windows 2000, ntdll.dll is not depnding on ANYTHING else. On the 
other hand, kernel32.dll does depend on ntdll.dll. This means that we 
have a circular dependancy in Wine that is not there in Windows 2000.

>Would it be acceptable to swap the following 2 lines in wine_init (sorry
>about the wrapping):
>if (!(ntdll = dlopen_dll( "ntdll.dll", error, error_size, 0,
>&file_exists ))) return;
>if (!dlopen_dll( "kernel32.dll", error, error_size, 0, &file_exists ))
>return;
>  
>
I think it would be wrong. Kernel32 obviously does depend on ntdll. It 
would probably be better to figure out why ntdll depends on kernel32 (we 
know that - InterlockedCompareExchange), and remove that.

>so kernel32.dll is opened before ntdll.dll, or is there a dependency
>from kernel32.dll to ntdll.dll?
>  
>
Unfortunetly, there is in Wine too.

>Or is it possible to move the pthread_init function elsewhere, to
>someplace called before ntdll.dll is loaded?
>  
>
Do "ldd miscemu/wine" for an answer - ntdll is loaded by the Linux 
linker, even if dlopen was not called at all. It's an interesting 
question why we need the dlopen, then.

>Vincent
>  
>
       Shachar

-- 
Shachar Shemesh
Open Source integration consultant
Home page & resume - http://www.shemesh.biz/





More information about the wine-devel mailing list