aboutsummaryrefslogtreecommitdiffstats
path: root/src/lisp.h
diff options
context:
space:
mode:
authorDmitry Antipov2014-08-26 10:25:59 +0400
committerDmitry Antipov2014-08-26 10:25:59 +0400
commitebd31792b292f63f09efa498b5df73bf86107259 (patch)
tree8cd196b0c4c03a3e76e00ed6c0fa010af49d3aea /src/lisp.h
parent940ac42ae3d5c5c5d80f984278446ab34c0bb26a (diff)
downloademacs-ebd31792b292f63f09efa498b5df73bf86107259.tar.gz
emacs-ebd31792b292f63f09efa498b5df73bf86107259.zip
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.
Diffstat (limited to 'src/lisp.h')
-rw-r--r--src/lisp.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/lisp.h b/src/lisp.h
index 1e2a8b6535f..012e5fad18d 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -4093,6 +4093,9 @@ extern Lisp_Object Qdisabled, QCfilter;
4093extern Lisp_Object Qup, Qdown; 4093extern Lisp_Object Qup, Qdown;
4094extern Lisp_Object last_undo_boundary; 4094extern Lisp_Object last_undo_boundary;
4095extern bool input_pending; 4095extern bool input_pending;
4096#ifdef HAVE_STACK_OVERFLOW_HANDLING
4097extern sigjmp_buf return_to_command_loop;
4098#endif
4096extern Lisp_Object menu_bar_items (Lisp_Object); 4099extern Lisp_Object menu_bar_items (Lisp_Object);
4097extern Lisp_Object tool_bar_items (Lisp_Object, int *); 4100extern Lisp_Object tool_bar_items (Lisp_Object, int *);
4098extern void discard_mouse_events (void); 4101extern void discard_mouse_events (void);