Raymond Toy pushed to branch rtoy-mmap-anon-control-and-binding-stacks at cmucl / cmucl

Commits:

8 changed files:

Changes:

  • src/code/package.lisp
    --- a/src/code/package.lisp
    +++ b/src/code/package.lisp
    @@ -1204,23 +1204,25 @@
     ;;;    Change the name if we can, blast any old nicknames and then
     ;;; add in any new ones.
     ;;;
    -(defun rename-package (package name &optional (nicknames ()))
    -  "Changes the name and nicknames for a package."
    +(defun rename-package (package new-name &optional (new-nicknames ()))
    +  "Replaces the name and nicknames of Package. The old name and all of
    +  the old nicknames of Package are eliminated and are replaced by
    +  New-Name and New-Nicknames."
       (let* ((package (package-or-lose package))
    -	 (name (string name))
    -	 (found (find-package name)))
    +	 (new-name (string new-name))
    +	 (found (find-package new-name)))
         (unless (or (not found) (eq found package))
           (error 'simple-package-error
    -             :package name
    +             :package new-name
                  :format-control (intl:gettext "A package named ~S already exists.")
    -             :format-arguments (list name)))
    +             :format-arguments (list new-name)))
         (remhash (package-%name package) *package-names*)
         (dolist (n (package-%nicknames package))
           (remhash n *package-names*))
    -     (setf (package-%name package) name)
    -    (setf (gethash name *package-names*) package)
    +     (setf (package-%name package) new-name)
    +    (setf (gethash new-name *package-names*) package)
         (setf (package-%nicknames package) ())
    -    (enter-new-nicknames package nicknames)
    +    (enter-new-nicknames package new-nicknames)
         package))
     
     ;;; Delete-Package -- Public
    

  • src/code/unix.lisp
    --- a/src/code/unix.lisp
    +++ b/src/code/unix.lisp
    @@ -2661,12 +2661,18 @@
     		which (alien-sap (addr itvn))(alien-sap (addr itvo))))))
     
     #+linux
    -(defun unix-getitimer (which)
    -  _N"Unix-getitimer returns the INTERVAL and VALUE slots of one of
    -   three system timers (:real :virtual or :profile). On success,
    -   unix-getitimer returns 5 values,
    -   T, it-interval-secs, it-interval-usec, it-value-secs, it-value-usec."
    +(defun unix-setitimer (which int-secs int-usec val-secs val-usec)
    +  _N" Unix-setitimer sets the INTERVAL and VALUE slots of one of
    +   three system timers (:real :virtual or :profile). A SIGALRM signal
    +   will be delivered VALUE <seconds+microseconds> from now. INTERVAL,
    +   when non-zero, is <seconds+microseconds> to be loaded each time
    +   the timer expires. Setting INTERVAL and VALUE to zero disables
    +   the timer. See the Unix man page for more details. On success,
    +   unix-setitimer returns the old contents of the INTERVAL and VALUE
    +   slots as in unix-getitimer."
       (declare (type (member :real :virtual :profile) which)
    +	   (type (unsigned-byte 29) int-secs val-secs)
    +	   (type (integer 0 (1000000)) int-usec val-usec)
     	   (values t
     		   (unsigned-byte 29)(mod 1000000)
     		   (unsigned-byte 29)(mod 1000000)))
    @@ -2674,14 +2680,19 @@
     		 (:real ITIMER-REAL)
     		 (:virtual ITIMER-VIRTUAL)
     		 (:profile ITIMER-PROF))))
    -    (with-alien ((itv (struct itimerval)))
    -      (syscall* ("getitimer" int (* (struct itimerval)))
    +    (with-alien ((itvn (struct itimerval))
    +		 (itvo (struct itimerval)))
    +      (setf (slot (slot itvn 'it-interval) 'tv-sec ) int-secs
    +	    (slot (slot itvn 'it-interval) 'tv-usec) int-usec
    +	    (slot (slot itvn 'it-value   ) 'tv-sec ) val-secs
    +	    (slot (slot itvn 'it-value   ) 'tv-usec) val-usec)
    +      (syscall* ("setitimer" int (* (struct timeval))(* (struct timeval)))
     		(values T
    -			(slot (slot itv 'it-interval) 'tv-sec)
    -			(slot (slot itv 'it-interval) 'tv-usec)
    -			(slot (slot itv 'it-value) 'tv-sec)
    -			(slot (slot itv 'it-value) 'tv-usec))
    -		which (alien-sap (addr itv))))))
    +			(slot (slot itvo 'it-interval) 'tv-sec)
    +			(slot (slot itvo 'it-interval) 'tv-usec)
    +			(slot (slot itvo 'it-value) 'tv-sec)
    +			(slot (slot itvo 'it-value) 'tv-usec))
    +		which (alien-sap (addr itvn))(alien-sap (addr itvo))))))
     
     ;;;; User and group database access, POSIX Standard 9.2.2
     
    

  • src/compiler/x86/arith.lisp
    --- a/src/compiler/x86/arith.lisp
    +++ b/src/compiler/x86/arith.lisp
    @@ -1445,32 +1445,62 @@
       (:translate bignum::%ashr)
       (:policy :fast-safe)
       (:args (digit :scs (unsigned-reg unsigned-stack) :target result)
    -	 (count :scs (unsigned-reg) :target ecx))
    +	 (count :scs (unsigned-reg)))
       (:arg-types unsigned-num positive-fixnum)
       (:temporary (:sc unsigned-reg :offset ecx-offset :from (:argument 1)) ecx)
       (:results (result :scs (unsigned-reg) :from (:argument 0)
     		    :load-if (not (and (sc-is result unsigned-stack)
     				       (location= digit result)))))
       (:result-types unsigned-num)
    -  (:generator 1
    +  (:generator 2
         (move result digit)
         (move ecx count)
         (inst sar result :cl)))
     
    +(define-vop (digit-ashr-c)
    +  (:translate bignum::%ashr)
    +  (:policy :fast-safe)
    +  (:args (digit :scs (unsigned-reg unsigned-stack) :target result))
    +  (:info count)
    +  (:arg-types unsigned-num (:constant (unsigned-byte #.(1- (integer-length vm:word-bits)))))
    +  (:results (result :scs (unsigned-reg) :from (:argument 0)
    +		    :load-if (not (and (sc-is result unsigned-stack)
    +				       (location= digit result)))))
    +  (:result-types unsigned-num)
    +  (:generator 1
    +    (move result digit)
    +    ;; If the count is greater than 31, it's the same as
    +    ;; shifting by 31, leaving just the sign bit.
    +    (inst sar result count)))
    +
     (define-vop (digit-lshr digit-ashr)
       (:translate bignum::%digit-logical-shift-right)
    -  (:generator 1
    +  (:generator 2
         (move result digit)
         (move ecx count)
         (inst shr result :cl)))
     
    +(define-vop (digit-lshr-c digit-ashr-c)
    +  (:translate bignum::%digit-logical-shift-right)
    +  (:generator 1
    +    (move result digit)
    +    (inst shr result count)))
    +
     (define-vop (digit-ashl digit-ashr)
       (:translate bignum::%ashl)
    -  (:generator 1
    +  (:generator 2
         (move result digit)
         (move ecx count)
         (inst shl result :cl)))
     
    +(define-vop (digit-ashl-c digit-ashr-c)
    +  (:translate bignum::%ashl)
    +  (:generator 1
    +    (move result digit)
    +    (inst shl result count)))
    +
    +
    +
     
     ;;;; Static functions.
     
    

  • src/contrib/lisp-unit/internal-test/example-tests.lisp
    --- a/src/contrib/lisp-unit/internal-test/example-tests.lisp
    +++ b/src/contrib/lisp-unit/internal-test/example-tests.lisp
    @@ -57,6 +57,10 @@
       (dotimes (i 5)
         (assert-equal i (my-sqrt (* i i)) i)))
     
    +(define-test cl-user::my-sqrt
    +  (dotimes (i 5)
    +    (assert-equal i (my-sqrt (* i i)) i)))
    +
     ;;; Macro
     
     (defmacro my-macro (arg1 arg2)
    

  • src/contrib/lisp-unit/lisp-unit.lisp
    --- a/src/contrib/lisp-unit/lisp-unit.lisp
    +++ b/src/contrib/lisp-unit/lisp-unit.lisp
    @@ -126,8 +126,9 @@ functions or even macros does not require reloading any tests.
       "If not NIL, enter the debugger when an error is encountered in an
     assertion.")
     
    -(defparameter *signal-results* nil
    -  "Signal the result if non NIL.")
    +(defun use-debugger (&optional (flag t))
    +  "Use the debugger when testing, or not."
    +  (setq *use-debugger* flag))
     
     (defun use-debugger-p (condition)
       "Debug or ignore errors."
    @@ -136,9 +137,8 @@ assertion.")
         (y-or-n-p "~A -- debug?" condition))
        (*use-debugger*)))
     
    -(defun use-debugger (&optional (flag t))
    -  "Use the debugger when testing, or not."
    -  (setq *use-debugger* flag))
    +(defparameter *signal-results* nil
    +  "Signal the result if non NIL.")
     
     (defun signal-results (&optional (flag t))
       "Signal the results for extensibility."
    @@ -238,7 +238,7 @@ assertion.")
          ((and (stringp item) (not doc) (rest body))
           (if tag
               (values doc tag (rest body))
    -          (parse-body (rest body) doc tag)))
    +          (parse-body (rest body) item tag)))
          (t (values doc tag body)))))
     
     (defun test-name-error-report (test-name-error stream)
    @@ -260,20 +260,31 @@ assertion.")
           name
           (error 'test-name-error :datum name)))
     
    +(defun test-package (name)
    +  "Return the package for storing the test."
    +  (multiple-value-bind (symbol status)
    +      (find-symbol (symbol-name name))
    +    (declare (ignore symbol))
    +    (ecase status
    +      ((:internal :external nil)
    +       (symbol-package name))
    +      (:inherited *package*))))
    +
     (defmacro define-test (name &body body)
       "Store the test in the test database."
       (let ((qname (gensym "NAME-")))
         (multiple-value-bind (doc tag code) (parse-body body)
           `(let* ((,qname (valid-test-name ',name))
    -              (doc (or ,doc (string ,qname))))
    +              (doc (or ,doc (symbol-name ,qname)))
    +              (package (test-package ,qname)))
              (setf
               ;; Unit test
    -          (gethash ,qname (package-table *package* t))
    +          (gethash ,qname (package-table package t))
               (make-instance 'unit-test :doc doc :code ',code))
              ;; Tags
    -         (loop for tag in ',tag do
    -               (pushnew
    -                ,qname (gethash tag (package-tags *package* t))))
    +         (loop
    +          for tag in ',tag do
    +          (pushnew ,qname (gethash tag (package-tags package t))))
              ;; Return the name of the test
              ,qname))))
     
    

  • src/general-info/release-21b.txt
    --- a/src/general-info/release-21b.txt
    +++ b/src/general-info/release-21b.txt
    @@ -42,10 +42,13 @@ New in this release:
           of BYTE and WORD.
         * Unix support on Linux has been unified with all other OSes.
           Thus, src/code/unix-glibc2.lisp is no longer used.
    +    * Micro-optimize modular shifts on x86.
    +    * Update lisp-unit to commit e6c259f.
     
       * ANSI compliance fixes:
     
       * Bugfixes:
    +    * Linux was missing unix-setitimer which prevented saving cores.
     
       * Trac Tickets:
     
    

  • src/i18n/locale/cmucl-unix.pot
    --- a/src/i18n/locale/cmucl-unix.pot
    +++ b/src/i18n/locale/cmucl-unix.pot
    @@ -1298,14 +1298,6 @@ msgstr ""
     
     #: src/code/unix.lisp
     msgid ""
    -"Unix-getitimer returns the INTERVAL and VALUE slots of one of\n"
    -"   three system timers (:real :virtual or :profile). On success,\n"
    -"   unix-getitimer returns 5 values,\n"
    -"   T, it-interval-secs, it-interval-usec, it-value-secs, it-value-usec."
    -msgstr ""
    -
    -#: src/code/unix.lisp
    -msgid ""
     "Return a USER-INFO structure for the user identified by UID, or NIL if not "
     "found."
     msgstr ""
    

  • src/i18n/locale/cmucl.pot
    --- a/src/i18n/locale/cmucl.pot
    +++ b/src/i18n/locale/cmucl.pot
    @@ -8120,7 +8120,10 @@ msgid "The package named ~S doesn't exist."
     msgstr ""
     
     #: src/code/package.lisp
    -msgid "Changes the name and nicknames for a package."
    +msgid ""
    +"Replaces the name and nicknames of Package. The old name and all of\n"
    +"  the old nicknames of Package are eliminated and are replaced by\n"
    +"  New-Name and New-Nicknames."
     msgstr ""
     
     #: src/code/package.lisp