@@ -140,46 +140,39 @@ mod imp {
140
140
target_os = "bitrig" ,
141
141
target_os = "netbsd" ,
142
142
target_os = "openbsd" ) ) ]
143
- unsafe fn get_stack ( ) -> * mut libc:: c_void {
144
- let stack = mmap ( ptr:: null_mut ( ) ,
145
- SIGSTKSZ ,
146
- PROT_READ | PROT_WRITE ,
147
- MAP_PRIVATE | MAP_ANON ,
148
- -1 ,
149
- 0 ) ;
150
- if stack == MAP_FAILED {
143
+ unsafe fn get_stack ( ) -> libc:: stack_t {
144
+ let stackp = mmap ( ptr:: null_mut ( ) ,
145
+ SIGSTKSZ ,
146
+ PROT_READ | PROT_WRITE ,
147
+ MAP_PRIVATE | MAP_ANON ,
148
+ -1 ,
149
+ 0 ) ;
150
+ if stackp == MAP_FAILED {
151
151
panic ! ( "failed to allocate an alternative stack" ) ;
152
152
}
153
- stack
153
+ libc :: stack_t { ss_sp : stackp , ss_flags : 0 , ss_size : SIGSTKSZ }
154
154
}
155
155
156
156
#[ cfg( any( target_os = "dragonfly" ,
157
157
target_os = "freebsd" ) ) ]
158
- unsafe fn get_stack ( ) -> * mut i8 {
159
- let stack = mmap ( ptr:: null_mut ( ) ,
160
- SIGSTKSZ ,
161
- PROT_READ | PROT_WRITE ,
162
- MAP_PRIVATE | MAP_ANON ,
163
- -1 ,
164
- 0 ) ;
165
- if stack == MAP_FAILED {
158
+ unsafe fn get_stack ( ) -> libc :: stack_t {
159
+ let stackp = mmap ( ptr:: null_mut ( ) ,
160
+ SIGSTKSZ ,
161
+ PROT_READ | PROT_WRITE ,
162
+ MAP_PRIVATE | MAP_ANON ,
163
+ -1 ,
164
+ 0 ) ;
165
+ if stackp == MAP_FAILED {
166
166
panic ! ( "failed to allocate an alternative stack" ) ;
167
167
}
168
- stack as * mut i8
168
+ libc :: stack_t { ss_sp : stackp as * mut i8 , ss_flags : 0 , ss_size : SIGSTKSZ }
169
169
}
170
170
171
171
172
172
pub unsafe fn make_handler ( ) -> Handler {
173
- let alt_stack = get_stack ( ) ;
174
- let mut stack: libc:: stack_t = mem:: zeroed ( ) ;
175
-
176
- stack. ss_sp = alt_stack;
177
- stack. ss_flags = 0 ;
178
- stack. ss_size = SIGSTKSZ ;
179
-
173
+ let stack = get_stack ( ) ;
180
174
sigaltstack ( & stack, ptr:: null_mut ( ) ) ;
181
-
182
- Handler { _data : alt_stack as * mut libc:: c_void }
175
+ Handler { _data : stack. ss_sp as * mut libc:: c_void }
183
176
}
184
177
185
178
pub unsafe fn drop_handler ( handler : & mut Handler ) {
0 commit comments