From: Alexey D. <ade...@co...> - 2003-02-09 06:55:04
|
Hello, I've faced with a problem. From src/code/target-signal.lisp: (defun enable-interrupt (signal-designator handler) ... (without-gcing (let ((result (install-handler ...))) (cond ... (t (the function (sb!kernel:make-lisp-obj result))))))) INSTALL-HANDLER is a C function, returning an old handler as a number. MAKE-LISP-OBJ reinterprets bits of its argument as a tagged object. Current SBCL ignores THE above, and so all works fine. But my local version tries to do this check and dies in cold init. Before going into lisp land the runtime sets SIGINT handler to C function, which has a 4-bytes aligned address (see sigint_init). Lisp then tries to set a lisp handler, but the address of old handler has FIXNUM low tag and THE above causes type error. So: how ENABLE-INTERRUPT is supposed to deal with C handlers? Return an integer? Coerce to FIXNUM? -- Regards, Alexey Dejneka |