diff options
Diffstat (limited to 'vendor/psm/examples/replace_stack_1.rs')
-rw-r--r-- | vendor/psm/examples/replace_stack_1.rs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/vendor/psm/examples/replace_stack_1.rs b/vendor/psm/examples/replace_stack_1.rs new file mode 100644 index 000000000..af9e4b92c --- /dev/null +++ b/vendor/psm/examples/replace_stack_1.rs @@ -0,0 +1,33 @@ +extern crate psm; + +psm::psm_stack_manipulation! { + yes { + use std::alloc; + + const STACK_SIZE: usize = 4096 * 64; + const STACK_ALIGN: usize = 4096; + + fn main() { + println!("current stack pointer is {:p}", psm::stack_pointer()); + unsafe { + let new_stack = alloc::alloc(alloc::Layout::from_size_align(STACK_SIZE, STACK_ALIGN).unwrap()); + println!("new stack is between {:p} and {:p}", new_stack, new_stack.offset(STACK_SIZE as isize)); + psm::replace_stack(new_stack, STACK_SIZE, || { + println!("after replacement stack pointer is {:p}", psm::stack_pointer()); + ::std::process::exit(0); + }); + } + } + } + no { + fn main() { + eprintln!("Stack manipulation not supported by this target"); + } + } +} + +#[test] +fn run_example() { + // NOTE: intentionally out-of-processes, as the example exits with `process::exit(0)`. + main() +} |