Commit Graph

1532 Commits (8ed47488e9814e0a3d33a9bd6a8fe01dbec9f2d3)

Author SHA1 Message Date
Erik Charlebois a437576dc9 VM: Refactor allot.hpp to Factor style 2013-05-12 13:24:40 -04:00
Erik Charlebois 22014f092e VM: Refactor alien.cpp to Factor style 2013-05-12 13:24:40 -04:00
Erik Charlebois 6c919e7d72 VM: Refactor aging_space to Factor style 2013-05-12 13:24:40 -04:00
Erik Charlebois ee9fd64b69 VM: Refactor aging_collector to Factor style 2013-05-12 13:24:40 -04:00
Erik Charlebois a42ba561d2 VM: Remove empty source files 2013-05-12 13:24:40 -04:00
Erik Charlebois ca2ea548be VM: Remove exec bit from VM source files 2013-05-11 17:04:23 -04:00
Doug Coleman a1ef43a42f layours.hpp: Don't need RETAG here. Found by @mrjbq7. Fixes #637. 2013-03-29 17:20:08 -07:00
Doug Coleman 71558515cb Config.macosx: Try to support 10.5. 2013-03-29 14:36:11 -07:00
Doug Coleman 0d72e25365 Config.linux: Clean up warnings when compiling with clang on Linux. make CC=clang CPP=clang++ 2013-03-29 10:25:14 -07:00
John Benediktsson 411306c0b8 vm: adding bignum_gcd note. 2013-03-27 14:53:56 -07:00
Doug Coleman 08715bae04 os-macosx.mm: Use uname() instead of Gestalt for version check. Allow 10.5 and over still. Fixes #585. Fixes #815. Thanks @erikcharlebois and @jckarter for the motivation and the fix. 2013-03-26 16:53:09 -07:00
Doug Coleman 891f6fef36 Config.macosx: Unleash the hounds! Enable 10.6 compatibility as an experiment. Not sure the downside to always leaving it enabled... 2013-03-26 13:39:05 -07:00
Doug Coleman 2b33dde782 vm: Add more Allocates memory comments. 2013-03-25 17:52:30 -07:00
Doug Coleman 86649ce1c0 vm: More allocates comments. 2013-03-25 14:05:05 -07:00
Doug Coleman dbfa185eef vm: Standardize /* Allocates memory */ comments so you can grep -A1
and see if a function allocates for easier debugging of the gc.
A couple of the functions were not yet annotated.
2013-03-25 12:00:18 -07:00
Doug Coleman e68f41041f Config.macosx: Add commented-out compiler flag to use 10.6.
See http://developer.apple.com/library/mac/#technotes/tn2064/_index.html
2013-03-23 12:11:26 -07:00
Doug Coleman 6d19db3efd Configs: CFLAGS isn't used by the GNUMakefile, change it to SITE_CFLAGS. 2013-03-23 12:10:37 -07:00
John Benediktsson 17945addfe vm: use ctx->push since unbox_array_size needs to peek at the stack. 2013-03-22 09:19:36 -07:00
John Benediktsson 5be15d7e3f vm: more use of ctx->replace(). 2013-03-22 09:17:02 -07:00
John Benediktsson 49a7d37dcd vm: don't ctx-pop() in bignum_divmod. 2013-03-22 08:26:01 -07:00
John Benediktsson 9c025abc67 vm: use ctx->replace() with bignum and float operations. 2013-03-22 08:00:13 -07:00
Doug Coleman 1cdd080445 os-unix: Actually call pthread_join() to avoid an infinite loop and 100% cpu usage. It happens randomly. Fixes #738. Thanks to kkrev or frankfranks. 2012-10-26 10:36:01 -07:00
John Benediktsson afdaff3059 vm: make bignum-bitnot faster. 2012-08-31 15:22:07 -07:00
John Benediktsson 42f4193939 vm: simplify a bit the fixnum_divmod code. 2012-08-23 08:38:18 -07:00
John Benediktsson ed8496b583 vm: speed up primitive_fixnum_divmod by 10-12%. 2012-08-22 21:46:59 -07:00
John Benediktsson b541986b4e vm: use tabs instead of spaces in bignum_gcd. 2012-08-22 21:31:27 -07:00
Doug Coleman aad70160f0 vm: Add more comments about functions that allocate. 2012-08-15 22:00:08 -07:00
Doug Coleman 000efd9bbb vm: Add messages about things that can allocate. Fix a gc bug in the primitive for quotation-code. 2012-08-15 21:30:55 -07:00
Doug Coleman 66de3a85dd errors.cpp: Previous fix was correct, except we shouldn't clear the data_roots before gc'ing. Laugh out loud. Fixes #615. 2012-08-15 19:49:04 -07:00
Doug Coleman 7e39d7ef30 errors.cpp: Patch looked like it would work. It either exposes more gc bugs or is incorrect.
Revert "errors.cpp: general_error() throws away its args when it calls compact_gc() when compiled with DEBUG=1. Save the args as data_roots instead. Fixes #615. See #620."

