summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.cirrus.yml4
-rw-r--r--.github/workflows/bors.yml3
-rw-r--r--.github/workflows/main.yml3
-rw-r--r--ci/install-rust.sh1
-rwxr-xr-xlibc-test/build.rs1
-rw-r--r--libc-test/semver/dragonfly.txt2
-rw-r--r--libc-test/semver/freebsd.txt2
-rw-r--r--libc-test/semver/netbsd.txt10
-rw-r--r--src/unix/bsd/freebsdlike/dragonfly/mod.rs141
-rw-r--r--src/unix/bsd/freebsdlike/freebsd/mod.rs7
-rw-r--r--src/unix/bsd/netbsdlike/netbsd/mod.rs39
11 files changed, 207 insertions, 6 deletions
diff --git a/.cirrus.yml b/.cirrus.yml
index 381fa440c9..655f42bb48 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -1,7 +1,3 @@
-env:
- # Temporary fix for https://github.com/rust-lang/rustup/issues/2774.
- RUSTUP_UPDATE_ROOT: "https://dev-static.rust-lang.org/rustup"
-
task:
name: stable x86_64-unknown-freebsd-11
freebsd_instance:
diff --git a/.github/workflows/bors.yml b/.github/workflows/bors.yml
index 5073de9993..241940a823 100644
--- a/.github/workflows/bors.yml
+++ b/.github/workflows/bors.yml
@@ -72,6 +72,9 @@ jobs:
with:
github_token: "${{ secrets.GITHUB_TOKEN }}"
- uses: actions/checkout@v2
+ - name: Self-update rustup
+ run: rustup self update
+ shell: bash
- name: Setup Rust toolchain
run: TARGET=${{ matrix.target }} sh ./ci/install-rust.sh
shell: bash
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 6b5f5daf97..06f02c2660 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -64,6 +64,9 @@ jobs:
- target: i686-pc-windows-msvc
steps:
- uses: actions/checkout@v2
+ - name: Self-update rustup
+ run: rustup self update
+ shell: bash
- name: Setup Rust toolchain
run: TARGET=${{ matrix.target }} sh ./ci/install-rust.sh
shell: bash
diff --git a/ci/install-rust.sh b/ci/install-rust.sh
index 377f0d0cf0..dcd24b88ef 100644
--- a/ci/install-rust.sh
+++ b/ci/install-rust.sh
@@ -12,7 +12,6 @@ else
fi
if [ "$OS" = "windows" ]; then
: "${TARGET?The TARGET environment variable must be set.}"
- rustup self update
rustup set profile minimal
rustup update --force $toolchain-"$TARGET"
rustup default $toolchain-"$TARGET"
diff --git a/libc-test/build.rs b/libc-test/build.rs
index a5d95f0380..276be49259 100755
--- a/libc-test/build.rs
+++ b/libc-test/build.rs
@@ -1172,6 +1172,7 @@ fn test_dragonflybsd(target: &str) {
"syslog.h",
"termios.h",
"time.h",
+ "ucontext.h",
"ufs/ufs/quota.h",
"unistd.h",
"util.h",
diff --git a/libc-test/semver/dragonfly.txt b/libc-test/semver/dragonfly.txt
index aa429bd107..43e681dd61 100644
--- a/libc-test/semver/dragonfly.txt
+++ b/libc-test/semver/dragonfly.txt
@@ -1246,6 +1246,7 @@ lutimes
lwp_rtprio
lwpid_t
madvise
+mcontext_t
memmem
memrchr
memset_s
@@ -1379,6 +1380,7 @@ telldir
timex
truncate
ttyname_r
+ucontext_t
unmount
useconds_t
uselocale
diff --git a/libc-test/semver/freebsd.txt b/libc-test/semver/freebsd.txt
index 8e6959a0aa..26e20b435c 100644
--- a/libc-test/semver/freebsd.txt
+++ b/libc-test/semver/freebsd.txt
@@ -1323,6 +1323,7 @@ __xuname
_sem
abs
accept4
+accept_filter_arg
acct
aio_cancel
aio_error
@@ -1546,6 +1547,7 @@ pthread_condattr_getclock
pthread_condattr_getpshared
pthread_condattr_setclock
pthread_condattr_setpshared
+pthread_getthreadid_np
pthread_kill
pthread_main_np
pthread_mutex_timedlock
diff --git a/libc-test/semver/netbsd.txt b/libc-test/semver/netbsd.txt
index dbee2f6bea..384f6cad37 100644
--- a/libc-test/semver/netbsd.txt
+++ b/libc-test/semver/netbsd.txt
@@ -546,6 +546,7 @@ MADV_WILLNEED
MAP_FILE
MAP_HASSEMAPHORE
MAP_NORESERVE
+MAP_REMAPDUP
MAP_RENAME
MAP_WIRED
MAXFREQ
@@ -1008,9 +1009,16 @@ _UTX_USERSIZE
__cpu_simple_lock_nv_t
__errno
__exit_status
+_cpuset_clr
+_cpuset_create
+_cpuset_destroy
+_cpuset_isset
+_cpuset_set
+_cpuset_zero
_lwp_self
abs
accept4
+accept_filter_arg
acct
aio_cancel
aio_error
@@ -1194,8 +1202,10 @@ pthread_attr_getstack
pthread_cancel
pthread_condattr_setclock
pthread_getattr_np
+pthread_getaffinity_np
pthread_kill
pthread_mutex_timedlock
+pthread_setaffinity_np
pthread_setname_np
ptrace
ptrace_io_desc
diff --git a/src/unix/bsd/freebsdlike/dragonfly/mod.rs b/src/unix/bsd/freebsdlike/dragonfly/mod.rs
index acaf13fe4e..b9bdafed4e 100644
--- a/src/unix/bsd/freebsdlike/dragonfly/mod.rs
+++ b/src/unix/bsd/freebsdlike/dragonfly/mod.rs
@@ -25,6 +25,8 @@ pub type sem_t = *mut sem;
pub type cpuset_t = cpumask_t;
pub type cpu_set_t = cpumask_t;
+pub type register_t = ::c_long;
+
#[cfg_attr(feature = "extra_traits", derive(Debug))]
pub enum sem {}
impl ::Copy for sem {}
@@ -253,6 +255,51 @@ s_no_extra_traits! {
pub sigev_value: ::sigval,
__unused3: *mut ::c_void //actually a function pointer
}
+
+ pub struct mcontext_t {
+ pub mc_onstack: register_t,
+ pub mc_rdi: register_t,
+ pub mc_rsi: register_t,
+ pub mc_rdx: register_t,
+ pub mc_rcx: register_t,
+ pub mc_r8: register_t,
+ pub mc_r9: register_t,
+ pub mc_rax: register_t,
+ pub mc_rbx: register_t,
+ pub mc_rbp: register_t,
+ pub mc_r10: register_t,
+ pub mc_r11: register_t,
+ pub mc_r12: register_t,
+ pub mc_r13: register_t,
+ pub mc_r14: register_t,
+ pub mc_r15: register_t,
+ pub mc_xflags: register_t,
+ pub mc_trapno: register_t,
+ pub mc_addr: register_t,
+ pub mc_flags: register_t,
+ pub mc_err: register_t,
+ pub mc_rip: register_t,
+ pub mc_cs: register_t,
+ pub mc_rflags: register_t,
+ pub mc_rsp: register_t,
+ pub mc_ss: register_t,
+ pub mc_len: ::c_uint,
+ pub mc_fpformat: ::c_uint,
+ pub mc_ownedfp: ::c_uint,
+ __reserved: ::c_uint,
+ __unused: [::c_uint; 8],
+ pub mc_fpregs: [[::c_uint; 8]; 32],
+ }
+
+ pub struct ucontext_t {
+ pub uc_sigmask: ::sigset_t,
+ pub uc_mcontext: mcontext_t,
+ pub uc_link: *mut ucontext_t,
+ pub uc_stack: stack_t,
+ pub uc_cofunc: ::Option<unsafe extern "C" fn(uc: *mut ucontext_t, arg: *mut ::c_void)>,
+ pub uc_arg: *mut ::c_void,
+ __pad: [::c_int; 4],
+ }
}
cfg_if! {
@@ -452,6 +499,100 @@ cfg_if! {
self.sigev_value.hash(state);
}
}
+ impl PartialEq for mcontext_t {
+ fn eq(&self, other: &mcontext_t) -> bool {
+ self.mc_onstack == other.mc_onstack &&
+ self.mc_rdi == other.mc_rdi &&
+ self.mc_rsi == other.mc_rsi &&
+ self.mc_rdx == other.mc_rdx &&
+ self.mc_rcx == other.mc_rcx &&
+ self.mc_r8 == other.mc_r8 &&
+ self.mc_r9 == other.mc_r9 &&
+ self.mc_rax == other.mc_rax &&
+ self.mc_rbx == other.mc_rbx &&
+ self.mc_rbp == other.mc_rbp &&
+ self.mc_r10 == other.mc_r10 &&
+ self.mc_r11 == other.mc_r11 &&
+ self.mc_r12 == other.mc_r12 &&
+ self.mc_r13 == other.mc_r13 &&
+ self.mc_r14 == other.mc_r14 &&
+ self.mc_r15 == other.mc_r15 &&
+ self.mc_xflags == other.mc_xflags &&
+ self.mc_trapno == other.mc_trapno &&
+ self.mc_addr == other.mc_addr &&
+ self.mc_flags == other.mc_flags &&
+ self.mc_err == other.mc_err &&
+ self.mc_rip == other.mc_rip &&
+ self.mc_cs == other.mc_cs &&
+ self.mc_rflags == other.mc_rflags &&
+ self.mc_rsp == other.mc_rsp &&
+ self.mc_ss == other.mc_ss &&
+ self.mc_len == other.mc_len &&
+ self.mc_fpformat == other.mc_fpformat &&
+ self.mc_ownedfp == other.mc_ownedfp
+ // FIXME: self.mc_fpregs == other.mc_fpregs
+ }
+ }
+ impl Eq for mcontext_t {}
+ impl ::fmt::Debug for mcontext_t {
+ fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
+ f.debug_struct("mcontext_t")
+ .field("mc_onstack", &self.mc_onstack)
+ .field("mc_rdi", &self.mc_rdi)
+ .field("mc_rsi", &self.mc_rsi)
+ .field("mc_rdx", &self.mc_rdx)
+ .field("mc_rcx", &self.mc_rcx)
+ .field("mc_r8", &self.mc_r8)
+ .field("mc_r9", &self.mc_r9)
+ .field("mc_rax", &self.mc_rax)
+ .field("mc_rbx", &self.mc_rbx)
+ .field("mc_rbp", &self.mc_rbp)
+ .field("mc_r10", &self.mc_r10)
+ .field("mc_r11", &self.mc_r11)
+ .field("mc_r12", &self.mc_r12)
+ .field("mc_r13", &self.mc_r13)
+ .field("mc_r14", &self.mc_r14)
+ .field("mc_r15", &self.mc_r15)
+ .field("mc_xflags", &self.mc_xflags)
+ .field("mc_trapno", &self.mc_trapno)
+ .field("mc_addr", &self.mc_addr)
+ .field("mc_flags", &self.mc_flags)
+ .field("mc_err", &self.mc_err)
+ .field("mc_rip", &self.mc_rip)
+ .field("mc_cs", &self.mc_cs)
+ .field("mc_rflags", &self.mc_rflags)
+ .field("mc_rsp", &self.mc_rsp)
+ .field("mc_ss", &self.mc_ss)
+ .field("mc_len", &self.mc_len)
+ .field("mc_fpformat", &self.mc_fpformat)
+ .field("mc_ownedfp", &self.mc_ownedfp)
+ // FIXME: .field("mc_fpregs", &self.mc_fpregs)
+ .finish()
+ }
+ }
+ impl PartialEq for ucontext_t {
+ fn eq(&self, other: &ucontext_t) -> bool {
+ self.uc_sigmask == other.uc_sigmask
+ && self.uc_mcontext == other.uc_mcontext
+ && self.uc_link == other.uc_link
+ && self.uc_stack == other.uc_stack
+ && self.uc_cofunc == other.uc_cofunc
+ && self.uc_arg == other.uc_arg
+ }
+ }
+ impl Eq for ucontext_t {}
+ impl ::fmt::Debug for ucontext_t {
+ fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
+ f.debug_struct("ucontext_t")
+ .field("uc_sigmask", &self.uc_sigmask)
+ .field("uc_mcontext", &self.uc_mcontext)
+ .field("uc_link", &self.uc_link)
+ .field("uc_stack", &self.uc_stack)
+ .field("uc_cofunc", &self.uc_cofunc)
+ .field("uc_arg", &self.uc_arg)
+ .finish()
+ }
+ }
}
}
diff --git a/src/unix/bsd/freebsdlike/freebsd/mod.rs b/src/unix/bsd/freebsdlike/freebsd/mod.rs
index 398753a518..c634038e1b 100644
--- a/src/unix/bsd/freebsdlike/freebsd/mod.rs
+++ b/src/unix/bsd/freebsdlike/freebsd/mod.rs
@@ -112,6 +112,11 @@ s! {
pub sc_groups: [::gid_t; 1],
}
+ pub struct accept_filter_arg {
+ pub af_name: [::c_char; 16],
+ af_arg: [[::c_char; 10]; 24],
+ }
+
pub struct ptrace_vm_entry {
pub pve_entry: ::c_int,
pub pve_timestamp: ::c_int,
@@ -1561,6 +1566,8 @@ extern "C" {
newfd: ::c_int,
) -> ::c_int;
+ pub fn pthread_getthreadid_np() -> ::c_int;
+
#[cfg_attr(all(target_os = "freebsd", freebsd11), link_name = "statfs@FBSD_1.0")]
pub fn statfs(path: *const ::c_char, buf: *mut statfs) -> ::c_int;
#[cfg_attr(all(target_os = "freebsd", freebsd11), link_name = "fstatfs@FBSD_1.0")]
diff --git a/src/unix/bsd/netbsdlike/netbsd/mod.rs b/src/unix/bsd/netbsdlike/netbsd/mod.rs
index ce5045da40..0aee1ec515 100644
--- a/src/unix/bsd/netbsdlike/netbsd/mod.rs
+++ b/src/unix/bsd/netbsdlike/netbsd/mod.rs
@@ -10,6 +10,8 @@ type __pthread_spin_t = __cpu_simple_lock_nv_t;
pub type vm_size_t = ::uintptr_t; // FIXME: deprecated since long time
pub type lwpid_t = ::c_uint;
pub type shmatt_t = ::c_uint;
+pub type cpuid_t = u64;
+pub type cpuset_t = _cpuset;
// elf.h
@@ -213,7 +215,7 @@ s! {
pub flags: u32,
pub fflags: u32,
pub data: i64,
- pub udata: ::intptr_t,
+ pub udata: ::intptr_t, /* FIXME: NetBSD 10.0 will finally have same layout as other BSD */
}
pub struct dqblk {
@@ -429,6 +431,15 @@ s! {
pub dlpi_tls_modid: usize,
pub dlpi_tls_data: *mut ::c_void,
}
+
+ pub struct _cpuset {
+ bits: [u32; 0]
+ }
+
+ pub struct accept_filter_arg {
+ pub af_name: [::c_char; 16],
+ af_arg: [[::c_char; 10]; 24],
+ }
}
s_no_extra_traits! {
@@ -1204,6 +1215,8 @@ pub const MAP_RENAME: ::c_int = 0x20;
pub const MAP_NORESERVE: ::c_int = 0x40;
pub const MAP_HASSEMAPHORE: ::c_int = 0x200;
pub const MAP_WIRED: ::c_int = 0x800;
+// mremap flag
+pub const MAP_REMAPDUP: ::c_int = 0x004;
pub const DCCP_TYPE_REQUEST: ::c_int = 0;
pub const DCCP_TYPE_RESPONSE: ::c_int = 1;
@@ -2044,6 +2057,23 @@ extern "C" {
stackaddr: *mut *mut ::c_void,
stacksize: *mut ::size_t,
) -> ::c_int;
+ pub fn pthread_getaffinity_np(
+ thread: ::pthread_t,
+ size: ::size_t,
+ set: *mut cpuset_t,
+ ) -> ::c_int;
+ pub fn pthread_setaffinity_np(
+ thread: ::pthread_t,
+ size: ::size_t,
+ set: *mut cpuset_t,
+ ) -> ::c_int;
+ pub fn _cpuset_create() -> *mut cpuset_t;
+ pub fn _cpuset_destroy(set: *mut cpuset_t);
+ pub fn _cpuset_clr(cpu: cpuid_t, set: *mut cpuset_t) -> ::c_int;
+ pub fn _cpuset_set(cpu: cpuid_t, set: *mut cpuset_t) -> ::c_int;
+ pub fn _cpuset_isset(cpu: cpuid_t, set: *const cpuset_t) -> ::c_int;
+ pub fn _cpuset_size(set: *const cpuset_t) -> ::size_t;
+ pub fn _cpuset_zero(set: *mut cpuset_t);
#[link_name = "__sigtimedwait50"]
pub fn sigtimedwait(
set: *const sigset_t,
@@ -2116,6 +2146,13 @@ extern "C" {
pub fn consttime_memequal(a: *const ::c_void, b: *const ::c_void, len: ::size_t) -> ::c_int;
pub fn setproctitle(fmt: *const ::c_char, ...);
+ pub fn mremap(
+ oldp: *mut ::c_void,
+ oldsize: ::size_t,
+ newp: *mut ::c_void,
+ newsize: ::size_t,
+ flags: ::c_int,
+ ) -> *mut ::c_void;
}
#[link(name = "util")]