]> gitweb.factorcode.org Git - factor.git/commitdiff
vm: callstack errors were flipped
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Mon, 29 Mar 2010 05:53:20 +0000 (01:53 -0400)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Mon, 29 Mar 2010 05:53:30 +0000 (01:53 -0400)
core/kernel/kernel-tests.factor
vm/errors.cpp

index 152e1bac142e6a54a86a6829bac15cd45056540d..7d5f7b538b875ca3c4f29d6ad27021ad997deb4a 100644 (file)
@@ -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 <byte-array> ] must-fail
index 21dff5a4758dbd3c26f19baebf2451b0701f7804..f6ceee9966e2945f31467a6fabe51b508fe5b55e 100755 (executable)
@@ -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);
 }