0.8.16.2: TYPE-ERROR for ERROR
[sbcl.git] / src / runtime / bsd-os.c
index 5965596..0bca439 100644 (file)
 #include <signal.h>
 /* #include <sys/sysinfo.h> */
 #include "validate.h"
-
 \f
 os_vm_size_t os_vm_page_size;
 
 #ifdef __NetBSD__
 #include <sys/resource.h>
+#include <sys/sysctl.h>
 #include <string.h>
 
 static void netbsd_init();
@@ -231,16 +231,38 @@ os_install_interrupt_handlers(void)
 #ifdef __NetBSD__
 static void netbsd_init()
 {
-       struct rlimit rl;
+    struct rlimit rl;
+    int mib[2], osrev;
+    size_t len;
+
+    /* Are we running on a sufficiently functional kernel? */
+    mib[0] = CTL_KERN;
+    mib[1] = KERN_OSREV;
+
+    len = sizeof(osrev);
+    sysctl(mib, 2, &osrev, &len, NULL, 0);
 
-       /* 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);
-       rl.rlim_cur = 1073741824;
-       if (setrlimit (RLIMIT_DATA, &rl) < 0) {
-               fprintf (stderr, "RUNTIME WARNING: unable to raise process data size limit to 1GB (%s). The system may fail to start.\n",
-                       strerror(errno));
-       }
+    /* If we're older than 2.0... */
+    if (osrev < 200000000) {
+       fprintf(stderr, "osrev = %d (needed at least 200000000).\n", osrev);
+       lose("NetBSD kernel too old to run sbcl.\n");
+    }
+    
+    /* 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