Commit Graph

1355 Commits (8981fccbe86ce5e23a40d5444279f145b90a5778)

Author SHA1 Message Date
Joe Groff 8981fccbe8 vm: frame size for signal handler code blocks 2011-12-14 09:56:46 -08:00
Joe Groff b57d3af1d5 vm: initialize all_blocks set after initial fixup 2011-12-14 09:56:46 -08:00
Joe Groff 45ed3c4a56 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 12c569e3a7 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 14e0c9f482 vm: pack frame size into code block header bits 2011-12-14 09:56:45 -08:00
Joe Groff 9186a1bdf3 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 06a87c41d6 vm: erase code blocks from all_blocks during sweep
Fixes #437
2011-12-13 12:28:09 -08:00
Joe Groff 8f8873c859 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 857b52401c 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 f51e262e44 vm: add compact-gc command to factorbug 2011-12-12 19:03:42 -08:00
Joe Groff 88c0a0e2ea vm: fix msvc warning 2011-11-29 12:19:17 -08:00
Joe Groff 04d030ec25 vm: factor out embedded image detection code 2011-11-27 14:39:21 -08:00
Joe Groff 8b75193a57 vm: support self-executing image file 2011-11-27 12:37:54 -08:00
Joe Groff cb8c01faec vm: don't die if foreign thread gets async signal
Fixes #425
2011-11-23 11:26:42 -08:00
Joe Groff 5d1156d9c4 vm: remove useless forward declare 2011-11-23 11:11:28 -08:00
Joe Groff d031cfb300 vm: quell warnings from vars only used by asserts 2011-11-23 11:11:28 -08:00
Joe Groff 2c2791a1ad vm: clean up baroque jit safepoint logic 2011-11-23 11:11:27 -08:00
Joe Groff f4a7afdc2d vm: verify code heap's all_blocks set when DEBUG 2011-11-23 11:11:27 -08:00
Joe Groff fd4be39990 vm: FACTOR_ASSERT only if FACTOR_DEBUG 2011-11-23 11:11:27 -08:00
Joe Groff 00f00663ad 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 ba88cbbe51 vm: charge samples collected in prolog to parent
Fixes #379
2011-11-23 11:11:26 -08:00
Joe Groff 55115d7971 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 0d8cf08ea0 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 701dc2b37a vm: emit safepoints before VM compiler prologs
For #379
2011-11-23 11:11:25 -08:00
Joe Groff ab9088e7ba vm: disable SIGINT handler while in factorbug
Fixes #410
2011-11-15 18:50:42 -08:00
Joe Groff 0b45e809c7 vm: fashion police 2011-11-12 23:05:44 -08:00
Joe Groff 076d710256 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 05da199174 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 4dd1f3297e 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 d44ad0043b vm: typo in os-windows.hpp 2011-11-12 19:23:44 -08:00
Joe Groff 4984bde393 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 beb0f48da9 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 c5d7ce0282 vm: "edges" command for factorbug 2011-11-11 10:12:36 -08:00
Joe Groff 5b43301eb6 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 06fc9ecbb0 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 7e7607306c 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 5f47dd85f4 vm: hand SIGALRM to signal pipe if not sampling 2011-11-08 23:37:22 -08:00
Joe Groff feb9221c5b vm: fix build on windows 2011-11-08 23:17:51 -08:00
Joe Groff 5d81e6e2f0 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 2f0efb62e8 vm: don't send foreign samples to outer space 2011-11-08 14:00:33 -08:00
Joe Groff fca09f21ed 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 37494b301b 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 7a7b19a8fd vm: more commentary on lock_console() stuff 2011-11-08 08:52:52 -08:00
Joe Groff 7df1c228bd vm: don't mask SIGTTIN from stdin_loop
Fixes #360
2011-11-08 08:42:48 -08:00
Joe Groff 75f9904c40 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 0c132cf861 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 2db8dd3f80 vm: move bignum.cpp includes to master.hpp
That way they get PCHed
2011-11-08 08:42:47 -08:00
Joe Groff 06bb122b6e 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 0db777edbb 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 ceeb9f36d8 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