* DISABLE-DEBUGGER now also turns LDB off, so scriptability remains the same.
* Use lose() instead of monitor_or_something() in the runtime, and replace
set_lossage_handler() with enable/disable_lossage_handler().
additionally it just doesn't work in SBCL as currently
implemented, thanks to optimizations (that are always valid for
the other three SLOT-VALUEish functions, but not for the setter).
+ * minor incompatibale change: the :SB-LDB feature is now enabled by
+ default, and DISABLE-DEBUGGER and ENABLE-DEBUGGER also affect
+ the low-level debugger.
* bug fix: native unparsing of pathnames with :DIRECTORY NIL failed
with a type error. (reported by blitz_ on #lisp)
* bug fix: unparsing logical pathnames with :NAME :WILD :TYPE NIL
;;; halt-on-failures and prompt-on-failures modes, suitable for
;;; noninteractive and interactive use respectively
(defun disable-debugger ()
+ ;; Why conditionally? Why not disable it even if user has frobbed
+ ;; this hook? We could just save the old value in case of a later
+ ;; ENABLE-DEBUGGER.
(when (eql *invoke-debugger-hook* nil)
;; *DEBUG-IO* used to be set here to *ERROR-OUTPUT* which is sort
;; of unexpected but mostly harmless, but then ENABLE-DEBUGGER had
;; to set it to a suitable value again and be very careful,
;; especially if the user has also set it. -- MG 2005-07-15
- (setf *invoke-debugger-hook* 'debugger-disabled-hook)))
+ (setf *invoke-debugger-hook* 'debugger-disabled-hook)
+ (sb!alien:alien-funcall (sb!alien:extern-alien "disable_lossage_handler" (function sb!alien:void)))))
(defun enable-debugger ()
(when (eql *invoke-debugger-hook* 'debugger-disabled-hook)
- (setf *invoke-debugger-hook* nil)))
+ (setf *invoke-debugger-hook* nil)
+ (sb!alien:alien-funcall (sb!alien:extern-alien "enable_lossage_handler" (function sb!alien:void)))))
(defun show-restarts (restarts s)
(cond ((null restarts)
#include "interrupt.h"
#include "interr.h"
#include "breakpoint.h"
-#include "monitor.h"
extern char call_into_lisp_LRA[], call_into_lisp_end[];
#include "interrupt.h"
#include "interr.h"
#include "breakpoint.h"
-#include "monitor.h"
void arch_init(void)
{
#include "genesis/static-symbols.h"
#include "genesis/vector.h"
#include "thread.h"
+#include "monitor.h"
\f
/* the way that we shut down the system on a fatal error */
exit(1);
}
static void (*lossage_handler)(void) = default_lossage_handler;
-void
-set_lossage_handler(void handler(void))
+
+void enable_lossage_handler(void)
+{
+ lossage_handler = monitor_or_something;
+}
+void disable_lossage_handler(void)
{
- lossage_handler = handler;
+ lossage_handler = default_lossage_handler;
}
void
#define _INTERR_H_
extern void lose(char *fmt, ...) never_returns;
-extern void set_lossage_handler(void fun(void));
+extern void enable_lossage_handler(void);
+extern void disable_lossage_handler(void);
extern void describe_internal_error(os_context_t *context);
extern lispobj debug_print(lispobj string);
#include "globals.h"
#include "lispregs.h"
#include "validate.h"
-#include "monitor.h"
#include "gc.h"
#include "alloc.h"
#include "dynbind.h"
#include "interrupt.h"
#include "interr.h"
#include "breakpoint.h"
-#include "monitor.h"
#include "genesis/constants.h"
#include "arch.h"
#include "gc.h"
#include "interr.h"
-#include "monitor.h"
#include "validate.h"
#include "core.h"
#include "save.h"
define_var("nil", NIL, 1);
define_var("t", T, 1);
- set_lossage_handler(monitor_or_something);
+ enable_lossage_handler();
globals_init();
#include "interr.h"
#include "lispregs.h"
#include "runtime.h"
-#include "monitor.h"
#include "alloc.h"
#include "genesis/primitive-objects.h"
fflush(stderr);
fake_foreign_function_call(context);
- monitor_or_something();
+ lose("fake_foreign_function_call fell through");
+ /* FIXME: WTF? How are we supposed to end up here? */
return ExceptionContinueSearch;
}
#include "interrupt.h"
#include "interr.h"
#include "breakpoint.h"
-#include "monitor.h"
#include "thread.h"
#include "genesis/static-symbols.h"
sigill_handler(int signal, siginfo_t *siginfo, void *void_context) {
os_context_t *context = (os_context_t*)void_context;
fake_foreign_function_call(context);
- monitor_or_something();
+ lose("fake_foreign_function_call fell through");
}
void
#include "interrupt.h"
#include "interr.h"
#include "breakpoint.h"
-#include "monitor.h"
#include "thread.h"
#include "genesis/static-symbols.h"
#endif
fake_foreign_function_call(context);
- monitor_or_something();
+ lose("fake_foreign_call fell through");
}
void
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.9.13.32"
+"0.9.13.33"