DX structs with raw slots only allowed on conservative gencgc.
authorAlastair Bridgewater <nyef@virtdev-1.lisphacker.com>
Thu, 27 Oct 2011 13:16:08 +0000 (09:16 -0400)
committerAlastair Bridgewater <nyef@arisu.lisphacker.com>
Thu, 15 Dec 2011 14:41:53 +0000 (09:41 -0500)
commit4b19efed9aaf7c0c7aedea20d8359e3bebd3d44f
tree009abc23c6799f8ae039c98428441d87ddf5af49
parent6753b552e912fae737ef2ee2b9fbc59c265ea941
DX structs with raw slots only allowed on conservative gencgc.

  * Unless the control stack is conservatively scavenged, any
unboxed data could lead the GC to either corrupt the stack,
corrupt the heap, or just die screaming.

  * Thus, all unboxed data must be stored on the number stack
on such systems.  However, the number stack isn't scavenged
for boxed data, so we can't store any object that contains
both boxed and unboxed words if the unboxed words can appear
to the GC as anything other than a FIXNUM (thus, aligned
pointers are safe to store on the control stack).

  * All INSTANCE objects have a boxed slot, the LAYOUT slot.
If an instance also has raw slots then it cannot go on either
stack, and must be heap-allocated.

  * And none of this applies if the stack is conservatively
scavenged, which means (and gencgc c-stack-is-control-stack).
On such targets, we can dump whatever we want to the control
stack, and the GC won't complain at all.
src/compiler/generic/vm-ir2tran.lisp