Skip to content

Commit ca6f920

Browse files
author
Dave Huseby
committed
trying again at fixing stackp initialization
1 parent 68bfd43 commit ca6f920

File tree

1 file changed

+18
-3
lines changed

1 file changed

+18
-3
lines changed

src/libstd/sys/unix/stack_overflow.rs

+18-3
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ mod imp {
135135
Handler { _data: MAIN_ALTSTACK };
136136
}
137137

138-
unsafe fn get_stack() -> *mut i8 {
138+
unsafe fn get_stackp() -> *mut libc::c_void {
139139
let stackp = mmap(ptr::null_mut(),
140140
SIGSTKSZ,
141141
PROT_READ | PROT_WRITE,
@@ -145,11 +145,26 @@ mod imp {
145145
if stackp == MAP_FAILED {
146146
panic!("failed to allocate an alternative stack");
147147
}
148-
stackp as *mut i8
148+
stackp
149+
}
150+
151+
#[cfg(any(target_os = "linux",
152+
target_os = "macos",
153+
target_os = "bitrig",
154+
target_os = "netbsd",
155+
target_os = "openbsd"))]
156+
unsafe fn get_stack() -> libc::stack_t {
157+
libc::stack_t { ss_sp: get_stackp(), ss_flags: 0, ss_size: SIGSTKSZ }
158+
}
159+
160+
#[cfg(any(target_os = "freebsd",
161+
target_os = "dragonfly"))]
162+
unsafe fn get_stack() -> libc::stack_t {
163+
libc::stack_t { ss_sp: get_stackp() as *mut i8, ss_flags: 0, ss_size: SIGSTKSZ }
149164
}
150165

151166
pub unsafe fn make_handler() -> Handler {
152-
let stack = libc::stack_t { ss_sp: get_stack(), ss_flags: 0, ss_size: SIGSTKSZ }
167+
let stack = get_stack();
153168
sigaltstack(&stack, ptr::null_mut());
154169
Handler { _data: stack.ss_sp as *mut libc::c_void }
155170
}

0 commit comments

Comments
 (0)