Handle C stack overflow caused by too nested Lisp evaluation.
commitebd31792b292f63f09efa498b5df73bf86107259
authorDmitry Antipov <dmantipov@yandex.ru>
Tue, 26 Aug 2014 06:25:59 +0000 (26 10:25 +0400)
committerDmitry Antipov <dmantipov@yandex.ru>
Tue, 26 Aug 2014 06:25:59 +0000 (26 10:25 +0400)
tree8cd196b0c4c03a3e76e00ed6c0fa010af49d3aea
parent940ac42ae3d5c5c5d80f984278446ab34c0bb26a
Handle C stack overflow caused by too nested Lisp evaluation.
* 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)
[HAVE_STACK_OVERFLOW_HANDLING]: New variables.
(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.
ChangeLog
configure.ac
lisp/ChangeLog
lisp/startup.el
src/ChangeLog
src/keyboard.c
src/lisp.h
src/sysdep.c