edef
4813dd7411
Leak the stack if it's unsafe to drop it
...
We can't free the stack before the generator has returned, or been
unwound. Without unwinding, the only safe course of action is to leak
it.
2017-03-16 22:40:20 +01:00
edef
785c7b516a
Add tests for Generator::unwrap
2017-03-09 07:59:55 +01:00
edef
dcde4fe920
Don't use unsafe for the forget_yielded test
...
Now that the Send bound is gone, we can simply use a Cell instead of a
raw pointer.
2017-03-06 09:21:08 +01:00
edef
661872f725
Don't implement Send at all
...
On hosted platforms, libstd allows safely borrowing values from TLS with
'thread lifetime and without a Sync bound. As a result, we can't
guarantee that sending a generator across threads won't create dangling
references or data races. In freestanding environments, the notion of
thread-safety is likely to be defined by the consumer of libfringe,
so our Send bounds and implementation are unlikely to be meaningful
anyway.
2017-03-06 09:21:08 +01:00
edef
34ab0dc2cd
Fix should_panic attributes
2017-02-25 14:24:36 +01:00
edef
d07fcea0eb
bound fail again -> bound to fail again
2016-12-02 15:27:02 -05:00
Amanieu d'Antras
74c4444a7f
Inline the swap trampoline on x86_64 and AArch64
2016-11-02 00:15:15 -04:00
whitequark
243e9ffc6c
Implement Eq on generator::State.
2016-10-01 18:25:32 -04:00
Amanieu d'Antras
f9b6cd17f6
Allow Generator to have !Send inputs and outputs
...
close #55
2016-09-30 21:41:26 -04:00
Amanieu d'Antras
fc4cdbf4f5
Clean up the stack implementations
...
close #54
2016-09-30 21:39:15 -04:00
edef
1783c25c46
Implement Send for Generator
2016-09-22 14:03:46 -04:00
edef
19ec5ef45b
Make the passed Yielder borrow immutable [breaking-change]
...
Yielder::suspend only requires an immutable reference, and allowing
mem::replace on the yielder isn't very useful.
2016-09-22 14:03:46 -04:00
edef
045ad33785
Ensure that the Input/Output types outlive the generator [breaking-change]
...
Previously, it was possible to cause unsafety by sending a short-lived
value into or out of the generator.
2016-09-22 14:03:46 -04:00
edef
59f28e92cb
Ensure that the closure outlives the generator [breaking-change]
...
Previously, it was possible to cause unsafety by having the closure
refer to values with lifetimes that weren't enclosed by the generator's
lifetime.
2016-09-22 14:03:46 -04:00
edef
adb29eade7
Fix the variance of Input/Output
2016-09-22 13:43:34 -04:00
edef
22b16732f7
v1.2.1
2016-09-22 13:42:27 -04:00
whitequark
809215921b
Unbreak or1k.
...
close #53
2016-09-22 13:41:26 -04:00
edef
84d6cef719
Add IRCCloud badge [skip-ci]
2016-09-22 13:39:32 -04:00
edef
95b7d9fd14
Set use_notice for Travis CI notifications [skip-ci]
2016-09-22 13:39:32 -04:00
edef
81d9af30fe
Set skip_join for Travis CI notifications [skip-ci]
2016-09-22 13:39:32 -04:00
edef
4e55e2b651
Use PhantomData-of-tuple instead of tuple-of-PhantomData
2016-09-22 13:02:35 -04:00
edef
7efb3218c4
v1.2.0
2016-09-09 11:08:55 -04:00
edef
51282fbf7a
add @Amanieu to the license file [skip ci]
2016-09-09 11:06:59 -04:00
Amanieu d'Antras
40e955638e
Add support for AArch64
...
close #43
2016-09-09 10:59:35 -04:00
Amanieu d'Antras
fff625767c
Clean up and simplify the implementation of generators
2016-09-09 10:59:35 -04:00
Amanieu d'Antras
f7f209c1eb
Add proper CFI annotations to the inline asm
...
This ensures that gdb is able to generate a correct backtrace when
stopped at any instruction in the inline asm.
It also makes backtraces accessible to tools that only track frame
pointer chains, like perf or dtrace.
close #49
2016-09-09 10:59:19 -04:00
edef
0a99491f70
v1.1.0
2016-09-06 23:38:32 -04:00
whitequark
231bc3cc46
Yielder: use Cell internally to allow suspending via multiple borrows.
...
The use case is as follows: let's say I have a scheduler that uses
libfringe for context switching. A single thread may open several
sockets, each of which presents a std::io::Read interface, and
waiting in Read::read requires having a reference to the yielder
inside the socket.
This could be worked around with RefCell in the API consumer, but
there is no real reason to not implement it in libfringe.
close #48
2016-09-06 23:37:33 -04:00
edef
a292648e8e
v1.0.5
2016-09-04 08:05:35 -04:00
whitequark
f82d0e2c21
Bring back workarounds for Mach-O assembly syntax.
2016-09-04 07:18:55 -04:00
whitequark
491af39fc9
Radically simplify stack linking.
...
This commit:
* Gets rid of 2nd init trampoline.
* Gets rid of any custom CFI, instead using the standard CFI
for target prologue.
* Makes backtraces accessible to tools that only track frame
pointer chains, like perf or dtrace.
* Keeps the performance at the exact same level.
2016-09-04 07:18:55 -04:00
Steve Klabnik
0ccf72fcb3
Fix link to Stack in readme
...
close #46
2016-09-04 02:59:29 -04:00
whitequark
11a6c2a658
README: mention that bare metal is supported.
2016-09-04 02:13:46 -04:00
Amanieu d'Antras
b1f5b7458f
Pass the new stack pointer by value into the swap trampoline
2016-09-04 02:13:46 -04:00
Amanieu d'Antras
86e29b2baa
Remove unnecessary "memory" clobbers for naked function asm
2016-09-04 02:13:46 -04:00
Amanieu d'Antras
38ff4126b6
Add missing inline asm clobbers for x86 and x86_64
2016-09-04 02:13:46 -04:00
Amanieu d'Antras
fb9acb73f3
Use raw pointers instead of references to avoid aliasing issues
2016-09-04 02:13:46 -04:00
whitequark
c6ece101e2
Expose fringe::STACK_ALIGNMENT, and make OwnedStack respect it.
2016-09-02 19:44:34 -04:00
whitequark
0ca4bc86ff
doc: explicitly state the contracts of Stack and GuardedStack.
2016-09-02 14:51:29 -04:00
whitequark
3f6c895cb7
README: explicitly list supported platforms.
2016-09-02 14:51:29 -04:00
Jonathan Soo
2f143a18dc
Change README to use suspend()
...
fix #37
2016-09-02 14:45:22 -04:00
edef
a60fcbfcdb
v1.0.4
2016-08-31 20:25:43 -04:00
whitequark
a1ea208652
arch/x86_64: hack to work around ld64 shortcomings on OS X.
...
fix #35 , close #36
2016-08-31 20:25:00 -04:00
edef
49d1a24e8f
v1.0.3
2016-08-31 14:25:51 -04:00
Peter Atashian
28c12a5ec5
Clarify UMS threads
...
fix #32
2016-08-31 14:24:25 -04:00
whitequark
a733290359
arch: bring back clobbers for input operands.
...
This reverts a part of 365e40b. While it is not legal to clobber
the output register, it is legal and necessary to do this for inputs,
since we do not preserve them, and LLVM could have decided to
reuse them.
Thanks to @Amanieu for discovering this.
2016-08-31 14:17:54 -04:00
whitequark
248d7b16b5
arch/or1k: fix typo.
2016-08-31 14:17:54 -04:00
whitequark
4c5b0389c9
README: mention or1k support.
2016-08-31 14:17:54 -04:00
edef
f778fbacbf
add crates.io badge
2016-08-30 21:09:26 -04:00
edef
dd69fa563a
update README installation section
2016-08-30 21:03:48 -04:00