]> gitweb.factorcode.org Git - factor.git/commit
vm: more defense against multi-faulting
authorJoe Groff <arcata@gmail.com>
Fri, 11 Nov 2011 21:29:46 +0000 (13:29 -0800)
committerJoe Groff <arcata@gmail.com>
Sat, 12 Nov 2011 21:02:57 +0000 (13:02 -0800)
commite24400679f04db7930eef5eaa771a59f1704bc51
treeb74ebf7da26736cdaa4a25d87ad7fbbe746011ca
parent6cca0ea46888a442aaa3d0bdccdfbc85398c3883
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().
12 files changed:
basis/cpu/x86/32/bootstrap.factor
basis/cpu/x86/64/bootstrap.factor
core/kernel/kernel-tests.factor
vm/debug.cpp
vm/errors.cpp
vm/mach_signal.cpp
vm/os-unix.cpp
vm/os-unix.hpp
vm/os-windows.cpp
vm/os-windows.hpp
vm/safepoints.cpp
vm/vm.hpp