Commit Graph

84 Commits

Author SHA1 Message Date
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
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