summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Drobnak <mark.drobnak@gmail.com>2022-03-13 17:30:01 -0700
committerMark Drobnak <mark.drobnak@gmail.com>2022-03-13 17:30:01 -0700
commitb61fe73f3fbf820bafa06e841dda1b803cb7b5dd (patch)
tree43b1419f0e07333bd331fb137261326fd16958e2
parentc8208666bfe219bf28d4e900054c04a3697a4f3b (diff)
parent55cc85ff7f61e4f11b260ecb68b366818dc4bbe0 (diff)
downloadrust-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
-rw-r--r--libc-test/build.rs40
-rw-r--r--libc-test/semver/linux.txt31
-rw-r--r--libc-test/semver/openbsd.txt5
-rw-r--r--src/solid/mod.rs6
-rw-r--r--src/unix/bsd/netbsdlike/openbsd/mod.rs18
-rw-r--r--src/unix/haiku/mod.rs13
-rw-r--r--src/unix/haiku/native.rs12
-rw-r--r--src/unix/linux_like/linux/gnu/b32/arm/mod.rs1
-rw-r--r--src/unix/linux_like/linux/gnu/b32/mips/mod.rs1
-rw-r--r--src/unix/linux_like/linux/gnu/b32/powerpc.rs1
-rw-r--r--src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs2
-rw-r--r--src/unix/linux_like/linux/gnu/b32/sparc/mod.rs1
-rw-r--r--src/unix/linux_like/linux/gnu/b32/x86/mod.rs1
-rw-r--r--src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs1
-rw-r--r--src/unix/linux_like/linux/gnu/b64/mips64/mod.rs1
-rw-r--r--src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs1
-rw-r--r--src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs1
-rw-r--r--src/unix/linux_like/linux/gnu/b64/s390x.rs1
-rw-r--r--src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs1
-rw-r--r--src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs1
-rw-r--r--src/unix/linux_like/linux/gnu/b64/x86_64/x32.rs1
-rw-r--r--src/unix/linux_like/linux/mod.rs56
-rw-r--r--src/unix/mod.rs2
-rw-r--r--src/unix/newlib/horizon/mod.rs42
-rw-r--r--src/unix/newlib/mod.rs16
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;