Sometime ago the cmucl executable feature was broken on both Linux and FreeBSD (the only systems supporting this feature). After some investigation, I think I have this fixed on Linux, at least for openSuSE 11.2, which is my build system. There were two issues involved. One is that the linker script was incompatible with openSuSE 11.2. I've replaced this with a new one generated from the the version of ld on openSuSE 11.2. The seconde issue was that, on openSuSE, tzset calls malloc, and this happens very early. So what happens is that the C heap is located in the same location as the Lisp heap, and cmucl crashes. Moving the call to tzset much later fixes this. (I don't know why we need to call tzset.) Apparently, this is only an issue on the cmucl fat executable. On a normal executable, the call to malloc takes space that is not from the Lisp heap. The net result is that executables appear to be working on Linux once again. I do not know why FreeBSD no longer works, but perhaps someone who cares can look at updating the FreeBSD linker script and checking to see if malloc is being called too early and messing up the dynamic space. Finally, FWIW, sparc now supports executable too, due to a side effect of moving the undefined_tramp and closure_tramp routines from C (assembly) to Lisp assembly functions. These will be enabled in the next snapshot. Ray
participants (1)
-
Raymond Toy