This reverts commit dc46297050.
2012-08-15 17:25:14 -07:00
Doug Coleman beb202b3de errors.cpp: general_error() throws away its args when it calls compact_gc() when compiled with DEBUG=1. Save the args as data_roots instead. Fixes #615. See #620. 2012-08-15 16:36:36 -07:00
Doug Coleman 47b4ebc80d bignum.cpp: Fix calls to reallot_array() -- bignums can get new addresses if they are not in the nursery or are somehow larger. Fix a couple more correctness issues. 2012-08-15 01:51:58 -07:00
Doug Coleman 91d8326b77 math.cpp: Fix theoretical gc bug. 2012-08-15 01:51:58 -07:00
John Benediktsson 39c3f10138 bignum: incorporate some fixes from @slavapestov. 2012-08-10 14:28:44 -07:00
John Benediktsson c4f85efc9d vm: make sure we zero out the end of the bignums. 2012-08-04 18:02:27 -07:00
John Benediktsson 61a6b5692f vm: a bit faster not to trim on each iteration... 2012-08-04 09:13:05 -07:00
John Benediktsson f7bb7c6a32 vm: additional fix in bignum_gcd. 2012-08-03 21:50:48 -07:00
John Benediktsson 37001708cd vm: some fixes to fast bignum gcd. 2012-08-03 12:13:46 -07:00
John Benediktsson 5c8a2a4057 vm: fix updating size inside bignum_gcd loop. 2012-08-02 17:36:07 -07:00
Doug Coleman 30e34ca616 bignum: Fix bignum_gcd algorithm from overwriting the wrong bignum memory. Add GC_BIGNUM to prevent gc crashes. Fixes #599. 2012-08-02 17:16:03 -07:00
John Benediktsson 426c449ee1 vm: adding more GC_BIGNUM to WIN64 path. See #599. 2012-08-02 17:04:22 -07:00
Doug Coleman 106ecdb6dd compaction: Less than is the new greater than. Fixes #558. 2012-07-25 17:57:50 -07:00
Doug Coleman 1a9caec368 Config.macosx: first two digits of 'xcodebuild -version' number is enough; throw away rest of version number.
$ xcodebuild -version
Xcode 4.3.3
Build version 4E3002
Fixes #543.
2012-06-22 15:23:07 -07:00
Doug Coleman e9ec95ad4f compaction: Inifnite headaches--cured! Two compact functions, one was not like the other. 2012-05-27 18:26:03 -07:00
Doug Coleman c577a5468e vm: Typo for SITE_CFLAGS. Fixes #491. 2012-04-10 16:28:04 -07:00
John Benediktsson 5794ab46a0 vm: use euclid gcd on win64 until we find a better way to do the 128-bit math. 2012-04-06 11:42:59 -07:00
John Benediktsson eb556bfb06 vm: use twodigit type for all variables (fixes 32-bit warning). 2012-04-06 09:36:25 -07:00
Doug Coleman 4a29dafcdf vm/Config: GNUMakefile doesn't actually put the CFLAGS on the command, so use SITE_CFLAGS instead. Put -m32 in Config.x86.32, -m64 in Config.x86.64. Fixes #488. 2012-04-05 10:26:50 -07:00
John Benediktsson 22c26ff3f5 vm: adding bignum_gcd primitive. 2012-04-05 09:17:35 -07:00
Joe Groff 3f9b2ef47a use clang when building w/ xcode >4.3; it's faster 2012-02-18 23:40:38 -08:00
Joe Groff b094d4d0ec vm: actually code_block_pic is a fine frame type 2011-12-21 21:12:54 -08:00
Joe Groff 7121e0d598 vm: also smoke-check callstack after pic update 2011-12-21 18:31:37 -08:00
Joe Groff 0b72b811fc vm: flush after print_obj so it's usable from gdb 2011-12-21 13:25:28 -08:00
Joe Groff 9f137c66d4 vm: fashion brigade 2011-12-21 13:25:05 -08:00
Joe Groff 442923b561 vm: walk stack on inline_cache_miss if PIC_DEBUG=1
Reveals inline cache stack coherency bug behind #460
2011-12-21 13:24:35 -08:00
Joe Groff b6f323450f vm: load mega cache object before popping frame
Fixes #457 harder
2011-12-20 14:38:01 -08:00
Joe Groff f513894435 vm: unwind-native-frames is special
Fixes #457
2011-12-19 16:54:25 -08:00
Joe Groff 842eb27785 vm: cleanups 2011-12-14 09:56:50 -08:00
Joe Groff 1c7bd9a7b4 vm: don't scribble memory handling leaf signals 2011-12-14 09:56:50 -08:00
Joe Groff 7c9332e966 cpu.x86.*: clean up signal handler prolog code
Also bump the signal handler frame sizes up again since it looks like we shrank them too much.
2011-12-14 09:56:50 -08:00
Joe Groff 7844c66d6e vm: factor out word_stack_frame_size 2011-12-14 09:56:49 -08:00
Joe Groff a1ee881435 vm: get rid of now-trivial innermost_stack_frame 2011-12-14 09:56:49 -08:00
Joe Groff 079025559d simplify function prologs 2011-12-14 09:56:49 -08:00
Joe Groff 2f20ee6fb0 vm: fix types after rebase 2011-12-14 09:56:49 -08:00
Joe Groff 604ceb957c vm: replace remaining stack_frame-based logic 2011-12-14 09:56:49 -08:00
Joe Groff d74f194b07 vm: remove _reversed from callstack iterator names
Now that they're the only game in town we can give them the short names
2011-12-14 09:56:49 -08:00
Joe Groff f6a5f48da0 vm: remove iterate_callstack_object 2011-12-14 09:56:48 -08:00
Joe Groff a1958c67bd vm: callstack_reversed for callstack_to_array 2011-12-14 09:56:48 -08:00
Joe Groff 0af5fff27c remove iterate_callstack now that it's unused 2011-12-14 09:56:48 -08:00
Joe Groff 822a658cc3 vm: callstack_reversed in call_frame_scrubber 2011-12-14 09:56:48 -08:00
Joe Groff 9236c05e60 vm: stage code block map fixup properly for GC
Don't update the map until the very last thing, and pass untranslated addresses to the iterator functors. Somewhat complicated by the fact that, for startup_fixup, the map is initialized with fixed-up values, so the fixup functor needs a flag indicating whether it operates with a fixed or unfixed code heap map.
2011-12-14 09:56:48 -08:00
Joe Groff e6a80aa9aa vm: callstack_reversed in code_block_visitor 2011-12-14 09:56:48 -08:00
Joe Groff d12b6e375b vm: iterate_callstack_reversed in slot_visitor 2011-12-14 09:56:47 -08:00
Joe Groff e116bc497b vm: reversed callstack iteration 2011-12-14 09:56:47 -08:00
Joe Groff e2fafaed9c WIP verify_callstack function
dumps callstack in reverse order so i can visually inspect that it matches the old forward walking logic
2011-12-14 09:56:47 -08:00
Joe Groff ef38688e87 vm: method to calculate frame size for address
If we're before the prolog or or in a leaf procedure, the stack frame is really a leaf frame created by the signal handler, with a known fixed size, instead of the real stack frame (if any) with a different size.
2011-12-14 09:56:47 -08:00
Joe Groff 5b9aee2c91 vm: don't suffer null return addresses 2011-12-14 09:56:46 -08:00
Joe Groff 1911905c6b vm: frame size for signal handler code blocks 2011-12-14 09:56:46 -08:00
Joe Groff 0b94018d9f vm: initialize all_blocks set after initial fixup 2011-12-14 09:56:46 -08:00
Joe Groff 3868895b56 vm: make all_blocks a set of cells
gcc was doing bad things assuming the pointer given to upper_bound was aligned
2011-12-14 09:56:46 -08:00
Joe Groff 36d1e0a78c vm: verifier shouldn't check for leftovers
It doesn't work after things have been freed
2011-12-14 09:56:45 -08:00
Joe Groff d6227c182b vm: pack frame size into code block header bits 2011-12-14 09:56:45 -08:00
Joe Groff e21f316583 vm: store stack frame size in code blocks
Change modify-code-heap primitive so it takes a sixth element in each array for the frame size.
2011-12-14 09:56:45 -08:00
Joe Groff bd7e6b33f8 vm: erase code blocks from all_blocks during sweep
Fixes #437
2011-12-13 12:28:09 -08:00
Joe Groff 083b856604 vm: reinitialize all_blocks from scratch after gc
Faster and more likely to be correct than trying to fixup the existing set
2011-12-12 19:05:48 -08:00
Joe Groff 4bbb2f5b72 vm: only verify all_blocks set if it's invalid
Verifying on every sample is way too slow to be practical when debugging bootstrap.
2011-12-12 19:04:56 -08:00
Joe Groff 4870ac8f1d vm: add compact-gc command to factorbug 2011-12-12 19:03:42 -08:00
Joe Groff dea0bedb99 vm: fix msvc warning 2011-11-29 12:19:17 -08:00
Joe Groff 26226d460e vm: factor out embedded image detection code 2011-11-27 14:39:21 -08:00
Joe Groff cca526df73 vm: support self-executing image file 2011-11-27 12:37:54 -08:00
Joe Groff 88d31b166b vm: don't die if foreign thread gets async signal
Fixes #425
2011-11-23 11:26:42 -08:00
Joe Groff 065a4d4353 vm: remove useless forward declare 2011-11-23 11:11:28 -08:00
Joe Groff b6246f2c00 vm: quell warnings from vars only used by asserts 2011-11-23 11:11:28 -08:00
Joe Groff 4df56f31f2 vm: clean up baroque jit safepoint logic 2011-11-23 11:11:27 -08:00
Joe Groff 15c4b7aa57 vm: verify code heap's all_blocks set when DEBUG 2011-11-23 11:11:27 -08:00
Joe Groff c2c2023e34 vm: FACTOR_ASSERT only if FACTOR_DEBUG 2011-11-23 11:11:27 -08:00
Joe Groff 0a1a252cdb vm: replace assert with FACTOR_ASSERT
Factor is finally a real C++ project and has a custom assert macro. Assertion failures were still getting caught as exceptions and causing failure loops. Write our own macro that calls factor::abort on failure.
2011-11-23 11:11:26 -08:00
Joe Groff 6c0ecf631a vm: charge samples collected in prolog to parent
Fixes #379
2011-11-23 11:11:26 -08:00
Joe Groff 81911b9f87 vm: initialize all_blocks map from image
um, code blocks from the image need to go in the set too
2011-11-23 11:11:26 -08:00
Joe Groff 2705fc67cb vm: keep a set of all code_blocks in the code_heap
This way looking up code blocks by return address is an O(log n) set lookup rather than an O(n) linear scan.
2011-11-23 11:11:26 -08:00
Joe Groff 44b608bb22 vm: emit safepoints before VM compiler prologs
For #379
2011-11-23 11:11:25 -08:00
Joe Groff 5e99a7bbbf vm: disable SIGINT handler while in factorbug
Fixes #410
2011-11-15 18:50:42 -08:00
Joe Groff c4885ac082 vm: fashion police 2011-11-12 23:05:44 -08:00
Joe Groff c0a44000cc vm: set stdin_loop cancellation state
Make it asynchronous so it doesn't wait till the next syscall to cancel.
2011-11-12 23:05:44 -08:00
Joe Groff 3fc82282f7 vm: close_console before exiting anywhere
Add a factor_vm::exit function that does close_console() before ::exit-ing
2011-11-12 23:05:44 -08:00
Philipp Brüschweiler db19efe1b3 vm: close the console when exiting
This prevents an endless loop caused by the nvidia drivers on linux.
See http://www.nvnews.net/vbulletin/showthread.php?t=164619
2011-11-12 23:05:43 -08:00
Joe Groff 8e7baef1a0 vm: typo in os-windows.hpp 2011-11-12 19:23:44 -08:00
Joe Groff e0dc236725 cpu.*.bootstrap: clear faulting flag directly
No reason to go through a safepoint in unwind-native-frames really.
2011-11-12 13:02:57 -08:00
Joe Groff e24400679f vm: more defense against multi-faulting
* Clear faulting_p from a safepoint rather than inside general_error, because jumping into unwind-native-frames could blow up.
* Handle multiple faults from fatal_error by breakpointing. Is there anything else we can safely do at that point?
* Verify memory protection faults in the top half of the signal handlers because signal dispatch could fault. Treat memory faults during gc or fep as fatal errors.
* Add a function factor_vm::abort() that restores the default SIGABRT handler and ::abort()s. Use it from fatal_error() so we get useful context from gdb and so the user gets feedback from the system crash reporter that Factor blew up and didn't just disappear.
* In factorbug(), don't proceed with .s .r .c if it would be unsafe to do so.
* Don't pile on signals if we've already called fatal_error().
2011-11-12 13:02:57 -08:00
Joe Groff 2c5014e74e vm: "edges" command for factorbug 2011-11-11 10:12:36 -08:00
Joe Groff c31530caec vm: strip out call-counting profiler
This makes the separate "code" and "entry_point" fields in word and quotation redundant, so also remove them to reclaim an additional cell per word and quotation object, which should help with #318.
2011-11-10 16:01:07 -08:00
Joe Groff 139c9ca38c init signals or console after stage2 init
A signal during early bootstrap is certainly an error, and the environment isn't there yet for Factor's signal handlers to work, so it makes no sense to install Factor's signal handlers beforehand. They'll just crash.
2011-11-10 16:01:07 -08:00
Joe Groff 9e4a51c55f vm: don't SIGQUIT on unix or Ctrl-Break on windows
This gives us an escape hatch for when things go way south and ^C can't be handled. Also unmask SIGQUIT and SIGTERM from the stdin_loop thread so the thread doesn't keep the process alive after those signals.
2011-11-10 16:01:07 -08:00
Joe Groff 2e9552d98a vm: hand SIGALRM to signal pipe if not sampling 2011-11-08 23:37:22 -08:00
Joe Groff c0094186a1 vm: fix build on windows 2011-11-08 23:17:51 -08:00
Joe Groff 5f3cd4079c vm: make signal pipe nonblocking
On the off chance the Factor end of the signal handler mechanism isn't listening, we don't want to tie up the VM because the pipe's buffer got full.
2011-11-08 22:07:22 -08:00
Joe Groff 820fd6417d vm: don't send foreign samples to outer space 2011-11-08 14:00:33 -08:00
Joe Groff 90609cc5d8 vm: don't pass this to safepoint constructor
It's bad juju and MSVC calls us out on it.
2011-11-08 11:06:00 -08:00
Joe Groff fc7c175c9f new module unix.signals: app-level signal handlers
example:

