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
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
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
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
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
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
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
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
edef
40d0923704
add AVX registers to clobbers, do some formatting
...
cover ALL THE REGISTERS. also added rbp, rsp in a comment for
completeness.
2015-01-14 11:27:43 +01:00
edef
299a0a5d98
complete rewrite!
...
featuring 7ns inlineable context switches, no more separately-built
assembly objects, and a vastly nicer interface.
incontext/outcontext are no more, context switch calls now take a single
context structure, which functions as both.
everything now also functions without any heap allocations -- for the
context setup, only an FnOnce() value is necessary.
2015-01-14 11:27:43 +01:00
edef
0729ca8648
yay, Rust beta…
2015-01-13 08:38:52 +01:00
edef
fec3f2eaef
Rust updates
2015-01-09 22:45:39 +01:00
edef
c06c5ea7a0
typo
2014-12-25 12:25:11 +01:00
edef
612e854acb
move {get,set}_sp_limit into Rust-land
2014-12-25 12:24:02 +01:00
edef
b961956ea5
Rust updates (MapOption fixes)
2014-12-25 11:50:48 +01:00
edef
59e723d099
free ourselves from the shackles of libstd
2014-12-24 07:28:21 +01:00
edef
a94bc324fe
move stack creation / destruction into platform
2014-12-24 07:07:25 +01:00