Commit Graph

38 Commits

Author SHA1 Message Date
edef f21b8dc936 Update the license headers for MIT/Apache 2016-08-20 23:45:01 +02:00
whitequark e0ad79ea0c Add an OR1K port. 2016-08-19 15:12:42 +02:00
whitequark 145c18125a Explain how trampolines work. 2016-08-13 13:38:04 +02:00
whitequark b79e7c0a9b Rename Stack::top() to Stack::base(), which is correct.
Fixes #25.
2016-08-13 13:38:04 +02:00
whitequark 7d5075edc2 Add more examples to README.
This also renames some functions for a mild increase in backtrace
clarity.
2016-08-13 13:38:04 +02:00
whitequark f34ddc6805 Don't use core::intrinsics.
The core::intrinsics::unreachable() we used at the end of every naked
function is essentially pointless, as #[naked] implies that intrinsic
at the end of the function. rustc currently does not implement that
behavior (rust-lang/rust#32487), but it is a bug. On top of that,
anything except a single asm!() in naked functions is likely to be
disallowed in the future (rust-lang/rust#32490).

A nice side effect is that we avoid the core_intrinsics feature,
which will be never stabilized, though neither asm nor
naked_functions are likely to be stabilized soon.
2016-08-13 13:38:04 +02:00
whitequark 23cf17865d Remove workaround for rust-lang/rust#25544. 2016-08-13 13:38:04 +02:00
whitequark 892a7696ec Allow unwinding to propagate across a context swap.
The main purpose of this is having nice backtraces in gdb, although
it also slightly simplifies poisoning state of the API consumers
after a panic.
2016-08-13 13:38:04 +02:00
whitequark 40fbfdde0c Kill impl StackPointer.
That was a silly idea for a silly abstraction, and it brought no
improvement, only confusion. So, revert it.
2016-08-13 13:38:04 +02:00
edef 8c761d944f Fix Windows x64 ABI 2016-07-17 16:57:23 -04:00
John Ericson 75ca6f66e1 Move x86 trampoline to naked function
Close #19
2016-07-16 16:39:19 -04:00
John Ericson 1ea4b01eda Use mostly the same registers for consistency
The exception to this is %eax is used not %edi on x86 because its
caller-save
2016-07-16 16:39:14 -04:00
whitequark cbe136b762 Completely rework fringe::Context and fringe::arch.
The new design concerns itself with one thing and exactly one thing:
passing values back and forth with an extern "C" function.
This allows to simplify fringe::arch into a single primitive, swap.

Close #21
2016-07-16 15:04:15 -04:00
edef 6284a22caa add fpsr, eflags for good measure
courtesy of @whitequark
2016-04-16 07:41:00 +02:00
John Ericson 35fb046fb5 Factor out common code between x86 and x86_64
Fix #17
2016-04-14 13:37:15 +02:00
edef daece1a8d3 Registers::{swap2 => swap}, to match Context::swap 2016-04-03 19:56:15 +02:00
edef a50e6771b4 coerce rust_trampoline to a function pointer properly 2016-04-03 12:00:21 +02:00
edef 644cd81f9e fix parameter passing to arch/x86_64/swap.s 2016-04-03 11:59:14 +02:00
edef b986931817 remove copyright years
They're obnoxious to update, and I'm told they have no legal value.
2016-03-22 08:25:23 +01:00
edef 709dad1c4a add Context::swap2, to allow distinct save/restore contexts
Fix #5

Context::swap is now implemented in terms of Context::swap2, and it
might make sense to remove Context::swap entirely at some point.
2016-03-22 07:50:50 +01:00
edef 2b23083455 get rid of some minor warnings 2016-03-22 07:35:25 +01:00
edef bb2b92bf6b remove feature attributes for stable stuff 2016-03-16 00:14:09 +01:00
edef cd4fe1ecc8 remove obsolete support for Rust stack limits
rustc removed these in 7a3fdfbf674a08b7f6fd32c9124e52924a2f9a1c, and
this removes a Linux-specific TLS slot from our code.
2016-01-04 03:46:07 +01:00
John Ericson a1f286bdaf don't drop uninitialised memory when pushing to stack 2015-08-26 20:42:33 +02:00
John Ericson 96a31d2443 remove stray import 2015-08-26 20:41:12 +02:00
John Ericson 5411f10460 use Void to ensure closure diverges 2015-08-26 00:51:18 +02:00
edef e290a8bbaf remove `extern crate core` and prelude imports
the latest Rust nightly makes this unnecessary
2015-08-26 00:19:53 +02:00
edef 418c53797e x86 support
ref #1
2015-04-16 13:15:46 -04:00
edef 52325b07c0 comment fix: it's 8ns *faster* 2015-04-16 12:21:39 -04:00
edef a1e4c2b745 add Syntastic ASM lint hints 2015-04-16 11:56:45 -04:00
edef d627f0d725 big rename — we're libfringe now 2015-04-16 08:11:12 -04:00
edef 0dd6c8bc32 pass STACK_ALIGN through without exposing it 2015-04-16 07:24:15 -04:00
edef 7adb9e7381 implement Debug for all components of Context 2015-04-16 07:24:07 -04:00
edef 519d86ca4c implement Send where applicable 2015-04-16 07:23:57 -04:00
edef 7271fe1724 there is no point in Registers being Copy + Clone 2015-04-16 07:23:56 -04:00
edef f7ab28de4b move all the common arch stuff into a module of its own 2015-04-16 06:34:03 -04:00
edef b7624aa49a uintptr_t is pointless when usize is the same anyway 2015-04-16 06:20:46 -04:00
edef 997a4a7765 move architecture specifics into arch directory 2015-04-16 06:17:03 -04:00