anchor.diff:    (let ((self (current-thread)))
       (unwind-protect
            (catch 'terminate-thread
  -           (setf (thread-inhibit-interrupt self) nil)
  -           (funcall function))
  +           (with-footholds-permitted
  +             (funcall function)))
         ;; Cleanup, terminate the thread.
         (sys.int::%cli)
         (%lock-thread self)
  
positive.code: (defconstant +thread-preemption-pending+ 8)
  (defconstant +thread-next+ 9)
  (defconstant +thread-prev+ 10)
  (defconstant +thread-inhibit-interrupt+ 11)
  (defconstant +thread-mv-slots-start+ 32)
  (defconstant +thread-mv-slots-end+ 128)
  (defconstant +thread-tls-slots-start+ 128)
  
negative.code:     (when (eql next current)
        ;; Staying on the same thread, unlock and return.
        (%unlock-thread current)
        (sys.int::%sti)
        (return-from %reschedule))
      (%lock-thread next)
      (setf (%thread-state next) :active)
      (%%switch-to-thread current next)))
  
  ;;; Switch to a new thread. Takes the current thread and the new thread as arguments.
  (sys.int::define-lap-function %%switch-to-thread ()
    (:gc :no-frame)
    ;; Save frame pointer.
  