diff --git a/basis/bootstrap/image/image.factor b/basis/bootstrap/image/image.factor index 9c0254d24b..b13b192c81 100755 --- a/basis/bootstrap/image/image.factor +++ b/basis/bootstrap/image/image.factor @@ -166,46 +166,49 @@ SPECIAL-OBJECT: jit-word-jump 26 SPECIAL-OBJECT: jit-word-call 27 SPECIAL-OBJECT: jit-if-word 28 SPECIAL-OBJECT: jit-if 29 -SPECIAL-OBJECT: jit-epilog 30 -SPECIAL-OBJECT: jit-return 31 -SPECIAL-OBJECT: jit-profiling 32 -SPECIAL-OBJECT: jit-push 33 -SPECIAL-OBJECT: jit-dip-word 34 -SPECIAL-OBJECT: jit-dip 35 -SPECIAL-OBJECT: jit-2dip-word 36 -SPECIAL-OBJECT: jit-2dip 37 -SPECIAL-OBJECT: jit-3dip-word 38 -SPECIAL-OBJECT: jit-3dip 39 -SPECIAL-OBJECT: jit-execute 40 -SPECIAL-OBJECT: jit-declare-word 41 +SPECIAL-OBJECT: jit-safepoint 30 +SPECIAL-OBJECT: jit-epilog 31 +SPECIAL-OBJECT: jit-return 32 +SPECIAL-OBJECT: jit-profiling 33 +SPECIAL-OBJECT: jit-push 34 +SPECIAL-OBJECT: jit-dip-word 35 +SPECIAL-OBJECT: jit-dip 36 +SPECIAL-OBJECT: jit-2dip-word 37 +SPECIAL-OBJECT: jit-2dip 38 +SPECIAL-OBJECT: jit-3dip-word 39 +SPECIAL-OBJECT: jit-3dip 40 +SPECIAL-OBJECT: jit-execute 41 +SPECIAL-OBJECT: jit-declare-word 42 -SPECIAL-OBJECT: c-to-factor-word 42 -SPECIAL-OBJECT: lazy-jit-compile-word 43 -SPECIAL-OBJECT: unwind-native-frames-word 44 -SPECIAL-OBJECT: fpu-state-word 45 -SPECIAL-OBJECT: set-fpu-state-word 46 -SPECIAL-OBJECT: signal-handler-word 47 -SPECIAL-OBJECT: leaf-signal-handler-word 48 +SPECIAL-OBJECT: c-to-factor-word 43 +SPECIAL-OBJECT: lazy-jit-compile-word 44 +SPECIAL-OBJECT: unwind-native-frames-word 45 +SPECIAL-OBJECT: fpu-state-word 46 +SPECIAL-OBJECT: set-fpu-state-word 47 +SPECIAL-OBJECT: signal-handler-word 48 +SPECIAL-OBJECT: leaf-signal-handler-word 49 +SPECIAL-OBJECT: ffi-signal-handler-word 50 +SPECIAL-OBJECT: ffi-leaf-signal-handler-word 51 -SPECIAL-OBJECT: callback-stub 50 +SPECIAL-OBJECT: callback-stub 53 ! PIC stubs -SPECIAL-OBJECT: pic-load 51 -SPECIAL-OBJECT: pic-tag 52 -SPECIAL-OBJECT: pic-tuple 53 -SPECIAL-OBJECT: pic-check-tag 54 -SPECIAL-OBJECT: pic-check-tuple 55 -SPECIAL-OBJECT: pic-hit 56 -SPECIAL-OBJECT: pic-miss-word 57 -SPECIAL-OBJECT: pic-miss-tail-word 58 +SPECIAL-OBJECT: pic-load 54 +SPECIAL-OBJECT: pic-tag 55 +SPECIAL-OBJECT: pic-tuple 56 +SPECIAL-OBJECT: pic-check-tag 57 +SPECIAL-OBJECT: pic-check-tuple 58 +SPECIAL-OBJECT: pic-hit 59 +SPECIAL-OBJECT: pic-miss-word 60 +SPECIAL-OBJECT: pic-miss-tail-word 61 ! Megamorphic dispatch -SPECIAL-OBJECT: mega-lookup 59 -SPECIAL-OBJECT: mega-lookup-word 60 -SPECIAL-OBJECT: mega-miss-word 61 +SPECIAL-OBJECT: mega-lookup 62 +SPECIAL-OBJECT: mega-lookup-word 63 +SPECIAL-OBJECT: mega-miss-word 64 ! Default definition for undefined words -SPECIAL-OBJECT: undefined-quot 62 +SPECIAL-OBJECT: undefined-quot 65 : special-object-offset ( symbol -- n ) special-objects get at header-size + ; diff --git a/core/bootstrap/primitives.factor b/core/bootstrap/primitives.factor index 2ec81559a3..20a5a493cd 100755 --- a/core/bootstrap/primitives.factor +++ b/core/bootstrap/primitives.factor @@ -350,6 +350,8 @@ tuple { "set-fpu-state" "kernel.private" ( -- ) } { "signal-handler" "kernel.private" ( -- ) } { "leaf-signal-handler" "kernel.private" ( -- ) } + { "ffi-signal-handler" "kernel.private" ( -- ) } + { "ffi-leaf-signal-handler" "kernel.private" ( -- ) } { "unwind-native-frames" "kernel.private" ( -- ) } { "set-callstack" "kernel.private" ( callstack -- * ) } { "lazy-jit-compile" "kernel.private" ( -- ) } diff --git a/core/kernel/kernel.factor b/core/kernel/kernel.factor index 0d742deb85..32cdb24b06 100644 --- a/core/kernel/kernel.factor +++ b/core/kernel/kernel.factor @@ -285,59 +285,62 @@ CONSTANT: JIT-WORD-JUMP 26 CONSTANT: JIT-WORD-CALL 27 CONSTANT: JIT-IF-WORD 28 CONSTANT: JIT-IF 29 -CONSTANT: JIT-EPILOG 30 -CONSTANT: JIT-RETURN 31 -CONSTANT: JIT-PROFILING 32 -CONSTANT: JIT-PUSH-IMMEDIATE 33 -CONSTANT: JIT-DIP-WORD 34 -CONSTANT: JIT-DIP 35 -CONSTANT: JIT-2DIP-WORD 36 -CONSTANT: JIT-2DIP 37 -CONSTANT: JIT-3DIP-WORD 38 -CONSTANT: JIT-3DIP 39 -CONSTANT: JIT-EXECUTE 40 -CONSTANT: JIT-DECLARE-WORD 41 +CONSTANT: JIT-SAFEPOINT 30 +CONSTANT: JIT-EPILOG 31 +CONSTANT: JIT-RETURN 32 +CONSTANT: JIT-PROFILING 33 +CONSTANT: JIT-PUSH-IMMEDIATE 34 +CONSTANT: JIT-DIP-WORD 35 +CONSTANT: JIT-DIP 36 +CONSTANT: JIT-2DIP-WORD 37 +CONSTANT: JIT-2DIP 38 +CONSTANT: JIT-3DIP-WORD 39 +CONSTANT: JIT-3DIP 40 +CONSTANT: JIT-EXECUTE 41 +CONSTANT: JIT-DECLARE-WORD 42 -CONSTANT: C-TO-FACTOR-WORD 42 -CONSTANT: LAZY-JIT-COMPILE-WORD 43 -CONSTANT: UNWIND-NATIVE-FRAMES-WORD 44 -CONSTANT: GET-FPU-STATE-WORD 45 -CONSTANT: SET-FPU-STATE-WORD 46 -CONSTANT: SIGNAL-HANDLER-WORD 47 -CONSTANT: LEAF-SIGNAL-HANDLER-WORD 48 +CONSTANT: C-TO-FACTOR-WORD 43 +CONSTANT: LAZY-JIT-COMPILE-WORD 44 +CONSTANT: UNWIND-NATIVE-FRAMES-WORD 45 +CONSTANT: GET-FPU-STATE-WORD 46 +CONSTANT: SET-FPU-STATE-WORD 47 +CONSTANT: SIGNAL-HANDLER-WORD 48 +CONSTANT: LEAF-SIGNAL-HANDLER-WORD 49 +CONSTANT: FFI-SIGNAL-HANDLER-WORD 50 +CONSTANT: FFI-LEAF-SIGNAL-HANDLER-WORD 51 -CONSTANT: REDEFINITION-COUNTER 49 +CONSTANT: REDEFINITION-COUNTER 52 -CONSTANT: CALLBACK-STUB 50 +CONSTANT: CALLBACK-STUB 53 -CONSTANT: PIC-LOAD 51 -CONSTANT: PIC-TAG 52 -CONSTANT: PIC-TUPLE 53 -CONSTANT: PIC-CHECK-TAG 54 -CONSTANT: PIC-CHECK-TUPLE 55 -CONSTANT: PIC-HIT 56 -CONSTANT: PIC-MISS-WORD 57 -CONSTANT: PIC-MISS-TAIL-WORD 58 +CONSTANT: PIC-LOAD 54 +CONSTANT: PIC-TAG 55 +CONSTANT: PIC-TUPLE 56 +CONSTANT: PIC-CHECK-TAG 57 +CONSTANT: PIC-CHECK-TUPLE 58 +CONSTANT: PIC-HIT 59 +CONSTANT: PIC-MISS-WORD 60 +CONSTANT: PIC-MISS-TAIL-WORD 61 -CONSTANT: MEGA-LOOKUP 59 -CONSTANT: MEGA-LOOKUP-WORD 60 -CONSTANT: MEGA-MISS-WORD 61 +CONSTANT: MEGA-LOOKUP 62 +CONSTANT: MEGA-LOOKUP-WORD 63 +CONSTANT: MEGA-MISS-WORD 64 -CONSTANT: OBJ-UNDEFINED 62 +CONSTANT: OBJ-UNDEFINED 65 -CONSTANT: OBJ-STDERR 63 +CONSTANT: OBJ-STDERR 66 -CONSTANT: OBJ-STAGE2 64 +CONSTANT: OBJ-STAGE2 67 -CONSTANT: OBJ-CURRENT-THREAD 65 +CONSTANT: OBJ-CURRENT-THREAD 68 -CONSTANT: OBJ-THREADS 66 -CONSTANT: OBJ-RUN-QUEUE 67 -CONSTANT: OBJ-SLEEP-QUEUE 68 +CONSTANT: OBJ-THREADS 69 +CONSTANT: OBJ-RUN-QUEUE 70 +CONSTANT: OBJ-SLEEP-QUEUE 71 -CONSTANT: OBJ-VM-COMPILER 69 +CONSTANT: OBJ-VM-COMPILER 72 -CONSTANT: OBJ-WAITING-CALLBACKS 70 +CONSTANT: OBJ-WAITING-CALLBACKS 73 ! Context object count and identifiers must be kept in sync with: ! vm/contexts.hpp diff --git a/vm/objects.hpp b/vm/objects.hpp index 55e18c17dd..e7262a9479 100755 --- a/vm/objects.hpp +++ b/vm/objects.hpp @@ -42,6 +42,7 @@ enum special_object { JIT_WORD_CALL, JIT_IF_WORD, JIT_IF, + JIT_SAFEPOINT, JIT_EPILOG, JIT_RETURN, JIT_PROFILING, @@ -56,23 +57,25 @@ enum special_object { JIT_DECLARE_WORD, /* External entry points */ - C_TO_FACTOR_WORD, + C_TO_FACTOR_WORD = 43, LAZY_JIT_COMPILE_WORD, UNWIND_NATIVE_FRAMES_WORD, GET_FPU_STATE_WORD, SET_FPU_STATE_WORD, SIGNAL_HANDLER_WORD, LEAF_SIGNAL_HANDLER_WORD, + FFI_SIGNAL_HANDLER_WORD, + FFI_LEAF_SIGNAL_HANDLER_WORD, /* Incremented on every modify-code-heap call; invalidates call( inline caching */ - REDEFINITION_COUNTER = 49, + REDEFINITION_COUNTER = 52, /* Callback stub generation in callbacks.c */ - CALLBACK_STUB = 50, - + CALLBACK_STUB = 53, + /* Polymorphic inline cache generation in inline_cache.c */ - PIC_LOAD = 51, + PIC_LOAD = 54, PIC_TAG, PIC_TUPLE, PIC_CHECK_TAG, @@ -82,25 +85,25 @@ enum special_object { PIC_MISS_TAIL_WORD, /* Megamorphic cache generation in dispatch.c */ - MEGA_LOOKUP = 59, + MEGA_LOOKUP = 62, MEGA_LOOKUP_WORD, MEGA_MISS_WORD, - OBJ_UNDEFINED = 62, /* default quotation for undefined words */ + OBJ_UNDEFINED = 65, /* default quotation for undefined words */ - OBJ_STDERR = 63, /* stderr FILE* handle */ + OBJ_STDERR = 66, /* stderr FILE* handle */ - OBJ_STAGE2 = 64, /* have we bootstrapped? */ + OBJ_STAGE2 = 67, /* have we bootstrapped? */ - OBJ_CURRENT_THREAD = 65, + OBJ_CURRENT_THREAD = 68, - OBJ_THREADS = 66, - OBJ_RUN_QUEUE = 67, - OBJ_SLEEP_QUEUE = 68, + OBJ_THREADS = 69, + OBJ_RUN_QUEUE = 70, + OBJ_SLEEP_QUEUE = 71, - OBJ_VM_COMPILER = 69, /* version string of the compiler we were built with */ + OBJ_VM_COMPILER = 72, /* version string of the compiler we were built with */ - OBJ_WAITING_CALLBACKS = 70, + OBJ_WAITING_CALLBACKS = 73, }; /* save-image-and-exit discards special objects that are filled in on startup