Commit Graph

142 Commits

Author SHA1 Message Date
whitequark
f8cf95f686 Implement SliceStack. 2016-08-19 15:12:42 +02:00
whitequark
e0ad79ea0c Add an OR1K port. 2016-08-19 15:12:42 +02:00
whitequark
d4b7c427c9 impl Iterator for Generator<Input=()>. 2016-08-13 13:38:04 +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
ddbf9a5afe Reimplement Generator to pass both input and output values around. 2016-08-13 13:38:04 +02:00
whitequark
308df32ac2 Use a more semantically correct PhantomData field in Generator. 2016-08-13 13:38:04 +02:00
whitequark
302ceef10a Clarify the Windows situation.
Also, remove the Windows OsStack implementation. It will not ever
be useful in libfringe, as even if we add support for Windows
using fibers, the OS allocates stacks for fibers and we needn't
do it manually.
2016-08-13 13:38:04 +02:00
whitequark
a5d3430e63 Make Generator safe in presence of destructors. 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
edef
ca43ba0498 Make fringe::Context private. 2016-08-13 13:38:04 +02:00
edef
b1a6b17d0a Move the Context tests and benches into src/
This concludes preparations for making Context private again.
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
bb699c0f6e Allow inlining Generator::state 2016-08-13 12:52:12 +02:00
edef
8c761d944f Fix Windows x64 ABI 2016-07-17 16:57:23 -04:00
whitequark
15d2fbaf51 Add an inline hint on Generator::next().
This improves the generate benchmark by about 1ns.
2016-07-17 13:56:03 -04:00
whitequark
16c674b4f4 Implement the GuardedStack marker trait. 2016-07-17 13:56:03 -04:00
whitequark
7ffad26cfd Implement the safe Generator abstraction.
close #24
2016-07-17 13:55:56 -04:00
whitequark
758088c673 Fix Stack::new(0). 2016-07-17 13:55:43 -04:00
whitequark
aa364056fd Add more documentation, and rephrase it elsewhere. 2016-07-16 20:54:47 -04:00
whitequark
ebd9ca8dec Allocate guard page under existing stack, not in it.
This fixes a segfault when the allocated stack is just one page long.

This also refactors the fringe::os module to use Result consistently.

close #22
2016-07-16 20:54:33 -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
0d7b3d7091 add Windows support to OsStack
Fix #18
2016-04-16 07:51:10 +02: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
John Ericson
368fa9d3bf Remove unnecessary unsafety 2016-04-12 14:40:12 +02:00
edef
32fdbbb474 move OutStack's bound to a where clause 2016-04-03 20:07:45 +02:00
edef
daece1a8d3 Registers::{swap2 => swap}, to match Context::swap 2016-04-03 19:56:15 +02:00
edef
976b971436 get rid of the old Context::swap
The two-parameter version is the only necessary API.
2016-04-03 19:55:25 +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
3397e0bcf1 at least allow different lifetimes in Context::swap2
Really we should allow swapping between different stack types easily, so
we can easily swap between contexts with different stack types.
2016-03-22 08:46:27 +01: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
4ffdba3ea6 minor style fixes 2016-03-16 00:20:45 +01:00
edef
bb2b92bf6b remove feature attributes for stable stuff 2016-03-16 00:14:09 +01:00
edef
bc46941e89 use libvalgrind instead of valgrind.h
no more C!
2016-01-04 15:34:41 +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
878a6fefc3 simplify Valgrind wrapper 2015-08-26 00:51:19 +02:00
John Ericson
5411f10460 use Void to ensure closure diverges 2015-08-26 00:51:18 +02:00
edef
c83143511e core::atomic -> core::sync::atomic 2015-08-26 00:20:23 +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