0.8.21.5:
[sbcl.git] / src / code / x86-vm.lisp
index 203b2bb..21fd69c 100644 (file)
   "Return a string describing the type of the local machine."
   "X86")
 
-(defun machine-version ()
-  #!+sb-doc
-  "Return a string describing the version of the local machine."
-  "X86")
+;;; arch-specific support for CL:MACHINE-VERSION, defined OAOO elsewhere
+(defun get-machine-version ()
+  #!+linux
+  (with-open-file (stream "/proc/cpuinfo"
+                         ;; Even on Linux it's an option to build
+                         ;; kernels without /proc filesystems, so
+                         ;; degrade gracefully.
+                         :if-does-not-exist nil)
+    (loop with line while (setf line (read-line stream nil))
+         ;; The field "model name" exists on kernel 2.4.21-rc6-ac1
+         ;; anyway, with values e.g.
+         ;;   "AMD Athlon(TM) XP 2000+"
+         ;;   "Intel(R) Pentium(R) M processor 1300MHz"
+         ;; which seem comparable to the information in the example
+         ;; in the MACHINE-VERSION page of the ANSI spec.
+          when (eql (search "model name" line) 0)
+          return (string-trim " " (subseq line (1+ (position #\: line))))))
+  #!-linux
+  nil)
 \f
 ;;;; :CODE-OBJECT fixups
 
@@ -54,8 +69,7 @@
 
 (declaim (inline adjust-fixup-array))
 (defun adjust-fixup-array (array size)
-  (let ((length (length array))
-        (new (make-array size :element-type '(unsigned-byte 32))))
+  (let ((new (make-array size :element-type '(unsigned-byte 32))))
     (replace new array)
     new))
 
       (/show0 "LENGTH,VECTOR,ERROR-NUMBER=..")
       (/hexstr length)
       (/hexstr vector)
-      (copy-from-system-area pc (* n-byte-bits 2)
-                            vector (* n-word-bits vector-data-offset)
-                            (* length n-byte-bits))
+      (copy-ub8-from-system-area pc 2 vector 0 length)
       (let* ((index 0)
             (error-number (sb!c:read-var-integer vector index)))
        (/hexstr error-number)