diff --git a/libc-test/build.rs b/libc-test/build.rs index 9f4ccc59457b3..f2634e94fc869 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -2041,7 +2041,7 @@ fn test_freebsd(target: &str) { // This was changed to 96(0x60) in FreeBSD 13: // https://github.com/freebsd/freebsd/ // commit/06b00ceaa914a3907e4e27bad924f44612bae1d7 - "MINCORE_SUPER" if Some(13) == freebsd_ver => true, + "MINCORE_SUPER" if Some(13) <= freebsd_ver => true, // Added in FreeBSD 12.0 "EINTEGRITY" if Some(11) == freebsd_ver => true, @@ -2089,6 +2089,9 @@ fn test_freebsd(target: &str) { // Added in in FreeBSD 13.0 (r367776 and r367287) "SCM_CREDS2" | "LOCAL_CREDS_PERSISTENT" if Some(13) > freebsd_ver => true, + // Added in FreeBSD 14 + "SPACECTL_DEALLOC" if Some(14) > freebsd_ver => true, + "VM_TOTAL" if Some(11) == freebsd_ver => true, // Added in FreeBSD 13. @@ -2193,6 +2196,9 @@ fn test_freebsd(target: &str) { // `ptrace_sc_ret` is not available in FreeBSD 11 "ptrace_sc_ret" if Some(11) == freebsd_ver => true, + // `spacectl_range` was introduced in FreeBSD 14 + "spacectl_range" if Some(14) > freebsd_ver => true, + // obsolete version "vmtotal" if Some(11) == freebsd_ver => true, @@ -2221,6 +2227,9 @@ fn test_freebsd(target: &str) { // `ssize_t` in FreeBSD11: "aio_waitcomplete" if Some(10) == freebsd_ver => true, + // `fspacectl` was introduced in FreeBSD 14 + "fspacectl" if Some(14) > freebsd_ver => true, + // The `uname` function in the `utsname.h` FreeBSD header is a C // inline function (has no symbol) that calls the `__xuname` symbol. // Therefore the function pointer comparison does not make sense for it. diff --git a/src/unix/bsd/freebsdlike/freebsd/mod.rs b/src/unix/bsd/freebsdlike/freebsd/mod.rs index 6c0fb3672bb0f..d4e28702cc2af 100644 --- a/src/unix/bsd/freebsdlike/freebsd/mod.rs +++ b/src/unix/bsd/freebsdlike/freebsd/mod.rs @@ -600,6 +600,11 @@ s! { pub mode: u16, } + pub struct spacectl_range { + pub r_offset: ::off_t, + pub r_len: ::off_t + } + pub struct rusage_ext { pub rux_runtime: u64, pub rux_uticks: u64, @@ -2978,6 +2983,9 @@ pub const F_SEAL_SEAL: ::c_int = 1; pub const F_SEAL_SHRINK: ::c_int = 2; pub const F_SEAL_WRITE: ::c_int = 8; +// for use with fspacectl +pub const SPACECTL_DEALLOC: ::c_int = 1; + // For getrandom() pub const GRND_NONBLOCK: ::c_uint = 0x1; pub const GRND_RANDOM: ::c_uint = 0x2; @@ -3805,6 +3813,14 @@ extern "C" { nbytes: ::size_t, ) -> ::ssize_t; + pub fn fspacectl( + fd: ::c_int, + cmd: ::c_int, + rqsr: *const spacectl_range, + flags: ::c_int, + rmsr: *mut spacectl_range, + ) -> ::c_int; + pub fn jail(jail: *mut ::jail) -> ::c_int; pub fn jail_attach(jid: ::c_int) -> ::c_int; pub fn jail_remove(jid: ::c_int) -> ::c_int;