diff --git a/libc-test/build.rs b/libc-test/build.rs
index 03d0b55b392b7dced737d9cea7ff69de4cdbfe82..526c8a82b25caae21b17ed5b76d59a4dc03d6f30 100644
--- a/libc-test/build.rs
+++ b/libc-test/build.rs
@@ -2815,20 +2815,14 @@ fn test_linux(target: &str) {
     cfg.skip_fn(|_| true)
         .skip_const(|_| true)
         .skip_static(|_| true)
-        .type_name(move |ty, _is_struct, _is_union| {
-            ty.to_string()
-        });
-    cfg.skip_struct(move |ty| {
-        match ty {
-            "Elf64_Phdr" | "Elf32_Phdr" => false,
-            _ => true,
-        }
+        .type_name(move |ty, _is_struct, _is_union| ty.to_string());
+    cfg.skip_struct(move |ty| match ty {
+        "Elf64_Phdr" | "Elf32_Phdr" => false,
+        _ => true,
     });
-    cfg.skip_type(move |ty| {
-        match ty {
-            "Elf64_Phdr" | "Elf32_Phdr" => false,
-            _ => true,
-        }
+    cfg.skip_type(move |ty| match ty {
+        "Elf64_Phdr" | "Elf32_Phdr" => false,
+        _ => true,
     });
     cfg.header("elf.h");
     cfg.generate("../src/lib.rs", "linux_elf.rs");
diff --git a/src/unix/bsd/netbsdlike/mod.rs b/src/unix/bsd/netbsdlike/mod.rs
index 29b4dd76498912482eea77959373f13e70b8e9ad..6e8383061c82bb769abce576cbf05cc6b48e9a98 100644
--- a/src/unix/bsd/netbsdlike/mod.rs
+++ b/src/unix/bsd/netbsdlike/mod.rs
@@ -677,8 +677,8 @@ cfg_if! {
         mod netbsd;
         pub use self::netbsd::*;
     } else if #[cfg(target_os = "openbsd")] {
-        mod openbsdlike;
-        pub use self::openbsdlike::*;
+        mod openbsd;
+        pub use self::openbsd::*;
     } else {
         // Unknown target_os
     }
diff --git a/src/unix/bsd/netbsdlike/openbsdlike/openbsd/aarch64.rs b/src/unix/bsd/netbsdlike/openbsd/aarch64.rs
similarity index 100%
rename from src/unix/bsd/netbsdlike/openbsdlike/openbsd/aarch64.rs
rename to src/unix/bsd/netbsdlike/openbsd/aarch64.rs
diff --git a/src/unix/bsd/netbsdlike/openbsdlike/mod.rs b/src/unix/bsd/netbsdlike/openbsd/mod.rs
similarity index 62%
rename from src/unix/bsd/netbsdlike/openbsdlike/mod.rs
rename to src/unix/bsd/netbsdlike/openbsd/mod.rs
index bd20164b20a1198fe81c0e652276d87467201bd9..5dcde8299dbdd65b74bc4c6fe70194c50798a906 100644
--- a/src/unix/bsd/netbsdlike/openbsdlike/mod.rs
+++ b/src/unix/bsd/netbsdlike/openbsd/mod.rs
@@ -17,6 +17,150 @@ pub type pthread_rwlockattr_t = *mut ::c_void;
 pub type caddr_t = *mut ::c_char;
 
 s! {
+    pub struct glob_t {
+        pub gl_pathc:   ::size_t,
+        pub gl_matchc:  ::size_t,
+        pub gl_offs:    ::size_t,
+        pub gl_flags:   ::c_int,
+        pub gl_pathv:   *mut *mut ::c_char,
+        __unused1: *mut ::c_void,
+        __unused2: *mut ::c_void,
+        __unused3: *mut ::c_void,
+        __unused4: *mut ::c_void,
+        __unused5: *mut ::c_void,
+        __unused6: *mut ::c_void,
+        __unused7: *mut ::c_void,
+    }
+
+    pub struct lconv {
+        pub decimal_point: *mut ::c_char,
+        pub thousands_sep: *mut ::c_char,
+        pub grouping: *mut ::c_char,
+        pub int_curr_symbol: *mut ::c_char,
+        pub currency_symbol: *mut ::c_char,
+        pub mon_decimal_point: *mut ::c_char,
+        pub mon_thousands_sep: *mut ::c_char,
+        pub mon_grouping: *mut ::c_char,
+        pub positive_sign: *mut ::c_char,
+        pub negative_sign: *mut ::c_char,
+        pub int_frac_digits: ::c_char,
+        pub frac_digits: ::c_char,
+        pub p_cs_precedes: ::c_char,
+        pub p_sep_by_space: ::c_char,
+        pub n_cs_precedes: ::c_char,
+        pub n_sep_by_space: ::c_char,
+        pub p_sign_posn: ::c_char,
+        pub n_sign_posn: ::c_char,
+        pub int_p_cs_precedes: ::c_char,
+        pub int_p_sep_by_space: ::c_char,
+        pub int_n_cs_precedes: ::c_char,
+        pub int_n_sep_by_space: ::c_char,
+        pub int_p_sign_posn: ::c_char,
+        pub int_n_sign_posn: ::c_char,
+    }
+
+    pub struct ufs_args {
+        pub fspec: *mut ::c_char,
+        pub export_info: export_args,
+    }
+
+    pub struct mfs_args {
+        pub fspec: *mut ::c_char,
+        pub export_info: export_args,
+        // https://github.com/openbsd/src/blob/master/sys/sys/types.h#L134
+        pub base: *mut ::c_char,
+        pub size: ::c_ulong,
+    }
+
+    pub struct iso_args {
+        pub fspec: *mut ::c_char,
+        pub export_info: export_args,
+        pub flags: ::c_int,
+        pub sess: ::c_int,
+    }
+
+    pub struct nfs_args {
+        pub version: ::c_int,
+        pub addr: *mut ::sockaddr,
+        pub addrlen: ::c_int,
+        pub sotype: ::c_int,
+        pub proto: ::c_int,
+        pub fh: *mut ::c_uchar,
+        pub fhsize: ::c_int,
+        pub flags: ::c_int,
+        pub wsize: ::c_int,
+        pub rsize: ::c_int,
+        pub readdirsize: ::c_int,
+        pub timeo: ::c_int,
+        pub retrans: ::c_int,
+        pub maxgrouplist: ::c_int,
+        pub readahead: ::c_int,
+        pub leaseterm: ::c_int,
+        pub deadthresh: ::c_int,
+        pub hostname: *mut ::c_char,
+        pub acregmin: ::c_int,
+        pub acregmax: ::c_int,
+        pub acdirmin: ::c_int,
+        pub acdirmax: ::c_int,
+    }
+
+    pub struct msdosfs_args {
+        pub fspec: *mut ::c_char,
+        pub export_info: export_args,
+        pub uid: ::uid_t,
+        pub gid: ::gid_t,
+        pub mask: ::mode_t,
+        pub flags: ::c_int,
+    }
+
+    pub struct ntfs_args {
+        pub fspec: *mut ::c_char,
+        pub export_info: export_args,
+        pub uid: ::uid_t,
+        pub gid: ::gid_t,
+        pub mode: ::mode_t,
+        pub flag: ::c_ulong,
+    }
+
+    pub struct udf_args {
+        pub fspec: *mut ::c_char,
+        pub lastblock: ::uint32_t,
+    }
+
+    pub struct tmpfs_args {
+        pub ta_version: ::c_int,
+        pub ta_nodes_max: ::ino_t,
+        pub ta_size_max: ::off_t,
+        pub ta_root_uid: ::uid_t,
+        pub ta_root_gid: ::gid_t,
+        pub ta_root_mode: ::mode_t,
+    }
+
+    pub struct fusefs_args {
+        pub name: *mut ::c_char,
+        pub fd: ::c_int,
+        pub max_read: ::c_int,
+        pub allow_other: ::c_int,
+    }
+
+    pub struct xucred {
+        pub cr_uid: ::uid_t,
+        pub cr_gid: ::gid_t,
+        pub cr_ngroups: ::c_short,
+        //https://github.com/openbsd/src/blob/master/sys/sys/syslimits.h#L44
+        pub cr_groups: [::gid_t; 16],
+    }
+
+    pub struct export_args {
+        pub ex_flags: ::c_int,
+        pub ex_root: ::uid_t,
+        pub ex_anon: xucred,
+        pub ex_addr: *mut ::sockaddr,
+        pub ex_addrlen: ::c_int,
+        pub ex_mask: *mut ::sockaddr,
+        pub ex_masklen: ::c_int,
+    }
+
     pub struct ip_mreq {
         pub imr_multiaddr: in_addr,
         pub imr_interface: in_addr,
@@ -206,6 +350,18 @@ s_no_extra_traits! {
         pub ut_host: [::c_char; UT_HOSTSIZE],
         pub ut_time: ::time_t,
     }
+
+    pub union mount_info {
+        pub ufs_args: ufs_args,
+        pub mfs_args: mfs_args,
+        pub nfs_args: nfs_args,
+        pub iso_args: iso_args,
+        pub msdosfs_args: msdosfs_args,
+        pub ntfs_args: ntfs_args,
+        pub tmpfs_args: tmpfs_args,
+        align: [::c_char; 160],
+    }
+
 }
 
 cfg_if! {
@@ -385,6 +541,167 @@ cfg_if! {
                 self.ut_time.hash(state);
             }
         }
+
+        impl PartialEq for mount_info {
+            fn eq(&self, other: &mount_info) -> bool {
+                unsafe {
+                    self.align
+                        .iter()
+                        .zip(other.align.iter())
+                        .all(|(a,b)| a == b)
+                }
+            }
+        }
+
+        impl Eq for mount_info { }
+
+        impl ::fmt::Debug for mount_info {
+            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
+                f.debug_struct("mount_info")
+                // FIXME: .field("align", &self.align)
+                    .finish()
+            }
+        }
+
+        impl ::hash::Hash for mount_info {
+            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
+                unsafe { self.align.hash(state) };
+            }
+        }
+    }
+}
+
+cfg_if! {
+    if #[cfg(libc_union)] {
+        s_no_extra_traits! {
+            // This type uses the union mount_info:
+            pub struct statfs {
+                pub f_flags: ::uint32_t,
+                pub f_bsize: ::uint32_t,
+                pub f_iosize: ::uint32_t,
+                pub f_blocks: ::uint64_t,
+                pub f_bfree: ::uint64_t,
+                pub f_bavail: ::int64_t,
+                pub f_files: ::uint64_t,
+                pub f_ffree: ::uint64_t,
+                pub f_favail: ::int64_t,
+                pub f_syncwrites: ::uint64_t,
+                pub f_syncreads: ::uint64_t,
+                pub f_asyncwrites: ::uint64_t,
+                pub f_asyncreads: ::uint64_t,
+                pub f_fsid: ::fsid_t,
+                pub f_namemax: ::uint32_t,
+                pub f_owner: ::uid_t,
+                pub f_ctime: ::uint64_t,
+                pub f_fstypename: [::c_char; 16],
+                pub f_mntonname: [::c_char; 90],
+                pub f_mntfromname: [::c_char; 90],
+                pub f_mntfromspec: [::c_char; 90],
+                pub mount_info: mount_info,
+            }
+        }
+
+        cfg_if! {
+            if #[cfg(feature = "extra_traits")] {
+                impl PartialEq for statfs {
+                    fn eq(&self, other: &statfs) -> bool {
+                        self.f_flags == other.f_flags
+                            && self.f_bsize == other.f_bsize
+                            && self.f_iosize == other.f_iosize
+                            && self.f_blocks == other.f_blocks
+                            && self.f_bfree == other.f_bfree
+                            && self.f_bavail == other.f_bavail
+                            && self.f_files == other.f_files
+                            && self.f_ffree == other.f_ffree
+                            && self.f_favail == other.f_favail
+                            && self.f_syncwrites == other.f_syncwrites
+                            && self.f_syncreads == other.f_syncreads
+                            && self.f_asyncwrites == other.f_asyncwrites
+                            && self.f_asyncreads == other.f_asyncreads
+                            && self.f_fsid == other.f_fsid
+                            && self.f_namemax == other.f_namemax
+                            && self.f_owner == other.f_owner
+                            && self.f_ctime == other.f_ctime
+                            && self.f_fstypename
+                            .iter()
+                            .zip(other.f_fstypename.iter())
+                            .all(|(a,b)| a == b)
+                            && self.f_mntonname
+                            .iter()
+                            .zip(other.f_mntonname.iter())
+                            .all(|(a,b)| a == b)
+                            && self.f_mntfromname
+                            .iter()
+                            .zip(other.f_mntfromname.iter())
+                            .all(|(a,b)| a == b)
+                            && self.f_mntfromspec
+                            .iter()
+                            .zip(other.f_mntfromspec.iter())
+                            .all(|(a,b)| a == b)
+                            && self.mount_info == other.mount_info
+                    }
+                }
+
+                impl Eq for statfs { }
+
+                impl ::fmt::Debug for statfs {
+                    fn fmt(&self, f: &mut ::fmt::Formatter)
+                           -> ::fmt::Result {
+                        f.debug_struct("statfs")
+                            .field("f_flags", &self.f_flags)
+                            .field("f_bsize", &self.f_bsize)
+                            .field("f_iosize", &self.f_iosize)
+                            .field("f_blocks", &self.f_blocks)
+                            .field("f_bfree", &self.f_bfree)
+                            .field("f_bavail", &self.f_bavail)
+                            .field("f_files", &self.f_files)
+                            .field("f_ffree", &self.f_ffree)
+                            .field("f_favail", &self.f_favail)
+                            .field("f_syncwrites", &self.f_syncwrites)
+                            .field("f_syncreads", &self.f_syncreads)
+                            .field("f_asyncwrites", &self.f_asyncwrites)
+                            .field("f_asyncreads", &self.f_asyncreads)
+                            .field("f_fsid", &self.f_fsid)
+                            .field("f_namemax", &self.f_namemax)
+                            .field("f_owner", &self.f_owner)
+                            .field("f_ctime", &self.f_ctime)
+                        // FIXME: .field("f_fstypename", &self.f_fstypename)
+                        // FIXME: .field("f_mntonname", &self.f_mntonname)
+                        // FIXME: .field("f_mntfromname", &self.f_mntfromname)
+                        // FIXME: .field("f_mntfromspec", &self.f_mntfromspec)
+                            .field("mount_info", &self.mount_info)
+                            .finish()
+                    }
+                }
+
+                impl ::hash::Hash for statfs {
+                    fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
+                        self.f_flags.hash(state);
+                        self.f_bsize.hash(state);
+                        self.f_iosize.hash(state);
+                        self.f_blocks.hash(state);
+                        self.f_bfree.hash(state);
+                        self.f_bavail.hash(state);
+                        self.f_files.hash(state);
+                        self.f_ffree.hash(state);
+                        self.f_favail.hash(state);
+                        self.f_syncwrites.hash(state);
+                        self.f_syncreads.hash(state);
+                        self.f_asyncwrites.hash(state);
+                        self.f_asyncreads.hash(state);
+                        self.f_fsid.hash(state);
+                        self.f_namemax.hash(state);
+                        self.f_owner.hash(state);
+                        self.f_ctime.hash(state);
+                        self.f_fstypename.hash(state);
+                        self.f_mntonname.hash(state);
+                        self.f_mntfromname.hash(state);
+                        self.f_mntfromspec.hash(state);
+                        self.mount_info.hash(state);
+                    }
+                }
+            }
+        }
     }
 }
 
