From: Doug Coleman Date: Mon, 4 Jun 2018 02:38:53 +0000 (-0500) Subject: Revert "VM: removing the unused callstack-bounds primitive" X-Git-Tag: 0.98~95 X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=commitdiff_plain;h=aa87e69d2527c196f199cae955e4ca2687da44e2 Revert "VM: removing the unused callstack-bounds primitive" This reverts commit c55a6ef87324d1a22fa0f5e935d9575005e15bd4. This primitive is useful for fixing the macOS pthread bug and the javascriptcore library. --- diff --git a/basis/bootstrap/image/primitives/primitives.factor b/basis/bootstrap/image/primitives/primitives.factor index d28a096808..6554f74162 100644 --- a/basis/bootstrap/image/primitives/primitives.factor +++ b/basis/bootstrap/image/primitives/primitives.factor @@ -313,6 +313,10 @@ CONSTANT: all-primitives { { object } { fixnum } f } { "become" ( old new -- ) "become" { array array } { } f } + { + "callstack-bounds" ( -- start end ) "callstack_bounds" + { } { alien alien } make-flushable + } { "check-datastack" ( array in# out# -- ? ) "check_datastack" { array integer integer } { object } make-flushable diff --git a/core/kernel/kernel.factor b/core/kernel/kernel.factor index 155dffc436..cc2d132fda 100644 --- a/core/kernel/kernel.factor +++ b/core/kernel/kernel.factor @@ -37,6 +37,7 @@ PRIMITIVE: (execute) ( word -- ) PRIMITIVE: (identity-hashcode) ( obj -- code ) PRIMITIVE: become ( old new -- ) PRIMITIVE: c-to-factor ( -- ) +PRIMITIVE: callstack-bounds ( -- start end ) PRIMITIVE: check-datastack ( array in# out# -- ? ) PRIMITIVE: compute-identity-hashcode ( obj -- ) PRIMITIVE: context-object ( n -- obj ) diff --git a/vm/callstack.cpp b/vm/callstack.cpp index 808e7dbb7e..bd0d6c67cc 100644 --- a/vm/callstack.cpp +++ b/vm/callstack.cpp @@ -104,4 +104,10 @@ void factor_vm::primitive_set_innermost_stack_frame_quotation() { *(cell*)inner = quot->entry_point + offset; } +// Allocates memory (allot_alien) +void factor_vm::primitive_callstack_bounds() { + ctx->push(allot_alien(ctx->callstack_seg->start)); + ctx->push(allot_alien(ctx->callstack_seg->end)); +} + } diff --git a/vm/primitives.hpp b/vm/primitives.hpp index a0a0c4c22a..8c88658f71 100644 --- a/vm/primitives.hpp +++ b/vm/primitives.hpp @@ -11,7 +11,7 @@ namespace factor { _(bignum_shift) _(bignum_subtract) _(bignum_to_fixnum) \ _(bignum_to_fixnum_strict) _(bignum_xor) _(bits_double) _(bits_float) \ _(byte_array) _(callback) _(callback_room) \ - _(callstack_for) _(callstack_to_array) \ + _(callstack_bounds) _(callstack_for) _(callstack_to_array) \ _(check_datastack) _(clone) _(code_blocks) _(code_room) \ _(compact_gc) _(compute_identity_hashcode) _(context_object) \ _(context_object_for) _(current_callback) _(data_room) \ diff --git a/vm/vm.hpp b/vm/vm.hpp index be6acf1ae8..5ef2443f5e 100644 --- a/vm/vm.hpp +++ b/vm/vm.hpp @@ -605,6 +605,7 @@ struct factor_vm { void primitive_innermost_stack_frame_executing(); void primitive_innermost_stack_frame_scan(); void primitive_set_innermost_stack_frame_quotation(); + void primitive_callstack_bounds(); template void iterate_callstack(context* ctx, Iterator& iterator, Fixup& fixup);