Björn Lindqvist
e00798cd2a
VM: new primitive free-callback which is able to free a callback
...
previously allocated using <callback>
2014-09-29 07:30:21 -07:00
Björn Lindqvist
4a96e6163b
VM: new primitive (callback-room) for querying the VM about memory usage
...
The word works exactly like (code-room) except it looks at the memory
usage in the callback heap instead of the code heap.
2014-09-29 07:30:21 -07:00
Björn Lindqvist
85dade6914
VM: use a free_list_allocator for the callbacks, that way they can
...
individually be freed
2014-09-29 07:30:20 -07:00
Björn Lindqvist
4015565cf6
VM: "formalize" the callback_heaps object allocation using a
...
bump_allocator<code_block>
The advantage of doing it this way is that you can reuse the existing
each_object method to iterate all callbacks
2014-09-29 07:30:20 -07:00
Björn Lindqvist
4867e7bc96
VM: try and recover with a kernel error from the callback heap running out
2014-09-29 07:30:20 -07:00
Björn Lindqvist
b90e52b527
VM: GC_BIGNUM must be called in the same scope as the variable declaration
2014-09-17 12:13:05 -07:00
Björn Lindqvist
237772daae
VM: dont scrub and check when visiting a callstack object
...
callstack objects doesn't have stacks so it doesn't make sense to scrub
and check. also added the methods check_stack and scrub_stack to deal
with code duplication
2014-09-08 14:54:18 -07:00
Björn Lindqvist
e3c2704986
VM: silly error: should be index * check_r_count, not index + check_r_count
2014-09-08 14:54:18 -07:00
Björn Lindqvist
9836d6a1d0
VM: move the stack scrubbing logic to call_frame_slot_visitor to avoid visiting the callstack twice
...
primitive_minor_gc() iterates the stack twice, first to scrub stack
locations, then to trace overinitialized ones and gc roots. By running
visit_callstack() before visit_stack_elements() you only need to do it
once.
2014-09-08 14:54:18 -07:00
Björn Lindqvist
8fb8313251
VM: use the check_d and check_r to trace the overinitialized stack locations
2014-09-08 14:54:18 -07:00
Björn Lindqvist
8c0f9698de
compiler.codegen.gc-maps: check-d>> and check-r>> now used in the code generator
...
the approach looks sound and now the gc can be fixed to take advantage
of the extra info.
2014-09-08 14:54:17 -07:00
Björn Lindqvist
48bf3a9ab4
VM: moves the code that clears the roots to the same function that
...
corrupts the stack
2014-07-23 07:12:28 -07:00
Doug Coleman
fe548d9ed7
os-unix.hpp: Use the old strerror_r insetad of the newfangled one.
2014-07-16 17:08:02 -07:00
Björn Lindqvist
810031b02c
VM: data_roots must be empty before unwind_native_frames is called because it doesn't return
2014-07-16 14:54:35 -07:00
Björn Lindqvist
655dcee2d8
VM: clear the local roots before garbage collection in general_error()
...
If we got here from memory_protection_error(), then the stack pointer
has been fiddled with and the elements of these vectors, which address
stack-allocated objects, are bogus and needs to be resetted.
2014-07-16 14:54:29 -07:00
Björn Lindqvist
60b7631e76
VM: fixing some implicit casts from cell to fixnum
...
The types are compatible, but it looks a little nicer if the variable
that receives a return value declared as cell also is a cell.
2014-07-10 07:54:07 -07:00
Doug Coleman
07aa2831a2
ffi_test: Export test 59 and 60 for Windows.
2014-07-07 20:53:33 -07:00
Doug Coleman
beb2d1df3a
ffi: Add some tests to ensure that 64bit integers are handled properly.
2014-07-07 17:02:36 -07:00
Doug Coleman
6244b925c7
vm: Simplify strerror code.
2014-07-05 18:58:24 -07:00
Doug Coleman
ecbf48d1ef
vm: Fix namespace brace.
2014-07-04 03:14:17 -07:00
Doug Coleman
69262be4d8
vm: Add threadsafe_sterror to the vm.
2014-07-04 03:00:08 -07:00
Doug Coleman
bc54927859
vm/image.cpp: Better error for opening a file for writing.
2014-07-03 22:32:45 -07:00
Doug Coleman
e558bd7d86
vm: Fix compilation on Windows. Fixes #1086 .
2014-07-03 13:20:08 -05:00
Steven Stewart-Gallus
e6dade3f94
Lower the stack usage of a few functions
...
In vm/compaction.cpp I rescoped some variables to lower the stack usage
from 592 to 560 bytes. I wasn't very successful with this. The stack
usage is larger than it looks because methods on the structures used
take an implicit this pointer and a reference to the data (so the data
has to live out it's full scope and can't be put in a register).
In vm/debug.cpp I made a large (1024 bytes) stack allocated buffer
simply dynamically allocated.
In vm/os-unix.cpp I rescoped signal handling structures to not coincide
with each other and reduced a very large (1024 bytes) amount of stack
usage to less than 500 bytes.
2014-06-19 14:55:57 -07:00
Doug Coleman
2834bc90f8
bignum.cpp: Fix regression in bignum conversion. Fixes #1072 .
2014-06-16 20:52:51 -07:00
Björn Lindqvist
a6e0867b22
VM: change type of bignum_roots and remove unnecessary not-null checks
...
Declaring bignum_roots to contain bignum** instead of cell avoids some
superfluous casts. Casting it to cell is wrong because the items in it
are never tagged. And due to a earlier commit, bignum_roots will never
contain NULL:s so checking for them is not needed.
2014-06-12 13:50:10 -07:00
Björn Lindqvist
8ac3b80173
VM: rename all variables named "bignum" in bignum.cpp to "bn"
...
The name can cause compiler errors because it's the same as the type
name. It only matters in some functions, but I like consistency so I
renamed it everywhere.
2014-06-12 13:50:10 -07:00
Björn Lindqvist
75129d34ad
VM: refactor bignum.cpp so that GC_BIGNUM is never called on a NULL
...
pointer
The purpose of this fix is to ensure that no NULL checks are needed when
traversing the bignum_roots vector.
2014-06-12 13:50:10 -07:00
Björn Lindqvist
0c9e61ca99
VM: refactoring that removes data_root_ranges
...
instead of storing data_root_ranges in data_roots, you can just store
cell pointers directly. the advantage with doing it that way is that
registration and traversal code becomes simpler (and slightly faster).
2014-06-12 13:50:10 -07:00
John Benediktsson
f0e878e3fa
Revert "vm: fix bignum_to_fixnum_strict for BIGNUM_ZERO."
...
This reverts commit 0a66016c7db3c8c02af609d7c46411dc05a7b0dd.
2014-06-08 16:32:35 -07:00
John Benediktsson
ad7ee60341
vm: fix bignum_to_fixnum_strict for BIGNUM_ZERO.
2014-06-08 16:05:36 -07:00
John Benediktsson
82f9f21a50
vm: change some push/pop to replace/peek.
2014-06-07 12:16:43 -07:00
John Benediktsson
e9e1fd4e6a
vm: generate a to_fixnum_strict to workaround an odd io.monitors issue.
2014-06-07 12:06:03 -07:00
John Benediktsson
eeaa91d6c1
vm: using bignum>fixnum-strict in integer>fixnum-strict.
2014-06-07 09:46:05 -07:00
Björn Lindqvist
d225bec128
VM: CELL_TO_FOO macro-magic in the same spirit as BIGNUM_TO_FOO
...
Now also factor_vm::to_cell doesn't piggyback on
factor_vm::to_fixnum's (strict) conversion.
2014-06-07 17:04:27 +02:00
Björn Lindqvist
1300a27dca
VM: better version of bignum_to_fixnum_strict that doesn't allocate
2014-06-07 13:09:00 +02:00
Björn Lindqvist
a9a52d9174
VM: bignum_to_fixnum_strict and an accompanying vm error in case the conversion fails
2014-06-07 12:13:59 +02:00
Björn Lindqvist
877e3a12e1
VM: allot_array_1, allot_array_2 are unused and primitive_array should use allot_array
2014-06-07 12:13:59 +02:00
Björn Lindqvist
03672ad938
VM: refactored factor_vm::unbox_array_size()
2014-06-07 12:13:59 +02:00
John Benediktsson
7ff81f620b
vm: optionally set CC and CXX on macosx.
2014-06-06 15:13:48 -07:00
John Benediktsson
6c703bbd6c
vm: adding a fast path for bignum sq.
2014-06-06 10:45:09 -07:00
Björn Lindqvist
6627a3327b
kernel: symbolic constants for the various kernel errors
2014-06-04 23:16:40 +02:00
John Benediktsson
fd1dc5ce01
vm: formatting of sign_mask.
2014-06-02 07:54:01 -07:00
John Benediktsson
c2c6225955
vm: fix tabs-to-spaces.
2014-06-02 07:24:14 -07:00
John Benediktsson
cf287f4144
vm: faster foo_to_bignum for common case of one bignum digit.
2014-06-02 07:16:43 -07:00
Doug Coleman
c3210f9f4f
Windows: Add two new targets, x86-32-vista and x86-64-vista for bjourne's
...
ctrl-c patch. We still support Windows XP by default for now. Closes
2014-05-10 18:13:20 -07:00
Björn Lindqvist
0226718a82
VM: attempt to cancel blocking system calls when ctrl-c is pressed
...
Windows runs ctrl-c in its own thread and doesn't by itself interrupt
blocking system calls when it is pressed. Therefore you have to manually
send an interrupt signal to the stuck thread.
2014-05-10 18:13:04 -07:00
Doug Coleman
57611f78d3
code_blocks: Same error message in two places, make it clear which is triggering.
2014-05-07 14:02:14 -07:00
Björn Lindqvist
9780012f55
dlopen using RTLD_GLOBAL
2014-04-21 23:45:45 -07:00
Doug Coleman
19685f4528
vm: jit::jit is a c++ constructor but it does not allocate objects to the Factor heaps.
...
Add annotations for gc allocating.
2014-02-14 20:29:26 -08:00