diff options
| author | Dave Huseby <dhuseby@mozilla.com> | 2016-02-02 18:21:39 -0800 |
|---|---|---|
| committer | Dave Huseby <dhuseby@mozilla.com> | 2016-02-02 21:42:11 -0800 |
| commit | ca6f9203461f57a1f1a88266efeb61a5aa47d66b (patch) | |
| tree | 6c680499f3822c50f9e900b2acc079bf4ca0f0b1 /src/libstd/sys/unix/stack_overflow.rs | |
| parent | 68bfd43eefe42b429a463731fe81d62bf9c27907 (diff) | |
| download | rust-ca6f9203461f57a1f1a88266efeb61a5aa47d66b.tar.gz rust-ca6f9203461f57a1f1a88266efeb61a5aa47d66b.zip | |
trying again at fixing stackp initialization
Diffstat (limited to 'src/libstd/sys/unix/stack_overflow.rs')
| -rw-r--r-- | src/libstd/sys/unix/stack_overflow.rs | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/libstd/sys/unix/stack_overflow.rs b/src/libstd/sys/unix/stack_overflow.rs index ee590e1af71..b5cbcaa44d5 100644 --- a/src/libstd/sys/unix/stack_overflow.rs +++ b/src/libstd/sys/unix/stack_overflow.rs @@ -135,7 +135,7 @@ mod imp { Handler { _data: MAIN_ALTSTACK }; } - unsafe fn get_stack() -> *mut i8 { + unsafe fn get_stackp() -> *mut libc::c_void { let stackp = mmap(ptr::null_mut(), SIGSTKSZ, PROT_READ | PROT_WRITE, @@ -145,11 +145,26 @@ mod imp { if stackp == MAP_FAILED { panic!("failed to allocate an alternative stack"); } - stackp as *mut i8 + stackp + } + + #[cfg(any(target_os = "linux", + target_os = "macos", + target_os = "bitrig", + target_os = "netbsd", + target_os = "openbsd"))] + unsafe fn get_stack() -> libc::stack_t { + libc::stack_t { ss_sp: get_stackp(), ss_flags: 0, ss_size: SIGSTKSZ } + } + + #[cfg(any(target_os = "freebsd", + target_os = "dragonfly"))] + unsafe fn get_stack() -> libc::stack_t { + libc::stack_t { ss_sp: get_stackp() as *mut i8, ss_flags: 0, ss_size: SIGSTKSZ } } pub unsafe fn make_handler() -> Handler { - let stack = libc::stack_t { ss_sp: get_stack(), ss_flags: 0, ss_size: SIGSTKSZ } + let stack = get_stack(); sigaltstack(&stack, ptr::null_mut()); Handler { _data: stack.ss_sp as *mut libc::c_void } } |
