Re: Build failure on Windows

Wolfgang Thaller <[email protected]>
Newsgroups gmane.comp.lang.haskell.cvs.all
Message-ID <C228A91A-D558-48C1-9BB6-F63F5F8A55DA__37275.8790654645$1166605175$gmane$org@gmx.net>
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.

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.

I have no idea why things worked with ghc-6.6. Are all those  
functions unused in 6.6?


Hope that helps,

Wolfgang
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.