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