Commit Graph

1550 Commits (4b64626e1041a3a5f0beb60a5b99076258b8c1d2)

Author SHA1 Message Date
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
Joe Groff 30ed9b535b vm: parameterize sampling rate 2011-11-02 13:23:15 -07:00
Joe Groff 799053661e vm: better organize atomics and sample counter 2011-11-02 13:23:15 -07:00
Joe Groff 89ea69b61b vm: fix comments mangled by find & replace 2011-11-02 13:23:14 -07:00
Joe Groff 27ac4c60f4 vm: factor out sample counting code 2011-11-02 13:23:13 -07:00
Joe Groff baebb317e4 whitespace 2011-11-02 13:23:13 -07:00
Joe Groff 34ea20beca vm: only show factorbug help the first time 2011-11-02 13:23:13 -07:00
Joe Groff 1a665f3eac vm: more accurate sample timing on windows 2011-11-02 13:23:12 -07:00
Joe Groff d9afe92c97 get sampler working under windows 2011-11-02 13:23:12 -07:00
Joe Groff 252915a37c fix platform dependency in leaf-signal-handler 2011-11-02 13:23:12 -07:00
Joe Groff abaa051768 vm: fix build on windows 2011-11-02 13:23:12 -07:00
Joe Groff 1351e30e52 vm: sampling profiler timer for windows
Spawn a thread and have it spin on the performance counter, triggering safepoints on the main thread every sample time
2011-11-02 13:23:11 -07:00
Joe Groff 125c46c10f vm: stub out windows sampling timer implementation
AFAIK Windows has no equivalent to setitimer. We'll probably need to use a thread that periodically pauses and samples the main VM thread.
2011-11-02 13:23:10 -07:00
Joe Groff f5cdfaeb2a vm: count samples from foreign threads
On OS X it appears the mach exception thread and libdispatch queue threads occasionally get the SIGALRM from the itimer. Count those as foreign_thread_samples instead of letting the signal kill the process.
2011-11-02 13:23:10 -07:00
Joe Groff 27d7e4af53 vm: actually collect samples and add primitives... 2011-11-02 13:23:10 -07:00
Joe Groff e10c3183c8 vm: add primitives to lift sample data to factor 2011-11-02 13:23:09 -07:00
Joe Groff 3dd17537eb vm: write back fixed-up code address to samples 2011-11-02 13:23:09 -07:00
Joe Groff e3e2788414 vm: walk code roots from sample callstacks 2011-11-02 13:23:08 -07:00
Joe Groff 1089816b21 vm: release memory used by sampler vectors 2011-11-02 13:23:08 -07:00
Joe Groff 40bc8459db vm: bottom_frame method for contexts
ctx->callstack_bottom - 1 -- the fuck does that mean?!
2011-11-02 13:23:07 -07:00
Joe Groff be5c7476d7 vm: don't allocate callstack samples on data heap
Invoking a GC during a safepoint has some complications, so stuff the callstack samples in a vector instead.
2011-11-02 13:23:07 -07:00
Joe Groff b341b0ce13 vm: only show factorbug basic commands at first
"help" brings up the entire command list.
2011-11-02 13:23:07 -07:00
Joe Groff 80fb7788d9 vm: groundwork for sampling profiler
Set up the state necessary to collect samples. We still need to add GC support for walking the sample set, and the compiler needs to register GC roots before safepoints as well. We also need primitives to expose the data to Factor for reporting.
2011-11-02 13:23:06 -07:00
Joe Groff cdfb1b1b94 vm: change "profiler" names to "counting_profiler" 2011-11-02 13:23:05 -07:00
Joe Groff 186bf65a00 constants for special object hardcoded literals 2011-11-02 12:54:50 -07:00
Joe Groff 23208e5697 vm: give factorbug a help command
Also change the prompt to "> _" instead of "READY\n_" since it's not 1970 anymore
2011-10-27 21:18:23 -07:00
Joe Groff 2d5360778f cleanups from code review 2011-10-27 21:18:23 -07:00
Joe Groff 9eee44ce4a vm: remove half-assed signal queueing scaffolding
Should implement it right later. See #297.
2011-10-27 21:18:22 -07:00
Joe Groff fb2d105e83 vm: remove some debugging crumbs 2011-10-27 21:18:22 -07:00
Joe Groff 27c43ea6a3 vm: add "gc" command to factorbug 2011-10-27 21:18:22 -07:00
Joe Groff 8e66c7abee vm: clean up windows ctrl-handler 2011-10-27 21:18:22 -07:00
Joe Groff 331e4264b3 vm: some typos in debug.cpp 2011-10-27 21:18:21 -07:00
Joe Groff ca0dfc5730 vm: get CtrlHandler working on windows 2011-10-27 21:18:21 -07:00
Joe Groff 6d57eb4f59 vm: update windows for resumable signals 2011-10-27 21:18:21 -07:00
Joe Groff 9541bf14f5 vm: win32 GetCurrentThread is a fake thread handle
Open a real thread handle with the necessary permissions to dispatch a handler from the the Ctrl-C handler thread.
2011-10-27 21:18:21 -07:00
Joe Groff af0f021a94 vm: change factorbug "q" to quit process
Also change the docs around so the useful commands are all listed under "Basic commands", and rename the more arcane "s" and "r" dumps to "ds" and "dr".
2011-10-27 21:18:20 -07:00
Joe Groff 5d59faa7d1 vm: move dispatch_signal_handler to cpu-x86.cpp
The new signal handler dispatch is logic is CISC-centric; defer fixing it until we find someone who cares
2011-10-27 21:18:20 -07:00
Joe Groff a6b80f3efa vm: code_block_for_address method -> code_heap 2011-10-27 21:18:20 -07:00
Joe Groff 03ebb91170 vm: remove signal_from_leaf flag
Now that the resuming from the signal handler works within leaf procedures, the flag is no longer necessary.
2011-10-27 21:18:20 -07:00
Joe Groff 11ffea55fc vm: sniff leaf words walking code heap, not data 2011-10-27 21:18:19 -07:00
Joe Groff 126bf22c16 vm: include quots and profile stubs in leaf search 2011-10-27 21:18:19 -07:00
Joe Groff ff2d480d98 cpu.x86.32: update for resumable signal handlers 2011-10-27 21:18:19 -07:00
Joe Groff d6eae2f42d vm: suppress signal-handler stack frame generation
This is a hack; see #295
2011-10-27 21:18:19 -07:00
Joe Groff 7bd7d0234d vm: turns out adding and subtracting are different 2011-10-27 21:18:19 -07:00
Joe Groff f284ac2b48 vm: fix foreign segfaults and callstack overflows 2011-10-27 21:18:18 -07:00
Joe Groff 402e1155a5 vm: resumably handle signals from leaf procedures 2011-10-27 21:18:18 -07:00
Joe Groff 1386212d23 vm: dispatch signal handlers through subprimitive
We also need to save C ABI volatile registers before calling the signal handler in order to be able to reliably resume. Add signal-handler and leaf-signal-handler subprimitives to preserve volatile registers before invoking the signal handler C function.
2011-10-27 21:18:18 -07:00
Joe Groff dca0fd3487 vm: Revert extra canary page before callstack
This reverts commit 7d5c8d6990385b94569116a23163d7e75ae21f49. We pretty much can't avoid unwinding frames without some more drastic redesign.
2011-10-27 21:14:50 -07:00
Joe Groff 1a673e30f5 vm: comments should be in English 2011-10-27 21:14:50 -07:00
Joe Groff c3f007ce0a vm: allocate an extra canary page before callstack
This will let us safely unguard the callstack overflow guard page as a grace page so the callstack overflow handler can do its business without discarding frames.
2011-10-27 21:14:49 -07:00
Joe Groff b0b0905460 vm: add factorbug command to throw exception
Also rename "q" to "c" because it "c"ontinues, remove the useless "im" command, and rename the less useful "t" to "trim" so we can use "t" to mean "throw"
2011-10-27 21:14:49 -07:00
Joe Groff a374c2da05 vm: sketchy signal dispatch from leaf procs 2011-10-27 21:14:49 -07:00
Joe Groff 6e4117035e vm: factor out dispatch_signal_handler logic 2011-10-27 21:14:49 -07:00
Joe Groff dc42365007 vm: fep on SIGINT or SIGQUIT instead of exception
It's not robust currently to raise an exception because a lot of our code that isn't already written with exceptions in mind breaks. Also, a signal is likely to be received by an FFI callback installed on the IO multiplexer, which will cause Factor to die since the callback cannot handle the exception. We need a more robust solution to dealing with SIGINT.

