Joe Groff
af989f533a
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
1c44a4e8ae
simplify function prologs
2011-12-14 09:56:49 -08:00
Joe Groff
5f0102fb7c
cpu.*.bootstrap: return address for (set-context)
...
Instead of pushing zero as the fake return address for a set-context call, push an address that points back into the primitive so that callstack walking can match the frame back to the subprimitive.
2011-12-14 09:56:46 -08:00
Joe Groff
8981fccbe8
vm: frame size for signal handler code blocks
2011-12-14 09:56:46 -08:00
Joe Groff
eee483654a
use radix literals
2011-11-23 19:03:40 -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
c78b4d7f60
cpu.x86.*.bootstrap: save flags in signal-handlers
2011-11-04 11:56:01 -07:00
Joe Groff
d4f24f44c3
cpu.x86.64.bootstrap: save all the regs on signal
...
Appears to fix another sporadic crash from mason on x86-64. There's no reason to cut corners here, really.
2011-11-04 10:01:56 -07:00
Joe Groff
7ac94bd09f
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
09088ec3ce
cleanups from code review
2011-10-27 21:18:23 -07:00
Joe Groff
871ea10cb0
cpu.x86.64: also must save ctx-reg
2011-10-27 21:18:21 -07:00
Joe Groff
66ffd0f138
cpu.x86.32: update for resumable signal handlers
2011-10-27 21:18:19 -07:00
Joe Groff
9c7731e4c9
vm: suppress signal-handler stack frame generation
...
This is a hack; see #295
2011-10-27 21:18:19 -07:00
Joe Groff
1eddaf34f1
vm: resumably handle signals from leaf procedures
2011-10-27 21:18:18 -07:00
Joe Groff
cb6f175ef8
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
d41c3f2709
cpu.x86.(32,64).bootstrap: get rid of PUSH malarky
...
In the function prologue, move the stack pointer once after the stack frame is set up instead of PUSHing the stack frame piece by piece.
2011-10-27 21:14:50 -07:00
Joe Groff
09d0fdaf8d
cpu.x86.bootstrap: add safepoint to jit-epilog
2011-10-27 21:14:45 -07:00
Slava Pestov
b1b7b24ad5
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
8336d898a3
Rework non-optimizing compiler backend to use compiler.codegen.relocation
2011-10-03 00:26:21 -07:00
Slava Pestov
e0e09234cf
Rename get-fpu-state entry point to fpu-state, and fix stack-checker unit tests
2010-09-04 12:58:59 -07:00
Slava Pestov
0184107101
cpu.x86.64: fix bootstrap
2010-09-02 21:17:14 -07:00
Slava Pestov
6617eca683
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
05ba77262a
Fix start-context-and-delete sub-primitive (reported by Sascha Matzke)
2010-08-02 20:28:23 -04:00
Slava Pestov
c1ab48f44b
cpu.x86: save context before calling new_context() since it can trigger GC (bug reported by Sascha Matzke)
2010-07-30 01:07:53 -04:00
Slava Pestov
8fd5d3c86a
FFI rewrite part 6: deconcatenatize
2010-07-02 15:44:12 -04:00
Slava Pestov
5e39764ccd
vm: have to be extra careful when messing with return addresses
2010-06-13 18:12:57 -04:00
Slava Pestov
d91524b98d
vm: context switching needs to scrub the return address
2010-06-12 19:54:31 -04:00
Slava Pestov
3a3b50327f
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
89f912fe74
Fiddle with register assignments in non-optimizing x86-32 backend
2010-04-10 00:10:05 -07:00
Slava Pestov
b4ee322ea3
Store stack bounds in TIB on win64 to make C++ exceptions work
2010-04-05 19:07:10 -04:00
Slava Pestov
639a1f7043
cpu.x86.assembler: add support for absolute addressing on x86-64; [RIP+] now behaves like [] did, and [] now does absolute addressing just like in 32-bit mode
2010-04-04 19:42:57 -04:00
Slava Pestov
44b3977c2b
cpu.x86.64: fix typo that caused bootstrap crash
2010-04-03 21:11:04 -04:00
Slava Pestov
cdc4fb3b62
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
47f86898d7
vm: pre-allocate context alien
2010-04-02 00:02:21 -04:00
Slava Pestov
eb8432061c
cpu.x86.64: eliminate useless instruction from primitive call sequence for a marginal to non-existent gain
2010-03-31 19:32:36 -04:00
Slava Pestov
22c7654e78
cpu.x86: remove useless crap from c-to-factor sub-primitive
2010-03-31 15:19:00 -04:00
Slava Pestov
de0c2801d2
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
a04d53c3da
set-context and start-context primitives can now pass parameters around
2010-03-27 08:13:57 -04:00
Slava Pestov
f8134b18cd
Implement start-context and set-context primitives
2010-03-27 02:56:11 -04:00
Slava Pestov
adeb6fb68f
vm: actually use context callstacks when running code
2010-03-26 22:44:43 -04:00
Slava Pestov
bd13a8d42d
cpu.x86.64: inline cache miss blocks have a prolog generated in the middle of a procedure; undo a recent change to non-optimizing backend to fix random crashes
2010-02-06 18:45:27 +13:00
Slava Pestov
af47e5e8d8
Compiled code size optimizations for x86-64 resulting in development image size reduction of about 350kb
...
- RIP-relative LEA is now used to load program counter in prolog and tail calls; saves 3 bytes of code and 4 bytes of relocation information over an immediate MOV
- VM field accesses no longer involve a redundant addition
2010-02-03 23:11:35 +13:00
Slava Pestov
88004434ec
vm: remove primitive table, non-optimizing compiler now looks up primitives with dlsym()
2010-01-19 20:00:33 +13:00
Slava Pestov
0165daf56c
Stop wearing monocle and use the term "entry point" instead of "XT" throughout VM and compiler; also remove two unused relocation types
2010-01-18 20:54:00 +13:00
Slava Pestov
fe11d9f60a
unwind-stack-frames didn't load VM pointer into the VM register on PowerPC and x86-64, and so if C code had clobbered this register it would crash
2010-01-12 16:31:10 +13:00
Slava Pestov
80e64b8379
Store VM object in a register on x86-64
2010-01-11 01:20:32 +13:00
Slava Pestov
5cdf5a72e1
cpu.x86: c-to-factor needs to deal with the fact that vm-reg might have been clobbered
2010-01-09 19:09:48 +13:00
Slava Pestov
85432e99c3
Fix set-callstack primitive on Windows
2010-01-07 19:31:15 +13:00
Slava Pestov
a9f90026df
Update x86-32 for assembly entry point changes
2010-01-06 17:55:20 +13:00