- } else if (addr > CONTROL_STACK_TOP && addr < BINDING_STACK_START) {
- fprintf(stderr, "Possible stack overflow at 0x%016lX: 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);
- ldb_monitor();
- } 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);