Changeset 6270


Ignore:
Timestamp:
Apr 16, 2007, 6:37:18 AM (15 years ago)
Author:
gb
Message:

Map SIGBUS signal to INVALID-MEMORY-ACCESS condition.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ccl/level-1/x86-trap-support.lisp

    r5619 r6270  
    173173;;; If the signal number is 0, other arguments (besides the exception context XP)
    174174;;; may not be meaningful.
    175 (defcallback xcmain (:address xp :address xcf :int signal :int code  :int)
    176   (declare (ignorable rpc))
     175(defcallback xcmain (:address xp :address xcf :int signal :long code :long addr  :int)
    177176  (let* ((frame-ptr (macptr->fixnum xcf)))
    178177    (cond ((zerop signal)               ;thread interrupt
     
    203202           ;; Stack overflow.
    204203           (let* ((on-tsp (not (eql 0 code))))
    205            (unwind-protect
    206                 (%error
    207                  (make-condition
    208                   'stack-overflow-condition
    209                   :format-control "Stack overflow on ~a stack."
    210                   :format-arguments (list
    211                                      (if on-tsp "temp" "value"))
    212                                      )
    213                  nil frame-ptr)
    214              (ff-call (%kernel-import target::kernel-import-restore-soft-stack-limit)
    215                       :unsigned-fullword code
    216                       :void))))))
     204             (unwind-protect
     205                  (%error
     206                   (make-condition
     207                    'stack-overflow-condition
     208                    :format-control "Stack overflow on ~a stack."
     209                    :format-arguments (list
     210                                       (if on-tsp "temp" "value"))
     211                    )
     212                   nil frame-ptr)
     213               (ff-call (%kernel-import target::kernel-import-restore-soft-stack-limit)
     214                        :unsigned-fullword code
     215                        :void))))
     216          ((= signal #$SIGBUS)
     217           (%error (make-condition 'invalid-memory-access
     218                    :address addr
     219                    :write-p (not (zerop code)))
     220                   ()
     221                   frame-ptr))))
    217222  0)
    218223
Note: See TracChangeset for help on using the changeset viewer.