1.0.21.17: --script commandline argument
[sbcl.git] / src / runtime / runtime.c
index a4fc68a..79dbcbf 100644 (file)
@@ -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;
-    }
-}
 \f
 /* miscellaneous chattiness */
 
@@ -147,6 +134,7 @@ Common runtime options:\n\
   --version                  Print version information and exit.\n\
   --core <filename>          Use the specified core file instead of the default.\n\
   --dynamic-space-size <MiB> Size of reserved dynamic space in megabytes.\n\
+  --control-stack-size <MiB> Size of reserved control stack in megabytes.\n\
 \n\
 Common toplevel options:\n\
   --sysinit <filename>       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