CMUCL executables
Raymond Toy
toy.raymond at gmail.com
Mon Jul 26 18:10:19 CEST 2010
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
More information about the cmucl-imp
mailing list