From: Juho S. <js...@us...> - 2007-01-15 22:15:56
|
Update of /cvsroot/sbcl/sbcl/src/compiler/ppc In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv25379/src/compiler/ppc Modified Files: backend-parms.lisp parms.lisp Log Message: 1.0.1.28: Fix SBCL on PPC with 65k pages. It turns out that getpagesize() can return different values on different Linux kernel versions, for example on PPC where the ABI specifies the page size as 4k-65k. If getpagesize() and SB!C:*BACKEND-PAGE-SIZE* disagree, the result will be a segfault at startup. Fix this. (Thanks to David Woodhouse). * SB!SYS:GET-PAGE-SIZE and os_vm_page_size use the hardcoded SB!C:*BACKEND-PAGE-SIZE* on Linux, since getpagesize() is unreliable. * Remove the obsolete LISPOBJ() kludge in genesis for forcing values to unsigned. * Fix buffer overflow in coreparse for sufficiently small page tables. * Allow using 65k or gencgc pages (with a slightly less efficient page table structure layout). Index: backend-parms.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/ppc/backend-parms.lisp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- backend-parms.lisp 19 May 2002 13:55:32 -0000 1.3 +++ backend-parms.lisp 15 Jan 2007 22:15:49 -0000 1.4 @@ -3,5 +3,15 @@ (def!constant +backend-fasl-file-implementation+ :ppc) (setf *backend-register-save-penalty* 3) (setf *backend-byte-order* :big-endian) -(setf *backend-page-size* 4096) +(eval-when (:compile-toplevel :load-toplevel :execute) + ;; On Linux, the ABI specifies the page size to be 4k-65k, use the + ;; maximum of that range. FIXME: it'd be great if somebody would + ;; find out whether using exact multiples of the page size actually + ;; matters in the few places where that's done, or whether we could + ;; just use 4k everywhere. + (setf *backend-page-size* #!+linux 65536 #!-linux 4096)) + +;;; The size in bytes of the GENCGC pages. Should be a multiple of the +;;; architecture page size. +(def!constant gencgc-page-size *backend-page-size*) Index: parms.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/ppc/parms.lisp,v retrieving revision 1.31 retrieving revision 1.32 diff -u -d -r1.31 -r1.32 --- parms.lisp 2 Nov 2006 15:35:13 -0000 1.31 +++ parms.lisp 15 Jan 2007 22:15:49 -0000 1.32 @@ -24,11 +24,6 @@ ;;; object (def!constant n-byte-bits 8) - -;;; The size in bytes of the GENCGC pages. Should be a multiple of the -;;; architecture code size. -(def!constant gencgc-page-size 4096) - ;;; flags for the generational garbage collector (def!constant pseudo-atomic-interrupted-flag 1) (def!constant pseudo-atomic-flag 4) |