Re: Build failure on Windows

Simon Marlow <[email protected]>
Newsgroups gmane.comp.lang.haskell.cvs.all
Message-ID <45890B3D.1030600__15144.2937589765$1166609232$gmane$org@microsoft.com>
Wolfgang Thaller wrote:
> On 17-Dec-06, at 12:12 AM, Ian Lynagh wrote:
> 
>> Hi all,
>>
>> Is anyone else seeing a failure with the HEAD linking the stage2  GHC on
>> Windows (XP Pro)? This is under cygwin, and I can build 6.6 fine.  Anyone
>> got any idea what's going wrong?
> 
> 
>  From looking at the code, my guess is that this is a severe case of  
> Calling Convention Confusion.
> 
> GetWindowsDirectoryW and GetSystemDirectoryW are declared as ccall,  and 
> I think they should be stdcall like everything else.

Well spotted, I've fixed those.

> As far as DeleteObject is concerned, Types.hs has a 'foreign import  
> stdcall unsafe "windows.h &DeleteObject"'; there are two problems  with 
> this:
> 
> a) The stdcall modifier is ignored by GHC, the compiler generates a  ref 
> to DeleteObject, not DeleteObject@4 as it should. I think this is  our 
> link error.
> 
> GHC would need to look at the imported thing's FunPtr type to  determine 
> the argument size, and complain if a non-function is  imported as 
> "stdcall".
> 
> b) A pointer to a stdcall function (DeleteObject) is used where a  
> pointer to a ccall function is expected (ForeignPtr finaliser).  AFAICT, 
> this is supposed to cause cause quite horrible crashes (stack  
> corruption), and we should really be glad about that link error.
> 
> So, I think those Get*DirectoyW functions need to be stdcalled, and  
> DeleteObject needs a ccalled wrapper in cbits.

Yes.  Esa (or Ian), any chance you could add a wrapper for DeleteObject?

Cheers,
	Simon
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.