diff options
-rw-r--r-- | .cirrus.yml | 4 | ||||
-rw-r--r-- | .github/workflows/bors.yml | 3 | ||||
-rw-r--r-- | .github/workflows/main.yml | 3 | ||||
-rw-r--r-- | ci/install-rust.sh | 1 | ||||
-rwxr-xr-x | libc-test/build.rs | 1 | ||||
-rw-r--r-- | libc-test/semver/dragonfly.txt | 2 | ||||
-rw-r--r-- | libc-test/semver/freebsd.txt | 2 | ||||
-rw-r--r-- | libc-test/semver/netbsd.txt | 10 | ||||
-rw-r--r-- | src/unix/bsd/freebsdlike/dragonfly/mod.rs | 141 | ||||
-rw-r--r-- | src/unix/bsd/freebsdlike/freebsd/mod.rs | 7 | ||||
-rw-r--r-- | src/unix/bsd/netbsdlike/netbsd/mod.rs | 39 |
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")] |