summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/bors.yml6
-rwxr-xr-xlibc-test/build.rs41
-rw-r--r--src/fuchsia/mod.rs10
-rw-r--r--src/unix/bsd/apple/b64/aarch64.rs17
-rw-r--r--src/unix/bsd/apple/b64/aarch64/align.rs48
-rw-r--r--src/unix/bsd/apple/b64/aarch64/mod.rs8
-rw-r--r--src/unix/bsd/apple/b64/mod.rs80
-rw-r--r--src/unix/bsd/apple/b64/x86_64.rs31
-rw-r--r--src/unix/bsd/apple/b64/x86_64/align.rs7
-rw-r--r--src/unix/bsd/apple/b64/x86_64/mod.rs112
-rw-r--r--src/unix/bsd/apple/mod.rs22
-rw-r--r--src/unix/bsd/freebsdlike/dragonfly/mod.rs21
-rw-r--r--src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs4
-rw-r--r--src/unix/bsd/freebsdlike/freebsd/mod.rs19
-rw-r--r--src/unix/bsd/freebsdlike/mod.rs17
-rw-r--r--src/unix/bsd/mod.rs5
-rw-r--r--src/unix/linux_like/linux/align.rs23
-rw-r--r--src/unix/linux_like/linux/mod.rs98
-rw-r--r--src/unix/uclibc/mips/mod.rs2
19 files changed, 414 insertions, 157 deletions
diff --git a/.github/workflows/bors.yml b/.github/workflows/bors.yml
index 9682450438..2c16f94cda 100644
--- a/.github/workflows/bors.yml
+++ b/.github/workflows/bors.yml
@@ -116,8 +116,10 @@ jobs:
i686-unknown-linux-musl,
mips-unknown-linux-gnu,
mips-unknown-linux-musl,
- mips64-unknown-linux-gnuabi64,
- mips64el-unknown-linux-gnuabi64,
+ # FIXME: Somehow failed on CI
+ # https://github.com/rust-lang/libc/runs/1659882216
+ # mips64-unknown-linux-gnuabi64,
+ # mips64el-unknown-linux-gnuabi64,
mipsel-unknown-linux-musl,
powerpc-unknown-linux-gnu,
powerpc64-unknown-linux-gnu,
diff --git a/libc-test/build.rs b/libc-test/build.rs
index d5dc0ef1ea..60f6c2a684 100755
--- a/libc-test/build.rs
+++ b/libc-test/build.rs
@@ -199,6 +199,8 @@ fn test_apple(target: &str) {
"SF_SETTABLE" => true,
// FIXME: the value has been changed since Catalina (VM_FLAGS_RESILIENT_MEDIA is also contained now).
"VM_FLAGS_USER_REMAP" => true,
+ // FIXME: the values have been changed since Big Sur
+ "HW_TARGET" | "HW_PRODUCT" | "HW_MAXID" => true,
_ => false,
}
});
@@ -220,6 +222,7 @@ fn test_apple(target: &str) {
match (struct_, field) {
// FIXME: the array size has been changed since macOS 10.15 ([8] -> [7]).
("statfs", "f_reserved") => true,
+ ("__darwin_arm_neon_state64", "__v") => true,
_ => false,
}
});
@@ -2439,6 +2442,7 @@ fn test_linux(target: &str) {
headers! {
cfg:
"asm/mman.h",
+ "linux/can.h",
"linux/dccp.h",
"linux/errqueue.h",
"linux/falloc.h",
@@ -2553,6 +2557,9 @@ fn test_linux(target: &str) {
});
cfg.skip_struct(move |ty| {
+ if ty.starts_with("__c_anonymous_") {
+ return true;
+ }
match ty {
// These cannot be tested when "resolv.h" is included and are tested
// in the `linux_elf.rs` file.
@@ -2588,6 +2595,9 @@ fn test_linux(target: &str) {
// which is absent in musl, has to be defined.
"__exit_status" if musl => true,
+ // FIXME: CI's kernel header version is old.
+ "sockaddr_can" => true,
+
_ => false,
}
});
@@ -2672,6 +2682,33 @@ fn test_linux(target: &str) {
// Not yet implemented on sparc64
"SYS_clone3" if mips | sparc64 => true,
+ // Missing from musl's kernel headers
+ | "IFLA_GSO_MAX_SEGS"
+ | "IFLA_GSO_MAX_SIZE"
+ | "IFLA_PAD"
+ | "IFLA_XDP"
+ | "IFLA_EVENT"
+ | "IFLA_NEW_NETNSID"
+ | "IFLA_IF_NETNSID"
+ | "IFLA_TARGET_NETNSID"
+ | "IFLA_CARRIER_UP_COUNT"
+ | "IFLA_CARRIER_DOWN_COUNT"
+ | "IFLA_NEW_IFINDEX"
+ | "IFLA_MIN_MTU"
+ | "IFLA_MAX_MTU"
+ if musl => true,
+
+ // Requires more recent kernel headers:
+ | "IFLA_PROP_LIST"
+ | "IFLA_ALT_IFNAME"
+ | "IFLA_PERM_ADDRESS"
+ | "IFLA_PROTO_DOWN_REASON" => true,
+
+ // FIXME: They require recent kernel header:
+ | "CAN_J1939"
+ | "CAN_RAW_FILTER_MAX"
+ | "CAN_NPROTO" => true,
+
_ => false,
}
});
@@ -2732,7 +2769,9 @@ fn test_linux(target: &str) {
// this one is an anonymous union
(struct_ == "ff_effect" && field == "u") ||
// `__exit_status` type is a patch which is absent in musl
- (struct_ == "utmpx" && field == "ut_exit" && musl)
+ (struct_ == "utmpx" && field == "ut_exit" && musl) ||
+ // `can_addr` is an anonymous union
+ (struct_ == "sockaddr_can" && field == "can_addr")
});
cfg.volatile_item(|i| {
diff --git a/src/fuchsia/mod.rs b/src/fuchsia/mod.rs
index f7fd67dfa2..e514173ef6 100644
--- a/src/fuchsia/mod.rs
+++ b/src/fuchsia/mod.rs
@@ -1333,6 +1333,7 @@ pub const S_ISGID: ::c_int = 0x400;
pub const S_ISVTX: ::c_int = 0x200;
pub const IF_NAMESIZE: ::size_t = 16;
+pub const IFNAMSIZ: ::size_t = IF_NAMESIZE;
pub const LOG_EMERG: ::c_int = 0;
pub const LOG_ALERT: ::c_int = 1;
@@ -1768,14 +1769,17 @@ pub const SCM_TIMESTAMP: ::c_int = SO_TIMESTAMP;
pub const SOCK_RAW: ::c_int = 3;
pub const SOCK_RDM: ::c_int = 4;
+
+pub const IP_TTL: ::c_int = 2;
+pub const IP_HDRINCL: ::c_int = 3;
+pub const IP_FREEBIND: ::c_int = 15;
+pub const IP_TRANSPARENT: ::c_int = 19;
pub const IP_MULTICAST_IF: ::c_int = 32;
pub const IP_MULTICAST_TTL: ::c_int = 33;
pub const IP_MULTICAST_LOOP: ::c_int = 34;
-pub const IP_TTL: ::c_int = 2;
-pub const IP_HDRINCL: ::c_int = 3;
pub const IP_ADD_MEMBERSHIP: ::c_int = 35;
pub const IP_DROP_MEMBERSHIP: ::c_int = 36;
-pub const IP_TRANSPARENT: ::c_int = 19;
+
pub const IPV6_UNICAST_HOPS: ::c_int = 16;
pub const IPV6_MULTICAST_IF: ::c_int = 17;
pub const IPV6_MULTICAST_HOPS: ::c_int = 18;
diff --git a/src/unix/bsd/apple/b64/aarch64.rs b/src/unix/bsd/apple/b64/aarch64.rs
deleted file mode 100644
index 27e6861217..0000000000
--- a/src/unix/bsd/apple/b64/aarch64.rs
+++ /dev/null
@@ -1,17 +0,0 @@
-s! {
- pub struct __darwin_mcontext64 {
- pub __es: ::__darwin_x86_exception_state64,
- pub __ss: __darwin_arm_thread_state64,
- pub __fs: ::__darwin_x86_float_state64,
- }
-
- pub struct __darwin_arm_thread_state64 {
- pub __x: [u64; 29],
- pub __fp: u64,
- pub __lr: u64,
- pub __sp: u64,
- pub __pc: u64,
- pub __cpsr: u32,
- pub __pad: u32,
- }
-}
diff --git a/src/unix/bsd/apple/b64/aarch64/align.rs b/src/unix/bsd/apple/b64/aarch64/align.rs
new file mode 100644
index 0000000000..10d55039df
--- /dev/null
+++ b/src/unix/bsd/apple/b64/aarch64/align.rs
@@ -0,0 +1,48 @@
+pub type mcontext_t = *mut __darwin_mcontext64;
+
+s_no_extra_traits! {
+ #[allow(missing_debug_implementations)]
+ pub struct max_align_t {
+ priv_: f64
+ }
+}
+
+s! {
+ pub struct ucontext_t {
+ pub uc_onstack: ::c_int,
+ pub uc_sigmask: ::sigset_t,
+ pub uc_stack: ::stack_t,
+ pub uc_link: *mut ::ucontext_t,
+ pub uc_mcsize: usize,
+ pub uc_mcontext: mcontext_t,
+ }
+
+ pub struct __darwin_mcontext64 {
+ pub __es: __darwin_arm_exception_state64,
+ pub __ss: __darwin_arm_thread_state64,
+ pub __ns: __darwin_arm_neon_state64,
+ }
+
+ pub struct __darwin_arm_exception_state64 {
+ pub __far: u64,
+ pub __esr: u32,
+ pub __exception: u32,
+ }
+
+ pub struct __darwin_arm_thread_state64 {
+ pub __x: [u64; 29],
+ pub __fp: u64,
+ pub __lr: u64,
+ pub __sp: u64,
+ pub __pc: u64,
+ pub __cpsr: u32,
+ pub __pad: u32,
+ }
+
+ #[repr(align(16))]
+ pub struct __darwin_arm_neon_state64 {
+ pub __v: [[u64; 2]; 32],
+ pub __fpsr: u32,
+ pub __fpcr: u32,
+ }
+}
diff --git a/src/unix/bsd/apple/b64/aarch64/mod.rs b/src/unix/bsd/apple/b64/aarch64/mod.rs
new file mode 100644
index 0000000000..83b62e97cf
--- /dev/null
+++ b/src/unix/bsd/apple/b64/aarch64/mod.rs
@@ -0,0 +1,8 @@
+pub type boolean_t = ::c_int;
+
+cfg_if! {
+ if #[cfg(libc_align)] {
+ mod align;
+ pub use self::align::*;
+ }
+}
diff --git a/src/unix/bsd/apple/b64/mod.rs b/src/unix/bsd/apple/b64/mod.rs
index 0596ba5ef0..48d94bcd6b 100644
--- a/src/unix/bsd/apple/b64/mod.rs
+++ b/src/unix/bsd/apple/b64/mod.rs
@@ -2,8 +2,6 @@
pub type c_long = i64;
pub type c_ulong = u64;
-pub type boolean_t = ::c_uint;
-pub type mcontext_t = *mut __darwin_mcontext64;
s! {
pub struct timeval32 {
@@ -49,77 +47,6 @@ s! {
pub bh_datalen: u32,
pub bh_hdrlen: ::c_ushort,
}
-
- pub struct ucontext_t {
- pub uc_onstack: ::c_int,
- pub uc_sigmask: ::sigset_t,
- pub uc_stack: ::stack_t,
- pub uc_link: *mut ::ucontext_t,
- pub uc_mcsize: usize,
- pub uc_mcontext: mcontext_t,
- }
-
- pub struct __darwin_x86_exception_state64 {
- pub __trapno: u16,
- pub __cpu: u16,
- pub __err: u32,
- pub __faultvaddr: u64,
- }
-
- pub struct __darwin_x86_float_state64 {
- pub __fpu_reserved: [::c_int; 2],
- __fpu_fcw: ::c_short,
- __fpu_fsw: ::c_short,
- pub __fpu_ftw: u8,
- pub __fpu_rsrv1: u8,
- pub __fpu_fop: u16,
- pub __fpu_ip: u32,
- pub __fpu_cs: u16,
- pub __fpu_rsrv2: u16,
- pub __fpu_dp: u32,
- pub __fpu_ds: u16,
- pub __fpu_rsrv3: u16,
- pub __fpu_mxcsr: u32,
- pub __fpu_mxcsrmask: u32,
- pub __fpu_stmm0: __darwin_mmst_reg,
- pub __fpu_stmm1: __darwin_mmst_reg,
- pub __fpu_stmm2: __darwin_mmst_reg,
- pub __fpu_stmm3: __darwin_mmst_reg,
- pub __fpu_stmm4: __darwin_mmst_reg,
- pub __fpu_stmm5: __darwin_mmst_reg,
- pub __fpu_stmm6: __darwin_mmst_reg,
- pub __fpu_stmm7: __darwin_mmst_reg,
- pub __fpu_xmm0: __darwin_xmm_reg,
- pub __fpu_xmm1: __darwin_xmm_reg,
- pub __fpu_xmm2: __darwin_xmm_reg,
- pub __fpu_xmm3: __darwin_xmm_reg,
- pub __fpu_xmm4: __darwin_xmm_reg,
- pub __fpu_xmm5: __darwin_xmm_reg,
- pub __fpu_xmm6: __darwin_xmm_reg,
- pub __fpu_xmm7: __darwin_xmm_reg,
- pub __fpu_xmm8: __darwin_xmm_reg,
- pub __fpu_xmm9: __darwin_xmm_reg,
- pub __fpu_xmm10: __darwin_xmm_reg,
- pub __fpu_xmm11: __darwin_xmm_reg,
- pub __fpu_xmm12: __darwin_xmm_reg,
- pub __fpu_xmm13: __darwin_xmm_reg,
- pub __fpu_xmm14: __darwin_xmm_reg,
- pub __fpu_xmm15: __darwin_xmm_reg,
- // this field is actually [u8; 96], but defining it with a bigger type
- // allows us to auto-implement traits for it since the length of the
- // array is less than 32
- __fpu_rsrv4: [u32; 24],
- pub __fpu_reserved1: ::c_int,
- }
-
- pub struct __darwin_mmst_reg {
- pub __mmst_reg: [::c_char; 10],
- pub __mmst_rsrv: [::c_char; 6],
- }
-
- pub struct __darwin_xmm_reg {
- pub __xmm_reg: [::c_char; 16],
- }
}
s_no_extra_traits! {
@@ -185,13 +112,6 @@ extern "C" {
}
cfg_if! {
- if #[cfg(libc_align)] {
- mod align;
- pub use self::align::*;
- }
-}
-
-cfg_if! {
if #[cfg(target_arch = "x86_64")] {
mod x86_64;
pub use self::x86_64::*;
diff --git a/src/unix/bsd/apple/b64/x86_64.rs b/src/unix/bsd/apple/b64/x86_64.rs
deleted file mode 100644
index f8bb4c8f99..0000000000
--- a/src/unix/bsd/apple/b64/x86_64.rs
+++ /dev/null
@@ -1,31 +0,0 @@
-s! {
- pub struct __darwin_mcontext64 {
- pub __es: ::__darwin_x86_exception_state64,
- pub __ss: __darwin_x86_thread_state64,
- pub __fs: ::__darwin_x86_float_state64,
- }
-
- pub struct __darwin_x86_thread_state64 {
- pub __rax: u64,
- pub __rbx: u64,
- pub __rcx: u64,
- pub __rdx: u64,
- pub __rdi: u64,
- pub __rsi: u64,
- pub __rbp: u64,
- pub __rsp: u64,
- pub __r8: u64,
- pub __r9: u64,
- pub __r10: u64,
- pub __r11: u64,
- pub __r12: u64,
- pub __r13: u64,
- pub __r14: u64,
- pub __r15: u64,
- pub __rip: u64,
- pub __rflags: u64,
- pub __cs: u64,
- pub __fs: u64,
- pub __gs: u64,
- }
-}
diff --git a/src/unix/bsd/apple/b64/x86_64/align.rs b/src/unix/bsd/apple/b64/x86_64/align.rs
new file mode 100644
index 0000000000..ca1fe1ce29
--- /dev/null
+++ b/src/unix/bsd/apple/b64/x86_64/align.rs
@@ -0,0 +1,7 @@
+s_no_extra_traits! {
+ #[allow(missing_debug_implementations)]
+ #[repr(align(16))]
+ pub struct max_align_t {
+ priv_: [f64; 2]
+ }
+}
diff --git a/src/unix/bsd/apple/b64/x86_64/mod.rs b/src/unix/bsd/apple/b64/x86_64/mod.rs
new file mode 100644
index 0000000000..078666658c
--- /dev/null
+++ b/src/unix/bsd/apple/b64/x86_64/mod.rs
@@ -0,0 +1,112 @@
+pub type boolean_t = ::c_uint;
+pub type mcontext_t = *mut __darwin_mcontext64;
+
+s! {
+ pub struct ucontext_t {
+ pub uc_onstack: ::c_int,
+ pub uc_sigmask: ::sigset_t,
+ pub uc_stack: ::stack_t,
+ pub uc_link: *mut ::ucontext_t,
+ pub uc_mcsize: usize,
+ pub uc_mcontext: mcontext_t,
+ }
+
+ pub struct __darwin_mcontext64 {
+ pub __es: __darwin_x86_exception_state64,
+ pub __ss: __darwin_x86_thread_state64,
+ pub __fs: __darwin_x86_float_state64,
+ }
+
+ pub struct __darwin_x86_exception_state64 {
+ pub __trapno: u16,
+ pub __cpu: u16,
+ pub __err: u32,
+ pub __faultvaddr: u64,
+ }
+
+ pub struct __darwin_x86_thread_state64 {
+ pub __rax: u64,
+ pub __rbx: u64,
+ pub __rcx: u64,
+ pub __rdx: u64,
+ pub __rdi: u64,
+ pub __rsi: u64,
+ pub __rbp: u64,
+ pub __rsp: u64,
+ pub __r8: u64,
+ pub __r9: u64,
+ pub __r10: u64,
+ pub __r11: u64,
+ pub __r12: u64,
+ pub __r13: u64,
+ pub __r14: u64,
+ pub __r15: u64,
+ pub __rip: u64,
+ pub __rflags: u64,
+ pub __cs: u64,
+ pub __fs: u64,
+ pub __gs: u64,
+ }
+
+ pub struct __darwin_x86_float_state64 {
+ pub __fpu_reserved: [::c_int; 2],
+ __fpu_fcw: ::c_short,
+ __fpu_fsw: ::c_short,
+ pub __fpu_ftw: u8,
+ pub __fpu_rsrv1: u8,
+ pub __fpu_fop: u16,
+ pub __fpu_ip: u32,
+ pub __fpu_cs: u16,
+ pub __fpu_rsrv2: u16,
+ pub __fpu_dp: u32,
+ pub __fpu_ds: u16,
+ pub __fpu_rsrv3: u16,
+ pub __fpu_mxcsr: u32,
+ pub __fpu_mxcsrmask: u32,
+ pub __fpu_stmm0: __darwin_mmst_reg,
+ pub __fpu_stmm1: __darwin_mmst_reg,
+ pub __fpu_stmm2: __darwin_mmst_reg,
+ pub __fpu_stmm3: __darwin_mmst_reg,
+ pub __fpu_stmm4: __darwin_mmst_reg,
+ pub __fpu_stmm5: __darwin_mmst_reg,
+ pub __fpu_stmm6: __darwin_mmst_reg,
+ pub __fpu_stmm7: __darwin_mmst_reg,
+ pub __fpu_xmm0: __darwin_xmm_reg,
+ pub __fpu_xmm1: __darwin_xmm_reg,
+ pub __fpu_xmm2: __darwin_xmm_reg,
+ pub __fpu_xmm3: __darwin_xmm_reg,
+ pub __fpu_xmm4: __darwin_xmm_reg,
+ pub __fpu_xmm5: __darwin_xmm_reg,
+ pub __fpu_xmm6: __darwin_xmm_reg,
+ pub __fpu_xmm7: __darwin_xmm_reg,
+ pub __fpu_xmm8: __darwin_xmm_reg,
+ pub __fpu_xmm9: __darwin_xmm_reg,
+ pub __fpu_xmm10: __darwin_xmm_reg,
+ pub __fpu_xmm11: __darwin_xmm_reg,
+ pub __fpu_xmm12: __darwin_xmm_reg,
+ pub __fpu_xmm13: __darwin_xmm_reg,
+ pub __fpu_xmm14: __darwin_xmm_reg,
+ pub __fpu_xmm15: __darwin_xmm_reg,
+ // this field is actually [u8; 96], but defining it with a bigger type
+ // allows us to auto-implement traits for it since the length of the
+ // array is less than 32
+ __fpu_rsrv4: [u32; 24],
+ pub __fpu_reserved1: ::c_int,
+ }
+
+ pub struct __darwin_mmst_reg {
+ pub __mmst_reg: [::c_char; 10],
+ pub __mmst_rsrv: [::c_char; 6],
+ }
+
+ pub struct __darwin_xmm_reg {
+ pub __xmm_reg: [::c_char; 16],
+ }
+}
+
+cfg_if! {
+ if #[cfg(libc_align)] {
+ mod align;
+ pub use self::align::*;
+ }
+}
diff --git a/src/unix/bsd/apple/mod.rs b/src/unix/bsd/apple/mod.rs
index 1808ff2ba8..581603920b 100644
--- a/src/unix/bsd/apple/mod.rs
+++ b/src/unix/bsd/apple/mod.rs
@@ -1907,6 +1907,9 @@ pub const PTHREAD_PROCESS_PRIVATE: ::c_int = 2;
pub const PTHREAD_PROCESS_SHARED: ::c_int = 1;
pub const PTHREAD_CREATE_JOINABLE: ::c_int = 1;
pub const PTHREAD_CREATE_DETACHED: ::c_int = 2;
+#[cfg(target_arch = "aarch64")]
+pub const PTHREAD_STACK_MIN: ::size_t = 16384;
+#[cfg(not(target_arch = "aarch64"))]
pub const PTHREAD_STACK_MIN: ::size_t = 8192;
pub const RLIMIT_CPU: ::c_int = 0;
@@ -2843,7 +2846,9 @@ pub const HW_L3CACHESIZE: ::c_int = 22;
pub const HW_TB_FREQ: ::c_int = 23;
pub const HW_MEMSIZE: ::c_int = 24;
pub const HW_AVAILCPU: ::c_int = 25;
-pub const HW_MAXID: ::c_int = 26;
+pub const HW_TARGET: ::c_int = 26;
+pub const HW_PRODUCT: ::c_int = 27;
+pub const HW_MAXID: ::c_int = 28;
pub const USER_CS_PATH: ::c_int = 1;
pub const USER_BC_BASE_MAX: ::c_int = 2;
pub const USER_BC_DIM_MAX: ::c_int = 3;
@@ -3129,6 +3134,9 @@ pub const SETALL: ::c_int = 9;
// sys/shm.h
pub const SHM_RDONLY: ::c_int = 0x1000;
pub const SHM_RND: ::c_int = 0x2000;
+#[cfg(target_arch = "aarch64")]
+pub const SHMLBA: ::c_int = 16 * 1024;
+#[cfg(not(target_arch = "aarch64"))]
pub const SHMLBA: ::c_int = 4096;
pub const SHM_R: ::c_int = IPC_R;
pub const SHM_W: ::c_int = IPC_W;
@@ -3273,7 +3281,7 @@ extern "C" {
pub fn setgrent();
#[doc(hidden)]
#[deprecated(since = "0.2.49", note = "Deprecated in MacOSX 10.5")]
- #[link_name = "daemon$1050"]
+ #[cfg_attr(not(target_arch = "aarch64"), link_name = "daemon$1050")]
pub fn daemon(nochdir: ::c_int, noclose: ::c_int) -> ::c_int;
#[doc(hidden)]
#[deprecated(since = "0.2.49", note = "Deprecated in MacOSX 10.10")]
@@ -3441,9 +3449,15 @@ extern "C" {
) -> ::c_int;
pub fn __error() -> *mut ::c_int;
pub fn backtrace(buf: *mut *mut ::c_void, sz: ::c_int) -> ::c_int;
- #[cfg_attr(target_os = "macos", link_name = "statfs$INODE64")]
+ #[cfg_attr(
+ all(target_os = "macos", not(target_arch = "aarch64")),
+ link_name = "statfs$INODE64"
+ )]
pub fn statfs(path: *const ::c_char, buf: *mut statfs) -> ::c_int;
- #[cfg_attr(target_os = "macos", link_name = "fstatfs$INODE64")]
+ #[cfg_attr(
+ all(target_os = "macos", not(target_arch = "aarch64")),
+ link_name = "fstatfs$INODE64"
+ )]
pub fn fstatfs(fd: ::c_int, buf: *mut statfs) -> ::c_int;
pub fn kevent(
kq: ::c_int,
diff --git a/src/unix/bsd/freebsdlike/dragonfly/mod.rs b/src/unix/bsd/freebsdlike/dragonfly/mod.rs
index 0548a3bf4a..641fb89235 100644
--- a/src/unix/bsd/freebsdlike/dragonfly/mod.rs
+++ b/src/unix/bsd/freebsdlike/dragonfly/mod.rs
@@ -1081,6 +1081,27 @@ extern "C" {
) -> *mut ::c_void;
}
+#[link(name = "rt")]
+extern "C" {
+ pub fn aio_cancel(fd: ::c_int, aiocbp: *mut aiocb) -> ::c_int;
+ pub fn aio_error(aiocbp: *const aiocb) -> ::c_int;
+ pub fn aio_fsync(op: ::c_int, aiocbp: *mut aiocb) -> ::c_int;
+ pub fn aio_read(aiocbp: *mut aiocb) -> ::c_int;
+ pub fn aio_return(aiocbp: *mut aiocb) -> ::ssize_t;
+ pub fn aio_suspend(
+ aiocb_list: *const *const aiocb,
+ nitems: ::c_int,
+ timeout: *const ::timespec,
+ ) -> ::c_int;
+ pub fn aio_write(aiocbp: *mut aiocb) -> ::c_int;
+ pub fn lio_listio(
+ mode: ::c_int,
+ aiocb_list: *const *mut aiocb,
+ nitems: ::c_int,
+ sevp: *mut sigevent,
+ ) -> ::c_int;
+}
+
cfg_if! {
if #[cfg(libc_thread_local)] {
mod errno;
diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs
index 89729a8162..e7cd9e4f76 100644
--- a/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs
+++ b/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs
@@ -200,6 +200,8 @@ pub const F_SEAL_WRITE: ::c_int = 0x0008;
pub const GRND_NONBLOCK: ::c_uint = 0x1;
pub const GRND_RANDOM: ::c_uint = 0x2;
+pub const SO_DOMAIN: ::c_int = 0x1019;
+
cfg_if! {
if #[cfg(not(freebsd13))] {
pub const ELAST: ::c_int = 96;
@@ -237,7 +239,7 @@ extern "C" {
pub fn getrandom(
buf: *mut ::c_void,
buflen: ::size_t,
- flags: ::c_uint
+ flags: ::c_uint,
) -> ::ssize_t;
}
diff --git a/src/unix/bsd/freebsdlike/freebsd/mod.rs b/src/unix/bsd/freebsdlike/freebsd/mod.rs
index 6a7cc49a50..edb2b29ab9 100644
--- a/src/unix/bsd/freebsdlike/freebsd/mod.rs
+++ b/src/unix/bsd/freebsdlike/freebsd/mod.rs
@@ -1210,6 +1210,18 @@ safe_f! {
extern "C" {
pub fn __error() -> *mut ::c_int;
+ pub fn aio_cancel(fd: ::c_int, aiocbp: *mut aiocb) -> ::c_int;
+ pub fn aio_error(aiocbp: *const aiocb) -> ::c_int;
+ pub fn aio_fsync(op: ::c_int, aiocbp: *mut aiocb) -> ::c_int;
+ pub fn aio_read(aiocbp: *mut aiocb) -> ::c_int;
+ pub fn aio_return(aiocbp: *mut aiocb) -> ::ssize_t;
+ pub fn aio_suspend(
+ aiocb_list: *const *const aiocb,
+ nitems: ::c_int,
+ timeout: *const ::timespec,
+ ) -> ::c_int;
+ pub fn aio_write(aiocbp: *mut aiocb) -> ::c_int;
+
pub fn extattr_delete_fd(
fd: ::c_int,
attrnamespace: ::c_int,
@@ -1300,6 +1312,13 @@ extern "C" {
flags: ::c_int,
) -> ::c_int;
+ pub fn lio_listio(
+ mode: ::c_int,
+ aiocb_list: *const *mut aiocb,
+ nitems: ::c_int,
+ sevp: *mut sigevent,
+ ) -> ::c_int;
+
pub fn posix_fallocate(
fd: ::c_int,
offset: ::off_t,
diff --git a/src/unix/bsd/freebsdlike/mod.rs b/src/unix/bsd/freebsdlike/mod.rs
index a51511b466..d126391f31 100644
--- a/src/unix/bsd/freebsdlike/mod.rs
+++ b/src/unix/bsd/freebsdlike/mod.rs
@@ -1393,12 +1393,6 @@ extern "C" {
timeout: *const ::timespec,
) -> ::c_int;
pub fn lchflags(path: *const ::c_char, flags: ::c_ulong) -> ::c_int;
- pub fn lio_listio(
- mode: ::c_int,
- aiocb_list: *const *mut aiocb,
- nitems: ::c_int,
- sevp: *mut sigevent,
- ) -> ::c_int;
pub fn lutimes(file: *const ::c_char, times: *const ::timeval) -> ::c_int;
pub fn memrchr(
cx: *const ::c_void,
@@ -1603,17 +1597,6 @@ extern "C" {
#[link(name = "rt")]
extern "C" {
- pub fn aio_read(aiocbp: *mut aiocb) -> ::c_int;
- pub fn aio_write(aiocbp: *mut aiocb) -> ::c_int;
- pub fn aio_fsync(op: ::c_int, aiocbp: *mut aiocb) -> ::c_int;
- pub fn aio_error(aiocbp: *const aiocb) -> ::c_int;
- pub fn aio_return(aiocbp: *mut aiocb) -> ::ssize_t;
- pub fn aio_suspend(
- aiocb_list: *const *const aiocb,
- nitems: ::c_int,
- timeout: *const ::timespec,
- ) -> ::c_int;
- pub fn aio_cancel(fd: ::c_int, aiocbp: *mut aiocb) -> ::c_int;
pub fn mq_close(mqd: ::mqd_t) -> ::c_int;
pub fn mq_getattr(mqd: ::mqd_t, attr: *mut ::mq_attr) -> ::c_int;
pub fn mq_notify(mqd: ::mqd_t, notification: *const ::sigevent)
diff --git a/src/unix/bsd/mod.rs b/src/unix/bsd/mod.rs
index 1744d8de1a..caab1866fe 100644
--- a/src/unix/bsd/mod.rs
+++ b/src/unix/bsd/mod.rs
@@ -632,7 +632,10 @@ extern "C" {
egid: *mut ::gid_t,
) -> ::c_int;
- #[cfg_attr(target_os = "macos", link_name = "glob$INODE64")]
+ #[cfg_attr(
+ all(target_os = "macos", not(target_arch = "aarch64")),
+ link_name = "glob$INODE64")
+ ]
#[cfg_attr(target_os = "netbsd", link_name = "__glob30")]
#[cfg_attr(
all(target_os = "freebsd", any(freebsd11, freebsd10)),
diff --git a/src/unix/linux_like/linux/align.rs b/src/unix/linux_like/linux/align.rs
index 8bf6895944..11f5504a5a 100644
--- a/src/unix/linux_like/linux/align.rs
+++ b/src/unix/linux_like/linux/align.rs
@@ -116,6 +116,29 @@ macro_rules! expand_align {
pub struct pthread_rwlock_t {
size: [u8; ::__SIZEOF_PTHREAD_RWLOCK_T],
}
+
+ // linux/can.h
+ #[repr(align(8))]
+ #[allow(missing_debug_implementations)]
+ pub struct can_frame {
+ pub can_id: canid_t,
+ pub can_dlc: u8,
+ __pad: u8,
+ __res0: u8,
+ __res1: u8,
+ pub data: [u8; CAN_MAX_DLEN],
+ }
+
+ #[repr(align(8))]
+ #[allow(missing_debug_implementations)]
+ pub struct canfd_frame {
+ pub can_id: canid_t,
+ pub len: u8,
+ pub flags: u8,
+ __res0: u8,
+ __res1: u8,
+ pub data: [u8; CANFD_MAX_DLEN],
+ }
}
};
}
diff --git a/src/unix/linux_like/linux/mod.rs b/src/unix/linux_like/linux/mod.rs
index 90face2e95..60f78dfed2 100644
--- a/src/unix/linux_like/linux/mod.rs
+++ b/src/unix/linux_like/linux/mod.rs
@@ -36,6 +36,10 @@ pub type Elf64_Sxword = i64;
pub type Elf32_Section = u16;
pub type Elf64_Section = u16;
+// linux/can.h
+pub type canid_t = u32;
+pub type can_err_mask_t = u32;
+
#[cfg_attr(feature = "extra_traits", derive(Debug))]
pub enum fpos64_t {} // FIXME: fill this out with a struct
impl ::Copy for fpos64_t {}
@@ -504,6 +508,23 @@ s! {
pub ee_info: u32,
pub ee_data: u32,
}
+
+ // linux/can.h
+ pub struct __c_anonymous_sockaddr_can_tp {
+ pub rx_id: canid_t,
+ pub tx_id: canid_t,
+ }
+
+ pub struct __c_anonymous_sockaddr_can_j1939 {
+ pub name: u64,
+ pub pgn: u32,
+ pub addr: u8,
+ }
+
+ pub struct can_filter {
+ pub can_id: canid_t,
+ pub can_mask: canid_t,
+ }
}
s_no_extra_traits! {
@@ -578,6 +599,26 @@ s_no_extra_traits! {
}
cfg_if! {
+ if #[cfg(libc_union)] {
+ s_no_extra_traits! {
+ // linux/can.h
+ #[allow(missing_debug_implementations)]
+ pub union __c_anonymous_sockaddr_can_can_addr {
+ pub tp: __c_anonymous_sockaddr_can_tp,
+ pub j1939: __c_anonymous_sockaddr_can_j1939,
+ }
+
+ #[allow(missing_debug_implementations)]
+ pub struct sockaddr_can {
+ pub can_family: ::sa_family_t,
+ pub can_ifindex: ::c_int,
+ pub can_addr: __c_anonymous_sockaddr_can_can_addr,
+ }
+ }
+ }
+}
+
+cfg_if! {
if #[cfg(feature = "extra_traits")] {
impl PartialEq for sockaddr_nl {
fn eq(&self, other: &sockaddr_nl) -> bool {
@@ -1191,6 +1232,23 @@ pub const IFLA_PHYS_SWITCH_ID: ::c_ushort = 36;
pub const IFLA_LINK_NETNSID: ::c_ushort = 37;
pub const IFLA_PHYS_PORT_NAME: ::c_ushort = 38;
pub const IFLA_PROTO_DOWN: ::c_ushort = 39;
+pub const IFLA_GSO_MAX_SEGS: ::c_ushort = 40;
+pub const IFLA_GSO_MAX_SIZE: ::c_ushort = 41;
+pub const IFLA_PAD: ::c_ushort = 42;
+pub const IFLA_XDP: ::c_ushort = 43;
+pub const IFLA_EVENT: ::c_ushort = 44;
+pub const IFLA_NEW_NETNSID: ::c_ushort = 45;
+pub const IFLA_IF_NETNSID: ::c_ushort = 46;
+pub const IFLA_TARGET_NETNSID: ::c_ushort = IFLA_IF_NETNSID;
+pub const IFLA_CARRIER_UP_COUNT: ::c_ushort = 47;
+pub const IFLA_CARRIER_DOWN_COUNT: ::c_ushort = 48;
+pub const IFLA_NEW_IFINDEX: ::c_ushort = 49;
+pub const IFLA_MIN_MTU: ::c_ushort = 50;
+pub const IFLA_MAX_MTU: ::c_ushort = 51;
+pub const IFLA_PROP_LIST: ::c_ushort = 52;
+pub const IFLA_ALT_IFNAME: ::c_ushort = 53;
+pub const IFLA_PERM_ADDRESS: ::c_ushort = 54;
+pub const IFLA_PROTO_DOWN_REASON: ::c_ushort = 55;
pub const IFLA_INFO_UNSPEC: ::c_ushort = 0;
pub const IFLA_INFO_KIND: ::c_ushort = 1;
@@ -2567,6 +2625,46 @@ pub const EDOM: ::c_int = 33;
pub const ERANGE: ::c_int = 34;
pub const EWOULDBLOCK: ::c_int = EAGAIN;
+// linux/can.h
+pub const CAN_EFF_FLAG: canid_t = 0x80000000;
+pub const CAN_RTR_FLAG: canid_t = 0x40000000;
+pub const CAN_ERR_FLAG: canid_t = 0x20000000;
+pub const CAN_SFF_MASK: canid_t = 0x000007FF;
+pub const CAN_EFF_MASK: canid_t = 0x1FFFFFFF;
+pub const CAN_ERR_MASK: canid_t = 0x1FFFFFFF;
+
+pub const CAN_SFF_ID_BITS: ::c_int = 11;
+pub const CAN_EFF_ID_BITS: ::c_int = 29;
+
+pub const CAN_MAX_DLC: ::c_int = 8;
+pub const CAN_MAX_DLEN: usize = 8;
+pub const CANFD_MAX_DLC: ::c_int = 15;
+pub const CANFD_MAX_DLEN: usize = 64;
+
+pub const CANFD_BRS: ::c_int = 0x01;
+pub const CANFD_ESI: ::c_int = 0x02;
+
+cfg_if! {
+ if #[cfg(libc_align)] {
+ pub const CAN_MTU: usize = ::mem::size_of::<can_frame>();
+ pub const CANFD_MTU: usize = ::mem::size_of::<canfd_frame>();
+ }
+}
+
+pub const CAN_RAW: ::c_int = 1;
+pub const CAN_BCM: ::c_int = 2;
+pub const CAN_TP16: ::c_int = 3;
+pub const CAN_TP20: ::c_int = 4;
+pub const CAN_MCNET: ::c_int = 5;
+pub const CAN_ISOTP: ::c_int = 6;
+pub const CAN_J1939: ::c_int = 7;
+pub const CAN_NPROTO: ::c_int = 8;
+
+pub const SOL_CAN_BASE: ::c_int = 100;
+
+pub const CAN_INV_FILTER: canid_t = 0x20000000;
+pub const CAN_RAW_FILTER_MAX: ::c_int = 512;
+
f! {
pub fn NLA_ALIGN(len: ::c_int) -> ::c_int {
return ((len) + NLA_ALIGNTO - 1) & !(NLA_ALIGNTO - 1)
diff --git a/src/unix/uclibc/mips/mod.rs b/src/unix/uclibc/mips/mod.rs
index 6a9b41c9f0..de76971ae3 100644
--- a/src/unix/uclibc/mips/mod.rs
+++ b/src/unix/uclibc/mips/mod.rs
@@ -28,6 +28,8 @@ pub const SA_RESETHAND: ::c_int = 0x80000000;
pub const SA_RESTART: ::c_int = 0x10000000;
pub const SA_NOCLDSTOP: ::c_int = 0x00000001;
+pub const EPOLLEXCLUSIVE: ::c_int = 0x10000000; // from linux/mod.rs
+pub const EPOLLWAKEUP: ::c_int = 0x20000000; // from linux/other/mod.rs
pub const EPOLL_CLOEXEC: ::c_int = 0x80000;
pub const EFD_CLOEXEC: ::c_int = 0x80000;