0.8.9.29:
authorChristophe Rhodes <csr21@cam.ac.uk>
Thu, 8 Apr 2004 13:26:01 +0000 (13:26 +0000)
committerChristophe Rhodes <csr21@cam.ac.uk>
Thu, 8 Apr 2004 13:26:01 +0000 (13:26 +0000)
Merge netbsd_branch

24 files changed:
CREDITS
NEWS
README
base-target-features.lisp-expr
doc/sbcl.1
make-config.sh
src/code/bsd-os.lisp
src/code/cold-init.lisp
src/code/foreign.lisp
src/code/load.lisp
src/code/unix.lisp
src/compiler/x86/parms.lisp
src/runtime/GNUmakefile
src/runtime/bsd-os.c
src/runtime/bsd-os.h
src/runtime/gencgc.c
src/runtime/interrupt.c
src/runtime/undefineds.h
src/runtime/x86-arch.c
src/runtime/x86-assem.S
src/runtime/x86-bsd-os.c
src/runtime/x86-bsd-os.h
tools-for-build/grovel-headers.c
version.lisp-expr

diff --git a/CREDITS b/CREDITS
index c923fd7..6154a06 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -608,6 +608,11 @@ Dave McDonald:
   He made a lot of progress toward getting SBCL to be bootstrappable
   under CLISP.
 
+Perry E. Metzger:
+  He ported SBCL to NetBSD with newer signals, building on the
+  work of Valtteri Vuorikoski.  He also provided various cleanups to
+  the C runtime.
+
 Gerd Moellman:
   He has made many cleanups and improvements, small and large, in
   CMU CL (mostly in PCL), which we have gratefully ported to SBCL.  Of
diff --git a/NEWS b/NEWS
index 8de95f7..2c100d6 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2364,11 +2364,14 @@ changes in sbcl-0.8.9 relative to sbcl-0.8.8:
        the readtable currently in effect.
 
 changes in sbcl-0.8.10 relative to sbcl-0.8.9:
+  * Support for the forthcoming 2.0 version of the NetBSD kernel
+    running on x86 hardware has been added.  (thanks to Perry
+    E. Metzger most immediately, and others for their past work)
   * [placeholder for DX summary]
     ** user code with &REST lists declared dynamic-extent, under high
        speed or space and low safety and debug optimization policy.
   * The manual has been converted to Texinfo format and the debugger
-    chapter from the cmucl manual has been added
+    chapter from the cmucl manual has been added.
   * A facility has been added to extract documentation strings from
     sbcl and store them as Texinfo-formatted snippets for inclusion in
     the manual (via Texinfo's @include directive)
@@ -2377,7 +2380,7 @@ changes in sbcl-0.8.10 relative to sbcl-0.8.9:
   * bug fix: multidimensional simple arrays loaded from FASLs had fill
     pointers.  (reported by Sean Ross)
   * bug fix: PROFILE output is printed nicely even for large numerical
-       values. (thanks to Zach Beane)
+    values.  (thanks to Zach Beane)
 
 planned incompatible changes in 0.8.x:
   * (not done yet, but planned:) When the profiling interface settles
diff --git a/README b/README
index f02c9ec..4670fb1 100644 (file)
--- a/README
+++ b/README
@@ -26,6 +26,10 @@ system, please send mail to one of the mailing lists:
 
 SYSTEM-SPECIFIC HINTS
 
+for NetBSD:
+  NetBSD 2.0 and above are required because of the lack of needed
+  signal APIs in NetBSD 1.6 and earlier.
+
 for OpenBSD:
   OpenBSD 3.0 has stricter ulimit values, and/or enforces them more
   strictly, than its predecessors. Therefore SBCL's initial mmap()
index 5b97f72..929fd8a 100644 (file)
  ;;              particular version of BSD we're intended to run under.)
  ;;   :freebsd = We're intended to run under FreeBSD.
  ;;   :openbsd = We're intended to run under OpenBSD.
+ ;;   :netbsd  = We're intended to run under NetBSD.
  ;;   :sunos   = We're intended to run under Solaris user environment
  ;;              with the SunOS kernel.
  ;;   :osf1    = We're intended to run under Tru64 (aka Digital Unix
index 216fd64..7b4678e 100644 (file)
@@ -373,7 +373,7 @@ chance to see it.
 
 .SH SYSTEM REQUIREMENTS
 
-SBCL currently runs on X86 (Linux, FreeBSD, and OpenBSD), Alpha
+SBCL currently runs on X86 (Linux, FreeBSD, OpenBSD, and NetBSD), Alpha
 (Linux, Tru64), PPC (Linux, Darwin/MacOS X), SPARC (Linux and Solaris
 2.x), and MIPS (Linux).  For information on other ongoing and possible
 ports, see the sbcl-devel mailing list, and/or the web site.
index ff693d1..f26c251 100644 (file)
@@ -129,6 +129,10 @@ case `uname` in
                sbcl_os="openbsd"
                ln -s Config.$sbcl_arch-openbsd Config
                ;;
+           NetBSD)
+                printf ' :netbsd' >> $ltf
+               ln -s Config.$sbcl_arch-netbsd Config
+               ;;
            *)
                echo unsupported BSD variant: `uname`
                exit 1
