From f6868afae673af1af7911ffdac06fccbc0916267 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Fri, 9 Feb 2024 19:25:19 +0000 Subject: [PATCH] trying another approach --- library/std/src/sys/pal/unix/thread.rs | 29 +++++++++----------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/library/std/src/sys/pal/unix/thread.rs b/library/std/src/sys/pal/unix/thread.rs index 312d1c28803d9..ba8d31c23a51a 100644 --- a/library/std/src/sys/pal/unix/thread.rs +++ b/library/std/src/sys/pal/unix/thread.rs @@ -854,32 +854,23 @@ pub mod guard { let guard = guardaddr ..guardaddr + *LOCK.get_or_init(|| { - extern "C" { - pub fn sysctlbyname( - oid: *const libc::c_char, - ov: *mut libc::c_void, - osize: *mut libc::size_t, - nv: *const libc::c_void, - nsize: libc::size_t, - ) -> libc::c_int; - } + use crate::sys::weak::dlsym; + dlsym!(fn sysctlbyname(*const libc::c_char, *mut libc::c_void, *mut libc::size_t, *const libc::c_void, libc::size_t) -> libc::c_int); let mut guard: usize = 0; let mut size = crate::mem::size_of_val(&guard); let oid = crate::ffi::CStr::from_bytes_with_nul( b"security.bsd.stack_guard_page\0", ) .unwrap(); - let res = sysctlbyname( - oid.as_ptr(), - &mut guard as *mut _ as *mut _, - &mut size as *mut _ as *mut _, - crate::ptr::null_mut(), - 0, - ); - if res == 0 { - return guard; + match sysctlbyname.get() { + Some(fcn) => { + if fcn(oid.as_ptr(), &mut guard as *mut _ as *mut _, &mut size as *mut _ as *mut _, crate::ptr::null_mut(), 0) == 0 { + return guard; + } + return 1; + }, + _ => { return 1; } } - 1 }) * page_size; Some(guard) } else if cfg!(target_os = "openbsd") {