X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fruntime.c;h=79dbcbf0e956ead73f30515116a0694c53bfbce0;hb=ee222567ee95eaac8f6f4c877242dd116bfb8337;hp=a4fc68adbf13ced6c1fc871b5d4c63830ed19035;hpb=ce2002271034469dc3ccdcaef7d13db76403b90d;p=sbcl.git diff --git a/src/runtime/runtime.c b/src/runtime/runtime.c index a4fc68a..79dbcbf 100644 --- a/src/runtime/runtime.c +++ b/src/runtime/runtime.c @@ -121,19 +121,6 @@ copied_existing_filename_or_null(char *filename) return copied_string(filename); } } - -/* Convert a null-terminated array of null-terminated strings (e.g. - * argv or envp) into a Lisp list of Lisp base-strings. */ -static lispobj -alloc_base_string_list(char *array_ptr[]) -{ - if (*array_ptr) { - return alloc_cons(alloc_base_string(*array_ptr), - alloc_base_string_list(1 + array_ptr)); - } else { - return NIL; - } -} /* miscellaneous chattiness */ @@ -147,6 +134,7 @@ Common runtime options:\n\ --version Print version information and exit.\n\ --core Use the specified core file instead of the default.\n\ --dynamic-space-size Size of reserved dynamic space in megabytes.\n\ + --control-stack-size Size of reserved control stack in megabytes.\n\ \n\ Common toplevel options:\n\ --sysinit System-wide init-file to use instead of default.\n\ @@ -231,6 +219,7 @@ main(int argc, char *argv[], char *envp[]) /* other command line options */ boolean noinform = 0; + char *script = 0; boolean end_runtime_options = 0; lispobj initial_function; @@ -247,7 +236,15 @@ main(int argc, char *argv[], char *envp[]) int argi = 1; while (argi < argc) { char *arg = argv[argi]; - if (0 == strcmp(arg, "--noinform")) { + if (0 == strcmp(arg, "--script")) { + /* This is both a runtime and a toplevel option. As a + * runtime option, it is equivalent to --noinform. + * This exits, and does not increment argi, so that + * TOPLEVEL-INIT sees the option. */ + noinform = 1; + end_runtime_options = 1; + break; + } else if (0 == strcmp(arg, "--noinform")) { noinform = 1; ++argi; } else if (0 == strcmp(arg, "--core")) { @@ -279,6 +276,14 @@ main(int argc, char *argv[], char *envp[]) dynamic_space_size = strtol(argv[argi++], 0, 0) << 20; if (errno) lose("argument to --dynamic-space-size is not a number"); + } else if (0 == strcmp(arg, "--control-stack-size")) { + ++argi; + if (argi >= argc) + lose("missing argument for --control-stack-size"); + errno = 0; + thread_control_stack_size = strtol(argv[argi++], 0, 0) << 20; + if (errno) + lose("argument to --dynamic-space-size is not a number"); } else if (0 == strcmp(arg, "--debug-environment")) { int n = 0; printf("; Commandline arguments:\n"); @@ -332,8 +337,10 @@ main(int argc, char *argv[], char *envp[]) } } - /* Align down to multiple of page_table page size */ - dynamic_space_size &= ~(PAGE_BYTES - 1); + /* Align down to multiple of page_table page size, and to the appropriate + * stack alignment. */ + dynamic_space_size &= ~(PAGE_BYTES-1); + thread_control_stack_size &= ~(CONTROL_STACK_ALIGNMENT_BYTES-1); /* KLUDGE: os_vm_page_size is set by os_init(), and on some * systems (e.g. Alpha) arch_init() needs need os_vm_page_size, so