X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fbsd-os.c;h=df486eb63ba2a34cbb6aa78405b872843f4f87f8;hb=d442c23da9851beac541b8bddfc2c0837cb87309;hp=0d221f5b9fafa72eea4918cc273c567948e3ee96;hpb=012b1558b80a988901569412ca79d544ed30ff6a;p=sbcl.git diff --git a/src/runtime/bsd-os.c b/src/runtime/bsd-os.c index 0d221f5..df486eb 100644 --- a/src/runtime/bsd-os.c +++ b/src/runtime/bsd-os.c @@ -70,7 +70,11 @@ static void freebsd_init(); #include #include #include +#include #include +#ifdef LISP_FEATURE_X86 +#include +#endif static void openbsd_init(); #endif @@ -481,15 +485,40 @@ os_get_runtime_executable_path() #endif #ifdef __OpenBSD__ + +int openbsd_use_fxsave = 0; + void openbsd_init() { +#ifdef LISP_FEATURE_X86 + int mib[2]; + size_t size; +#endif + /* + * Show a warning if it looks like the memory available after + * allocating the spaces won't be at least this much. + */ +#ifdef LISP_FEATURE_X86_64 + const int wantfree = 64 * 1024 * 1024; +#else + const int wantfree = 32 * 1024 * 1024; +#endif struct rlimit rl; +#ifdef LISP_FEATURE_X86 + /* Save the machdep.osfxsr sysctl for use by os_restore_fp_control() */ + mib[0] = CTL_MACHDEP; + mib[1] = CPU_OSFXSR; + size = sizeof (openbsd_use_fxsave); + sysctl(mib, 2, &openbsd_use_fxsave, &size, NULL, 0); +#endif + /* OpenBSD, like NetBSD, counts mmap()ed space against the * process's data size limit. If the soft limit is lower than the * hard limit then try to yank it up, this lets users in the - * "staff" login class run sbcl with a default /etc/login.conf + * "staff" or "daemon" login classes run sbcl with larger dynamic + * space sizes. */ getrlimit (RLIMIT_DATA, &rl); if (rl.rlim_cur < rl.rlim_max) { @@ -503,18 +532,17 @@ The system may fail to start.\n", } } - /* Display a (hopefully) helpful warning if it looks like we won't - * be able to allocate enough memory. In testing I found that on - * my system at least, a minimum of 25M on top of the three space - * sizes was needed to start SBCL. Show a warning below 32M so as - * to leave a little breathing room. + /* + * Display a (hopefully) helpful warning if it looks like we won't + * be able to allocate enough memory. */ getrlimit (RLIMIT_DATA, &rl); if (dynamic_space_size + READ_ONLY_SPACE_SIZE + STATIC_SPACE_SIZE + - LINKAGE_TABLE_SPACE_SIZE + (32*1024*1024) > rl.rlim_cur) + LINKAGE_TABLE_SPACE_SIZE + wantfree > rl.rlim_cur) fprintf (stderr, "RUNTIME WARNING: data size resource limit may be too low,\n" - " try decreasing the dynamic space size with --dynamic-space-size\n"); + " try decreasing the dynamic space size with --dynamic-space-size\n" + " or raising the datasize or datasize-max limits in /etc/login.conf\n"); } /* OpenBSD's dlsym() relies on the gcc bulitin