@@ -880,6 +1197,92 @@ pub const OLCUC: ::tcflag_t = 0x20;
 pub const ONOCR: ::tcflag_t = 0x40;
 pub const ONLRET: ::tcflag_t = 0x80;
 
+//https://github.com/openbsd/src/blob/master/sys/sys/mount.h
+pub const ISOFSMNT_NORRIP: ::c_int = 0x1; // disable Rock Ridge Ext
+pub const ISOFSMNT_GENS: ::c_int = 0x2; // enable generation numbers
+pub const ISOFSMNT_EXTATT: ::c_int = 0x4; // enable extended attr
+pub const ISOFSMNT_NOJOLIET: ::c_int = 0x8; // disable Joliet Ext
+pub const ISOFSMNT_SESS: ::c_int = 0x10; // use iso_args.sess
+
+pub const NFS_ARGSVERSION: ::c_int = 4; // change when nfs_args changes
+
+pub const NFSMNT_RESVPORT: ::c_int = 0; // always use reserved ports
+pub const NFSMNT_SOFT: ::c_int = 0x1; // soft mount (hard is default)
+pub const NFSMNT_WSIZE: ::c_int = 0x2; // set write size
+pub const NFSMNT_RSIZE: ::c_int = 0x4; // set read size
+pub const NFSMNT_TIMEO: ::c_int = 0x8; // set initial timeout
+pub const NFSMNT_RETRANS: ::c_int = 0x10; // set number of request retries
+pub const NFSMNT_MAXGRPS: ::c_int = 0x20; // set maximum grouplist size
+pub const NFSMNT_INT: ::c_int = 0x40; // allow interrupts on hard mount
+pub const NFSMNT_NOCONN: ::c_int = 0x80; // Don't Connect the socket
+pub const NFSMNT_NQNFS: ::c_int = 0x100; // Use Nqnfs protocol
+pub const NFSMNT_NFSV3: ::c_int = 0x200; // Use NFS Version 3 protocol
+pub const NFSMNT_KERB: ::c_int = 0x400; // Use Kerberos authentication
+pub const NFSMNT_DUMBTIMR: ::c_int = 0x800; // Don't estimate rtt dynamically
+pub const NFSMNT_LEASETERM: ::c_int = 0x1000; // set lease term (nqnfs)
+pub const NFSMNT_READAHEAD: ::c_int = 0x2000; // set read ahead
+pub const NFSMNT_DEADTHRESH: ::c_int = 0x4000; // set dead server retry thresh
+pub const NFSMNT_NOAC: ::c_int = 0x8000; // disable attribute cache
+pub const NFSMNT_RDIRPLUS: ::c_int = 0x10000; // Use Readdirplus for V3
+pub const NFSMNT_READDIRSIZE: ::c_int = 0x20000; // Set readdir size
+
+/* Flags valid only in mount syscall arguments */
+pub const NFSMNT_ACREGMIN: ::c_int = 0x40000; // acregmin field valid
+pub const NFSMNT_ACREGMAX: ::c_int = 0x80000; // acregmax field valid
+pub const NFSMNT_ACDIRMIN: ::c_int = 0x100000; // acdirmin field valid
+pub const NFSMNT_ACDIRMAX: ::c_int = 0x200000; // acdirmax field valid
+
+/* Flags valid only in kernel */
+pub const NFSMNT_INTERNAL: ::c_int = 0xfffc0000; // Bits set internally
+pub const NFSMNT_HASWRITEVERF: ::c_int = 0x40000; // Has write verifier for V3
+pub const NFSMNT_GOTPATHCONF: ::c_int = 0x80000; // Got the V3 pathconf info
+pub const NFSMNT_GOTFSINFO: ::c_int = 0x100000; // Got the V3 fsinfo
+pub const NFSMNT_MNTD: ::c_int = 0x200000; // Mnt server for mnt point
+pub const NFSMNT_DISMINPROG: ::c_int = 0x400000; // Dismount in progress
+pub const NFSMNT_DISMNT: ::c_int = 0x800000; // Dismounted
+pub const NFSMNT_SNDLOCK: ::c_int = 0x1000000; // Send socket lock
+pub const NFSMNT_WANTSND: ::c_int = 0x2000000; // Want above
+pub const NFSMNT_RCVLOCK: ::c_int = 0x4000000; // Rcv socket lock
+pub const NFSMNT_WANTRCV: ::c_int = 0x8000000; // Want above
+pub const NFSMNT_WAITAUTH: ::c_int = 0x10000000; // Wait for authentication
+pub const NFSMNT_HASAUTH: ::c_int = 0x20000000; // Has authenticator
+pub const NFSMNT_WANTAUTH: ::c_int = 0x40000000; // Wants an authenticator
+pub const NFSMNT_AUTHERR: ::c_int = 0x80000000; // Authentication error
+
+pub const MSDOSFSMNT_SHORTNAME: ::c_int = 0x1; // Force old DOS short names only
+pub const MSDOSFSMNT_LONGNAME: ::c_int = 0x2; // Force Win'95 long names
+pub const MSDOSFSMNT_NOWIN95: ::c_int = 0x4; // Completely ignore Win95 entries
+
+pub const NTFS_MFLAG_CASEINS: ::c_int = 0x1;
+pub const NTFS_MFLAG_ALLNAMES: ::c_int = 0x2;
+
+pub const TMPFS_ARGS_VERSION: ::c_int = 1;
+
+pub const MAP_STACK : ::c_int = 0x4000;
+
+// https://github.com/openbsd/src/blob/master/sys/net/if.h#L187
+pub const IFF_UP: ::c_int = 0x1; // interface is up
+pub const IFF_BROADCAST: ::c_int = 0x2; // broadcast address valid
+pub const IFF_DEBUG: ::c_int = 0x4; // turn on debugging
+pub const IFF_LOOPBACK: ::c_int = 0x8; // is a loopback net
+pub const IFF_POINTOPOINT: ::c_int = 0x10; // interface is point-to-point link
+pub const IFF_STATICARP: ::c_int = 0x20; // only static ARP
+pub const IFF_RUNNING: ::c_int = 0x40; // resources allocated
+pub const IFF_NOARP: ::c_int = 0x80; // no address resolution protocol
+pub const IFF_PROMISC: ::c_int = 0x100; // receive all packets
+pub const IFF_ALLMULTI: ::c_int = 0x200; // receive all multicast packets
+pub const IFF_OACTIVE: ::c_int = 0x400; // transmission in progress
+pub const IFF_SIMPLEX: ::c_int = 0x800; // can't hear own transmissions
+pub const IFF_LINK0: ::c_int = 0x1000; // per link layer defined bit
+pub const IFF_LINK1: ::c_int = 0x2000; // per link layer defined bit
+pub const IFF_LINK2: ::c_int = 0x4000; // per link layer defined bit
+pub const IFF_MULTICAST: ::c_int = 0x8000; // supports multicast
+
+pub const PTHREAD_STACK_MIN : ::size_t = 4096;
+pub const SIGSTKSZ : ::size_t = 28672;
+
+pub const PT_FIRSTMACH: ::c_int = 32;
+
 pub const SOCK_CLOEXEC: ::c_int = 0x8000;
 pub const SOCK_NONBLOCK: ::c_int = 0x4000;
 pub const SOCK_DNS: ::c_int = 0x1000;
