Commit Graph

1561 Commits (50917807403568fe3a5afeced4cf886f1611a311)

Author SHA1 Message Date
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