From: Juho S. <js...@us...> - 2007-01-15 22:15:56
|
Update of /cvsroot/sbcl/sbcl/src/compiler/x86-64 In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv25379/src/compiler/x86-64 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/x86-64/backend-parms.lisp,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- backend-parms.lisp 6 Jan 2005 12:48:02 -0000 1.2 +++ backend-parms.lisp 15 Jan 2007 22:15:49 -0000 1.3 @@ -28,24 +28,13 @@ ;;; general have our C runtime code running to ask, so instead we set ;;; it by hand. -- WHN 2001-04-15 ;;; -;;; Though note that POSIX specifies (as far as I can tell) -;;; -;;; sysconf(_SC_PAGE_SIZE); -;;; -;;; as a portable way of retrieving this information; a call to this -;;; could be made in grovel-headers (which, strictly speaking, would -;;; no longer solely be grovelling headers), though the question of -;;; how to make this information appear in GENESIS, which is built and -;;; run from host-1 files (which are made before grovel-headers runs) -;;; would remain. -- CSR, 2002-09-01 -(setf *backend-page-size* 4096) -;;; comment from CMU CL: -;;; -;;; in case we ever wanted to do this for Windows NT.. -;;; -;;; Windows NT uses a memory system granularity of 64K, which means -;;; everything that gets mapped must be a multiple of that. The real -;;; page size is 512, but that doesn't do us a whole lot of good. -;;; Effectively, the page size is 64K. -;;; -;;; would be: (setf *backend-page-size* 65536) +;;; Actually any information that we can retrieve C-side would be +;;; useless in SBCL, since it's possible for otherwise binary +;;; compatible systems to return different values for getpagesize(). +;;; -- JES, 2007-01-06 +(eval-when (:compile-toplevel :load-toplevel :execute) + (setf *backend-page-size* 4096)) + +;;; The size in bytes of the GENCGC pages. Should be a multiple of the +;;; architecture code size. +(def!constant gencgc-page-size 4096) Index: parms.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/x86-64/parms.lisp,v retrieving revision 1.20 retrieving revision 1.21 diff -u -d -r1.20 -r1.21 --- parms.lisp 18 Sep 2006 20:09:14 -0000 1.20 +++ parms.lisp 15 Jan 2007 22:15:49 -0000 1.21 @@ -35,10 +35,6 @@ ;;; addressable 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) - (def!constant float-sign-shift 31) ;;; comment from CMU CL: |