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