Skip to content

Commit e806929

Browse files
committed
std: reorganize the UNIX-internal weak module
1 parent f3fd3ef commit e806929

File tree

8 files changed

+230
-269
lines changed

8 files changed

+230
-269
lines changed

library/std/src/sys/pal/unix/mod.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@
22

33
use crate::io::ErrorKind;
44

5-
#[cfg(not(target_os = "espidf"))]
6-
#[macro_use]
7-
pub mod weak;
8-
95
#[cfg(target_os = "fuchsia")]
106
pub mod fuchsia;
117
pub mod futex;
@@ -19,6 +15,7 @@ pub mod stack_overflow;
1915
pub mod sync;
2016
pub mod thread_parking;
2117
pub mod time;
18+
pub mod weak;
2219

2320
#[cfg(target_os = "espidf")]
2421
pub fn init(_argc: isize, _argv: *const *const u8, _sigpipe: u8) {}

library/std/src/sys/pal/unix/stack_overflow.rs

Lines changed: 17 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ mod imp {
6969
use super::Handler;
7070
use super::thread_info::{delete_current_info, set_current_info, with_current_info};
7171
use crate::ops::Range;
72-
use crate::sync::OnceLock;
7372
use crate::sync::atomic::{Atomic, AtomicBool, AtomicPtr, AtomicUsize, Ordering};
7473
use crate::sys::pal::unix::os;
7574
use crate::{io, mem, panic, ptr};
@@ -396,6 +395,10 @@ mod imp {
396395
} else if cfg!(all(target_os = "linux", target_env = "musl")) {
397396
install_main_guard_linux_musl(page_size)
398397
} else if cfg!(target_os = "freebsd") {
398+
#[cfg(not(target_os = "freebsd"))]
399+
return None;
400+
// The FreeBSD code cannot be checked on non-BSDs.
401+
#[cfg(target_os = "freebsd")]
399402
install_main_guard_freebsd(page_size)
400403
} else if cfg!(any(target_os = "netbsd", target_os = "openbsd")) {
401404
install_main_guard_bsds(page_size)
@@ -432,6 +435,7 @@ mod imp {
432435
}
433436

434437
#[forbid(unsafe_op_in_unsafe_fn)]
438+
#[cfg(target_os = "freebsd")]
435439
unsafe fn install_main_guard_freebsd(page_size: usize) -> Option<Range<usize>> {
436440
// FreeBSD's stack autogrows, and optionally includes a guard page
437441
// at the bottom. If we try to remap the bottom of the stack
@@ -443,38 +447,23 @@ mod imp {
443447
// by the security.bsd.stack_guard_page sysctl.
444448
// By default it is 1, checking once is enough since it is
445449
// a boot time config value.
446-
static PAGES: OnceLock<usize> = OnceLock::new();
450+
static PAGES: crate::sync::OnceLock<usize> = crate::sync::OnceLock::new();
447451

448452
let pages = PAGES.get_or_init(|| {
449-
use crate::sys::weak::dlsym;
450-
dlsym!(
451-
fn sysctlbyname(
452-
name: *const libc::c_char,
453-
oldp: *mut libc::c_void,
454-
oldlenp: *mut libc::size_t,
455-
newp: *const libc::c_void,
456-
newlen: libc::size_t,
457-
) -> libc::c_int;
458-
);
459453
let mut guard: usize = 0;
460454
let mut size = size_of_val(&guard);
461455
let oid = c"security.bsd.stack_guard_page";
462-
match sysctlbyname.get() {
463-
Some(fcn)
464-
if unsafe {
465-
fcn(
466-
oid.as_ptr(),
467-
(&raw mut guard).cast(),
468-
&raw mut size,
469-
ptr::null_mut(),
470-
0,
471-
) == 0
472-
} =>
473-
{
474-
guard
475-
}
476-
_ => 1,
477-
}
456+
457+
let r = unsafe {
458+
libc::sysctlbyname(
459+
oid.as_ptr(),
460+
(&raw mut guard).cast(),
461+
&raw mut size,
462+
ptr::null_mut(),
463+
0,
464+
)
465+
};
466+
if r == 0 { guard } else { 1 }
478467
});
479468
Some(guardaddr..guardaddr + pages * page_size)
480469
}

library/std/src/sys/pal/unix/weak.rs

Lines changed: 0 additions & 225 deletions
This file was deleted.

0 commit comments

Comments
 (0)