diff --git a/src/liblibc b/src/liblibc index af77843345ec6..f9073f462b8b4 160000 --- a/src/liblibc +++ b/src/liblibc @@ -1 +1 @@ -Subproject commit af77843345ec6fc7e51113bfd692138d89024bc0 +Subproject commit f9073f462b8b41495dafba6eb5f8b21b38e7d29a diff --git a/src/libstd/sys/unix/fs.rs b/src/libstd/sys/unix/fs.rs index d2d2ce35d84a0..9193181123462 100644 --- a/src/libstd/sys/unix/fs.rs +++ b/src/libstd/sys/unix/fs.rs @@ -211,20 +211,14 @@ impl DirEntry { #[cfg(any(target_os = "macos", target_os = "ios", target_os = "netbsd", - target_os = "openbsd"))] - fn name_bytes(&self) -> &[u8] { - unsafe { - ::slice::from_raw_parts(self.entry.d_name.as_ptr() as *const u8, - self.entry.d_namlen as usize) - } - } - #[cfg(any(target_os = "freebsd", + target_os = "openbsd", + target_os = "freebsd", target_os = "dragonfly", target_os = "bitrig"))] fn name_bytes(&self) -> &[u8] { unsafe { ::slice::from_raw_parts(self.entry.d_name.as_ptr() as *const u8, - self.entry.d_namelen as usize) + self.entry.d_namlen as usize) } } #[cfg(any(target_os = "android", diff --git a/src/libstd/sys/unix/stack_overflow.rs b/src/libstd/sys/unix/stack_overflow.rs index fc49f4257be2a..87a4b8a8d3b42 100644 --- a/src/libstd/sys/unix/stack_overflow.rs +++ b/src/libstd/sys/unix/stack_overflow.rs @@ -134,17 +134,42 @@ mod imp { Handler { _data: MAIN_ALTSTACK }; } - pub unsafe fn make_handler() -> Handler { - let alt_stack = mmap(ptr::null_mut(), - SIGSTKSZ, - PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_ANON, - -1, - 0); - if alt_stack == MAP_FAILED { + #[cfg(any(target_os = "linux", + target_os = "macos", + target_os = "bitrig", + target_os = "netbsd", + target_os = "openbsd"))] + unsafe fn get_stack() -> *mut libc::c_void { + let stack = mmap(ptr::null_mut(), + SIGSTKSZ, + PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANON, + -1, + 0); + if stack == MAP_FAILED { + panic!("failed to allocate an alternative stack"); + } + stack + } + + #[cfg(any(target_os = "dragonfly", + target_os = "freebsd"))] + unsafe fn get_stack() -> *mut i8 { + let stack = mmap(ptr::null_mut(), + SIGSTKSZ, + PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANON, + -1, + 0); + if stack == MAP_FAILED { panic!("failed to allocate an alternative stack"); } + stack as *mut i8 + } + + pub unsafe fn make_handler() -> Handler { + let alt_stack = get_stack(); let mut stack: libc::stack_t = mem::zeroed(); stack.ss_sp = alt_stack; @@ -153,7 +178,7 @@ mod imp { sigaltstack(&stack, ptr::null_mut()); - Handler { _data: alt_stack } + Handler { _data: alt_stack as *mut libc::c_void } } pub unsafe fn drop_handler(handler: &mut Handler) { diff --git a/src/libtest/lib.rs b/src/libtest/lib.rs index ac5b235854a04..555e66d46e680 100644 --- a/src/libtest/lib.rs +++ b/src/libtest/lib.rs @@ -938,18 +938,12 @@ fn get_concurrency() -> usize { fn num_cpus() -> usize { let mut cpus: libc::c_uint = 0; let mut cpus_size = std::mem::size_of_val(&cpus); - let mut mib = [libc::CTL_HW, libc::HW_AVAILCPU, 0, 0]; unsafe { - libc::sysctl(mib.as_mut_ptr(), - 2, - &mut cpus as *mut _ as *mut _, - &mut cpus_size as *mut _ as *mut _, - 0 as *mut _, - 0); + cpus = libc::sysconf(libc::_SC_NPROCESSORS_ONLN) as libc::c_uint; } if cpus < 1 { - mib[1] = libc::HW_NCPU; + let mut mib = [libc::CTL_HW, libc::HW_NCPU, 0, 0]; unsafe { libc::sysctl(mib.as_mut_ptr(), 2,