Re: Yasm r1713 fixed; building and Windows-native

Peter Tanski <[email protected]>
Newsgroups gmane.comp.lang.haskell.cvs.all
Message-ID <163F5318-9337-4126-BD03-DA96367D013F__41633.7624229074$1166579528$gmane$org@cox.net>
On Dec 19, 2006, at 6:46 PM, Wolfgang Thaller wrote:
> On 19-Dec-06, at 9:10 PM, Peter Tanski wrote:
>> As you would expect, there are few areas where mingw32- 
>> conditional  HOST settings really overlap the TARGET settings,  
>> notably code in /compiler/cmm/CLabel.hs and compiler/nativeGen/ 
>> PositionIndependentCode.hs.
>
> Well, whenever there is "mingw32" in CLabel.hs or  
> PositionIndependentCode.hs, what is really meant is "windows". If  
> there is any HOST conditional there, then that's probably a bug.

Thanks!  So it would probably be better to test for three alternative  
defines: mingw32, cygwin and windows.  (The new define for "Windows- 
native" is i386_unknown_windows, target: windows_TARGET_OS; dynamic  
cross-compilation of x86_64 code might be supported under an -mcpu or  
-mtune flag, like gcc's -mcpu=x86_64.)

For CLabel.hs and PositionIndepentCode.hs all the mingw32 defines are  
to TARGET_OS, so no bugs :)  The problem is where mingw32 and cygwin  
differ from Win32 or Win64--I don't know enough of their internals to  
tell; so far I am sticking with the PE-COFF spec and haven't yet  
learned about any differences in calling conventions between mingw,  
cygwin and windows.

>> Ian: do you think some of the problems with the cygwin build might  
>> be related to this line in compiler/cmm/CLabel.hs:584 (labelDynamic):
>> 	#if mingw32_TARGET_OS
>> 	   ForeignLabel _ _ d  -> d
>> 	#else
>> that is, labelDynamic might give false positives for dynamic code  
>> on cygwin?
>
> It will probably cause problems for foreign functions that are  
> *not* imported from a DLL. It should cause linker errors involving  
> undefined __imp__foo symbols (is that the kind of breakage that  
> occurs in the cygwin build?).

Ian posted problem with cygwin in a message, "Build failure on  
Windows," at http://www.haskell.org/pipermail/cvs-all/2006-December/ 
052191.html .  The failures are undefined references to functions in  
libHSWin32.a, but I haven't looked at the real symbols to see if they  
have the __imp__ prefix--from the linker response, i.e.,  
"DeleteObject", they don't seem to.

> Windows tolerates false negatives for imported functions (and even  
> for imported data with recent GNU linker versions), and I think  
> that "d" flag in the ForeignLabel is never set correctly by other  
> code, so it is probably always False.

 From my perspective that is good news: no differences, change is  
easy :)

Cheers,
Pete
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.