Commit Graph

99 Commits

Author SHA1 Message Date
edef f7fb5ae4e6 only build benches/swap when OsStack is available 2015-04-16 10:02:04 -04:00
edef fd61ad2f66 add README.md 2015-04-16 09:49:47 -04:00
edef 09369acc07 pass --no-deps to cargo doc
workaround for rust-lang/cargo#1529
2015-04-16 09:24:35 -04:00
edef 9eb99666bc add .travis.yml 2015-04-16 08:49:12 -04:00
edef d627f0d725 big rename — we're libfringe now 2015-04-16 08:11:12 -04:00
edef af7e9ea67c add FreeBSD + DragonFlyBSD MAP_STACK workaround
http://lists.freebsd.org/pipermail/freebsd-bugs/2011-July/044840.html
according to libgreen, DragonFlyBSD suffers from this too
2015-04-16 07:59:59 -04:00
edef 68f70fb1c9 rename Context::destroy to Context::unwrap, in line with lang conventions 2015-04-16 07:49:13 -04:00
edef 01e57ce9f5 let os::Stack's docs shine through the facade 2015-04-16 07:47:23 -04:00
edef 2266da2f8d rejig lib.rs a little 2015-04-16 07:45:14 -04:00
edef fe490275fa move os::Stack behind the facade, to OsStack 2015-04-16 07:44:07 -04:00
edef ff25697444 remove StackSource
Nothing in this library took StackSources, and it's probably too
high-level a concept to include here. Maybe later.
2015-04-16 07:42:16 -04:00
edef bdb6e0bd8b let StackSource::get_stack take &mut self 2015-04-16 07:35:29 -04:00
edef 9bb0ce483d derive Copy and Clone for os::StackSource 2015-04-16 07:33:27 -04:00
edef a389576d0f document os 2015-04-16 07:30:53 -04:00
edef f3ee07416d require Stack::Error to implement Debug + Display 2015-04-16 07:27:14 -04:00
edef cbfb62e62f only expose context and stack through the facade
It's fairly pointless to have submodules when there are only three
items.
2015-04-16 07:25:05 -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 222ab0eaa9 make Context::destroy inlineable 2015-04-16 06:43:09 -04:00
edef 6f750ab484 move all OS-related code into src/os 2015-04-16 06:42:31 -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
edef f24e8e7911 add license headers to every file 2015-04-16 06:08:44 -04:00
edef cbc10fd311 cache page_size
page_size is used in every nearly every pointer calculation in os.rs,
and the Stack methods are called fairly often. It's definitely not worth
spilling registers for to call out to a libc function.
With this change, page_size becomes effectively free. It is cached in an
atomic usize, with relaxed ordering, so no actual atomic operations are
involved.

Benchmark:
```
test bench_page_size        ... bench:         5 ns/iter (+/- 1)
test bench_page_size_cached ... bench:         0 ns/iter (+/- 0)
```
2015-04-16 05:52:56 -04:00
edef 52c0c92cd8 move OS specifics into sys 2015-04-16 05:49:34 -04:00
edef 2c3a203f57 rearrange the os::{Stack, StackSource} code a little 2015-04-16 05:34:09 -04:00
edef 8dd3044da5 don't re-export os::unix internals 2015-04-16 05:34:09 -04:00
edef cf33440503 include valgrind.h, so we don't depend on Valgrind at build time 2015-04-16 04:32:56 -04:00
edef 4d37f40b30 add .editorconfig 2015-04-16 04:17:55 -04:00
edef b8211689fa return a Result from StackSource::get_stack with an associated Error
fix #7
2015-04-16 04:14:18 -04:00
edef 42db0ee5b1 loosen the lifetime bounds on Context
fix #6
ref #3
2015-04-16 04:01:02 -04:00
edef 195350863a make Valgrind optional 2015-04-16 03:22:57 -04:00
edef 2760a0a7aa move Valgrind handling into Context
fix #3
This takes all Valgrind functionality private again.
Valgrind stack registrations are now associated with a Context, not with
a Stack. This makes sense, since it's only actually a stack when a
Context is running on it. Perhaps Valgrind will even be able to detect
early stack frees now.
2015-04-16 02:59:58 -04:00
edef a04117f955 use Display for displaying IoErrors 2015-04-16 02:16:08 -04:00
edef 7e0b126f42 separate all the libc interaction out per OS
We're now handling more of this ourselves, and leaving less to libstd.
Hopefully, we'll eventually break free of libstd, leaving a
highly-focused low-level library that retains all its conveniences in
freestanding environments.
2015-04-16 02:16:08 -04:00
edef 46b2a4007b improve the assembly documentation 2015-04-16 00:22:50 -04:00
edef d25f43d4d5 add license headers to the assembly files 2015-04-16 00:16:23 -04:00
edef e6c3c36b46 line-wrap LICENSE 2015-04-16 00:13:58 -04:00
edef 395a41d446 update LICENSE year 2015-04-16 00:12:15 -04:00
edef 5c252bdef5 document Stack and StackSource 2015-04-15 23:38:07 -04:00
edef 5b6aa23731 pass os::Stack addresses to Valgrind in the right order 2015-04-15 22:48:42 -04:00
edef 04bbeb88f4 add valgrind_stack_change
Unlike valgrind_stack_register, this won't automatically swap
if `start > end`. It's probably wiser to pretend it doesn't swap at all.
2015-04-15 22:45:50 -04:00
edef 476a63b817 move the Valgrind doc-comments to Rust-land, where they actually matter 2015-04-15 22:41:34 -04:00
edef 14887b4dd0 Valgrind doesn't actually care about the order 2015-04-15 22:40:16 -04:00
edef 9cbb2819ca match the internal Valgrind function names to the macro names 2015-04-15 22:30:07 -04:00
edef db6a2ff89b factor Valgrind support out and expose it
Now other Stack / StackSource implementations can use the same Valgrind
code. Ref #3.
2015-04-15 22:25:52 -04:00
edef 904da1a1c8 use Rust types for Valgrind, and use u32 for stack IDs 2015-04-15 22:22:02 -04:00