@@ -888,15 +1291,73 @@ pub const PTRACE_FORK: ::c_int = 0x0002;
 
 pub const WCONTINUED: ::c_int = 8;
 
+fn _ALIGN(p: usize) -> usize {
+    (p + _ALIGNBYTES) & !_ALIGNBYTES
+}
+
 f! {
     pub fn WIFCONTINUED(status: ::c_int) -> bool {
         status & 0o177777 == 0o177777
     }
+
+        pub fn CMSG_DATA(cmsg: *const ::cmsghdr) -> *mut ::c_uchar {
+        (cmsg as *mut ::c_uchar)
+            .offset(_ALIGN(::mem::size_of::<::cmsghdr>()) as isize)
+    }
+
+    pub fn CMSG_LEN(length: ::c_uint) -> ::c_uint {
+        _ALIGN(::mem::size_of::<::cmsghdr>()) as ::c_uint + length
+    }
+
+    pub fn CMSG_NXTHDR(mhdr: *const ::msghdr, cmsg: *const ::cmsghdr)
+        -> *mut ::cmsghdr
+    {
+        if cmsg.is_null() {
+            return ::CMSG_FIRSTHDR(mhdr);
+        };
+        let next = cmsg as usize + _ALIGN((*cmsg).cmsg_len as usize)
+            + _ALIGN(::mem::size_of::<::cmsghdr>());
+        let max = (*mhdr).msg_control as usize
+            + (*mhdr).msg_controllen as usize;
+        if next > max {
+            0 as *mut ::cmsghdr
+        } else {
+            (cmsg as usize + _ALIGN((*cmsg).cmsg_len as usize))
+                as *mut ::cmsghdr
+        }
+    }
+
+    pub fn CMSG_SPACE(length: ::c_uint) -> ::c_uint {
+        (_ALIGN(::mem::size_of::<::cmsghdr>()) + _ALIGN(length as usize))
+            as ::c_uint
+    }
+
+    pub fn WSTOPSIG(status: ::c_int) -> ::c_int {
+        status >> 8
+    }
+
+    pub fn WIFSIGNALED(status: ::c_int) -> bool {
+        (status & 0o177) != 0o177 && (status & 0o177) != 0
+    }
+
+    pub fn WIFSTOPPED(status: ::c_int) -> bool {
+        (status & 0o177) == 0o177
+    }
 }
 
 extern {
     pub fn gettimeofday(tp: *mut ::timeval,
                         tz: *mut ::timezone) -> ::c_int;
+    pub fn accept4(s: ::c_int, addr: *mut ::sockaddr,
+                   addrlen: *mut ::socklen_t, flags: ::c_int) -> ::c_int;
+    pub fn execvpe(file: *const ::c_char, argv: *const *const ::c_char,
+                   envp: *const *const ::c_char) -> ::c_int;
+    pub fn pledge(promises: *const ::c_char,
+                  execpromises: *const ::c_char) -> ::c_int;
+    pub fn strtonum(nptr: *const ::c_char, minval: ::c_longlong,
+                    maxval: ::c_longlong,
+                    errstr: *mut *const ::c_char) -> ::c_longlong;
+    pub fn dup3(src: ::c_int, dst: ::c_int, flags: ::c_int) -> ::c_int;
     pub fn chflags(path: *const ::c_char, flags: ::c_uint) -> ::c_int;
     pub fn fchflags(fd: ::c_int, flags: ::c_uint) -> ::c_int;
     pub fn chflagsat(fd: ::c_int, path: *const ::c_char, flags: ::c_uint,
@@ -938,10 +1399,26 @@ extern {
 }
 
 cfg_if! {
-    if #[cfg(target_os = "openbsd")] {
-        mod openbsd;
-        pub use self::openbsd::*;
+    if #[cfg(libc_union)] {
+        extern {
+            // these functions use statfs which uses the union mount_info:
+            pub fn statfs(path: *const ::c_char, buf: *mut statfs) -> ::c_int;
+            pub fn fstatfs(fd: ::c_int, buf: *mut statfs) -> ::c_int;
+        }
+    }
+}
+
+cfg_if! {
+    if #[cfg(target_arch = "x86")] {
+        mod x86;
+        pub use self::x86::*;
+    } else if #[cfg(target_arch = "x86_64")] {
+        mod x86_64;
+        pub use self::x86_64::*;
+    } else if #[cfg(target_arch = "aarch64")] {
+        mod aarch64;
+        pub use self::aarch64::*;
     } else {
-        // Unknown target_os
+        // Unknown target_arch
     }
 }
