Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add fspacectl, new in FreeBSD 14 #2543

Merged
merged 1 commit into from
Jan 21, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
11 changes: 10 additions & 1 deletion libc-test/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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,

Expand Down Expand Up @@ -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.
Expand Down
16 changes: 16 additions & 0 deletions src/unix/bsd/freebsdlike/freebsd/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down