Segmentation fault after new wine update and install

Vincent Béron vberon at mecano.gme.usherb.ca
Wed Sep 10 14:53:31 CDT 2003


Le mer 10/09/2003 à 14:14, Shachar Shemesh a écrit :
> Vincent Béron wrote:
> 
> >Le mer 10/09/2003 à 11:51, Shachar Shemesh a écrit :
> >  
> >
> >>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.
> >>    
> >>
> >
> >I'm leaning towards the inline InterlockedCompareExchange from
> >winbase.h, as if I rebuild ntdll with -O1 miscemu/wine is built
> >correctly (ie ntdll doesn't have any undefined references). It's from
> >win32/device.c and win32/except.c which call
> >InterlockedCompareExchangePointer(), which itself calls
> >InterlockedCompareExchange() from winbase.h.
> >
> >"extern inline InterlockedCompareExchange() {return bar();}" seems a bit
> >odd for a function definition. What the purpose of having both extern
> >and inline?
> >  
> >
> Probably should be "static inline". That's the way you usually do it 
> inside headers.

That's how InterlockedCompareExchangePointer() is defined. I'll try
that.

Result: fails, because it's only a replacement implementation (hence the
extern). Actually, only defining InterlockedCompareExchange as static
inline works, but it becomes highly tricky, since there's a slew of
other functions still defined as extern inline in the same chunk of
winbase.h.

> 
> I was under the impression that InterlockedCompareExchange rightfully 
> belonged in kernel32 (that's where nm said it was defined, after all). 
> That's why I thought this was a circular dependancy.
> 
> Ahh, I now see why I thought so. It is also defined in 
> dlls/kernel/sync.c as a regular function.
> MSDN says this:
> 
> *Client: *Included in Windows XP, Windows 2000 Professional, Windows NT 
> Workstation 4.0, Windows Me, and Windows 98.
> *Server: *Included in Windows Server 2003, Windows 2000 Server, and 
> Windows NT Server 4.0.
> *Header: *Declared in Winbase.h; include Windows.h.
> *Library: *Use Kernel32.lib.
> 
> I think it's probably a bad idea to use this function (actually, 
> InterlockedCompareExchangePointer) from ntdll at all. This is a circular 
> dependancy, even if we manage to get away with it using optimizer tricks.

Dll separation issue then.

> While I think the the "-lntdll" is a strange kludge in miscemu/wine 
> makefile, and therefor should go if it's indeed not necessary, I don't 
> think it is correct to load kernel32 before ntdll. The DLLs obviously 
> depend one on the other in the opposite order (or, more precisely, should).

Actually, wine doesn't run even if it links if I remove -lntdll. So it
must stay as a dependency of wine.

Vincent





More information about the wine-devel mailing list