X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fruntime.c;h=d1a215be8124717e681b6ce46662445d8402713e;hb=f17e3d27d7ff599f9443d011d17017a2a858c81a;hp=59cead9c4c6f5a98d35383675efa25b5a3299656;hpb=bd93f052f95371f613fb913c1cac2b01c8ff2a5c;p=sbcl.git diff --git a/src/runtime/runtime.c b/src/runtime/runtime.c index 59cead9..d1a215b 100644 --- a/src/runtime/runtime.c +++ b/src/runtime/runtime.c @@ -35,6 +35,7 @@ #endif #include #include +#include #if defined(SVR4) || defined(__linux__) #include @@ -67,7 +68,7 @@ #endif #ifndef SBCL_HOME -#define SBCL_HOME "/usr/local/lib/sbcl/" +#define SBCL_HOME SBCL_PREFIX"/lib/sbcl/" #endif #ifdef LISP_FEATURE_HPUX @@ -178,6 +179,14 @@ Common toplevel options:\n\ --userinit Per-user init-file to use instead of default.\n\ --no-sysinit Inhibit processing of any system-wide init-file.\n\ --no-userinit Inhibit processing of any per-user init-file.\n\ + --disable-debugger Invoke sb-ext:disable-debugger.\n\ + --noprint Run a Read-Eval Loop without printing results.\n\ + --script [] Skip #! line, disable debugger, avoid verbosity.\n\ + --quit Exit with code 0 after option processing.\n\ + --non-interactive Sets both --quit and --disable-debugger.\n\ +Common toplevel options that are processed in order:\n\ + --eval
Form to eval when processing this option.\n\ + --load File to load when processing this option.\n\ \n\ User options are not processed by SBCL. All runtime options must\n\ appear before toplevel options, and all toplevel options must\n\ @@ -336,7 +345,8 @@ main(int argc, char *argv[], char *envp[]) core = (runtime_path ? runtime_path : copied_string(saved_runtime_path)); } else { - free(runtime_path); + if (runtime_path) + free(runtime_path); } } @@ -392,16 +402,23 @@ main(int argc, char *argv[], char *envp[]) ++argi; if (argi >= argc) lose("missing argument for --dynamic-space-size"); - errno = 0; - dynamic_space_size = strtol(argv[argi++], 0, 0) << 20; - if (errno) - lose("argument to --dynamic-space-size is not a number"); + { + char *tail; + long tmp = strtol(argv[argi++], &tail, 0); + if (tail[0]) + lose("--dynamic-space-size argument is not a number"); + if ((tmp <= 0) || + (tmp >= (LONG_MAX >> 20))) { + lose("--dynamic-space-size argument is out of range"); + } + dynamic_space_size = tmp << 20; + } # ifdef MAX_DYNAMIC_SPACE_END if (!((DYNAMIC_SPACE_START < DYNAMIC_SPACE_START+dynamic_space_size) && (DYNAMIC_SPACE_START+dynamic_space_size <= MAX_DYNAMIC_SPACE_END))) - lose("specified --dynamic-space-size too large"); + lose("--dynamic-space-size argument is too large"); # endif } else if (0 == strcmp(arg, "--control-stack-size")) { ++argi; @@ -473,6 +490,9 @@ main(int argc, char *argv[], char *envp[]) /* Align down to multiple of page_table page size, and to the appropriate * stack alignment. */ dynamic_space_size &= ~(PAGE_BYTES-1); +#ifdef LISP_FEATURE_GENCGC + dynamic_space_size &= ~(GENCGC_CARD_BYTES-1); +#endif thread_control_stack_size &= ~(CONTROL_STACK_ALIGNMENT_BYTES-1); /* Preserve the runtime options for possible future core saving */