Also lay some groundwork for counting profile samples and reporting non-interrupting asynchronous signals.
2011-10-27 21:14:49 -07:00
Joe Groff 1dc31d133b vm: clean up signal handler dispatch
Remove the weird and broken functions fix_callstack_top and scrub_return_address. Instead, simply decrement the SP and store the PC from the front end of the signal handler so that the back end can return back into the original context normally. Currently aborts for leaf procedure frames pending a more robust solution.
2011-10-27 21:14:48 -07:00
Joe Groff 92a5b7c300 vm: don't mix iostream and stdio 2011-10-27 21:14:48 -07:00
Joe Groff 3726f61c70 vm: fatal_error if VM-less thread gets a signal 2011-10-27 21:14:48 -07:00
Joe Groff 7f3d70f97f vm: fix windows compile errors 2011-10-27 21:14:47 -07:00
Joe Groff d6a06cf5dc vm: remove unguard-safepoint primitive 2011-10-27 21:14:47 -07:00
Joe Groff 552711e903 vm: block all signals from unix stdin_loop thread 2011-10-27 21:14:47 -07:00
Joe Groff 9865417149 vm: SetConsoleCtrlHandler on windows 2011-10-27 21:14:47 -07:00
Joe Groff b3e5f75c9e vm: handle async signals at safepoints on unix
Factor now supports the new 4.0BSD feature of "signals".
2011-10-27 21:14:46 -07:00
Joe Groff 9b575730bb vm: add RT_SAFEPOINT to number_of_parameters() 2011-10-27 21:14:45 -07:00
Joe Groff e1465308cd vm: add RT_SAFEPOINT relocation type 2011-10-27 21:14:44 -07:00
Joe Groff 99804d5e3f vm: code_heap::(un)guard_safepoint methods 2011-10-27 21:14:44 -07:00
Joe Groff 4c8dec1e98 vm: take a page from code_heap for safepoints 2011-10-27 21:14:44 -07:00
Doug Coleman 432927fe5f Move --no-as-needed to Config.linux since it breaks compilation on mac 2011-10-19 12:09:43 -07:00
Philipp Brüschweiler c83d6ac411 Config.unix: don't hardcode ui libs, use pkg-config instead 2011-10-19 11:37:21 -07:00
Joe Groff 92d24b0a8f vm: no-op reallot_array with same size, for real 2011-10-17 21:23:01 -07:00
Joe Groff 59f0b93290 vm: make reallot_array for same size a no-op 2011-10-17 21:23:01 -07:00
Joe Groff fde782cff6 vm: non-copying primitive_fread
primitive_fread now takes a buffer pointer argument and returns a count of bytes read instead of allocating a byte array.
2011-10-17 21:22:57 -07:00
John Benediktsson 4653df21cb vm: remove math::bignum_producer. 2011-10-11 21:24:38 -07:00
John Benediktsson afc07c0e05 io.binary: make le> and be> faster (20% and 75%, respectively).
Removed primitive byte-array>bignum and digit_stream_to_bignum from vm/.
2011-10-11 21:13:30 -07:00
Slava Pestov f8e475485a Add RT_INLINE_CACHE_MISS relocation type to avoid frequent dlsym lookups when compiling PICs. Fixes #123 2011-10-03 00:26:21 -07:00
Slava Pestov 05f7419f2f Rework non-optimizing compiler backend to use compiler.codegen.relocation 2011-10-03 00:26:21 -07:00
Slava Pestov daf40ea0c6 Fix infinite loop and empty-dlist error when an error is thrown from a callback running in a thread other than the initial thread. This addresses part of issue #92 2011-10-02 21:59:09 -07:00
Doug Coleman bf2a96e9e0 Remove Windows CE from core/ basis/ and build-support/
Rename the winnt singleton to windows in core/ basis/ extra/
Rename boot images winnt -> windows
Fixes #84.
2011-09-18 23:19:06 -05:00
Slava Pestov bbe369ebfa Fix undefined-symbol reporting on 32-bit architectures; the return address is exactly at the relocation point in this case 2011-09-13 20:43:07 -07:00
Slava Pestov 10845ebfb9 callstack.cpp: fix fat-fingered typo from undefined-symbol change 2011-09-12 23:15:09 -07:00
Slava Pestov 7c3827190b Tease out symbol name and library in undefined_symbol() handler, for friendlier errors when calling an unresolved C function name. Fixes #93 2011-09-12 00:56:24 -07:00
Slava Pestov 104583f888 Remove inotify system call wrappers. Hopefully everyone is using a recent glibc now. Fixes #86 2011-09-08 22:03:56 -07:00
Slava Pestov 0f5e0eada5 vm: fix high_fragmentation_p assertion 2011-09-05 23:30:28 -07:00
Slava Pestov 83b8717bad Clean up some GC logic and fix a bug where large object allocation could grow the heap unnecessarily 2011-09-05 16:28:00 -07:00
Erik Charlebois 679b03f8db Remove unnecessary -std=gnu99
Flag isn't needed anymore with g++ and it causes warnings with clang.
2011-06-23 01:17:24 -04:00
Erik Charlebois 64252dbdbc 32 and 64 bit Linux PPC support 2011-05-23 23:36:14 -04:00
Slava Pestov c36d73e242 Change do-callback to register the current thread with the callback, instead of busy waiting for the current callback to become the right one before returning. Fixes 100% CPU usage issue with system-alert. Thanks to Blei and ex-rzr for doing preliminary analysis of the issue 2011-04-12 21:48:54 -04:00
Slava Pestov d6fe7f4c28 On Unix, link VM with GTK libraries instead of loading them dynamically 2011-02-27 20:01:54 -06:00
Slava Pestov f27080498d Remove bignum>float VM primitive, and use bignum/f to implement >float on bignums instead, for a slight accuracy gain. Also, bignum/f now has a more efficient post-scaling algorithm to break the circular dependency on bignum>float 2010-11-24 22:41:15 -08:00
Slava Pestov 813e13140a vm: fix 64-bit regression 2010-10-09 15:14:14 -07:00
Slava Pestov 0fc8ee8250 Fix win64 compile error 2010-10-09 16:03:46 -05:00
Slava Pestov f7bc78c9f7 vm: fix Config.windows 2010-10-02 23:50:48 -05:00
Doug Coleman 8a0d0fca83 Revert previous patch; not simply a typo. Still broken on win64. 2010-09-29 20:49:37 -05:00
Doug Coleman 466e630dc9 Win64 Windows SDK hates int/cell type errors 2010-09-29 17:43:27 -05:00
Slava Pestov 794d371444 vm: fix compiler warning 2010-09-27 20:37:37 -07:00
Slava Pestov 6b5fffc026 compiler: preliminary implementation of tracking derived pointers in GC maps 2010-09-27 20:12:44 -07:00
Slava Pestov 8ccaa417ab vm/os-unix.cpp: remove dead code 2010-09-20 21:36:19 -07:00
Doug Coleman f791c8c5d2 Squashed commit of the following:
commit 197dbe9a6733775ac0ea19b3da4bd4dc3c85418c
Author: Doug Coleman <doug.coleman@gmail.com>
Date:   Sat Sep 18 19:01:38 2010 -0500

    Fix bootstrap, move privileges to windows.privileges

