- } else if (addr > control_stack_top && addr < BINDING_STACK_START) {
- fprintf(stderr,
- "Possible stack overflow at 0x%016lX:\n"
- "control_stack_top=%lx, BINDING_STACK_START=%lx\n",
- addr,
- control_stack_top,
- BINDING_STACK_START);
- /* Try to fix control frame pointer. */
- while ( ! (CONTROL_STACK_START <= *current_control_frame_pointer &&
- *current_control_frame_pointer <= control_stack_top))
- ((char*)current_control_frame_pointer) -= sizeof(lispobj);
- monitor_or_something();
- } else if (!interrupt_maybe_gc(signal, info, context)) {
- interrupt_handle_now(signal, info, context);
+ } else {
+ if(!interrupt_maybe_gc(signal, info, context))
+ if(!handle_control_stack_guard_triggered(context,addr))
+ interrupt_handle_now(signal, info, context);