diff options
author | Mark Drobnak <mark.drobnak@gmail.com> | 2022-03-13 17:30:01 -0700 |
---|---|---|
committer | Mark Drobnak <mark.drobnak@gmail.com> | 2022-03-13 17:30:01 -0700 |
commit | b61fe73f3fbf820bafa06e841dda1b803cb7b5dd (patch) | |
tree | 43b1419f0e07333bd331fb137261326fd16958e2 | |
parent | c8208666bfe219bf28d4e900054c04a3697a4f3b (diff) | |
parent | 55cc85ff7f61e4f11b260ecb68b366818dc4bbe0 (diff) | |
download | rust-libc-b61fe73f3fbf820bafa06e841dda1b803cb7b5dd.tar.gz |
Merge remote-tracking branch 'rust-lang/master' into horizon-getrandom-and-fixes
# Conflicts:
# src/unix/mod.rs
# src/unix/newlib/horizon/mod.rs
25 files changed, 241 insertions, 15 deletions
diff --git a/libc-test/build.rs b/libc-test/build.rs index 0496910ef2..ceb3c0a313 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -2921,6 +2921,8 @@ fn test_linux(target: &str) { "asm/mman.h", "linux/can.h", "linux/can/raw.h", + // FIXME: requires kernel headers >= 5.4.1. + [!musl]: "linux/can/j1939.h", "linux/dccp.h", "linux/errqueue.h", "linux/falloc.h", @@ -3046,6 +3048,11 @@ fn test_linux(target: &str) { // For internal use only, to define architecture specific ioctl constants with a libc specific type. "Ioctl" => true, + // FIXME: requires >= 5.4.1 kernel headers + "pgn_t" if musl => true, + "priority_t" if musl => true, + "name_t" if musl => true, + _ => false, } }); @@ -3107,6 +3114,9 @@ fn test_linux(target: &str) { // Might differ between kernel versions "open_how" => true, + // FIXME: requires >= 5.4.1 kernel headers + "j1939_filter" if musl => true, + _ => false, } }); @@ -3141,6 +3151,12 @@ fn test_linux(target: &str) { || name.starts_with("TCP_") || name.starts_with("UINPUT_") || name.starts_with("VMADDR_") + // FIXME: Requires >= 5.4.1 kernel headers + || name.starts_with("J1939") + // FIXME: Requires >= 5.4.1 kernel headers + || name.starts_with("SO_J1939") + // FIXME: Requires >= 5.4.1 kernel headers + || name.starts_with("SCM_J1939") { return true; } @@ -3237,6 +3253,18 @@ fn test_linux(target: &str) { | "CAN_RAW_FILTER_MAX" | "CAN_NPROTO" => true, + // FIXME: Requires recent kernel headers (5.15) + | "J1939_NLA_TOTAL_SIZE" + | "J1939_NLA_PGN" + | "J1939_NLA_SRC_NAME" + | "J1939_NLA_DEST_NAME" + | "J1939_NLA_SRC_ADDR" + | "J1939_NLA_DEST_ADDR" + | "J1939_EE_INFO_RX_RTS" + | "J1939_EE_INFO_RX_DPO" + | "J1939_EE_INFO_RX_ABORT" + | "SOL_CAN_J1939" => true, + // FIXME: Requires recent kernel headers (5.8): "STATX_MNT_ID" => true, @@ -3649,6 +3677,7 @@ fn test_haiku(target: &str) { let mut cfg = ctest_cfg(); cfg.flag("-Wno-deprecated-declarations"); cfg.define("__USE_GNU", Some("1")); + cfg.define("_GNU_SOURCE", None); // POSIX API headers! { cfg: @@ -3751,6 +3780,7 @@ fn test_haiku(target: &str) { "uchar.h", "unistd.h", "utime.h", + "utmpx.h", "wchar.h", "wchar_t.h", "wctype.h" @@ -3758,6 +3788,9 @@ fn test_haiku(target: &str) { // BSD Extensions headers! { cfg: + "ifaddrs.h", + "libutil.h", + "link.h", "pty.h", } @@ -3803,6 +3836,11 @@ fn test_haiku(target: &str) { // with mem::zeroed(), so skip the automated test "image_info" | "thread_info" => true, + "Elf64_Phdr" => true, + + // is an union + "cpuid_info" => true, + _ => false, } }); @@ -3839,6 +3877,8 @@ fn test_haiku(target: &str) { // translated into a struct argument "find_path" => true, + "get_cpuid" => true, + _ => false, } }); diff --git a/libc-test/semver/linux.txt b/libc-test/semver/linux.txt index 932b84e2a5..9eb096efe8 100644 --- a/libc-test/semver/linux.txt +++ b/libc-test/semver/linux.txt @@ -988,6 +988,24 @@ ITIMER_PROF ITIMER_REAL ITIMER_VIRTUAL IUTF8 +J1939_IDLE_ADDR +J1939_MAX_UNICAST_ADDR +J1939_NLA_BYTES_ACKED +J1939_NLA_DEST_ADDR +J1939_NLA_DEST_NAME +J1939_NLA_PAD +J1939_NLA_PGN +J1939_NLA_SRC_ADDR +J1939_NLA_SRC_NAME +J1939_NLA_TOTAL_SIZE +J1939_NO_ADDR +J1939_NO_NAME +J1939_NO_PGN +J1939_PGN_ADDRESS_CLAIMED +J1939_PGN_ADDRESS_COMMANDED +J1939_PGN_MAX +J1939_PGN_PDU1_MAX +J1939_PGN_REQUEST KEYCTL_ASSUME_AUTHORITY KEYCTL_CHOWN KEYCTL_CLEAR @@ -1947,6 +1965,10 @@ SCHED_RESET_ON_FORK SCHED_RR SCM_CREDENTIALS SCM_RIGHTS +SCM_J1939_DEST_ADDR +SCM_J1939_DEST_NAME +SCM_J1939_ERRQUEUE +SCM_J1939_PRIO SCM_TIMESTAMP SCM_TIMESTAMPING SECCOMP_FILTER_FLAG_LOG @@ -2049,6 +2071,7 @@ SOL_ALG SOL_ATM SOL_BLUETOOTH SOL_CAN_BASE +SOL_CAN_J1939 SOL_CAN_RAW SOL_DCCP SOL_DECNET @@ -2075,6 +2098,10 @@ SO_EE_ORIGIN_NONE SO_EE_ORIGIN_TIMESTAMPING SO_EE_ORIGIN_TXSTATUS SO_MARK +SO_J1939_ERRQUEUE +SO_J1939_FILTER +SO_J1939_PROMISC +SO_J1939_SEND_PRIO SO_ORIGINAL_DST SO_PASSCRED SO_PASSSEC @@ -2801,6 +2828,7 @@ ip_mreqn ip_mreq_source ipc_perm itimerspec +j1939_filter key_t killpg labs @@ -2854,6 +2882,7 @@ msgqnum_t msgrcv msgsnd msqid_ds +name_t newlocale nice nl_item @@ -2872,6 +2901,7 @@ openpty packet_mreq pause personality +pgn_t pipe2 popen posix_fadvise @@ -2904,6 +2934,7 @@ posix_spawnattr_t posix_spawnp ppoll prctl +priority_t pread64 preadv pthread_attr_getguardsize diff --git a/libc-test/semver/openbsd.txt b/libc-test/semver/openbsd.txt index 73f5b37540..c8b55d626c 100644 --- a/libc-test/semver/openbsd.txt +++ b/libc-test/semver/openbsd.txt @@ -156,6 +156,7 @@ ENOTBLK ENOMEDIUM ENOTRECOVERABLE ENOTSUP +ENTER EOF EOWNERDEAD EPROCLIM @@ -189,6 +190,7 @@ EV_SYSFLAGS EXTA EXTB EXTPROC +FIND Elf32_Addr Elf32_Half Elf32_Lword @@ -993,6 +995,9 @@ getthrid glob glob_t globfree +hcreate +hdestroy +hsearch id_t if_data if_freenameindex diff --git a/src/solid/mod.rs b/src/solid/mod.rs index 670e430f12..f0f2ae89bd 100644 --- a/src/solid/mod.rs +++ b/src/solid/mod.rs @@ -535,8 +535,8 @@ extern "C" { pub fn strtod_l(arg1: *const c_char, arg2: *mut *mut c_char, arg3: locale_t) -> f64; pub fn strtof_l(arg1: *const c_char, arg2: *mut *mut c_char, arg3: locale_t) -> f32; pub fn strtold_l(arg1: *const c_char, arg2: *mut *mut c_char, arg3: locale_t) -> f64; - pub fn _Exit(arg1: c_int); - pub fn abort(); + pub fn _Exit(arg1: c_int) -> !; + pub fn abort() -> !; pub fn abs(arg1: c_int) -> c_int; pub fn atexit(arg1: ::Option<unsafe extern "C" fn()>) -> c_int; pub fn atoi(arg1: *const c_char) -> c_int; @@ -553,7 +553,7 @@ extern "C" { ) -> *mut c_void; pub fn calloc(arg1: size_t, arg2: size_t) -> *mut c_void; pub fn div(arg1: c_int, arg2: c_int) -> div_t; - pub fn exit(arg1: c_int); + pub fn exit(arg1: c_int) -> !; pub fn free(arg1: *mut c_void); pub fn getenv(arg1: *const c_char) -> *mut c_char; pub fn labs(arg1: c_long) -> c_long; diff --git a/src/unix/bsd/netbsdlike/openbsd/mod.rs b/src/unix/bsd/netbsdlike/openbsd/mod.rs index 7717801103..b2b37e4a97 100644 --- a/src/unix/bsd/netbsdlike/openbsd/mod.rs +++ b/src/unix/bsd/netbsdlike/openbsd/mod.rs @@ -35,6 +35,11 @@ pub type Elf64_Sxword = i64; pub type Elf64_Word = u32; pub type Elf64_Xword = u64; +// search.h + +pub type ENTRY = entry; +pub type ACTION = ::c_uint; + cfg_if! { if #[cfg(target_pointer_width = "64")] { type Elf_Addr = Elf64_Addr; @@ -423,6 +428,12 @@ s! { pub struct ptrace_thread_state { pub pts_tid: ::pid_t, } + + // search.h + pub struct entry { + pub key: *mut ::c_char, + pub data: *mut ::c_void, + } } impl siginfo_t { @@ -1471,6 +1482,10 @@ pub const PTRACE_FORK: ::c_int = 0x0002; pub const WCONTINUED: ::c_int = 8; +// search.h +pub const FIND: ::ACTION = 0; +pub const ENTER: ::ACTION = 1; + const_fn! { {const} fn _ALIGN(p: usize) -> usize { (p + _ALIGNBYTES) & !_ALIGNBYTES @@ -1652,6 +1667,9 @@ extern "C" { width: ::size_t, compar: ::Option<unsafe extern "C" fn(*const ::c_void, *const ::c_void) -> ::c_int>, ) -> *mut ::c_void; + pub fn hcreate(nelt: ::size_t) -> ::c_int; + pub fn hdestroy(); + pub fn hsearch(entry: ::ENTRY, action: ::ACTION) -> *mut ::ENTRY; } #[link(name = "execinfo")] diff --git a/src/unix/haiku/mod.rs b/src/unix/haiku/mod.rs index 3c2846eaf8..d0a835bc1f 100644 --- a/src/unix/haiku/mod.rs +++ b/src/unix/haiku/mod.rs @@ -33,14 +33,12 @@ pub type fd_mask = u32; pub type Elf32_Addr = u32; pub type Elf32_Half = u16; -pub type Elf32_Lword = u64; pub type Elf32_Off = u32; pub type Elf32_Sword = i32; pub type Elf32_Word = u32; pub type Elf64_Addr = u64; pub type Elf64_Half = u16; -pub type Elf64_Lword = u64; pub type Elf64_Off = u64; pub type Elf64_Sword = i32; pub type Elf64_Sxword = i64; @@ -120,12 +118,12 @@ s! { pub struct ifaddrs { pub ifa_next: *mut ifaddrs, - pub ifa_name: *mut ::c_char, + pub ifa_name: *const ::c_char, pub ifa_flags: ::c_uint, pub ifa_addr: *mut ::sockaddr, pub ifa_netmask: *mut ::sockaddr, pub ifa_dstaddr: *mut ::sockaddr, - pub ida_data: *mut ::c_void, + pub ifa_data: *mut ::c_void, } pub struct fd_set { @@ -1530,7 +1528,12 @@ extern "C" { ) -> ::c_int; pub fn getspent() -> *mut spwd; - pub fn getspent_r(pwd: *mut spwd, buf: *mut ::c_char, bufferSize: ::size_t) -> ::c_int; + pub fn getspent_r( + pwd: *mut spwd, + buf: *mut ::c_char, + bufferSize: ::size_t, + res: *mut *mut spwd, + ) -> ::c_int; pub fn setspent(); pub fn endspent(); pub fn getspnam(name: *const ::c_char) -> *mut spwd; diff --git a/src/unix/haiku/native.rs b/src/unix/haiku/native.rs index 765dc4e8b3..b25da2b863 100644 --- a/src/unix/haiku/native.rs +++ b/src/unix/haiku/native.rs @@ -879,7 +879,7 @@ extern "C" { pub fn rename_thread(thread: thread_id, newName: *const ::c_char) -> status_t; pub fn set_thread_priority(thread: thread_id, newPriority: i32) -> status_t; pub fn suggest_thread_priority( - task_flags: be_task_flags, + what: u32, period: i32, jitter: ::bigtime_t, length: ::bigtime_t, @@ -936,8 +936,6 @@ extern "C" { pub fn debugger(message: *const ::c_char); pub fn disable_debugger(state: ::c_int) -> ::c_int; - pub fn get_cpuid(info: *mut cpuid_info, eaxRegister: u32, cpuNum: u32) -> status_t; - pub fn get_system_info(info: *mut system_info) -> status_t; pub fn get_cpu_info(firstCPU: u32, cpuCount: u32, info: *mut cpu_info) -> status_t; pub fn is_computer_on() -> i32; @@ -1084,6 +1082,14 @@ extern "C" { ) -> status_t; } +cfg_if! { + if #[cfg(libc_union)] { + extern "C" { + pub fn get_cpuid(info: *mut cpuid_info, eaxRegister: u32, cpuNum: u32) -> status_t; + } + } +} + // The following functions are defined as macros in C/C++ pub unsafe fn get_area_info(id: area_id, info: *mut area_info) -> status_t { _get_area_info(id, info, core::mem::size_of::<area_info>() as usize) diff --git a/src/unix/linux_like/linux/gnu/b32/arm/mod.rs b/src/unix/linux_like/linux/gnu/b32/arm/mod.rs index bf96954fc3..2a064974d4 100644 --- a/src/unix/linux_like/linux/gnu/b32/arm/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/arm/mod.rs @@ -815,6 +815,7 @@ pub const SYS_pkey_mprotect: ::c_long = 394; pub const SYS_pkey_alloc: ::c_long = 395; pub const SYS_pkey_free: ::c_long = 396; pub const SYS_statx: ::c_long = 397; +pub const SYS_rseq: ::c_long = 398; pub const SYS_pidfd_send_signal: ::c_long = 424; pub const SYS_io_uring_setup: ::c_long = 425; pub const SYS_io_uring_enter: ::c_long = 426; diff --git a/src/unix/linux_like/linux/gnu/b32/mips/mod.rs b/src/unix/linux_like/linux/gnu/b32/mips/mod.rs index 49bf1596ad..eb3886fbcd 100644 --- a/src/unix/linux_like/linux/gnu/b32/mips/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/mips/mod.rs @@ -516,6 +516,7 @@ pub const SYS_pkey_mprotect: ::c_long = 4000 + 363; pub const SYS_pkey_alloc: ::c_long = 4000 + 364; pub const SYS_pkey_free: ::c_long = 4000 + 365; pub const SYS_statx: ::c_long = 4000 + 366; +pub const SYS_rseq: ::c_long = 4000 + 367; pub const SYS_pidfd_send_signal: ::c_long = 4000 + 424; pub const SYS_io_uring_setup: ::c_long = 4000 + 425; pub const SYS_io_uring_enter: ::c_long = 4000 + 426; diff --git a/src/unix/linux_like/linux/gnu/b32/powerpc.rs b/src/unix/linux_like/linux/gnu/b32/powerpc.rs index 193a330615..ad45c607f9 100644 --- a/src/unix/linux_like/linux/gnu/b32/powerpc.rs +++ b/src/unix/linux_like/linux/gnu/b32/powerpc.rs @@ -794,6 +794,7 @@ pub const SYS_preadv2: ::c_long = 380; pub const SYS_pwritev2: ::c_long = 381; pub const SYS_kexec_file_load: ::c_long = 382; pub const SYS_statx: ::c_long = 383; +pub const SYS_rseq: ::c_long = 387; pub const SYS_pidfd_send_signal: ::c_long = 424; pub const SYS_io_uring_setup: ::c_long = 425; pub const SYS_io_uring_enter: ::c_long = 426; diff --git a/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs b/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs index acb3089b61..def90d6d19 100644 --- a/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs @@ -198,6 +198,7 @@ s! { } } +pub const O_LARGEFILE: ::c_int = 0; pub const VEOF: usize = 4; pub const RTLD_DEEPBIND: ::c_int = 0x8; pub const RTLD_GLOBAL: ::c_int = 0x100; @@ -737,6 +738,7 @@ pub const SYS_pkey_mprotect: ::c_long = 288; pub const SYS_pkey_alloc: ::c_long = 289; pub const SYS_pkey_free: ::c_long = 290; pub const SYS_statx: ::c_long = 291; +pub const SYS_rseq: ::c_long = 293; pub const SYS_pidfd_send_signal: ::c_long = 424; pub const SYS_io_uring_setup: ::c_long = 425; pub const SYS_io_uring_enter: ::c_long = 426; diff --git a/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs b/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs index 27388327aa..5dd2302dbf 100644 --- a/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs @@ -818,6 +818,7 @@ pub const SYS_copy_file_range: ::c_long = 357; pub const SYS_preadv2: ::c_long = 358; pub const SYS_pwritev2: ::c_long = 359; pub const SYS_statx: ::c_long = 360; +pub const SYS_rseq: ::c_long = 365; pub const SYS_pidfd_send_signal: ::c_long = 424; pub const SYS_io_uring_setup: ::c_long = 425; pub const SYS_io_uring_enter: ::c_long = 426; diff --git a/src/unix/linux_like/linux/gnu/b32/x86/mod.rs b/src/unix/linux_like/linux/gnu/b32/x86/mod.rs index 557147bce0..e42e9ebd6e 100644 --- a/src/unix/linux_like/linux/gnu/b32/x86/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/x86/mod.rs @@ -1020,6 +1020,7 @@ pub const SYS_pkey_mprotect: ::c_long = 380; pub const SYS_pkey_alloc: ::c_long = 381; pub const SYS_pkey_free: ::c_long = 382; pub const SYS_statx: ::c_long = 383; +pub const SYS_rseq: ::c_long = 386; pub const SYS_pidfd_send_signal: ::c_long = 424; pub const SYS_io_uring_setup: ::c_long = 425; pub const SYS_io_uring_enter: ::c_long = 426; diff --git a/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs b/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs index f3aa68a9cd..5cc0a5a490 100644 --- a/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs @@ -849,6 +849,7 @@ pub const SYS_pkey_mprotect: ::c_long = 288; pub const SYS_pkey_alloc: ::c_long = 289; pub const SYS_pkey_free: ::c_long = 290; pub const SYS_statx: ::c_long = 291; +pub const SYS_rseq: ::c_long = 293; pub const SYS_pidfd_send_signal: ::c_long = 424; pub const SYS_io_uring_setup: ::c_long = 425; pub const SYS_io_uring_enter: ::c_long = 426; diff --git a/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs b/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs index 1e2acb6373..cac215dc43 100644 --- a/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs @@ -567,6 +567,7 @@ pub const SYS_pkey_mprotect: ::c_long = 5000 + 323; pub const SYS_pkey_alloc: ::c_long = 5000 + 324; pub const SYS_pkey_free: ::c_long = 5000 + 325; pub const SYS_statx: ::c_long = 5000 + 326; +pub const SYS_rseq: ::c_long = 5000 + 327; pub const SYS_pidfd_send_signal: ::c_long = 5000 + 424; pub const SYS_io_uring_setup: ::c_long = 5000 + 425; pub const SYS_io_uring_enter: ::c_long = 5000 + 426; diff --git a/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs b/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs index 491a079419..b5c2687061 100644 --- a/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs @@ -928,6 +928,7 @@ pub const SYS_preadv2: ::c_long = 380; pub const SYS_pwritev2: ::c_long = 381; pub const SYS_kexec_file_load: ::c_long = 382; pub const SYS_statx: ::c_long = 383; +pub const SYS_rseq: ::c_long = 387; pub const SYS_pidfd_send_signal: ::c_long = 424; pub const SYS_io_uring_setup: ::c_long = 425; pub const SYS_io_uring_enter: ::c_long = 426; diff --git a/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs b/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs index e8cd135e17..f8073902a7 100644 --- a/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs @@ -777,6 +777,7 @@ pub const SYS_pkey_mprotect: ::c_long = 288; pub const SYS_pkey_alloc: ::c_long = 289; pub const SYS_pkey_free: ::c_long = 290; pub const SYS_statx: ::c_long = 291; +pub const SYS_rseq: ::c_long = 293; pub const SYS_pidfd_send_signal: ::c_long = 424; pub const SYS_io_uring_setup: ::c_long = 425; pub const SYS_io_uring_enter: ::c_long = 426; diff --git a/src/unix/linux_like/linux/gnu/b64/s390x.rs b/src/unix/linux_like/linux/gnu/b64/s390x.rs index 748df2c810..212dc898cf 100644 --- a/src/unix/linux_like/linux/gnu/b64/s390x.rs +++ b/src/unix/linux_like/linux/gnu/b64/s390x.rs @@ -915,6 +915,7 @@ pub const SYS_setfsuid: ::c_long = 215; pub const SYS_setfsgid: ::c_long = 216; pub const SYS_newfstatat: ::c_long = 293; pub const SYS_statx: ::c_long = 379; +pub const SYS_rseq: ::c_long = 383; pub const SYS_pidfd_send_signal: ::c_long = 424; pub const SYS_io_uring_setup: ::c_long = 425; pub const SYS_io_uring_enter: ::c_long = 426; diff --git a/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs b/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs index 86f5b8cb7d..8d065e6a3b 100644 --- a/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs @@ -879,6 +879,7 @@ pub const SYS_copy_file_range: ::c_long = 357; pub const SYS_preadv2: ::c_long = 358; pub const SYS_pwritev2: ::c_long = 359; pub const SYS_statx: ::c_long = 360; +pub const SYS_rseq: ::c_long = 365; pub const SYS_pidfd_send_signal: ::c_long = 424; pub const SYS_io_uring_setup: ::c_long = 425; pub const SYS_io_uring_enter: ::c_long = 426; diff --git a/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs b/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs index e126984268..f840f9f443 100644 --- a/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs +++ b/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs @@ -409,6 +409,7 @@ pub const SYS_pkey_mprotect: ::c_long = 329; pub const SYS_pkey_alloc: ::c_long = 330; pub const SYS_pkey_free: ::c_long = 331; pub const SYS_statx: ::c_long = 332; +pub const SYS_rseq: ::c_long = 334; pub const SYS_pidfd_send_signal: ::c_long = 424; pub const SYS_io_uring_setup: ::c_long = 425; pub const SYS_io_uring_enter: ::c_long = 426; diff --git a/src/unix/linux_like/linux/gnu/b64/x86_64/x32.rs b/src/unix/linux_like/linux/gnu/b64/x86_64/x32.rs index dcbc3472f0..de1a8b94b9 100644 --- a/src/unix/linux_like/linux/gnu/b64/x86_64/x32.rs +++ b/src/unix/linux_like/linux/gnu/b64/x86_64/x32.rs @@ -337,6 +337,7 @@ pub const SYS_pkey_mprotect: ::c_long = __X32_SYSCALL_BIT + 329; pub const SYS_pkey_alloc: ::c_long = __X32_SYSCALL_BIT + 330; pub const SYS_pkey_free: ::c_long = __X32_SYSCALL_BIT + 331; pub const SYS_statx: ::c_long = __X32_SYSCALL_BIT + 332; +pub const SYS_rseq: ::c_long = __X32_SYSCALL_BIT + 334; pub const SYS_pidfd_send_signal: ::c_long = __X32_SYSCALL_BIT + 424; pub const SYS_io_uring_setup: ::c_long = __X32_SYSCALL_BIT + 425; pub const SYS_io_uring_enter: ::c_long = __X32_SYSCALL_BIT + 426; diff --git a/src/unix/linux_like/linux/mod.rs b/src/unix/linux_like/linux/mod.rs index 56e2082bb8..bbc76f5daa 100644 --- a/src/unix/linux_like/linux/mod.rs +++ b/src/unix/linux_like/linux/mod.rs @@ -39,7 +39,12 @@ pub type Elf64_Section = u16; // linux/can.h pub type canid_t = u32; + +// linux/can/j1939.h pub type can_err_mask_t = u32; +pub type pgn_t = u32; +pub type priority_t = u8; +pub type name_t = u64; pub type iconv_t = *mut ::c_void; @@ -543,6 +548,16 @@ s! { pub can_mask: canid_t, } + // linux/can/j1939.h + pub struct j1939_filter { + pub name: name_t, + pub name_mask: name_t, + pub pgn: pgn_t, + pub pgn_mask: pgn_t, + pub addr: u8, + pub addr_mask: u8, + } + // linux/filter.h pub struct sock_filter { pub code: ::__u16, @@ -3185,6 +3200,47 @@ pub const CAN_RAW_RECV_OWN_MSGS: ::c_int = 4; pub const CAN_RAW_FD_FRAMES: ::c_int = 5; pub const CAN_RAW_JOIN_FILTERS: ::c_int = 6; +// linux/can/j1939.h +pub const SOL_CAN_J1939: ::c_int = SOL_CAN_BASE + CAN_J1939; + +pub const J1939_MAX_UNICAST_ADDR: ::c_uchar = 0xfd; +pub const J1939_IDLE_ADDR: ::c_uchar = 0xfe; +pub const J1939_NO_ADDR: ::c_uchar = 0xff; +pub const J1939_NO_NAME: ::c_ulong = 0; +pub const J1939_PGN_REQUEST: ::c_uint = 0x0ea00; +pub const J1939_PGN_ADDRESS_CLAIMED: ::c_uint = 0x0ee00; +pub const J1939_PGN_ADDRESS_COMMANDED: ::c_uint = 0x0fed8; +pub const J1939_PGN_PDU1_MAX: ::c_uint = 0x3ff00; +pub const J1939_PGN_MAX: ::c_uint = 0x3ffff; +pub const J1939_NO_PGN: ::c_uint = 0x40000; + +pub const SO_J1939_FILTER: ::c_int = 1; +pub const SO_J1939_PROMISC: ::c_int = 2; +pub const SO_J1939_SEND_PRIO: ::c_int = 3; +pub const SO_J1939_ERRQUEUE: ::c_int = 4; + +pub const SCM_J1939_DEST_ADDR: ::c_int = 1; +pub const SCM_J1939_DEST_NAME: ::c_int = 2; +pub const SCM_J1939_PRIO: ::c_int = 3; +pub const SCM_J1939_ERRQUEUE: ::c_int = 4; + +pub const J1939_NLA_PAD: ::c_int = 0; +pub const J1939_NLA_BYTES_ACKED: ::c_int = 1; +pub const J1939_NLA_TOTAL_SIZE: ::c_int = 2; +pub const J1939_NLA_PGN: ::c_int = 3; +pub const J1939_NLA_SRC_NAME: ::c_int = 4; +pub const J1939_NLA_DEST_NAME: ::c_int = 5; +pub const J1939_NLA_SRC_ADDR: ::c_int = 6; +pub const J1939_NLA_DEST_ADDR: ::c_int = 7; + +pub const J1939_EE_INFO_NONE: ::c_int = 0; +pub const J1939_EE_INFO_TX_ABORT: ::c_int = 1; +pub const J1939_EE_INFO_RX_RTS: ::c_int = 2; +pub const J1939_EE_INFO_RX_DPO: ::c_int = 3; +pub const J1939_EE_INFO_RX_ABORT: ::c_int = 4; + +pub const J1939_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/mod.rs b/src/unix/mod.rs index 52508345c5..3664607253 100644 --- a/src/unix/mod.rs +++ b/src/unix/mod.rs @@ -29,7 +29,7 @@ pub type sighandler_t = ::size_t; pub type cc_t = ::c_uchar; cfg_if! { - if #[cfg(target_os = "horizon")] { + if #[cfg(any(target_os = "espidf", target_os = "horizon"))] { pub type uid_t = ::c_ushort; pub type gid_t = ::c_ushort; } else { diff --git a/src/unix/newlib/horizon/mod.rs b/src/unix/newlib/horizon/mod.rs index 5118660955..84dd9c43ed 100644 --- a/src/unix/newlib/horizon/mod.rs +++ b/src/unix/newlib/horizon/mod.rs @@ -51,6 +51,10 @@ s! { pub sun_family: ::sa_family_t, pub sun_path: [::c_char; 104usize], } + + pub struct sched_param { + pub sched_priority: ::c_int, + } } pub const SIGEV_NONE: ::c_int = 1; @@ -147,6 +151,10 @@ pub const FIONBIO: ::c_ulong = 1; pub const RTLD_DEFAULT: *mut ::c_void = 0 as *mut ::c_void; +// For pthread get/setschedparam +pub const SCHED_FIFO: ::c_int = 1; +pub const SCHED_RR: ::c_int = 2; + // For getrandom() pub const GRND_NONBLOCK: ::c_uint = 0x1; pub const GRND_RANDOM: ::c_uint = 0x2; @@ -194,6 +202,40 @@ extern "C" { value: *mut ::c_void, ) -> ::c_int; + pub fn pthread_attr_getschedparam( + attr: *const ::pthread_attr_t, + param: *mut sched_param, + ) -> ::c_int; + + pub fn pthread_attr_setschedparam( + attr: *mut ::pthread_attr_t, + param: *const sched_param, + ) -> ::c_int; + + pub fn pthread_attr_getprocessorid_np( + attr: *const ::pthread_attr_t, + processor_id: *mut ::c_int, + ) -> ::c_int; + + pub fn pthread_attr_setprocessorid_np( + attr: *mut ::pthread_attr_t, + processor_id: ::c_int, + ) -> ::c_int; + + pub fn pthread_getschedparam( + native: ::pthread_t, + policy: *mut ::c_int, + param: *mut ::sched_param, + ) -> ::c_int; + + pub fn pthread_setschedparam( + native: ::pthread_t, + policy: ::c_int, + param: *const ::sched_param, + ) -> ::c_int; + + pub fn pthread_getprocessorid_np() -> ::c_int; + pub fn getrandom(buf: *mut ::c_void, buflen: ::size_t, flags: ::c_uint) -> ::ssize_t; pub fn gethostid() -> ::c_long; diff --git a/src/unix/newlib/mod.rs b/src/unix/newlib/mod.rs index 1f3e82b800..f4473c543c 100644 --- a/src/unix/newlib/mod.rs +++ b/src/unix/newlib/mod.rs @@ -1,17 +1,27 @@ pub type blkcnt_t = i32; pub type blksize_t = i32; pub type clockid_t = ::c_ulong; -pub type dev_t = u32; + +cfg_if! { + if #[cfg(target_os = "espidf")] { + pub type dev_t = ::c_short; + pub type ino_t = ::c_ushort; + pub type off_t = ::c_long; + } else { + pub type dev_t = u32; + pub type ino_t = u32; + pub type off_t = i64; + } +} + pub type fsblkcnt_t = u64; pub type fsfilcnt_t = u32; pub type id_t = u32; -pub type ino_t = u32; pub type key_t = ::c_int; pub type loff_t = ::c_longlong; pub type mode_t = ::c_uint; pub type nfds_t = u32; pub type nlink_t = ::c_ushort; -pub type off_t = i64; pub type pthread_t = ::c_ulong; pub type pthread_key_t = ::c_uint; pub type rlim_t = u32; |