diff --git a/core/kernel/kernel-tests.factor b/core/kernel/kernel-tests.factor index 152e1bac14..7d5f7b538b 100644 --- a/core/kernel/kernel-tests.factor +++ b/core/kernel/kernel-tests.factor @@ -49,8 +49,11 @@ IN: kernel.tests : overflow-c ( -- ) overflow-c overflow-c ; +! The VM cannot recover from callstack overflow on Windows or +! OpenBSD, because no facility exists to run memory protection +! fault handlers on an alternate callstack. os [ windows? ] [ openbsd? ] bi or [ - [ overflow-c ] [ { "kernel-error" 14 f f } = ] must-fail-with + [ overflow-c ] [ { "kernel-error" 15 f f } = ] must-fail-with ] unless [ -7 ] must-fail diff --git a/vm/errors.cpp b/vm/errors.cpp index 21dff5a475..f6ceee9966 100755 --- a/vm/errors.cpp +++ b/vm/errors.cpp @@ -98,9 +98,9 @@ void factor_vm::memory_protection_error(cell addr, stack_frame *stack) else if(ctx->retainstack_seg->overflow_p(addr)) general_error(ERROR_RETAINSTACK_OVERFLOW,false_object,false_object,stack); else if(ctx->callstack_seg->underflow_p(addr)) - general_error(ERROR_CALLSTACK_UNDERFLOW,false_object,false_object,stack); - else if(ctx->callstack_seg->overflow_p(addr)) general_error(ERROR_CALLSTACK_OVERFLOW,false_object,false_object,stack); + else if(ctx->callstack_seg->overflow_p(addr)) + general_error(ERROR_CALLSTACK_UNDERFLOW,false_object,false_object,stack); else general_error(ERROR_MEMORY,allot_cell(addr),false_object,stack); }