IN: scratchpad USING: unix.ffi unix.signals ;
Loading resource:basis/unix/signals/signals.factor
IN: scratchpad [ V{ "Me not that kind of orc!" "Me busy, leave me alone!" "Work work" "Zug zug" } pop print flush ] SIGINFO add-signal-handler
IN: scratchpad load: 0.60  cmd: factor 41541 running 0.28u 0.16s
Zug zug
load: 0.71  cmd: factor 41541 running 0.28u 0.16s
Work work
load: 0.71  cmd: factor 41541 running 0.28u 0.16s
Me busy, leave me alone!
load: 0.73  cmd: factor 41541 running 0.28u 0.16s
Me not that kind of orc!
2011-11-08 10:21:49 -08:00
Joe Groff 0c58fd5c26 vm: more commentary on lock_console() stuff 2011-11-08 08:52:52 -08:00
Joe Groff 5f811c0573 vm: don't mask SIGTTIN from stdin_loop
Fixes #360
2011-11-08 08:42:48 -08:00
Joe Groff f9aa0419c4 vm: interrupt stdin_loop when entering fep
The stdin_loop thread will keep trying to consume input unless we stop it by sending it a signal. Use SIGUSR2 to stop the read syscall and a mutex to hold up the loop while the fep is active.
2011-11-08 08:42:48 -08:00
Joe Groff 04c6b2c393 vm: write signals to pipe immediately
The whole point is to wake up the mx without waiting for the next safepoint derp
2011-11-08 08:42:47 -08:00
Joe Groff 0e3c315099 vm: move bignum.cpp includes to master.hpp
That way they get PCHed
2011-11-08 08:42:47 -08:00
Joe Groff 18e01f7770 vm: enqueue signals for FEP signals too
Although SIGINT still can't interrupt the current Factor thread in a sane way, this will at least wake up the run loop when waiting for input and fix #348 when implemented at the application level.
2011-11-08 08:42:47 -08:00
Joe Groff b46fd5e655 GNUmakefile: use PCH so compiler goes faster
Also add more accurate dependencies on headers so "make" works right when headers change
2011-11-08 08:42:46 -08:00
Joe Groff 72d335f2b5 vm: write async signals to pipe for multiplexer
also factor out safepoint logic into its own file
2011-11-08 08:42:46 -08:00
Joe Groff 212d012cb1 vm: switch atomic::add to atomic::fetch_add
Win32 only provides fetch-and-add, not add-and-fetch, and we don't really care. Rename the functions so the order of operations is clear.
2011-11-07 17:58:53 -08:00
Joe Groff ec19171220 vm: readable feps for more types 2011-11-06 20:26:52 -08:00
Joe Groff f4479ee1e6 vm: print type names instead of numbers in fep 2011-11-06 20:26:51 -08:00
Joe Groff f0d4fcc587 switch back to gcc from clang since it goes faster 2011-11-04 00:09:30 -07:00
Joe Groff 94eb922998 makefile: add macosx-x86-fat target 2011-11-03 20:19:37 -07:00
Joe Groff 3cad288f90 use gcc-4.2 on OS X 10.5, or clang on Xcode 4 2011-11-03 12:18:07 -07:00
Joe Groff 6bb46a3f1e vm: always generate safepoints in jit
Even if there's no stack frame we still need to safepoint before leaving the function. Fixes #332.
2011-11-03 11:57:43 -07:00
Joe Groff 92445d77e2 vm: restore sigaltstack setup on unix
#ifdef __OpenBSD__ is different from #ifndef __OpenBSD
2011-11-03 11:57:43 -07:00
Joe Groff d28845a1ef vm: reserve some more special-objects
Need a jit-safepoint object to deal with #332, and ffi-signal-handler words for immediate signal handling during FFI calls
2011-11-02 22:16:08 -07:00
Joe Groff 2d87b68a56 vm: sample pc on windows 2011-11-02 21:18:31 -07:00
Joe Groff 1833beea52 vm: fix MSVC warnings 2011-11-02 20:26:53 -07:00
Joe Groff 1b38835207 remove lingering mentions of macosx-ppc 2011-11-02 18:40:27 -07:00
Joe Groff 8cf18d1a82 remove BSD,solaris,etc. misc platform support code 2011-11-02 17:13:51 -07:00
Joe Groff 82a62181ce vm: count samples during unoptimized compiler 2011-11-02 13:23:21 -07:00
Joe Groff e0c68d5a3f vm: fix scrub-league assert abuse 2011-11-02 13:23:21 -07:00
Joe Groff 2fc6b0b9be vm: forgot to add atomic.hpp 2011-11-02 13:23:20 -07:00
Joe Groff 73845fdad9 vm: separate 'current_gc_p' from 'current_gc'
The 'current_gc' handle doesn't need to be volatile, just the state of GC-ness
2011-11-02 13:23:19 -07:00
Joe Groff 4d39e59054 vm: add atomic::load and atomic::store functions
Abstract out the fence-and-load and store-and-fence patterns
2011-11-02 13:23:19 -07:00
Joe Groff be8db5aed3 vm: sample thread object rather than raw context 2011-11-02 13:23:18 -07:00
Joe Groff 7da8a9776f vm: sample code block owners instead of blocks 2011-11-02 13:23:17 -07:00
Joe Groff e880095da3 vm: fix data roots in get-samples primitive 2011-11-02 13:23:17 -07:00
Joe Groff 4037c981eb vm: die if we fault in a fault 2011-11-02 13:23:16 -07:00
Joe Groff 29fa23c40a vm: quell MSVC warnings 2011-11-02 13:23:16 -07:00