It is NULL-TN and the GC card table base register, and maybe the global
safepoint page pointer too. The card table and safepoint page are each
constant offsets from NIL.
Subsequent changes will allow relocating static space. In fact this change
does not relax the sub-2Gb constraint yet, because alien calls still use
a 32-bit signed immediate operand to refer to an absolute address thusly:
FF14252803E07F CALL [#x7FE00328] ; getpid
Tested on +/-{sb-thread,immobile-space,mark-region-gc,win32}
It is NULL-TN and the GC card table base register, and maybe the global
safepoint page pointer too. The card table and safepoint page are each
constant offsets from NIL.
Subsequent changes will allow relocating static space. In fact this change
does not relax the sub-2Gb constraint yet, because alien calls still use
a 32-bit signed immediate operand to refer to an absolute address thusly:
FF14252803E07F CALL [#x7FE00328] ; getpid
Tested on +/-{sb-thread,immobile-space,mark-region-gc,win32}
* Teach PREPARE-ELF to allow for more than one string and symbol
* Return a struct from parse-header instead of multiple values
* Rename linkage-space slots to ALIEN-LINKAGE-SPACE
(anticpating subsequent addition of lisp-linkage-space)
To get ths feature you have to add --with-permgen which is like an extension
of static space for layouts only. I plan to make the space relocatable and
potentially GCable after figuring out how much mutator performance loss
without compact-instance-header is due to greater memory consumption, and/or
whether it's worth the trouble to deal with mortality or lack thereof.
Anticipating that FDEFNs can be subsumed by something other than 1st-class
objects, we'll need a unified space of lisp function pointers. I tried to pick
a non-conflicting name for such space, but "linkage table" really fits.
Therefore this change renames the existing table. It was FOREIGN-LINKAGE-TABLE
in CMUCL, but "ALIEN" requires fewer keystrokes and matches DEFINE-ALIEN.
By creating packages on demand only for those symbols that actually
get loaded during genesis, we no longer create packages in the target
that aren't needed. This makes cross-compilation and cold loading
custom builds with stuff added or removed more flexible. It also
allows us to create packages normally without the extra indirection of
making package data objects in the future. This also centralizes the
creation of the packages COMMON-LISP, COMMON-LISP-USER, and KEYWORD,
allowing docstrings to be initialized all in one place.
We also define a cross compiler version of PACKAGE-NAME that returns
COMMON-LISP for the XC-STRICT-CL and SB-XC packages, since this could
potentially get confusing.
Not technically wrong, but in Armed Bear Common Lisp 1.3.0
CL-USER(1): (read-from-string "::foo") -> :|:FOO|
And so we got 'bad DEFPACKAGE option: (:|:USE| "CL")'