D.gnu - [patch] GDC 0.17 on Solaris/SPARC
- Marcel Martin (47/47) Dec 29 2005 Hello,
- =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= (7/11) Dec 29 2005 Actually I only wanted it to match the other two: "X86" and "PPC"...
Hello, thanks to the holidays I've again had some time to have a look at GDC on Solaris/SPARC. A patch which makes GDC 0.17 work on Solaris 2.9 on SPARC can be found at http://w148.de/~mmartin/d/gdc-0.17-sparc-solaris-patch . I've tested it only with GCC 4.0.2. A lot of stuff is still missing, but GDC itself compiles and can then be used to compile small D programs. Phobos is still problematic, it uses unaligned memory access in many places (those are not allowed by the hardware and lead to bus errors at runtime). Changes - changed version() identifier from "Sparc" to "SPARC" as pointed out by Anders Björklund (way back in February 2005). At the time of my last patch I didn't know "SPARC" is actually an abbreviation (for Scalable Processor Architecture, http://en.wikipedia.org/wiki/SPARC). - "autoconfed" strtof(), it's not available on the system I used. - added a bridge for fpclassify() (it's similar to the AIX code). - adjusted Data_Start and Data_End for the garbage collector (see below) Issues - After some research I still don't know where Solaris' math functions (isinf, signbit, fpclassify, ...) are supposed to be found. Some are in libm.so, some in libsunmath.so, some in both. I don't know what the correct way to handle this is. I wonder if it'd be a good idea to use the GCC builtins. - Data_Start is set to __dso_handle. I don't know what that symbol is for or who put it there, but in the few experiments I did it always marked the start of the data. I guess it's sheer luck this works in my case, but _etext was even worse because using that led to segmentation faults. Boehm GC uses "GC_SysVGetDataStart(0x10000, _etext)" on Solaris, which eventually scans downwards starting at Data_End until it hits a page it can't write. Why isn't Boehm GC used anymore in GDC? Especially all the code that deals with architecture-specific differences is already in there. It seems using Phobos' GC means that all that has to be rewritten. By the way, libphobos' Makefile.in has some missing dependencies, since parallel make (make -j) doesn't work and has to be restarted a few times for the build to finish. I will try to fix the unaligned memory accesses in Phobos next, but I wonder if it's possible to implement a -Wcast-align option, which would save some work finding the problematic code. How should those changes be handled? Should they be versioned with something like version(No_Cast_Align)? Lastly, please note that I'm no Solaris expert, just learning about it as I go. It actually took a few days to prepare this patch and I have to admit I'm a bit disappointed it only has 8.4K ... I'm therefore quite impressed by what David has done already, thank you! Marcel
Dec 29 2005
Marcel Martin wrote:- changed version() identifier from "Sparc" to "SPARC" as pointed out by Anders Björklund (way back in February 2005). At the time of my last patch I didn't know "SPARC" is actually an abbreviation (for Scalable Processor Architecture, http://en.wikipedia.org/wiki/SPARC).Actually I only wanted it to match the other two: "X86" and "PPC"... (see http://www.prowiki.org/wiki4d/wiki.cgi?DocComments/Version) But it seems that Walter is in no hurry to add versions not being used by the Digital Mars compiler, to the D language specification. Glad you changed it, though, and best of luck with the aligments. --anders
Dec 29 2005