]> git.proxmox.com Git - rustc.git/blame - vendor/rustix/src/imp/libc/param/auxv.rs
New upstream version 1.66.0+dfsg1
[rustc.git] / vendor / rustix / src / imp / libc / param / auxv.rs
CommitLineData
064997fb
FG
1use super::super::c;
2#[cfg(any(
3 all(target_os = "android", target_pointer_width = "64"),
4 target_os = "linux",
5))]
6use crate::ffi::CStr;
7
8// `getauxval` wasn't supported in glibc until 2.16.
9#[cfg(any(
10 all(target_os = "android", target_pointer_width = "64"),
11 target_os = "linux",
12))]
13weak!(fn getauxval(c::c_ulong) -> *mut c::c_void);
14
15#[inline]
16pub(crate) fn page_size() -> usize {
17 unsafe { c::sysconf(c::_SC_PAGESIZE) as usize }
18}
19
20#[cfg(not(target_os = "wasi"))]
21#[inline]
22pub(crate) fn clock_ticks_per_second() -> u64 {
23 unsafe { c::sysconf(c::_SC_CLK_TCK) as u64 }
24}
25
26#[cfg(any(
27 all(target_os = "android", target_pointer_width = "64"),
28 target_os = "linux",
29))]
30#[inline]
31pub(crate) fn linux_hwcap() -> (usize, usize) {
32 if let Some(libc_getauxval) = getauxval.get() {
33 unsafe {
34 let hwcap = libc_getauxval(c::AT_HWCAP) as usize;
35 let hwcap2 = libc_getauxval(c::AT_HWCAP2) as usize;
36 (hwcap, hwcap2)
37 }
38 } else {
39 (0, 0)
40 }
41}
42
43#[cfg(any(
44 all(target_os = "android", target_pointer_width = "64"),
45 target_os = "linux",
46))]
47#[inline]
48pub(crate) fn linux_execfn() -> &'static CStr {
49 if let Some(libc_getauxval) = getauxval.get() {
50 unsafe { CStr::from_ptr(libc_getauxval(c::AT_EXECFN).cast()) }
51 } else {
52 cstr!("")
53 }
54}
55
56/// Initialize process-wide state.
57#[cfg(any(
58 target_vendor = "mustang",
59 not(any(target_env = "gnu", target_env = "musl")),
60))]
61#[inline]
62#[doc(hidden)]
63pub(crate) unsafe fn init(_envp: *mut *mut u8) {
64 // Nothing to do. This is the libc backend, and libc does the
65 // initialization for us.
66}