• Dmitry Antipov's avatar
    Handle C stack overflow caused by too nested Lisp evaluation. · ebd31792
    Dmitry Antipov authored
    * configure.ac: Check for sigaltstack and related sigaction
    support.  Unconditionally check for sigsetjmp and siglongjmp.
    (HAVE_STACK_OVERFLOW_HANDLING): Define if we can support it.
    * src/lisp.h (toplevel) [HAVE_STACK_OVERFLOW_HANDLING]: Declare
    siglongjmp point to transfer control from SIGSEGV handler.
    * src/keyboard.c (return_to_command_loop, recover_top_level_message)
    (regular_top_level_message): New variable.
    (command_loop) [HAVE_STACK_OVERFLOW_HANDLING]: Handle non-local
    exit from SIGSEGV handler and adjust message displayed by Vtop_level
    if appropriate.
    (syms_of_keyboard): DEFVAR Vtop_level_message and initialize
    new variables described above.
    * src/sysdep.c [HAVE_SYS_RESOURCE_H]: Include sys/resource.h as such.
    (stack_grows_down, sigsegv_stack, handle_sigsegv)
    [HAVE_STACK_OVERFLOW_HANDLING]: New variables and function.
    (init_sigsegv): New function.
    (init_signals): Use it.
    * lisp/startup.el (normal-top-level): Use top-level-message.
lisp.h 151 KB