From: Bruce O'N. <ec...@pc...> - 2008-10-12 20:18:06
|
Hi, For assorted reasons [1] I would like to run sbcl on NetBSD/Sparc. No, not Sparc64 (ie Sun Ultras) but the ancient 32 bit Sun Sparcstations. I'm cross compiling from a linux ppc system and with 1.0.21.15 I get: sh make-target-2.sh //entering make-target-2.sh //doing warm init - compilation phase RUNTIME WARNING: unable to raise process data size limit: Invalid argument. The system may fail to start. This is SBCL 1.0.21.15, an implementation of ANSI Common Lisp. More information about SBCL is available at <http://www.sbcl.org/>. SBCL is free software, provided as is, with absolutely no warranty. It is mostly in the public domain; some portions are provided under BSD-style licenses. See the CREDITS and COPYING files in the distribution for more information. in core: 0x8000000 - in runtime: 0x10000000 fatal error encountered in SBCL pid 4116: core/runtime address mismatch: READ_ONLY_SPACE_START Welcome to LDB, a low-level debugger for the Lisp runtime environment. ldb> The only change I made to src/compiler/sparc/parms.lisp was: diff ~/parms.lisp ./src/compiler/sparc/parms.lisp 135,136c135,136 < (def!constant static-space-start #x28000000) < (def!constant static-space-end #x2c000000) --- > (def!constant static-space-start #x18000000) > (def!constant static-space-end #x1c000000) 138c138 < (def!constant dynamic-0-space-start #x30000000) --- > (def!constant dynamic-0-space-start #x20000000) 141,142c141,142 < (def!constant dynamic-1-space-start #x50000000) < (def!constant dynamic-1-space-end #x58000000)) --- > (def!constant dynamic-1-space-start #x48000000) > (def!constant dynamic-1-space-end #x60000000)) The copy I built with which gets the above error is ~/parms.lisp. I made the change to correspond to the linux sparc constants (which work on sparc linux) and because on NetBSD 4.0 for Sparcs mapping to #x20000000 overwrites something important so I moved that up a bit. Now, since I can read, the error message seems clear. Ie, read-only-space-start should be at #x8000000 rather than #x10000000. Sadly, changing read-only-space-start to #x8000000 just changes the error message to something like: in core: 0x6000000 - in runtime: 0x8000000 Can someone point me to what I'm misunderstanding? Thanks very much in advance. cheers bruce [1] I'm insane. The full parms.lisp is: ;;;; This software is part of the SBCL system. See the README file for ;;;; more information. ;;;; ;;;; This software is derived from the CMU CL system, which was ;;;; written at Carnegie Mellon University and released into the ;;;; public domain. The software is in the public domain and is ;;;; provided with absolutely no warranty. See the COPYING and CREDITS ;;;; files for more information. (in-package "SB!VM") ;;;; Machine Architecture parameters: (eval-when (:compile-toplevel :load-toplevel :execute) ;;; number of bits per word where a word holds one lisp descriptor (def!constant n-word-bits 32) ;;; the natural width of a machine word (as seen in e.g. register width, ;;; address space) (def!constant n-machine-word-bits 32) ;;; number of bits per byte where a byte is the smallest addressable object (def!constant n-byte-bits 8) (def!constant float-sign-shift 31) (def!constant single-float-bias 126) (defconstant-eqx single-float-exponent-byte (byte 8 23) #'equalp) (defconstant-eqx single-float-significand-byte (byte 23 0) #'equalp) (def!constant single-float-normal-exponent-min 1) (def!constant single-float-normal-exponent-max 254) (def!constant single-float-hidden-bit (ash 1 23)) (def!constant single-float-trapping-nan-bit (ash 1 22)) (def!constant double-float-bias 1022) (defconstant-eqx double-float-exponent-byte (byte 11 20) #'equalp) (defconstant-eqx double-float-significand-byte (byte 20 0) #'equalp) (def!constant double-float-normal-exponent-min 1) (def!constant double-float-normal-exponent-max #x7FE) (def!constant double-float-hidden-bit (ash 1 20)) (def!constant double-float-trapping-nan-bit (ash 1 19)) ;;; CMUCL COMMENT: ;;; X These values are for the x86 80 bit format and are no doubt ;;; incorrect for the sparc. ;;; FIXME (def!constant long-float-bias 16382) (defconstant-eqx long-float-exponent-byte (byte 15 0) #'equalp) (defconstant-eqx long-float-significand-byte (byte 31 0) #'equalp) (def!constant long-float-normal-exponent-min 1) (def!constant long-float-normal-exponent-max #x7FFE) (def!constant long-float-hidden-bit (ash 1 31)) (def!constant long-float-trapping-nan-bit (ash 1 30)) (def!constant single-float-digits (+ (byte-size single-float-significand-byte) 1)) (def!constant double-float-digits (+ (byte-size double-float-significand-byte) n-word-bits 1)) ;;; This looks wrong - CSR (def!constant long-float-digits (+ (byte-size long-float-significand-byte) n-word-bits 1)) (def!constant float-inexact-trap-bit (ash 1 0)) (def!constant float-divide-by-zero-trap-bit (ash 1 1)) (def!constant float-underflow-trap-bit (ash 1 2)) (def!constant float-overflow-trap-bit (ash 1 3)) (def!constant float-invalid-trap-bit (ash 1 4)) (def!constant float-round-to-nearest 0) (def!constant float-round-to-zero 1) (def!constant float-round-to-positive 2) (def!constant float-round-to-negative 3) (defconstant-eqx float-rounding-mode (byte 2 30) #'equalp) ; RD (defconstant-eqx float-sticky-bits (byte 5 5) #'equalp) ; aexc (defconstant-eqx float-traps-byte (byte 5 23) #'equalp) ; TEM (defconstant-eqx float-exceptions-byte (byte 5 0) #'equalp) ; cexc ;;; According to the SPARC doc (as opposed to FPU doc), the fast mode ;;; bit (EFM) is "reserved", and should always be zero. However, for ;;; sparc-V8 and sparc-V9, it appears to work, causing denormals to ;;; be truncated to 0 silently. (def!constant float-fast-bit (ash 1 22)) ); eval-when ;;;; Description of the target address space. ;;; Where to put the different spaces. Must match the C code! #!+linux (progn (def!constant linkage-table-space-start #x0f800000) (def!constant linkage-table-space-end #x10000000) (def!constant read-only-space-start #x10000000) (def!constant read-only-space-end #x15000000) (def!constant static-space-start #x28000000) (def!constant static-space-end #x2c000000) (def!constant dynamic-0-space-start #x30000000) (def!constant dynamic-0-space-end #x38000000) (def!constant dynamic-1-space-start #x40000000) (def!constant dynamic-1-space-end #x48000000)) #!+sunos ; might as well start by trying the same numbers (progn (def!constant linkage-table-space-start #x0f800000) (def!constant linkage-table-space-end #x10000000) (def!constant read-only-space-start #x10000000) (def!constant read-only-space-end #x15000000) (def!constant static-space-start #x28000000) (def!constant static-space-end #x2c000000) (def!constant dynamic-0-space-start #x30000000) (def!constant dynamic-0-space-end #x38000000) (def!constant dynamic-1-space-start #x40000000) (def!constant dynamic-1-space-end #x48000000)) #!+netbsd ; Need a gap at 0x4000000 for shared libraries (progn (def!constant linkage-table-space-start #x0f800000) (def!constant linkage-table-space-end #x10000000) (def!constant read-only-space-start #x10000000) (def!constant read-only-space-end #x15000000) (def!constant static-space-start #x28000000) (def!constant static-space-end #x2c000000) (def!constant dynamic-0-space-start #x30000000) (def!constant dynamic-0-space-end #x38000000) (def!constant dynamic-1-space-start #x50000000) (def!constant dynamic-1-space-end #x58000000)) ;; Size of one linkage-table entry in bytes. See comment in ;; src/runtime/sparc-arch.c (def!constant linkage-table-entry-size 16) ;;;; other random constants. (defenum (:suffix -trap :start 8) halt pending-interrupt error cerror breakpoint fun-end-breakpoint after-breakpoint single-step-around single-step-before) (defenum (:prefix object-not- :suffix -trap :start 24) list instance) (defenum (:prefix trace-table-) normal call-site fun-prologue fun-epilogue) ;;;; static symbols. ;;; These symbols are loaded into static space directly after NIL so ;;; that the system can compute their address by adding a constant ;;; amount to NIL. ;;; ;;; The fdefn objects for the static functions are loaded into static ;;; space directly after the static symbols. That way, the raw-addr ;;; can be loaded directly out of them by indirecting relative to NIL. ;;; (defparameter *static-symbols* (append *common-static-symbols* *c-callable-static-symbols* '())) (defparameter *static-funs* '(length two-arg-+ two-arg-- two-arg-* two-arg-/ two-arg-< two-arg-> two-arg-= two-arg-<= two-arg->= two-arg-/= eql %negate two-arg-and two-arg-ior two-arg-xor two-arg-eqv two-arg-gcd two-arg-lcm )) ;;;; Assembler parameters: ;;; The number of bits per element in the assemblers code vector. (defparameter *assembly-unit-length* 8) ;;;; Pseudo-atomic trap number ;;; KLUDGE: Linux on the SPARC doesn't seem to conform to any kind of ;;; standards at all. So we use an explicitly undefined trap, because ;;; that currently does the right thing. Expect this to break ;;; eventually (but with luck, at that point we'll be able to revert ;;; to the compliant trap number... ;;; ;;; KLUDGE: Maybe this should be called pseudo-atomic-magic-number, ;;; allowing other architectures (which don't necessarily use traps ;;; for pseudo-atomic) to propagate a magic number to C land via ;;; sbcl.h. #!-linux (def!constant pseudo-atomic-trap #x10) #!+linux (def!constant pseudo-atomic-trap #x40) |
From: Robert S. <rj...@fd...> - 2008-10-12 22:06:18
|
Bruce O'Neel wrote: >For assorted reasons [1] I would like to run sbcl on NetBSD/Sparc. No, >not Sparc64 (ie Sun Ultras) but the ancient 32 bit Sun Sparcstations. What machine do you want to run it on ? >sh make-target-2.sh >//entering make-target-2.sh >//doing warm init - compilation phase >RUNTIME WARNING: unable to raise process data size limit: > Invalid argument. >The system may fail to start. >This is SBCL 1.0.21.15, an implementation of ANSI Common Lisp. >More information about SBCL is available at <http://www.sbcl.org/>. I also use the following local diff: Index: bsd-os.c =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/bsd-os.c,v retrieving revision 1.53 diff -u -r1.53 bsd-os.c --- bsd-os.c 9 Jan 2008 19:12:23 -0000 1.53 +++ bsd-os.c 12 Oct 2008 21:35:14 -0000 @@ -112,7 +112,36 @@ if (addr) flags |= MAP_FIXED; +#ifdef __NetBSD__ + if (addr) { + os_vm_address_t curaddr = addr; + + while (len > 0) { + os_vm_address_t resaddr; + int curlen = MIN(64 * 1024 * 1024, len); + + resaddr = mmap(curaddr, curlen, OS_VM_PROT_ALL, flags, -1, 0); + + if (resaddr == (os_vm_address_t) - 1) { + perror("mmap"); + + while (curaddr > addr) { + curaddr -= 64 * 1024 * 1024; + munmap(curaddr, 64 * 1024 * 1024); + } + + return NULL; + } + + curaddr += curlen; + len -= curlen; + } + } else { +#endif addr = mmap(addr, len, OS_VM_PROT_ALL, flags, -1, 0); +#ifdef __NetBSD__ + } +#endif if (addr == MAP_FAILED) { perror("mmap"); @@ -314,11 +343,7 @@ /* NetBSD counts mmap()ed space against the process's data size limit, * so yank it up. This might be a nasty thing to do? */ getrlimit (RLIMIT_DATA, &rl); - /* Amazingly for such a new port, the provenance and meaning of - this number are unknown. It might just mean REALLY_BIG_LIMIT, - or possibly it should be calculated from dynamic space size. - -- CSR, 2004-04-08 */ - rl.rlim_cur = 1073741824; + rl.rlim_cur = RLIM_INFINITY; if (setrlimit (RLIMIT_DATA, &rl) < 0) { fprintf (stderr, "RUNTIME WARNING: unable to raise process data size limit:\n\ What is at #x2000000 on NetBSD/sparc 4.0 ? Robert Swindells |
From: Bruce O'N. <ec...@pc...> - 2008-10-13 07:36:22
|
Hi, Thanks. On Sun, Oct 12, 2008 at 10:39:55PM +0100, Robert Swindells wrote: > > Bruce O'Neel wrote: > >For assorted reasons [1] I would like to run sbcl on NetBSD/Sparc. No, > >not Sparc64 (ie Sun Ultras) but the ancient 32 bit Sun Sparcstations. > > What machine do you want to run it on ? A dual processor sparcstation 20. I'll try the diff below as well. > > >sh make-target-2.sh > >//entering make-target-2.sh > >//doing warm init - compilation phase > >RUNTIME WARNING: unable to raise process data size limit: > > Invalid argument. > >The system may fail to start. > >This is SBCL 1.0.21.15, an implementation of ANSI Common Lisp. > >More information about SBCL is available at <http://www.sbcl.org/>. > > I also use the following local diff: > > Index: bsd-os.c > =================================================================== > RCS file: /cvsroot/sbcl/sbcl/src/runtime/bsd-os.c,v > retrieving revision 1.53 > diff -u -r1.53 bsd-os.c > --- bsd-os.c 9 Jan 2008 19:12:23 -0000 1.53 > +++ bsd-os.c 12 Oct 2008 21:35:14 -0000 > @@ -112,7 +112,36 @@ > if (addr) > flags |= MAP_FIXED; > > +#ifdef __NetBSD__ > + if (addr) { > + os_vm_address_t curaddr = addr; > + > + while (len > 0) { > + os_vm_address_t resaddr; > + int curlen = MIN(64 * 1024 * 1024, len); > + > + resaddr = mmap(curaddr, curlen, OS_VM_PROT_ALL, flags, -1, 0); > + > + if (resaddr == (os_vm_address_t) - 1) { > + perror("mmap"); > + > + while (curaddr > addr) { > + curaddr -= 64 * 1024 * 1024; > + munmap(curaddr, 64 * 1024 * 1024); > + } > + > + return NULL; > + } > + > + curaddr += curlen; > + len -= curlen; > + } > + } else { > +#endif > addr = mmap(addr, len, OS_VM_PROT_ALL, flags, -1, 0); > +#ifdef __NetBSD__ > + } > +#endif > > if (addr == MAP_FAILED) { > perror("mmap"); > @@ -314,11 +343,7 @@ > /* NetBSD counts mmap()ed space against the process's data size limit, > * so yank it up. This might be a nasty thing to do? */ > getrlimit (RLIMIT_DATA, &rl); > - /* Amazingly for such a new port, the provenance and meaning of > - this number are unknown. It might just mean REALLY_BIG_LIMIT, > - or possibly it should be calculated from dynamic space size. > - -- CSR, 2004-04-08 */ > - rl.rlim_cur = 1073741824; > + rl.rlim_cur = RLIM_INFINITY; > if (setrlimit (RLIMIT_DATA, &rl) < 0) { > fprintf (stderr, > "RUNTIME WARNING: unable to raise process data size limit:\n\ > > > What is at #x2000000 on NetBSD/sparc 4.0 ? I'm not 100% sure, but, it seems to be code since as soon as that mmap happens we stop with illegal instructions. If I move away from #x2000000 we get further. Thanks! cheers bruce > > Robert Swindells |
From: Jon B. <jo...@bu...> - 2008-10-14 00:39:53
|
Bruce O'Neel wrote: > On Sun, Oct 12, 2008 at 10:39:55PM +0100, Robert Swindells wrote: > [ Patch to alter NetBSD/sparc memory maps and mmap'ing removed...] >> What is at #x2000000 on NetBSD/sparc 4.0 ? >> > > I'm not 100% sure, but, it seems to be code since as soon as that mmap happens we > stop with illegal instructions. If I move away from #x2000000 we get further. > You might find the 'pmap' command handy. Running it from/on a shell (just pmap, no command line args) reports that ld.elf_so is at 0x20030000, and there are a bunch (OK, just libedit, libtermcap, libsparc_v8, and libc may not be a whole bunch) of shared libraries starting at 0x20060000 and going up to 0x201c0000. BTW, thanks for the patch, I'm trying it out now. I had always been trying to change the size of the mapped regions, or thought that I didn't change the process limits in the shell correctly... (Hopefully I'll have pkgsrc building lang/sbcl on a sparc real soon now. Do you want to give it a second pair of eyes and a quick sanity check for me before I submit it?) Can anyone tell me if this patch going to get merged into SBCL, or if it will need to stay as a local patch for those that care? Also, it probably should be a bit more selective than just __NetBSD__, as NetBSD/i386 works fine without it, and bsd-os.c gets built on any and every BSD build, right? Jon |
From: Robert S. <rj...@fd...> - 2008-10-14 00:14:42
|
Jon Buller wrote: >Bruce O'Neel wrote: >> On Sun, Oct 12, 2008 at 10:39:55PM +0100, Robert Swindells wrote: >> >[ Patch to alter NetBSD/sparc memory maps and mmap'ing removed...] >>> What is at #x2000000 on NetBSD/sparc 4.0 ? >>> >> >> I'm not 100% sure, but, it seems to be code since as soon as that mmap happens we >> stop with illegal instructions. If I move away from #x2000000 we get further. >You might find the 'pmap' command handy. Running it from/on a shell >(just pmap, no command line args) reports that ld.elf_so is at >0x20030000, and there are a bunch (OK, just libedit, libtermcap, >libsparc_v8, and libc may not be a whole bunch) of shared libraries >starting at 0x20060000 and going up to 0x201c0000. Could you send me the output of pmap from your system ? I did the NetBSD/sparc port on an UltraSparc, the memory map is clearly different between 64 and 32 bit kernels. >BTW, thanks for the patch, I'm trying it out now. I had always been >trying to change the size of the mapped regions, or thought that I >didn't change the process limits in the shell correctly... (Hopefully >I'll have pkgsrc building lang/sbcl on a sparc real soon now. Do you >want to give it a second pair of eyes and a quick sanity check for me >before I submit it?) What do you intend to use as the host lisp for your pkgsrc build ? >Can anyone tell me if this patch going to get merged into SBCL, or if it >will need to stay as a local patch for those that care? Also, it >probably should be a bit more selective than just __NetBSD__, as >NetBSD/i386 works fine without it, and bsd-os.c gets built on any and >every BSD build, right? I use the patch that I sent on NetBSD/i386 too. I probably need to change the logic around the test for the rlimit return value to not print the failure warning. Robert Swindells |
From: Nikodemus S. <nik...@ra...> - 2008-10-12 22:18:18
|
On Sun, Oct 12, 2008 at 11:17 PM, Bruce O'Neel <ec...@pc...> wrote: > For assorted reasons [1] I would like to run sbcl on NetBSD/Sparc. No, > not Sparc64 (ie Sun Ultras) but the ancient 32 bit Sun Sparcstations. Can you please describe your entire cross-build process? Are you following the cross compilation directions on http://sbcl-internals.cliki.net/Build or doing something else? > Now, since I can read, the error message seems clear. Ie, > read-only-space-start should be at #x8000000 rather than #x10000000. > Sadly, changing read-only-space-start to #x8000000 just changes the Well, not "should be", but rather the core and runtime disagree about where it should be. The real where it "should be" is determined by the vagaries of the target OS. The make-host-1 stage of the build process writes (among other things) read-only-space-start to src/runtime/genensis/constants.h. (Which you should be doing with SBCL_ARCH=sparc set, on the PPC.) Then you need to copy those files to the sparc, and run make-target-1.sh which gets you the Sparc runtime with the correct addresses. Then make-host-2 stage (finally) performs "second genesis" on ppc (still with SBCL_ARHC=sparc), and again you copy files over and run make-target-2 on the sparc. Now, if the runtime and core are in disagreement at this point, you need to backtrack. Did you perpaps change the address after first genesis? If not, go back and see how and why the wrong address gets written (WRITE-CONSTANTS-H, in src/compiler/generic/genesis.lisp). Cheers, -- Nikodemus |
From: Bruce O'N. <ec...@pc...> - 2008-10-13 07:34:25
|
Hi, Thanks. On Mon, Oct 13, 2008 at 01:18:06AM +0300, Nikodemus Siivola wrote: > On Sun, Oct 12, 2008 at 11:17 PM, Bruce O'Neel <ec...@pc...> wrote: > > > For assorted reasons [1] I would like to run sbcl on NetBSD/Sparc. No, > > not Sparc64 (ie Sun Ultras) but the ancient 32 bit Sun Sparcstations. > > Can you please describe your entire cross-build process? Are you > following the cross compilation directions on > http://sbcl-internals.cliki.net/Build or doing something else? I'm using exactly that procedure. I modify src/compiler/sparc/parms.lisp and then exactly the following steps. ppc$ export SBCL_ARCH=sparc ppc$ export SBCL_XC_HOST=sbcl sparc$ . ./find-gnumake.sh sparc$ find_gnumake sparc$ sh make-config.sh ppc$ sh make-host-1.sh sparc$ sh make-target-1.sh ppc$ sh make-host-2?.sh sparc$ sh make-target-2.sh sparc$ sh make-target-contrib?.sh Things go well until make-target-2.sh. > > Now, since I can read, the error message seems clear. Ie, > > read-only-space-start should be at #x8000000 rather than #x10000000. > > Sadly, changing read-only-space-start to #x8000000 just changes the > I'll go through and see if I can track where the difference gets inserted. Thanks very much for the hints. cheers bruce > Well, not "should be", but rather the core and runtime disagree about > where it should be. The real where it "should be" is determined by the > vagaries of the target OS. > > The make-host-1 stage of the build process writes (among other things) > read-only-space-start to src/runtime/genensis/constants.h. (Which you > should be doing with SBCL_ARCH=sparc set, on the PPC.) > > Then you need to copy those files to the sparc, and run > make-target-1.sh which gets you the Sparc runtime with the correct > addresses. > > Then make-host-2 stage (finally) performs "second genesis" on ppc > (still with SBCL_ARHC=sparc), and again you copy files over and run > make-target-2 on the sparc. > > Now, if the runtime and core are in disagreement at this point, you > need to backtrack. Did you perpaps change the address after first > genesis? If not, go back and see how and why the wrong address gets > written (WRITE-CONSTANTS-H, in src/compiler/generic/genesis.lisp). > > Cheers, > > -- Nikodemus |
From: Robert S. <rj...@fd...> - 2008-10-13 09:45:01
|
Bruce O'Neel wrote: >On Sun, Oct 12, 2008 at 10:39:55PM +0100, Robert Swindells wrote: > > Bruce O'Neel wrote: > >For assorted reasons [1] I would like to run sbcl on NetBSD/Sparc. No, > >not Sparc64 (ie Sun Ultras) but the ancient 32 bit Sun Sparcstations. > > What machine do you want to run it on ? >A dual processor sparcstation 20. Ok, I just wanted to check that it wasn't a sun4c. >>I'll try the diff below as well. I installed NetBSD/sparc 4.0 last night and did a cross-compile using this patch. I can put the binary distribution somewhere if you want. The patch that I sent is needed on NetBSD/sparc (and NetBSD/amd64) as the hard rlimit is too small for the areas that sbcl needs to mmap(). There was some discussion on the mailing list last year, but I was away at the time and forgot about it. Robert Swindells |
From: Bruce O'N. <ec...@pc...> - 2008-10-13 11:01:45
|
Hi, Excellent. I'll try a build tonight with your patch. If I can't get that to work could you put up your build somewhere? Thanks! cheers bruce On Mon, Oct 13, 2008 at 10:40:40AM +0100, Robert Swindells wrote: > > Bruce O'Neel wrote: > >On Sun, Oct 12, 2008 at 10:39:55PM +0100, Robert Swindells wrote: > > > > Bruce O'Neel wrote: > > >For assorted reasons [1] I would like to run sbcl on NetBSD/Sparc. No, > > >not Sparc64 (ie Sun Ultras) but the ancient 32 bit Sun Sparcstations. > > > > What machine do you want to run it on ? > > >A dual processor sparcstation 20. > > Ok, I just wanted to check that it wasn't a sun4c. > > >>I'll try the diff below as well. > > I installed NetBSD/sparc 4.0 last night and did a cross-compile using > this patch. I can put the binary distribution somewhere if you want. > > The patch that I sent is needed on NetBSD/sparc (and NetBSD/amd64) as > the hard rlimit is too small for the areas that sbcl needs to mmap(). > > There was some discussion on the mailing list last year, but I was > away at the time and forgot about it. > > Robert Swindells |
From: Robert S. <rj...@fd...> - 2008-10-14 12:27:43
|
Bruce O'Neel wrote: >For assorted reasons [1] I would like to run sbcl on NetBSD/Sparc. No, >not Sparc64 (ie Sun Ultras) but the ancient 32 bit Sun Sparcstations. [snip] Could you also try the following patch, I think it should allow a SBCL image to be built that will run both on UltraSparc and older CPUs. Robert Swindells Index: parms.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/sparc/parms.lisp,v retrieving revision 1.24 diff -u -r1.24 parms.lisp --- parms.lisp 20 Dec 2007 14:24:31 -0000 1.24 +++ parms.lisp 14 Oct 2008 12:07:28 -0000 @@ -135,11 +135,11 @@ (def!constant static-space-start #x18000000) (def!constant static-space-end #x1c000000) - (def!constant dynamic-0-space-start #x20000000) - (def!constant dynamic-0-space-end #x38000000) + (def!constant dynamic-0-space-start #x48000000) + (def!constant dynamic-0-space-end #x5ffff000) - (def!constant dynamic-1-space-start #x48000000) - (def!constant dynamic-1-space-end #x60000000)) + (def!constant dynamic-1-space-start #x60000000) + (def!constant dynamic-1-space-end #x77fff000)) ;; Size of one linkage-table entry in bytes. See comment in ;; src/runtime/sparc-arch.c |
From: Bruce O'N. <ec...@pc...> - 2008-10-16 09:51:56
Attachments:
netbsd.sparc.patch
netbsd.sparc.patch.2
|
Hi, Ok, it pretty much works. # uname -a NetBSD bellinzona 4.0 NetBSD 4.0 (GENERIC.MP) #0: Sun Dec 16 02:23:20 PST 2007 builds@wb29:/home/builds/ab/netbsd-4-0-RELEASE/sparc/200712160005Z-obj/home/builds/ab/netbsd-4-0-RELEASE/src/sys/arch/sparc/compile/GENERIC.MP sparc # sbcl RUNTIME WARNING: unable to raise process data size limit: Invalid argument. The system may fail to start. This is SBCL 1.0.21.18, an implementation of ANSI Common Lisp. More information about SBCL is available at <http://www.sbcl.org/>. SBCL is free software, provided as is, with absolutely no warranty. It is mostly in the public domain; some portions are provided under BSD-style licenses. See the CREDITS and COPYING files in the distribution for more information. * (* 123 456 789 101112) 4474553016384 * # Thanks to Robert Swindells <rj...@fd...> patches which got it most of the way there. The last thing which had to be changed was the backend page size. src/runtime/bsd-os.c has os_vm_page_size = getpagesize(); and src/compiler/sparc/backend-parms.lisp has (setf *backend-page-size* 8192) This is perfect on say the 64 bit Ultras since the NetBSD page size is 8k. On the 32 bit Sparcs though the page size is 4k so this fails. My proposed change is in src/runtime/bsd-os.c so that os_vm_page_size = getpagesize(); becomes os_vm_page_size = BACKEND_PAGE_SIZE; You can get the build from http://www.pckswarms.ch/SBCL.html if you want to play. When I said it mostly worked the following things need to be fixed: - For now you have to run as root so that you can raise the memory limits high enough. This has to be solveable, but I haven't found the solution. I suspect changes to /etc/login.conf but I haven't gotten that far. Please don't run stuff as root that I build. You don't know me, right? - A number of the contrib packages (think ASDF) don't build. No idea. - I'm not sure it self builds yet. That's next but I won't know for several hours. The word fast is not used around these systems. cheers bruce |
From: Bruce O'N. <ec...@pc...> - 2008-10-16 14:33:09
|
Hi, The run as root problem can be solved with the following /etc/login.conf biguser|Big Memory User ::datasize=512m::memoryuse=512m: Once you do that add your lisp user(s) to the biguser class. It's one of the fields in master.passwd which you edit with vipw. cheers bruce |
From: Bruce O'N. <ec...@pc...> - 2008-10-17 07:17:44
|
Hi, It self builds as well. And, good news, all the contrib modules build and pass their tests. You can get this version off of http://www.pckswarms.ch. The main test suite gives a number of failures. Once I get done the current build I'll look at the different test failures. Just for reference it takes about 12 hrs to do just the build :-) cheers bruce On Thu, Oct 16, 2008 at 04:32:51PM +0200, Bruce O'Neel wrote: > Hi, > > The run as root problem can be solved with the following /etc/login.conf > > biguser|Big Memory User ::datasize=512m::memoryuse=512m: > > Once you do that add your lisp user(s) to the biguser class. It's one of the > fields in master.passwd which you edit with vipw. > > cheers > > bruce > > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's challenge > Build the coolest Linux based applications with Moblin SDK & win great prizes > Grand prize is a trip for two to an Open Source event anywhere in the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Sbcl-devel mailing list > Sbc...@li... > https://lists.sourceforge.net/lists/listinfo/sbcl-devel |