give better error message for windows exceptions, and don't lop off the top end of the exception code when the vm throws the error
parent
66dc1c6311
commit
432d4f79e9
|
@ -1,6 +1,40 @@
|
||||||
! Copyright (C) 2009 Slava Pestov.
|
! Copyright (C) 2009 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: debugger io prettyprint sequences system ;
|
USING: assocs debugger io kernel literals namespaces prettyprint
|
||||||
|
sequences system windows.kernel32 ;
|
||||||
IN: debugger.windows
|
IN: debugger.windows
|
||||||
|
|
||||||
M: windows signal-error. "Windows exception #" write third .h ;
|
CONSTANT: seh-names
|
||||||
|
H{
|
||||||
|
{ $ STATUS_GUARD_PAGE_VIOLATION "STATUS_GUARD_PAGE_VIOLATION" }
|
||||||
|
{ $ STATUS_DATATYPE_MISALIGNMENT "STATUS_DATATYPE_MISALIGNMENT" }
|
||||||
|
{ $ STATUS_BREAKPOINT "STATUS_BREAKPOINT" }
|
||||||
|
{ $ STATUS_SINGLE_STEP "STATUS_SINGLE_STEP" }
|
||||||
|
{ $ STATUS_ACCESS_VIOLATION "STATUS_ACCESS_VIOLATION" }
|
||||||
|
{ $ STATUS_IN_PAGE_ERROR "STATUS_IN_PAGE_ERROR" }
|
||||||
|
{ $ STATUS_INVALID_HANDLE "STATUS_INVALID_HANDLE" }
|
||||||
|
{ $ STATUS_NO_MEMORY "STATUS_NO_MEMORY" }
|
||||||
|
{ $ STATUS_ILLEGAL_INSTRUCTION "STATUS_ILLEGAL_INSTRUCTION" }
|
||||||
|
{ $ STATUS_NONCONTINUABLE_EXCEPTION "STATUS_NONCONTINUABLE_EXCEPTION" }
|
||||||
|
{ $ STATUS_INVALID_DISPOSITION "STATUS_INVALID_DISPOSITION" }
|
||||||
|
{ $ STATUS_ARRAY_BOUNDS_EXCEEDED "STATUS_ARRAY_BOUNDS_EXCEEDED" }
|
||||||
|
{ $ STATUS_FLOAT_DENORMAL_OPERAND "STATUS_FLOAT_DENORMAL_OPERAND" }
|
||||||
|
{ $ STATUS_FLOAT_DIVIDE_BY_ZERO "STATUS_FLOAT_DIVIDE_BY_ZERO" }
|
||||||
|
{ $ STATUS_FLOAT_INEXACT_RESULT "STATUS_FLOAT_INEXACT_RESULT" }
|
||||||
|
{ $ STATUS_FLOAT_INVALID_OPERATION "STATUS_FLOAT_INVALID_OPERATION" }
|
||||||
|
{ $ STATUS_FLOAT_OVERFLOW "STATUS_FLOAT_OVERFLOW" }
|
||||||
|
{ $ STATUS_FLOAT_STACK_CHECK "STATUS_FLOAT_STACK_CHECK" }
|
||||||
|
{ $ STATUS_FLOAT_UNDERFLOW "STATUS_FLOAT_UNDERFLOW" }
|
||||||
|
{ $ STATUS_INTEGER_DIVIDE_BY_ZERO "STATUS_INTEGER_DIVIDE_BY_ZERO" }
|
||||||
|
{ $ STATUS_INTEGER_OVERFLOW "STATUS_INTEGER_OVERFLOW" }
|
||||||
|
{ $ STATUS_PRIVILEGED_INSTRUCTION "STATUS_PRIVILEGED_INSTRUCTION" }
|
||||||
|
{ $ STATUS_STACK_OVERFLOW "STATUS_STACK_OVERFLOW" }
|
||||||
|
{ $ STATUS_CONTROL_C_EXIT "STATUS_CONTROL_C_EXIT" }
|
||||||
|
}
|
||||||
|
|
||||||
|
: seh-name. ( n -- )
|
||||||
|
seh-names get at [ " (" ")" surround write ] when* ;
|
||||||
|
|
||||||
|
M: windows signal-error.
|
||||||
|
"Windows exception 0x" write
|
||||||
|
third [ .h ] [ seh-name. ] bi nl ;
|
||||||
|
|
|
@ -759,6 +759,32 @@ CONSTANT: PIPE_NOWAIT 1
|
||||||
|
|
||||||
CONSTANT: PIPE_UNLIMITED_INSTANCES 255
|
CONSTANT: PIPE_UNLIMITED_INSTANCES 255
|
||||||
|
|
||||||
|
CONSTANT: EXCEPTION_NONCONTINUABLE HEX: 1
|
||||||
|
CONSTANT: STATUS_GUARD_PAGE_VIOLATION HEX: 80000001
|
||||||
|
CONSTANT: STATUS_DATATYPE_MISALIGNMENT HEX: 80000002
|
||||||
|
CONSTANT: STATUS_BREAKPOINT HEX: 80000003
|
||||||
|
CONSTANT: STATUS_SINGLE_STEP HEX: 80000004
|
||||||
|
CONSTANT: STATUS_ACCESS_VIOLATION HEX: C0000005
|
||||||
|
CONSTANT: STATUS_IN_PAGE_ERROR HEX: C0000006
|
||||||
|
CONSTANT: STATUS_INVALID_HANDLE HEX: C0000008
|
||||||
|
CONSTANT: STATUS_NO_MEMORY HEX: C0000017
|
||||||
|
CONSTANT: STATUS_ILLEGAL_INSTRUCTION HEX: C000001D
|
||||||
|
CONSTANT: STATUS_NONCONTINUABLE_EXCEPTION HEX: C0000025
|
||||||
|
CONSTANT: STATUS_INVALID_DISPOSITION HEX: C0000026
|
||||||
|
CONSTANT: STATUS_ARRAY_BOUNDS_EXCEEDED HEX: C000008C
|
||||||
|
CONSTANT: STATUS_FLOAT_DENORMAL_OPERAND HEX: C000008D
|
||||||
|
CONSTANT: STATUS_FLOAT_DIVIDE_BY_ZERO HEX: C000008E
|
||||||
|
CONSTANT: STATUS_FLOAT_INEXACT_RESULT HEX: C000008F
|
||||||
|
CONSTANT: STATUS_FLOAT_INVALID_OPERATION HEX: C0000090
|
||||||
|
CONSTANT: STATUS_FLOAT_OVERFLOW HEX: C0000091
|
||||||
|
CONSTANT: STATUS_FLOAT_STACK_CHECK HEX: C0000092
|
||||||
|
CONSTANT: STATUS_FLOAT_UNDERFLOW HEX: C0000093
|
||||||
|
CONSTANT: STATUS_INTEGER_DIVIDE_BY_ZERO HEX: C0000094
|
||||||
|
CONSTANT: STATUS_INTEGER_OVERFLOW HEX: C0000095
|
||||||
|
CONSTANT: STATUS_PRIVILEGED_INSTRUCTION HEX: C0000096
|
||||||
|
CONSTANT: STATUS_STACK_OVERFLOW HEX: C00000FD
|
||||||
|
CONSTANT: STATUS_CONTROL_C_EXIT HEX: C000013A
|
||||||
|
|
||||||
LIBRARY: kernel32
|
LIBRARY: kernel32
|
||||||
! FUNCTION: _hread
|
! FUNCTION: _hread
|
||||||
! FUNCTION: _hwrite
|
! FUNCTION: _hwrite
|
||||||
|
|
|
@ -112,7 +112,7 @@ void factor_vm::memory_protection_error(cell addr, stack_frame *native_stack)
|
||||||
|
|
||||||
void factor_vm::signal_error(int signal, stack_frame *native_stack)
|
void factor_vm::signal_error(int signal, stack_frame *native_stack)
|
||||||
{
|
{
|
||||||
general_error(ERROR_SIGNAL,tag_fixnum(signal),false_object,native_stack);
|
general_error(ERROR_SIGNAL,allot_cell(signal),false_object,native_stack);
|
||||||
}
|
}
|
||||||
|
|
||||||
void factor_vm::divide_by_zero_error()
|
void factor_vm::divide_by_zero_error()
|
||||||
|
|
Loading…
Reference in New Issue