X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fruntime.c;h=573b38924cf5392e87eece5943074de5c0b876f2;hb=95591ed483dbb8c0846c129953acac1554f28809;hp=159d7f62fa9d6f98893ba3fad662ffac544383b2;hpb=26987375eb9dae6e9b15084e317a04a6509dd05f;p=sbcl.git diff --git a/src/runtime/runtime.c b/src/runtime/runtime.c index 159d7f6..573b389 100644 --- a/src/runtime/runtime.c +++ b/src/runtime/runtime.c @@ -43,14 +43,14 @@ #include "signal.h" #include "runtime.h" -#include "alloc.h" #include "vars.h" #include "globals.h" #include "os.h" +#include "interr.h" +#include "alloc.h" #include "interrupt.h" #include "arch.h" #include "gc.h" -#include "interr.h" #include "validate.h" #include "core.h" #include "save.h" @@ -72,15 +72,17 @@ #ifdef LISP_FEATURE_HPUX extern void *return_from_lisp_stub; +#include "genesis/closure.h" +#include "genesis/simple-fun.h" #endif /* SIGINT handler that invokes the monitor (for when Lisp isn't up to it) */ static void -sigint_handler(int signal, siginfo_t *info, void *void_context) +sigint_handler(int signal, siginfo_t *info, os_context_t *context) { lose("\nSIGINT hit at 0x%08lX\n", - (unsigned long) *os_context_pc_addr(void_context)); + (unsigned long) *os_context_pc_addr(context)); } /* (This is not static, because we want to be able to call it from @@ -227,12 +229,13 @@ main(int argc, char *argv[], char *envp[]) /* other command line options */ boolean noinform = 0; boolean end_runtime_options = 0; + boolean disable_lossage_handler_p = 0; lispobj initial_function; const char *sbcl_home = getenv("SBCL_HOME"); interrupt_init(); - block_blockable_signals(); + block_blockable_signals(0, 0); setlocale(LC_ALL, ""); @@ -273,6 +276,8 @@ main(int argc, char *argv[], char *envp[]) * TOPLEVEL-INIT sees the option. */ noinform = 1; end_runtime_options = 1; + disable_lossage_handler_p = 1; + lose_on_corruption_p = 1; break; } else if (0 == strcmp(arg, "--noinform")) { noinform = 1; @@ -307,8 +312,10 @@ main(int argc, char *argv[], char *envp[]) if (errno) lose("argument to --dynamic-space-size is not a number"); # 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))) + 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"); # endif } else if (0 == strcmp(arg, "--control-stack-size")) { @@ -333,6 +340,12 @@ main(int argc, char *argv[], char *envp[]) ++n; } ++argi; + } else if (0 == strcmp(arg, "--disable-ldb")) { + disable_lossage_handler_p = 1; + ++argi; + } else if (0 == strcmp(arg, "--lose-on-corruption")) { + lose_on_corruption_p = 1; + ++argi; } else if (0 == strcmp(arg, "--end-runtime-options")) { end_runtime_options = 1; ++argi; @@ -422,7 +435,8 @@ main(int argc, char *argv[], char *envp[]) define_var("nil", NIL, 1); define_var("t", T, 1); - enable_lossage_handler(); + if (!disable_lossage_handler_p) + enable_lossage_handler(); globals_init(); @@ -431,8 +445,10 @@ main(int argc, char *argv[], char *envp[]) lose("couldn't find initial function\n"); } #ifdef LISP_FEATURE_HPUX + /* -1 = CLOSURE_FUN_OFFSET, 23 = SIMPLE_FUN_CODE_OFFSET, we are + * not in LANGUAGE_ASSEMBLY so we cant reach them. */ return_from_lisp_stub = (void *) ((char *)*((unsigned long *) - ((char *)initial_function - 1)) + 23); + ((char *)initial_function + -1)) + 23); #endif gc_initialize_pointers();