anchor.diff:  (defun scavenge-full-save-thread (thread)
     ;; Thread has stopped due to an interrupt.
     ;; Examine it, then perform normal stack scavenging.
  -  (when *gc-debug-scavenge-stack* (gc-log "Scav full-save thread..."))
  +  (when *gc-debug-scavenge-stack* (gc-log "Scav full-save thread..." thread))
     (let* ((return-address (mezzano.supervisor:thread-state-rip thread))
            (frame-pointer (mezzano.supervisor:thread-frame-pointer thread))
            (stack-pointer (mezzano.supervisor:thread-stack-pointer thread))
  
positive.code:          (scavenge-regular-stack-frame frame-pointer stack-pointer framep
                                         layout-address layout-length
                                         incoming-arguments pushed-values)
           ;; Stop after seeing a zerop frame pointer.
           (when (eql frame-pointer 0)
             (when *gc-debug-scavenge-stack* (gc-log "Done scav stack."))
             (return))
           (when (not framep) ; ???
             (mezzano.supervisor:panic "No frame, but no end in sight?"))
           (psetf return-address (memref-unsigned-byte-64 frame-pointer 1)
                  stack-pointer (+ frame-pointer 16)
                  frame-pointer (memref-unsigned-byte-64 frame-pointer 0))))))
  
  (defun scavenge-thread-data-registers (thread)
    (scavengef (mezzano.supervisor:thread-state-r8-value thread))
  
negative.code: (defun scavenge-regular-stack-frame (frame-pointer stack-pointer framep
                                       layout-address layout-length
                                       incoming-arguments pushed-values)
    (when (and framep
               (zerop frame-pointer))
      (mezzano.supervisor:panic "Zero frame-pointer in framed function."))
    ;; Scan stack slots.
    (dotimes (slot layout-length)
      (multiple-value-bind (offset bit)
  