index 2e3771d..6a96ee9 100644 (file)
@@ -17,6 +17,7 @@
   (the string ; (to force error in case of unsupported BSD variant)
        #!+FreeBSD "FreeBSD"
        #!+OpenBSD "OpenBSD"
+       #!+NetBSD "NetBSD"
        #!+Darwin "Darwin"))
 
 (defvar *software-version* nil)
index 62f72e8..9711add 100644 (file)
   ;; FIXME: This list of modes should be defined in one place and
   ;; explicitly shared between here and REINIT.
 
-  ;; Why was this marked #!+alpha?  CMUCL does it here on all architectures
-  (set-floating-point-modes :traps '(:overflow :invalid :divide-by-zero))
+  ;; FIXME: For some unknown reason, NetBSD/x86 won't run with the
+  ;; :invalid trap enabled. That should be fixed, but not today...
+  ;; PEM -- April 5, 2004
+  (set-floating-point-modes
+   :traps '(:overflow #!-netbsd :invalid :divide-by-zero))
 
   (show-and-call !class-finalize)
 
@@ -288,7 +291,11 @@ instead (which is another name for the same thing)."))
       ;; LEAST-NEGATIVE-SINGLE-FLOAT, so the :UNDERFLOW exceptions are
       ;; disabled by default. Joe User can explicitly enable them if
       ;; desired.
-      (set-floating-point-modes :traps '(:overflow :invalid :divide-by-zero))
+      ;;
+      ;; see also comment at the previous SET-FLOATING-POINT-MODES
+      ;; call site.
+      (set-floating-point-modes
+       :traps '(:overflow #!-netbsd :invalid :divide-by-zero))
       (sb!thread::maybe-install-futex-functions)))
   (gc-on)
   (gc))
index cac9887..29d1d7a 100644 (file)
@@ -52,7 +52,7 @@
 ;;; On any OS where we don't support foreign object file loading, any
 ;;; query of a foreign symbol value is answered with "no definition
 ;;; known", i.e. NIL.
-#-(or linux sunos FreeBSD OpenBSD darwin)
+#-(or linux sunos FreeBSD OpenBSD NetBSD darwin)
 (defun get-dynamic-foreign-symbol-address (symbol)
   (declare (type simple-string symbol) (ignore symbol))
   nil)
@@ -62,7 +62,7 @@
 ;;; work on any ELF system with dlopen(3) and dlsym(3)
 ;;; It also works on OpenBSD, which isn't ELF, but is otherwise modern
 ;;; enough to have a fairly well working dlopen/dlsym implementation.
-#-(or linux sunos FreeBSD OpenBSD darwin)
+#-(or linux sunos FreeBSD OpenBSD NetBSD darwin)
 (macrolet ((define-unsupported-fun (fun-name)
             `(defun ,fun-name (&rest rest)
                "unsupported on this system"
@@ -70,7 +70,7 @@
                (error 'unsupported-operator :name ',fun-name))))
   (define-unsupported-fun load-1-foreign)
   (define-unsupported-fun load-foreign))
-#+(or linux sunos FreeBSD OpenBSD darwin)
+#+(or linux sunos FreeBSD OpenBSD NetBSD darwin)
 (progn
 
 ;;; flags for dlopen()
index 8562044..f7a45a6 100644 (file)
 ;;; code for foreign symbol lookup should be here.
 (defun find-foreign-symbol-in-table (name table)
   (let ((prefixes
-         #!+(or osf1 sunos linux freebsd darwin) #("" "ldso_stub__")
+         #!+(or osf1 sunos linux freebsd netbsd darwin) #("" "ldso_stub__")
         #!+openbsd #("")))
     (declare (notinline some)) ; to suppress bug 117 bogowarning
     (some (lambda (prefix)
index dd04eb0..74f98be 100644 (file)
   ;; a constant. Going the grovel_headers route doesn't seem to be
   ;; helpful, either, as Solaris doesn't export PATH_MAX from
   ;; unistd.h.
-  #!-(or linux openbsd freebsd sunos osf1 darwin) (,stub,)
-  #!+(or linux openbsd freebsd sunos osf1 darwin)
+  #!-(or linux openbsd freebsd netbsd sunos osf1 darwin) (,stub,)
+  #!+(or linux openbsd freebsd netbsd sunos osf1 darwin)
   (or (newcharstar-string (alien-funcall (extern-alien "getcwd"
                                                       (function (* char)
                                                                 (* char)
                                                                 size-t))
                                         nil 
-                                        #!+(or linux openbsd freebsd darwin) 0
+                                        #!+(or linux openbsd freebsd netbsd darwin) 0
                                         #!+(or sunos osf1) 1025))
       (simple-perror "getcwd")))
 
index 701b42f..dbbde62 100644 (file)
 ;;;     use. (They want to use this address range even if we try to
 ;;;     reserve it with a call to validate() as the first operation in
 ;;;     main().)
+;;;   * For NetBSD 2.0, the following ranges are used by normal
+;;;     executables and mmap:
+;;;     ** Executables are (by default) loaded at 0x08048000.
+;;;     ** The break for the sbcl runtime seems to end around 0x08400000
+;;;     We set read only space around 0x20000000, static
+;;;     space around 0x30000000, all ending below 0x37fff000
+;;;     ** ld.so and other mmap'ed stuff like shared libs start around
+;;;        0x48000000
+;;;     We set dynamic space between 0x60000000 and 0x98000000
+;;;     ** Bottom of the stack is typically not below 0xb0000000
+;;;     FYI, this can be looked at with the "pmap" program, and if you
+;;;     set the top-down mmap allocation option in the kernel (not yet
+;;;     the default), all bets are totally off!
 
 #!+linux
 (progn
   (def!constant dynamic-space-start   #x09000000)
   (def!constant dynamic-space-end     #x29000000))
 
-#!+bsd
+#!+(or freebsd openbsd)
 (progn
 
   (def!constant read-only-space-start #x10000000)
     #!+openbsd                             #x50000000)
   (def!constant dynamic-space-end          #x88000000))
 
+#!+netbsd
+(progn
+
+  (def!constant read-only-space-start #x20000000)
+  (def!constant read-only-space-end   #x2ffff000)
+
+  (def!constant static-space-start    #x30000000)
+  (def!constant static-space-end      #x37fff000)
+
+  (def!constant dynamic-space-start   #x60000000)
+  (def!constant dynamic-space-end     #x98000000))
+
+
 ;;; Given that NIL is the first thing allocated in static space, we
 ;;; know its value at compile time:
 (def!constant nil-value (+ static-space-start #xb))
index b147ca9..d60aeb9 100644 (file)
@@ -16,7 +16,6 @@ all: sbcl sbcl.nm
 # Config file
 CFLAGS =  -g -Wall -O3
 ASFLAGS = $(CFLAGS)
-DEPEND_FLAGS =
 CPPFLAGS = -I.
 
 # Some of these things might be Config-dependent in future versions,
index e758d2e..552b0c2 100644 (file)
@@ -21,6 +21,8 @@
 #include <stdio.h>
 #include <sys/param.h>
 #include <sys/file.h>
+#include <unistd.h>
+#include <assert.h>
 #include "sbcl.h"
 #include "./signal.h"
 #include "os.h"
 #include "validate.h"
 
 \f
-vm_size_t os_vm_page_size;
+os_vm_size_t os_vm_page_size;
 
+#ifdef __NetBSD__
+#include <sys/resource.h>
+#include <string.h>
+
+static void netbsd_init();
+#endif /* __NetBSD__ */
 void os_init(void)
 {
     os_vm_page_size = getpagesize();
+
+#ifdef __NetBSD__
+    netbsd_init();
+#endif /* __NetBSD__ */
 }
 
 int *os_context_pc_addr(os_context_t *context)
@@ -50,6 +63,8 @@ int *os_context_pc_addr(os_context_t *context)
     return CONTEXT_ADDR_FROM_STEM(eip);
 #elif defined __OpenBSD__
     return CONTEXT_ADDR_FROM_STEM(pc);
+#elif defined __NetBSD__
+    return CONTEXT_ADDR_FROM_STEM(EIP);
 #elif defined LISP_FEATURE_DARWIN
     return &context->uc_mcontext->ss.srr0;
 #else
@@ -63,7 +78,7 @@ os_context_sigmask_addr(os_context_t *context)
     /* (Unlike most of the other context fields that we access, the
      * signal mask field is a field of the basic, outermost context
      * struct itself both in FreeBSD 4.0 and in OpenBSD 2.6.) */
-#if defined __FreeBSD__ || defined LISP_FEATURE_DARWIN
+#if defined __FreeBSD__  || __NetBSD__ || defined LISP_FEATURE_DARWIN
     return &context->uc_sigmask;
 #elif defined __OpenBSD__
     return &context->sc_mask;
@@ -162,15 +177,14 @@ memory_fault_handler(int signal, siginfo_t *siginfo, void *void_context)
 {
     /* The way that we extract low level information like the fault
      * address is not specified by POSIX. */
-#if defined __FreeBSD__
-    void *fault_addr = siginfo->si_addr;
-#elif defined __OpenBSD__
+#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
     void *fault_addr = siginfo->si_addr;
 #elif defined LISP_FEATURE_DARWIN
     void *fault_addr = siginfo->si_addr;
 #else
 #error unsupported BSD variant
 #endif
+
     os_context_t *context = arch_os_get_context(&void_context);
     if (!gencgc_handle_wp_violation(fault_addr)) 
         if(!handle_control_stack_guard_triggered(context,fault_addr))
@@ -213,6 +227,29 @@ os_install_interrupt_handlers(void)
 }
 
 #endif /* defined GENCGC */
+
+#ifdef __NetBSD__
+static void netbsd_init()
+{
+    struct rlimit rl;
+    
+    /* 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;
+    if (setrlimit (RLIMIT_DATA, &rl) < 0) {
+       fprintf (stderr, 
+                "RUNTIME WARNING: unable to raise process data size limit:\n\
+  %s.\n\
+The system may fail to start.\n",
+                strerror(errno));
+    }
+}
+#endif /* __NetBSD__ */
 \f
 /* threads */
 
index f7c3e1c..18c2951 100644 (file)
 #include <sys/signal.h>
 
 typedef caddr_t os_vm_address_t;
+#ifdef __NetBSD__
+typedef vsize_t os_vm_size_t;
+#else
 typedef vm_size_t os_vm_size_t;
+#endif
 typedef off_t os_vm_offset_t;
 typedef int os_vm_prot_t;
 typedef int os_context_register_t;
@@ -28,7 +32,7 @@ typedef int os_context_register_t;
  * Linux sigaltstack(2) */
 typedef struct sigaltstack stack_t;
 #elif defined __FreeBSD__
-/* FreeBSD 4.6 already has stack_t defined. */
+/* FreeBSD 4.6 and NetBSD 1.6 already have stack_t defined. */
 #endif
 
 #if defined __FreeBSD__
@@ -45,9 +49,18 @@ typedef ucontext_t os_context_t;
  * so we need to implement single stepping in a more roundabout way. */
 #define CANNOT_GET_TO_SINGLE_STEP_FLAG
 #define SIG_MEMORY_FAULT SIGBUS
+
 #elif defined __OpenBSD__
+
 typedef struct sigcontext os_context_t;
 #define SIG_MEMORY_FAULT SIGSEGV
+
+#elif defined __NetBSD__
+
+#include <ucontext.h>
+typedef ucontext_t os_context_t;
+#define SIG_MEMORY_FAULT SIGSEGV
+
 #elif defined LISP_FEATURE_DARWIN
   /* man pages claim that the third argument is a sigcontext struct,
      but ucontext_t is defined, matches sigcontext where sensible,
@@ -59,6 +72,7 @@ typedef struct sigcontext os_context_t;
 #include <ucontext.h>
 typedef ucontext_t os_context_t;
 #define SIG_MEMORY_FAULT SIGBUS
+
 #else
 #error unsupported BSD variant
 #endif
index 189a3b1..c9d31c2 100644 (file)
@@ -69,7 +69,7 @@ boolean interrupt_maybe_gc_int(int, siginfo_t *, void *);
 boolean enable_page_protection = 1;
 
 /* Should we unmap a page and re-mmap it to have it zero filled? */
-#if defined(__FreeBSD__) || defined(__OpenBSD__)
+#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
 /* comment from cmucl-2.4.8: This can waste a lot of swap on FreeBSD
  * so don't unmap there.
  *
index efd81bb..aebf164 100644 (file)
@@ -730,7 +730,7 @@ boolean handle_control_stack_guard_triggered(os_context_t *context,void *addr){
 }
 
 #ifndef LISP_FEATURE_GENCGC
-/* This function gets called from the SIGSEGV (for e.g. Linux or
+/* This function gets called from the SIGSEGV (for e.g. Linux, NetBSD, &
  * OpenBSD) or SIGBUS (for e.g. FreeBSD) handler. Here we check
  * whether the signal was due to treading on the mprotect()ed zone -
  * and if so, arrange for a GC to happen. */
index 2ad75ce..78c58b1 100644 (file)
@@ -38,7 +38,8 @@ F(brk)
 #if defined(hpux) \
      || defined(SVR4) \
      || defined(__FreeBSD__) \
-     || defined(__OpenBSD__)
+     || defined(__OpenBSD__) \
+     || defined(__NetBSD__)
 F(cfgetospeed)
 F(cfsetospeed)
 F(cfgetispeed)
@@ -152,7 +153,7 @@ F(sigreturn)
 #if !defined(SVR4)
 F(sigsetmask)
 #endif
-#if !defined(SVR4) && !defined(__FreeBSD__) && !defined(__OpenBSD__)
+#if !defined(SVR4) && !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__)
 F(sigstack)
 F(sigvec)
 #endif
@@ -177,6 +178,7 @@ F(readdir)
      || defined(SVR4) \
      || defined(__FreeBSD__) \
      || defined(__OpenBSD__) \
+     || defined(__NetBSD__) \
      || defined(__linux__)
 F(tcgetattr)
 F(tcsetattr)
@@ -194,7 +196,8 @@ F(umask)
      && !defined(parisc) \
      && !defined(SOLARIS) \
      && !defined(__OpenBSD__) \
-     && !defined(__FreeBSD__)
+     && !defined(__FreeBSD__) \
+     && !defined(__NetBSD__)
 F(umount)
 #endif
 F(unlink)
@@ -204,7 +207,7 @@ F(utimes)
 #ifndef irix
 F(vfork)
 #endif
-#if !defined(osf1) && !defined(__FreeBSD__) && !defined(__OpenBSD__)
+#if !defined(osf1) && !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__)
 F(vhangup)
 #endif
 F(wait)
@@ -254,6 +257,9 @@ F(gethostbyname)
 F(gethostbyaddr)
 
 /* other miscellaneous things */
+/* FIXME: NetBSD plays some renaming games, and so cannot simply
+   reference symbols here.  "NetBSD needs to get fixed here too PEM
+   2004-03-27" */
 #if defined(SVR4) || defined(__FreeBSD__)
 F(setpgid)
 F(getpgid)
index 543c7e0..fbe318b 100644 (file)
@@ -55,8 +55,10 @@ context_eflags_addr(os_context_t *context)
     return &context->uc_mcontext.gregs[16];
 #elif defined __FreeBSD__
     return &context->uc_mcontext.mc_eflags;
-#elif defined __OpenBSD__
+#elif defined __OpenBSD__ || defined __NetBSD__
     return &context->sc_eflags;
+#elif defined __NetBSD__
+    return &(context->uc_mcontext.__gregs[_REG_EFL]);
 #else
 #error unsupported OS
 #endif
index b1e03fd..d42060a 100644 (file)
 #include "genesis/thread.h"
        
 /* Minimize conditionalization for different OS naming schemes. */
-#if defined __linux__  || defined __FreeBSD__ /* (but *not* OpenBSD) */
+#if defined __linux__  || defined __FreeBSD__ || defined __NetBSD__ /* (but *not* OpenBSD) */
 #define GNAME(var) var
 #else
 #define GNAME(var) _##var
 #endif
 
-/* Get the right type of alignment. Linux and FreeBSD (but not OpenBSD)
+/* Get the right type of alignment. Linux, FreeBSD and NetBSD (but not OpenBSD)
  * want alignment in bytes. */
-#if defined(__linux__) || defined(__FreeBSD__)
+#if defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__)
 #define align_4byte    4
 #define align_8byte    8
 #define align_16byte   16
index e1771b4..b30eed3 100644 (file)
@@ -12,7 +12,8 @@
  * flavour, with the cross-architecture complications that this
  * entails; unfortunately, currently the situation is worse, not
  * better, than in the above paragraph. */
-   
+
+#if defined(__FreeBSD__) || defined(__OpenBSD__)   
 int *
 os_context_register_addr(os_context_t *context, int offset)
 {
@@ -44,6 +45,43 @@ os_context_sp_addr(os_context_t *context)
     return CONTEXT_ADDR_FROM_STEM(esp);
 }
 
+#endif /* __FreeBSD__ || __OpenBSD__ */
+
+#ifdef __NetBSD__
+int *
+os_context_register_addr(os_context_t *context, int offset)
+{
+    switch(offset) {
+    case  0:
+       return CONTEXT_ADDR_FROM_STEM(EAX);
+    case  2:
+       return CONTEXT_ADDR_FROM_STEM(ECX);
+    case  4:
+       return CONTEXT_ADDR_FROM_STEM(EDX);
+    case  6:
+       return CONTEXT_ADDR_FROM_STEM(EBX);
+    case  8:
+       return CONTEXT_ADDR_FROM_STEM(ESP);
+    case 10:
+       return CONTEXT_ADDR_FROM_STEM(EBP);
+    case 12:
+       return CONTEXT_ADDR_FROM_STEM(ESI);
+    case 14:
+       return CONTEXT_ADDR_FROM_STEM(EDI);
+    default:
+       return 0;
+    }
+}
+
+int *
+os_context_sp_addr(os_context_t *context)
+{
+    return &(_UC_MACHINE_SP(context));
+}
+
+#endif  /* __NetBSD__ */
+
+
 
 /* FIXME: If this can be a no-op on BSD/x86, then it 
  * deserves a more precise name.
index 5f1e242..259bb01 100644 (file)
@@ -13,6 +13,8 @@ static inline os_context_t *arch_os_get_context(void **void_context) {
 #define CONTEXT_ADDR_FROM_STEM(stem) &context->uc_mcontext.mc_ ## stem
 #elif defined __OpenBSD__
 #define CONTEXT_ADDR_FROM_STEM(stem) &context->sc_ ## stem
+#elif defined __NetBSD__
+#define CONTEXT_ADDR_FROM_STEM(stem) &((context)->uc_mcontext.__gregs[_REG_ ## stem])
 #else
 #error unsupported BSD variant
 #endif
index e76237d..c065542 100644 (file)
@@ -76,7 +76,7 @@ main(int argc, char *argv[])
     DEFTYPE("uid-t",   uid_t);
     printf("\n");
 
-    printf(";;; fcntl.h (or unistd.h on OpenBSD)\n");
+    printf(";;; fcntl.h (or unistd.h on OpenBSD and NetBSD)\n");
     defconstant("r_ok", R_OK);
     defconstant("w_ok", W_OK);
     defconstant("x_ok", X_OK);
index 66d7616..2dfa6a0 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.8.9.28"
+"0.8.9.29"