A brief status update on wip-rtl. If this means nothing to you, just
skip this mail; at some point in the future there will be more
I started to look at static constant allocation. In order to do so I
needed an object format that could link together different sections with
different permissions and alignments, so I imported an old ELF branch I
had hanging around, and adapted it to work with wip-rtl. Now the
interface is that you make an assembler, emit some programs, then link,
resulting in a list of ELF objects. You then link-elf to produce a
bytevector, which can be written to disk, then loaded with
load-thunk-from-disk from (system vm objcode). You can also load via
load-thunk-from-memory, which takes a bytevector. In that case you
might want to skip alignment and permissions and just operate on
read-write memory, so there is the #:page-aligned? kwarg to link-elf for
Instructions that take constants take them literally. The various
emit-foo procedures will add the constant to a table if necessary, and
link-objects will serialize a constant table if necessary. Not sure if
this is being too clever or not.
Currently there are a couple of broken bits. One is that we don't
currently write an init thunk, to fix up the car and cdr links in static
pairs, for example. Also a lot of it is untested. But we needed the
loader facility so that we could actually write tests, so hopefully
things will come together.
Anyway, the hack is ongoing, if a bit sporadic. Hopefully we'll be able
to start compiling some Scheme shortly.