commit 521c622f8afb15bf42d263c738cb990560dc29cb
Author: Doug Coleman <doug.coleman@gmail.com>
Date:   Sat Sep 18 18:26:30 2010 -0500

    Hopefully fix bootstrap

commit eb3f22928b59758b9505430034044b5b94705da2
Author: Doug Coleman <doug.coleman@gmail.com>
Date:   Sat Sep 18 18:19:05 2010 -0500

    Remove wince from factor codebase

commit 619d6c99415f46208a7ede6a04b0ccda46b15360
Author: Doug Coleman <doug.coleman@gmail.com>
Date:   Sat Sep 18 16:07:46 2010 -0500

    Remove Windows CE from vm/
2010-09-19 19:13:25 -05:00
Slava Pestov a36bd7fbaf vm: don't keep more than 10 unused contexts around to prevent address space wastage on low-budget operating systems like OpenBSD 2010-09-17 20:52:27 -07:00
Slava Pestov e8b1a06dad vm: a stack underflow inside a primitive could leave a data root in an uninitialized state; if allocating the thrown underflow error triggered a GC, the GC would visit a garbage pointer 2010-09-17 19:46:57 -07:00
Slava Pestov 5378f2a0c7 vm/os-unix.cpp: set pipe file descriptors to close on exec 2010-09-15 22:20:24 -07:00
Slava Pestov c4fa0c2507 vm: fep g command prints addresses in h hex for readability 2010-09-09 20:36:50 -07:00
Slava Pestov ecb9ce4fc9 vm: don't need to save/restore FPU state when doing GC anymore, since we don't call nano_count() unless GC events are being recorded. If you want to record GC events with FP traps on, you're out of luck 2010-09-04 16:16:22 -05:00
Slava Pestov 2498a4d881 vm: don't call nano_count() from the GC at all, unless GC event recording is on 2010-09-04 13:21:45 -07:00
Slava Pestov 230064af3a vm: increase default code heap size 2010-09-04 12:05:23 -07:00
Slava Pestov 7b35f82bf4 vm: fix crash when doing GC with profiling enabled 2010-09-03 21:54:40 -05:00
Slava Pestov 7374d868e7 Change how SIGPIPE is ignored, and add a unit test to io.launcher.unix to ensure that this ignoredness is not inherited by child processes 2010-09-02 22:11:45 -07:00
Slava Pestov d74817cedf vm: Remove signal_callstack_top nonsense 2010-09-02 22:57:17 -05:00
Slava Pestov 1818bcb780 Fix three problems discovered by running math.floats.env tests in a loop:
- Crash if allocating error triggers a GC from a signal/SEH handler
- Crash if GC runs with floating point traps enabled on Windows
- Floating point traps didn't prettyprint properly
2010-09-02 22:57:14 -05:00
Slava Pestov f1bec796bb vm: C I/O streams became unusable after a single EOF (reported by John Benediktsson) 2010-08-22 20:56:29 -07:00
Slava Pestov 1985705413 compiler: now that FFI has been deconcatenatized, we no longer need the special ##unary-float-function and ##binary-float-function fastpaths 2010-08-13 23:59:19 -07:00
Slava Pestov c3ae7f3a11 vm: hard tabs, indent width 8 2010-08-02 20:50:34 -04:00
Slava Pestov 451237a028 Fix start-context-and-delete sub-primitive (reported by Sascha Matzke) 2010-08-02 20:28:23 -04:00
Joe Groff 39bcf7af6a vm/os-windows.cpp: fix compiler warnings/errors 2010-08-01 17:50:35 -07:00
Joe Groff 14de58b73c vm: remove some mixed use of stdio/iostream. when monotonic timer decreases, log old and new values 2010-08-01 16:14:20 -07:00
Slava Pestov fe116a2392 vm: fix compile error on Linux if inotify is not available (reported by Alec Barryman) 2010-07-31 18:33:53 -04:00
Slava Pestov a6c487c3b7 vm: clean up main-windows-nt.cpp 2010-07-27 13:03:11 -04:00
Slava Pestov cc0d69416f vm: fix alien-signed-1/2/4 primitives 2010-07-19 16:03:27 -04:00
Slava Pestov b23aac1beb compiler.cfg: open-code parameter boxing and unboxing for certain C types 2010-07-19 10:25:13 -04:00
Slava Pestov e5dd21b0b9 compiler.cfg: nuke ##allot-byte-array instruction 2010-07-16 19:57:45 -04:00
Slava Pestov 0fd636b4b9 compiler.cfg: ##unbox-long-long can have multiple outputs now, clean up long long parameter passing code using this 2010-07-15 19:49:29 -04:00
Slava Pestov bc87b269c5 Remove Cocoa exception handling support since it no longer works 2010-07-06 17:48:37 -04:00
Joe Groff 89d7634fe2 vm/safeseh.asm: make exception_handler proto declaration explicitly "proto c" so linking works properly with VS 2010 (reported by Doug Coleman) 2010-06-24 13:19:02 -07:00
Doug Coleman 30b81d3a87 Merge branch 'master' of github.com:erg/factor 2010-06-17 11:12:25 -05:00
Slava Pestov 174463e156 vm: fix another compile warning on 32-bit Windows 2010-06-17 01:04:03 -05:00
Slava Pestov 4aa644a256 vm: fix compile warnings on Windows and add /WX to Nmakefile to report warnings as errors so that mason can catch these in the future 2010-06-17 01:48:39 -04:00
Doug Coleman e8d528ad93 Remove system_micros from vm, implement gmt hook on windows 2010-06-16 23:39:16 -05:00
Doug Coleman 570801ff3d Use nano_count instead of system_micros 2010-06-16 23:20:00 -05:00
Slava Pestov f29a1038eb vm: improved fingering technique 2010-06-16 19:08:58 -04:00
Slava Pestov e86f434f26 Add GC maps to ##box, ##box-long-long, ##alien-invoke, ##alien-indirect and ##call-gc; remove ##gc-map instruction 2010-06-14 19:39:46 -04:00
Slava Pestov 70b8a74208 vm: have to be extra careful when messing with return addresses 2010-06-13 18:12:57 -04:00
Slava Pestov 3f28c0e7f5 vm: context switching needs to scrub the return address 2010-06-12 19:54:31 -04:00
Slava Pestov 4405a66f99 vm: fix RT_HERE fixup on image load 2010-06-11 21:54:47 -04:00
Slava Pestov 997a7543a9 vm: fix typo 2010-06-11 20:08:52 -04:00
Slava Pestov 806e54630a GC maps for more compact inline GC checks 2010-06-11 20:06:00 -04:00
Slava Pestov 91cd3b854d Use ##local-allot to simplify longlong unboxing 2010-05-19 01:07:22 -04:00
Slava Pestov 5b48cd2a63 FFI rewrite part 5: return value boxing and callback parameter boxing now uses vregs; simplify return value unboxing 2010-05-16 03:43:23 -04:00
Slava Pestov c2558e6a66 vm: fix longlong accessors 2010-05-11 23:24:48 -04:00
Slava Pestov 7d62376e24 vm: fix compile error 2010-05-11 19:29:50 -04:00
Slava Pestov eb802208d1 FFI rewrite part 4: parameter and return value unboxing redesign 2010-05-11 19:11:44 -04:00
Slava Pestov 45689dbfe6 compiler: simplify ##unbox-small/large-struct by emitting an ##unbox-any-c-ptr first 2010-05-10 01:38:34 -04:00
Joe Groff ec6c2ccc3e silence more msvc warnings 2010-05-05 22:32:45 -07:00
Joe Groff 11deca47b4 quiet some data conversions warnings raised by msvc 2010-05-05 22:22:13 -07:00
Slava Pestov e763c74096 More FFI cleanups 2010-05-05 01:13:45 -04:00
Slava Pestov fec408260e vm: tweak inline_gc() for PowerPC 2010-05-04 06:52:30 -04:00
Slava Pestov 58e4381eb1 compiler: new "binary literal area" at the end of a word's machine code stores constant floats and SIMD vectors; this allows ##load-reference/##load-memory fusion to be performed on x86-64, with a RIP-relative address reaching the data; also simplifies VM since custom relocation types used by the previous 32-bit-only optimization are no longer needed 2010-05-03 17:34:35 -04:00
Slava Pestov 9788323d25 compiler: add ##load-vector instruction to avoid wasting a temporary register on x86-32 2010-05-03 17:34:28 -04:00
Slava Pestov 1b4b66e341 cpu.x86: use available type info to generate more efficient %box-displaced-alien where possible 2010-05-03 17:34:27 -04:00
Slava Pestov d23bb19b55 Code cleanups 2010-05-03 17:34:17 -04:00
Slava Pestov 95ff5ffe51 New GC checks work in progress 2010-05-03 17:34:16 -04:00
Slava Pestov a9ccfa8f05 strings: move string-nth primitive out of the VM and into the library 2010-05-03 17:34:12 -04:00
Doug Coleman 366ce2896f Add callstack-bounds primitive to vm/ for use with javascriptcore library 2010-04-19 20:08:15 -05:00
Slava Pestov 2517b2fc2b compiler: combine ##load-constant followed by ##alien-double into a ##load-double on x86-32, saving an integer register 2010-04-18 21:42:45 -05:00
Slava Pestov 216a05e68a vm: small cleanup 2010-04-13 21:24:42 -07:00
Slava Pestov 288090d993 math.parser: expose a format-float primitive for use by formatting vocabulary 2010-04-13 21:21:28 -07:00
Slava Pestov 0d3861bb5d vm: fix compiler warnings raised by CL 2010-04-12 18:12:55 -05:00
Slava Pestov 1434a305c8 vm: add a new rc-absolute-1 relocation class to allow storing values in 8-bit operands, and optimized code sequences for inline caches using this 2010-04-12 14:22:41 -07:00
Slava Pestov eaccd0b56a vm: speed up nano-count primitive on Windows 2010-04-11 22:27:49 -05:00
Slava Pestov a417b0e70d vm: speed up nano-count primitive on Mac OS X 2010-04-11 20:26:11 -07:00
Slava Pestov 4fb2acb65e vm: try a smaller call stack size on OpenBSD again, now that x86-32 stack frames are smaller 2010-04-10 17:26:56 -07:00
Slava Pestov 46a1fb2646 Merge remote branch 'origin/abi-symbols' into fastcall-madness 2010-04-10 00:10:33 -07:00
Slava Pestov e5e51c40a1 vm: implement frame-based SEH for 64-bit Windows 2010-04-08 10:32:14 -07:00
Slava Pestov c931870cd7 vm: fix compile error under Cygwin 2010-04-06 16:30:41 -05:00
Joe Groff 3e0d86f355 Merge branch 'master' of git://factorcode.org/git/factor into abi-symbols
Conflicts:
	basis/compiler/tests/alien.factor
