Commit Graph

273 Commits

Author SHA1 Message Date
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
edef c19fc4625a use a statically-allocated stack for Context::new benchmarking
Now it's an actual context creation benchmark, instead of benchmarking
our stack creation, which is swappable anyway.
2015-04-15 22:11:36 -04:00
edef 7167b0b570 add Context::destroy 2015-04-15 21:54:56 -04:00
edef 31652d7b8f limit compilation of arch to x86_64
the current code only supports x86_64 (#1), and we want to fail hard on
any other architecture for now.
2015-04-15 21:52:08 -04:00
edef 6d56cc593e feature-flag os, but leave it enabled by default 2015-04-15 21:51:37 -04:00
edef 54b34383e3 parametrise Context on Stack 2015-04-15 21:51:37 -04:00
edef 8dc53c3125 make Context::new take a stack, instead of creating one 2015-04-15 19:35:27 -04:00
edef 27318bc271 rename platform to os 2015-04-15 19:35:27 -04:00
edef 5ae54da9c2 make context public 2015-04-15 19:35:27 -04:00
edef 9855084890 make stack public 2015-04-15 19:35:27 -04:00
edef 7aa58f43f7 add StackSource and implement it for platform::Stack 2015-04-15 19:35:27 -04:00
edef f7511dc2c1 add a context creation benchmark 2015-04-15 19:35:27 -04:00
edef f620005d0f move the example to the examples dir 2015-04-15 19:35:27 -04:00
edef 5c5f5095c3 move arch::{initialize_call_frame, swap} to inherent mthods of Registers
they're now Registers::{new, swap}, because they're
already effectively a constructor and a method.
2015-04-15 19:35:27 -04:00
edef 67b26662c3 remove extraneous newline in LICENSE 2015-04-15 02:11:39 -04:00
edef ae00fa2346 document why we're not using a straigh `ret` 2015-04-15 02:06:52 -04:00
edef d06e7c7cdd fix the copy impl for Registers 2015-04-15 01:23:33 -04:00
edef 884496c6b9 document the assembly 2015-03-27 03:33:20 -04:00
edef a39493d740 rewrite platform.rs to use mmap directly 2015-03-27 02:52:25 -04:00
edef 175583e335 simplify build script 2015-03-26 22:48:51 -04:00
edef deb452c651 that doesn't need to be mutable 2015-03-03 01:53:35 -05:00
edef b0dcc65304 Rust updates 2015-03-03 01:53:04 -05:00
edef 8515bf0fa1 closure syntax changed 2015-02-23 23:14:58 -05:00
edef e51cfa1b7b no_std is a feature flag now 2015-02-23 23:13:25 -05:00
edef a54e573073 Rust updates 2015-02-02 14:17:23 -05:00
edef 4d815b8ec9 clean up warnings in the build script 2015-01-14 11:27:43 +01:00
edef 3f76c4baea use std in test configurations
this makes `cargo test` and `cargo bench` work cleanly, for one.
2015-01-14 11:27:43 +01:00