anchor.diff:  ;;; Additionally, the number of words to allocate must be even to ensure
   ;;; correct alignment.
   (defun %raw-allocate (words &optional area)
  -  (when (and (boundp '*gc-stack-group*)
  -             (eql (current-stack-group) *gc-stack-group*))
  +  (when (and (boundp '*gc-in-progress*)
  +             *gc-in-progress*)
       (emergency-halt "Allocating from inside the GC!"))
     (ecase area
       ((nil :dynamic)
  
positive.code:     (mumble "complete")
      (clear-gc-light)))
  
  (defun gc-task ()
    (loop
       (gc-cycle)
       (switch-to-stack-group *gc-in-progress*)))
  
  (defun %gc ()
    (when *gc-in-progress*
      (error "Nested GC?!"))
    (unwind-protect
         (progn (setf *gc-in-progress* (current-stack-group))
                (switch-to-stack-group *gc-stack-group*))
      (setf *gc-in-progress* nil)))
  
  ;;; This is the fundamental dynamic allocation function.
  
negative.code:           (t (format t "No free memory for DMA bump pointer???~%")))))
  
  #+nil(add-hook '*early-initialize-hook* 'gc-init-system-memory)
  
  ;;; FIXME: Should use unwind-protect but that conses!!!
  ;;; TODO: Require that this can never nest (ie interrupts are on "all" the time).
  