Commit Graph

243 Commits

Author SHA1 Message Date
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
edef
1aa5ffdcd0 fix doc comment of Stack::limit 2016-08-30 18:30:58 -04:00
edef
5808a0ac63 v1.0.2 2016-08-30 18:28:51 -04:00
edef
bbfa5a43bc add regression test for #31 2016-08-30 18:26:42 -04:00
edef
1994ffee27 don't drop yielded values in the generator
fix #31
2016-08-30 18:17:52 -04:00
edef
89a8f68c7e v1.0.1 2016-08-30 14:03:08 -04:00
edef
3ad902010f get rid of Windows deps 2016-08-30 14:02:32 -04:00
edef
6a1cad2966 v1.0.0 2016-08-30 13:59:05 -04:00
edef
a1f77fe456 deal with crates.io's lack of proper SPDX parsing 2016-08-30 13:58:47 -04:00
edef
de9e4c59d0 add Cargo metadata 2016-08-30 13:46:29 -04:00
edef
e47cb809f4 use valgrind_request from crates.io 2016-08-30 13:43:51 -04:00
whitequark
2d8cefcabc Do not simultaneously clobber registers passed into assembly.
This is not actually legal (although the restriction is not
documented anywhere), and is not caught by LLVM unless the codegen
option -verify-machineinstrs is specified. This option is now used
on Travis.

While not legal, this does not seem to result in invalid output
(although it creates an unnecessary spill); however, under extremely
specific circumstances (e.g. when a register scavenger is run under
severe pressure), this will result in a codegen crash, which is
how I found it.
2016-08-30 12:20:34 -04:00