2010-04-06 12:30:15 -07:00
Slava Pestov ff0e084f94 vm: dllexport exception_handler for great justice 2010-04-05 15:48:09 -05:00
Slava Pestov 9b44451682 Safe SEH is better than abstinence 2010-04-05 15:02:32 -05:00
Slava Pestov ce16c4ec2c vm: fix callback heap code on 64-bit Windows 2010-04-04 17:46:36 -04:00
Slava Pestov d70cf197f2 vm: fix compile error 2010-04-04 13:53:17 -05:00
Slava Pestov 74640b7f71 Get green threads working on Windows
- store stack base and limit in TIB
- set up a frame-based structured exception handler in each context's callstack
- boot.x86.32.image has now been replaced by boot.winnt-x86.32.image and boot.unix-x86.32.image
2010-04-03 20:24:33 -04:00
Slava Pestov de4343eaf7 vm: re-organize context structure 2010-04-02 15:42:29 -04:00
Slava Pestov b740a1fe5d vm: use C++ exceptions instead of longjmp(), to make Windows crash more 2010-04-02 14:10:55 -04:00
Slava Pestov d24ce84dde vm: larger default callstack on PowerPC 2010-04-02 14:09:58 -04:00
Joe Groff 5dcfb383a6 add tests for struct returns from fastcall 2010-04-01 23:52:56 -07:00
Slava Pestov 279ff3a7d3 vm: smaller default callstack size on OpenBSD 2010-04-02 00:36:45 -04:00
Slava Pestov fa9b6e086b vm: oops 2010-04-02 00:22:16 -04:00
Slava Pestov d9d12ab8fb vm: don't try loading Factor VM DLL anymore 2010-04-02 00:03:26 -04:00
Slava Pestov 0faa3bcf4a vm: pre-allocate context alien 2010-04-02 00:02:21 -04:00
Joe Groff ef884ef7f2 Merge branch 'master' into abi-symbols 2010-04-01 15:28:36 -07:00
Joe Groff 6d8c30ad98 statically link factor executable to VM so dylib is only needed for embedding 2010-04-01 14:25:02 -07:00
Joe Groff a191937c47 typos in ffi tests 2010-04-01 03:02:36 -07:00
Joe Groff fca8ba3d0a add fastcall functions to ffi tests 2010-04-01 02:22:42 -07:00
Slava Pestov 4b1361833e cpu.ppc: updating non-optimizing compiler backend for green threads (untested) 2010-03-31 15:19:14 -04:00
Slava Pestov fb2ecab614 threads: delete old contexts immediately instead of handing them off to a 'context recycler' thread 2010-03-30 21:47:48 -04:00
Slava Pestov c7142e4281 threads: use context-switching primitives 2010-03-29 20:40:17 -04:00