diff --git a/src/unix/bsd/netbsdlike/openbsdlike/openbsd/x86.rs b/src/unix/bsd/netbsdlike/openbsd/x86.rs
similarity index 100%
rename from src/unix/bsd/netbsdlike/openbsdlike/openbsd/x86.rs
rename to src/unix/bsd/netbsdlike/openbsd/x86.rs
diff --git a/src/unix/bsd/netbsdlike/openbsdlike/openbsd/x86_64.rs b/src/unix/bsd/netbsdlike/openbsd/x86_64.rs
similarity index 100%
rename from src/unix/bsd/netbsdlike/openbsdlike/openbsd/x86_64.rs
rename to src/unix/bsd/netbsdlike/openbsd/x86_64.rs
diff --git a/src/unix/bsd/netbsdlike/openbsdlike/openbsd/mod.rs b/src/unix/bsd/netbsdlike/openbsdlike/openbsd/mod.rs
deleted file mode 100644
index c1687111b707cf84fbe3d3a0b22cd5f6a8ba0c2e..0000000000000000000000000000000000000000
--- a/src/unix/bsd/netbsdlike/openbsdlike/openbsd/mod.rs
+++ /dev/null
@@ -1,497 +0,0 @@
-s! {
-    pub struct glob_t {
-        pub gl_pathc:   ::size_t,
-        pub gl_matchc:  ::size_t,
-        pub gl_offs:    ::size_t,
-        pub gl_flags:   ::c_int,
-        pub gl_pathv:   *mut *mut ::c_char,
-        __unused1: *mut ::c_void,
-        __unused2: *mut ::c_void,
-        __unused3: *mut ::c_void,
-        __unused4: *mut ::c_void,
-        __unused5: *mut ::c_void,
-        __unused6: *mut ::c_void,
-        __unused7: *mut ::c_void,
-    }
-
-    pub struct lconv {
-        pub decimal_point: *mut ::c_char,
-        pub thousands_sep: *mut ::c_char,
-        pub grouping: *mut ::c_char,
-        pub int_curr_symbol: *mut ::c_char,
-        pub currency_symbol: *mut ::c_char,
-        pub mon_decimal_point: *mut ::c_char,
-        pub mon_thousands_sep: *mut ::c_char,
-        pub mon_grouping: *mut ::c_char,
-        pub positive_sign: *mut ::c_char,
-        pub negative_sign: *mut ::c_char,
-        pub int_frac_digits: ::c_char,
-        pub frac_digits: ::c_char,
-        pub p_cs_precedes: ::c_char,
-        pub p_sep_by_space: ::c_char,
-        pub n_cs_precedes: ::c_char,
-        pub n_sep_by_space: ::c_char,
-        pub p_sign_posn: ::c_char,
-        pub n_sign_posn: ::c_char,
-        pub int_p_cs_precedes: ::c_char,
-        pub int_p_sep_by_space: ::c_char,
-        pub int_n_cs_precedes: ::c_char,
-        pub int_n_sep_by_space: ::c_char,
-        pub int_p_sign_posn: ::c_char,
-        pub int_n_sign_posn: ::c_char,
-    }
-
-    pub struct ufs_args {
-        pub fspec: *mut ::c_char,
-        pub export_info: export_args,
-    }
-
-    pub struct mfs_args {
-        pub fspec: *mut ::c_char,
-        pub export_info: export_args,
-        // https://github.com/openbsd/src/blob/master/sys/sys/types.h#L134
-        pub base: *mut ::c_char,
-        pub size: ::c_ulong,
-    }
-
-    pub struct iso_args {
-        pub fspec: *mut ::c_char,
-        pub export_info: export_args,
-        pub flags: ::c_int,
-        pub sess: ::c_int,
-    }
-
-    pub struct nfs_args {
-        pub version: ::c_int,
-        pub addr: *mut ::sockaddr,
-        pub addrlen: ::c_int,
-        pub sotype: ::c_int,
-        pub proto: ::c_int,
-        pub fh: *mut ::c_uchar,
-        pub fhsize: ::c_int,
-        pub flags: ::c_int,
-        pub wsize: ::c_int,
-        pub rsize: ::c_int,
-        pub readdirsize: ::c_int,
-        pub timeo: ::c_int,
-        pub retrans: ::c_int,
-        pub maxgrouplist: ::c_int,
-        pub readahead: ::c_int,
-        pub leaseterm: ::c_int,
-        pub deadthresh: ::c_int,
-        pub hostname: *mut ::c_char,
-        pub acregmin: ::c_int,
-        pub acregmax: ::c_int,
-        pub acdirmin: ::c_int,
-        pub acdirmax: ::c_int,
-    }
-
-    pub struct msdosfs_args {
-        pub fspec: *mut ::c_char,
-        pub export_info: export_args,
-        pub uid: ::uid_t,
-        pub gid: ::gid_t,
-        pub mask: ::mode_t,
-        pub flags: ::c_int,
-    }
-
-    pub struct ntfs_args {
-        pub fspec: *mut ::c_char,
-        pub export_info: export_args,
-        pub uid: ::uid_t,
-        pub gid: ::gid_t,
-        pub mode: ::mode_t,
-        pub flag: ::c_ulong,
-    }
-
-    pub struct udf_args {
-        pub fspec: *mut ::c_char,
-        pub lastblock: ::uint32_t,
-    }
-
-    pub struct tmpfs_args {
-        pub ta_version: ::c_int,
-        pub ta_nodes_max: ::ino_t,
-        pub ta_size_max: ::off_t,
-        pub ta_root_uid: ::uid_t,
-        pub ta_root_gid: ::gid_t,
-        pub ta_root_mode: ::mode_t,
-    }
-
-    pub struct fusefs_args {
-        pub name: *mut ::c_char,
-        pub fd: ::c_int,
-        pub max_read: ::c_int,
-        pub allow_other: ::c_int,
-    }
-
-    pub struct xucred {
-        pub cr_uid: ::uid_t,
-        pub cr_gid: ::gid_t,
-        pub cr_ngroups: ::c_short,
-        //https://github.com/openbsd/src/blob/master/sys/sys/syslimits.h#L44
-        pub cr_groups: [::gid_t; 16],
-    }
-
-    pub struct export_args {
-        pub ex_flags: ::c_int,
-        pub ex_root: ::uid_t,
-        pub ex_anon: xucred,
-        pub ex_addr: *mut ::sockaddr,
-        pub ex_addrlen: ::c_int,
-        pub ex_mask: *mut ::sockaddr,
-        pub ex_masklen: ::c_int,
-    }
-}
-
-s_no_extra_traits! {
-    pub union mount_info {
-        pub ufs_args: ufs_args,
-        pub mfs_args: mfs_args,
-        pub nfs_args: nfs_args,
-        pub iso_args: iso_args,
-        pub msdosfs_args: msdosfs_args,
-        pub ntfs_args: ntfs_args,
-        pub tmpfs_args: tmpfs_args,
-        align: [::c_char; 160],
-    }
-}
-
-cfg_if! {
-    if #[cfg(feature = "extra_traits")] {
-        impl PartialEq for mount_info {
-            fn eq(&self, other: &mount_info) -> bool {
-                unsafe {
-                    self.align
-                        .iter()
-                        .zip(other.align.iter())
-                        .all(|(a,b)| a == b)
-                }
-            }
-        }
-
-        impl Eq for mount_info { }
-
-        impl ::fmt::Debug for mount_info {
-            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
-                f.debug_struct("mount_info")
-                // FIXME: .field("align", &self.align)
-                    .finish()
-            }
-        }
-
-        impl ::hash::Hash for mount_info {
-            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
-                unsafe { self.align.hash(state) };
-            }
-        }
-    }
-}
-
-cfg_if! {
-    if #[cfg(libc_union)] {
-        s_no_extra_traits! {
-            // This type uses the union mount_info:
-            pub struct statfs {
-                pub f_flags: ::uint32_t,
-                pub f_bsize: ::uint32_t,
-                pub f_iosize: ::uint32_t,
-                pub f_blocks: ::uint64_t,
-                pub f_bfree: ::uint64_t,
-                pub f_bavail: ::int64_t,
-                pub f_files: ::uint64_t,
-                pub f_ffree: ::uint64_t,
-                pub f_favail: ::int64_t,
-                pub f_syncwrites: ::uint64_t,
-                pub f_syncreads: ::uint64_t,
-                pub f_asyncwrites: ::uint64_t,
-                pub f_asyncreads: ::uint64_t,
-                pub f_fsid: ::fsid_t,
-                pub f_namemax: ::uint32_t,
-                pub f_owner: ::uid_t,
-                pub f_ctime: ::uint64_t,
-                pub f_fstypename: [::c_char; 16],
-                pub f_mntonname: [::c_char; 90],
-                pub f_mntfromname: [::c_char; 90],
-                pub f_mntfromspec: [::c_char; 90],
-                pub mount_info: mount_info,
-            }
-        }
-
-        cfg_if! {
-            if #[cfg(feature = "extra_traits")] {
-                impl PartialEq for statfs {
-                    fn eq(&self, other: &statfs) -> bool {
-                        self.f_flags == other.f_flags
-                            && self.f_bsize == other.f_bsize
-                            && self.f_iosize == other.f_iosize
-                            && self.f_blocks == other.f_blocks
-                            && self.f_bfree == other.f_bfree
-                            && self.f_bavail == other.f_bavail
-                            && self.f_files == other.f_files
-                            && self.f_ffree == other.f_ffree
-                            && self.f_favail == other.f_favail
-                            && self.f_syncwrites == other.f_syncwrites
-                            && self.f_syncreads == other.f_syncreads
-                            && self.f_asyncwrites == other.f_asyncwrites
-                            && self.f_asyncreads == other.f_asyncreads
-                            && self.f_fsid == other.f_fsid
-                            && self.f_namemax == other.f_namemax
-                            && self.f_owner == other.f_owner
-                            && self.f_ctime == other.f_ctime
-                            && self.f_fstypename
-                            .iter()
-                            .zip(other.f_fstypename.iter())
-                            .all(|(a,b)| a == b)
-                            && self.f_mntonname
-                            .iter()
-                            .zip(other.f_mntonname.iter())
-                            .all(|(a,b)| a == b)
-                            && self.f_mntfromname
-                            .iter()
-                            .zip(other.f_mntfromname.iter())
-                            .all(|(a,b)| a == b)
-                            && self.f_mntfromspec
-                            .iter()
-                            .zip(other.f_mntfromspec.iter())
-                            .all(|(a,b)| a == b)
-                            && self.mount_info == other.mount_info
-                    }
-                }
-
-                impl Eq for statfs { }
-
-                impl ::fmt::Debug for statfs {
-                    fn fmt(&self, f: &mut ::fmt::Formatter)
-                           -> ::fmt::Result {
-                        f.debug_struct("statfs")
-                            .field("f_flags", &self.f_flags)
-                            .field("f_bsize", &self.f_bsize)
-                            .field("f_iosize", &self.f_iosize)
-                            .field("f_blocks", &self.f_blocks)
-                            .field("f_bfree", &self.f_bfree)
-                            .field("f_bavail", &self.f_bavail)
-                            .field("f_files", &self.f_files)
-                            .field("f_ffree", &self.f_ffree)
-                            .field("f_favail", &self.f_favail)
-                            .field("f_syncwrites", &self.f_syncwrites)
-                            .field("f_syncreads", &self.f_syncreads)
-                            .field("f_asyncwrites", &self.f_asyncwrites)
-                            .field("f_asyncreads", &self.f_asyncreads)
-                            .field("f_fsid", &self.f_fsid)
-                            .field("f_namemax", &self.f_namemax)
-                            .field("f_owner", &self.f_owner)
-                            .field("f_ctime", &self.f_ctime)
-                        // FIXME: .field("f_fstypename", &self.f_fstypename)
-                        // FIXME: .field("f_mntonname", &self.f_mntonname)
-                        // FIXME: .field("f_mntfromname", &self.f_mntfromname)
-                        // FIXME: .field("f_mntfromspec", &self.f_mntfromspec)
-                            .field("mount_info", &self.mount_info)
-                            .finish()
-                    }
-                }
-
-                impl ::hash::Hash for statfs {
-                    fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
-                        self.f_flags.hash(state);
-                        self.f_bsize.hash(state);
-                        self.f_iosize.hash(state);
-                        self.f_blocks.hash(state);
-                        self.f_bfree.hash(state);
-                        self.f_bavail.hash(state);
-                        self.f_files.hash(state);
-                        self.f_ffree.hash(state);
-                        self.f_favail.hash(state);
-                        self.f_syncwrites.hash(state);
-                        self.f_syncreads.hash(state);
-                        self.f_asyncwrites.hash(state);
-                        self.f_asyncreads.hash(state);
-                        self.f_fsid.hash(state);
-                        self.f_namemax.hash(state);
-                        self.f_owner.hash(state);
-                        self.f_ctime.hash(state);
-                        self.f_fstypename.hash(state);
-                        self.f_mntonname.hash(state);
-                        self.f_mntfromname.hash(state);
-                        self.f_mntfromspec.hash(state);
-                        self.mount_info.hash(state);
-                    }
-                }
-            }
-        }
-    }
-}
-
-//https://github.com/openbsd/src/blob/master/sys/sys/mount.h
-pub const ISOFSMNT_NORRIP: ::c_int = 0x1; // disable Rock Ridge Ext
-pub const ISOFSMNT_GENS: ::c_int = 0x2; // enable generation numbers
-pub const ISOFSMNT_EXTATT: ::c_int = 0x4; // enable extended attr
-pub const ISOFSMNT_NOJOLIET: ::c_int = 0x8; // disable Joliet Ext
-pub const ISOFSMNT_SESS: ::c_int = 0x10; // use iso_args.sess
-
-pub const NFS_ARGSVERSION: ::c_int = 4; // change when nfs_args changes
-
-pub const NFSMNT_RESVPORT: ::c_int = 0; // always use reserved ports
-pub const NFSMNT_SOFT: ::c_int = 0x1; // soft mount (hard is default)
-pub const NFSMNT_WSIZE: ::c_int = 0x2; // set write size
-pub const NFSMNT_RSIZE: ::c_int = 0x4; // set read size
-pub const NFSMNT_TIMEO: ::c_int = 0x8; // set initial timeout
-pub const NFSMNT_RETRANS: ::c_int = 0x10; // set number of request retries
-pub const NFSMNT_MAXGRPS: ::c_int = 0x20; // set maximum grouplist size
-pub const NFSMNT_INT: ::c_int = 0x40; // allow interrupts on hard mount
-pub const NFSMNT_NOCONN: ::c_int = 0x80; // Don't Connect the socket
-pub const NFSMNT_NQNFS: ::c_int = 0x100; // Use Nqnfs protocol
-pub const NFSMNT_NFSV3: ::c_int = 0x200; // Use NFS Version 3 protocol
-pub const NFSMNT_KERB: ::c_int = 0x400; // Use Kerberos authentication
-pub const NFSMNT_DUMBTIMR: ::c_int = 0x800; // Don't estimate rtt dynamically
-pub const NFSMNT_LEASETERM: ::c_int = 0x1000; // set lease term (nqnfs)
-pub const NFSMNT_READAHEAD: ::c_int = 0x2000; // set read ahead
-pub const NFSMNT_DEADTHRESH: ::c_int = 0x4000; // set dead server retry thresh
-pub const NFSMNT_NOAC: ::c_int = 0x8000; // disable attribute cache
-pub const NFSMNT_RDIRPLUS: ::c_int = 0x10000; // Use Readdirplus for V3
-pub const NFSMNT_READDIRSIZE: ::c_int = 0x20000; // Set readdir size
-
-/* Flags valid only in mount syscall arguments */
-pub const NFSMNT_ACREGMIN: ::c_int = 0x40000; // acregmin field valid
-pub const NFSMNT_ACREGMAX: ::c_int = 0x80000; // acregmax field valid
-pub const NFSMNT_ACDIRMIN: ::c_int = 0x100000; // acdirmin field valid
-pub const NFSMNT_ACDIRMAX: ::c_int = 0x200000; // acdirmax field valid
-
-/* Flags valid only in kernel */
-pub const NFSMNT_INTERNAL: ::c_int = 0xfffc0000; // Bits set internally
-pub const NFSMNT_HASWRITEVERF: ::c_int = 0x40000; // Has write verifier for V3
-pub const NFSMNT_GOTPATHCONF: ::c_int = 0x80000; // Got the V3 pathconf info
-pub const NFSMNT_GOTFSINFO: ::c_int = 0x100000; // Got the V3 fsinfo
-pub const NFSMNT_MNTD: ::c_int = 0x200000; // Mnt server for mnt point
-pub const NFSMNT_DISMINPROG: ::c_int = 0x400000; // Dismount in progress
-pub const NFSMNT_DISMNT: ::c_int = 0x800000; // Dismounted
-pub const NFSMNT_SNDLOCK: ::c_int = 0x1000000; // Send socket lock
-pub const NFSMNT_WANTSND: ::c_int = 0x2000000; // Want above
-pub const NFSMNT_RCVLOCK: ::c_int = 0x4000000; // Rcv socket lock
-pub const NFSMNT_WANTRCV: ::c_int = 0x8000000; // Want above
-pub const NFSMNT_WAITAUTH: ::c_int = 0x10000000; // Wait for authentication
-pub const NFSMNT_HASAUTH: ::c_int = 0x20000000; // Has authenticator
-pub const NFSMNT_WANTAUTH: ::c_int = 0x40000000; // Wants an authenticator
-pub const NFSMNT_AUTHERR: ::c_int = 0x80000000; // Authentication error
-
-pub const MSDOSFSMNT_SHORTNAME: ::c_int = 0x1; // Force old DOS short names only
-pub const MSDOSFSMNT_LONGNAME: ::c_int = 0x2; // Force Win'95 long names
-pub const MSDOSFSMNT_NOWIN95: ::c_int = 0x4; // Completely ignore Win95 entries
-
-pub const NTFS_MFLAG_CASEINS: ::c_int = 0x1;
-pub const NTFS_MFLAG_ALLNAMES: ::c_int = 0x2;
-
-pub const TMPFS_ARGS_VERSION: ::c_int = 1;
-
-pub const MAP_STACK : ::c_int = 0x4000;
-
-// https://github.com/openbsd/src/blob/master/sys/net/if.h#L187
-pub const IFF_UP: ::c_int = 0x1; // interface is up
-pub const IFF_BROADCAST: ::c_int = 0x2; // broadcast address valid
-pub const IFF_DEBUG: ::c_int = 0x4; // turn on debugging
-pub const IFF_LOOPBACK: ::c_int = 0x8; // is a loopback net
-pub const IFF_POINTOPOINT: ::c_int = 0x10; // interface is point-to-point link
-pub const IFF_STATICARP: ::c_int = 0x20; // only static ARP
-pub const IFF_RUNNING: ::c_int = 0x40; // resources allocated
-pub const IFF_NOARP: ::c_int = 0x80; // no address resolution protocol
-pub const IFF_PROMISC: ::c_int = 0x100; // receive all packets
-pub const IFF_ALLMULTI: ::c_int = 0x200; // receive all multicast packets
-pub const IFF_OACTIVE: ::c_int = 0x400; // transmission in progress
-pub const IFF_SIMPLEX: ::c_int = 0x800; // can't hear own transmissions
-pub const IFF_LINK0: ::c_int = 0x1000; // per link layer defined bit
-pub const IFF_LINK1: ::c_int = 0x2000; // per link layer defined bit
-pub const IFF_LINK2: ::c_int = 0x4000; // per link layer defined bit
-pub const IFF_MULTICAST: ::c_int = 0x8000; // supports multicast
-
-pub const PTHREAD_STACK_MIN : ::size_t = 4096;
-pub const SIGSTKSZ : ::size_t = 28672;
-
-pub const PT_FIRSTMACH: ::c_int = 32;
-
-fn _ALIGN(p: usize) -> usize {
-    (p + _ALIGNBYTES) & !_ALIGNBYTES
-}
-
-f! {
-    pub fn CMSG_DATA(cmsg: *const ::cmsghdr) -> *mut ::c_uchar {
-        (cmsg as *mut ::c_uchar)
-            .offset(_ALIGN(::mem::size_of::<::cmsghdr>()) as isize)
-    }
-
-    pub fn CMSG_LEN(length: ::c_uint) -> ::c_uint {
-        _ALIGN(::mem::size_of::<::cmsghdr>()) as ::c_uint + length
-    }
-
-    pub fn CMSG_NXTHDR(mhdr: *const ::msghdr, cmsg: *const ::cmsghdr)
-        -> *mut ::cmsghdr
-    {
-        if cmsg.is_null() {
-            return ::CMSG_FIRSTHDR(mhdr);
-        };
-        let next = cmsg as usize + _ALIGN((*cmsg).cmsg_len as usize)
-            + _ALIGN(::mem::size_of::<::cmsghdr>());
-        let max = (*mhdr).msg_control as usize
-            + (*mhdr).msg_controllen as usize;
-        if next > max {
-            0 as *mut ::cmsghdr
-        } else {
-            (cmsg as usize + _ALIGN((*cmsg).cmsg_len as usize))
-                as *mut ::cmsghdr
-        }
-    }
-
-    pub fn CMSG_SPACE(length: ::c_uint) -> ::c_uint {
-        (_ALIGN(::mem::size_of::<::cmsghdr>()) + _ALIGN(length as usize))
-            as ::c_uint
-    }
-
-    pub fn WSTOPSIG(status: ::c_int) -> ::c_int {
-        status >> 8
-    }
-
-    pub fn WIFSIGNALED(status: ::c_int) -> bool {
-        (status & 0o177) != 0o177 && (status & 0o177) != 0
-    }
-
-    pub fn WIFSTOPPED(status: ::c_int) -> bool {
-        (status & 0o177) == 0o177
-    }
-}
-
-extern {
-    pub fn accept4(s: ::c_int, addr: *mut ::sockaddr,
-                   addrlen: *mut ::socklen_t, flags: ::c_int) -> ::c_int;
-    pub fn execvpe(file: *const ::c_char, argv: *const *const ::c_char,
-                   envp: *const *const ::c_char) -> ::c_int;
-    pub fn pledge(promises: *const ::c_char,
-                  execpromises: *const ::c_char) -> ::c_int;
-    pub fn strtonum(nptr: *const ::c_char, minval: ::c_longlong,
-                    maxval: ::c_longlong,
-                    errstr: *mut *const ::c_char) -> ::c_longlong;
-    pub fn dup3(src: ::c_int, dst: ::c_int, flags: ::c_int) -> ::c_int;
-}
-
-cfg_if! {
-    if #[cfg(libc_union)] {
-        extern {
-            // these functions use statfs which uses the union mount_info:
-            pub fn statfs(path: *const ::c_char, buf: *mut statfs) -> ::c_int;
-            pub fn fstatfs(fd: ::c_int, buf: *mut statfs) -> ::c_int;
-        }
-    }
-}
-
-cfg_if! {
-    if #[cfg(target_arch = "x86")] {
-        mod x86;
-        pub use self::x86::*;
-    } else if #[cfg(target_arch = "x86_64")] {
-        mod x86_64;
-        pub use self::x86_64::*;
-    } else if #[cfg(target_arch = "aarch64")] {
-        mod aarch64;
-        pub use self::aarch64::*;
-    } else {
-        // Unknown target_arch
-    }
-}