diff --git a/build.rs b/build.rs
index 4d67888be835a..66a333d9d0fd7 100644
--- a/build.rs
+++ b/build.rs
@@ -8,8 +8,6 @@ use std::string::String;
 // make sure to add it to this list as well.
 const ALLOWED_CFGS: &'static [&'static str] = &[
     "emscripten_new_stat_abi",
-    "freebsd10",
-    "freebsd11",
     "freebsd12",
     "freebsd13",
     "freebsd14",
@@ -56,18 +54,13 @@ fn main() {
         );
     }
 
-    // The ABI of libc used by libstd is backward compatible with FreeBSD 10.
-    // The ABI of libc from crates.io is backward compatible with FreeBSD 11.
-    //
     // On CI, we detect the actual FreeBSD version and match its ABI exactly,
     // running tests to ensure that the ABI is correct.
     match which_freebsd() {
-        Some(10) if libc_ci || rustc_dep_of_std => set_cfg("freebsd10"),
-        Some(11) if libc_ci => set_cfg("freebsd11"),
         Some(12) if libc_ci => set_cfg("freebsd12"),
         Some(13) if libc_ci => set_cfg("freebsd13"),
         Some(14) if libc_ci => set_cfg("freebsd14"),
-        Some(_) | None => set_cfg("freebsd11"),
+        Some(_) | None => set_cfg("freebsd12"),
     }
 
     match emcc_version_code() {
diff --git a/ci/dox.sh b/ci/dox.sh
index 6dd1e4a2282c7..3ec54c923a08d 100644
--- a/ci/dox.sh
+++ b/ci/dox.sh
@@ -47,7 +47,7 @@ while read -r target; do
     rustup target add "${target}" || true
 
     # Enable extra configuration flags:
-    export RUSTDOCFLAGS="--cfg freebsd11"
+    export RUSTDOCFLAGS="--cfg freebsd12"
 
     # If cargo doc fails, then try with unstable feature:
     if ! cargo doc --target "${target}" \
diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs
deleted file mode 100644
index f32128f775574..0000000000000
--- a/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs
+++ /dev/null
@@ -1,32 +0,0 @@
-#[repr(C)]
-#[cfg_attr(feature = "extra_traits", derive(Debug, Eq, Hash, PartialEq))]
-pub struct stat {
-    pub st_dev: ::dev_t,
-    pub st_ino: ::ino_t,
-    pub st_mode: ::mode_t,
-    pub st_nlink: ::nlink_t,
-    pub st_uid: ::uid_t,
-    pub st_gid: ::gid_t,
-    pub st_rdev: ::dev_t,
-    pub st_atime: ::time_t,
-    pub st_atime_nsec: ::c_long,
-    pub st_mtime: ::time_t,
-    pub st_mtime_nsec: ::c_long,
-    pub st_ctime: ::time_t,
-    pub st_ctime_nsec: ::c_long,
-    pub st_size: ::off_t,
-    pub st_blocks: ::blkcnt_t,
-    pub st_blksize: ::blksize_t,
-    pub st_flags: ::fflags_t,
-    pub st_gen: u32,
-    pub st_lspare: i32,
-    pub st_birthtime: ::time_t,
-    pub st_birthtime_nsec: ::c_long,
-}
-
-impl ::Copy for ::stat {}
-impl ::Clone for ::stat {
-    fn clone(&self) -> ::stat {
-        *self
-    }
-}
diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs
deleted file mode 100644
index de34069eabdf2..0000000000000
--- a/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs
+++ /dev/null
@@ -1,488 +0,0 @@
-// APIs that were changed after FreeBSD 11
-
-// The type of `nlink_t` changed from `u16` to `u64` in FreeBSD 12:
-pub type nlink_t = u16;
-// Type of `dev_t` changed from `u32` to `u64` in FreeBSD 12:
-pub type dev_t = u32;
-// Type of `ino_t` changed from `unsigned int` to `unsigned long` in FreeBSD 12:
-pub type ino_t = u32;
-
-s! {
-    pub struct kevent {
-        pub ident: ::uintptr_t,
-        pub filter: ::c_short,
-        pub flags: ::c_ushort,
-        pub fflags: ::c_uint,
-        pub data: ::intptr_t,
-        pub udata: *mut ::c_void,
-    }
-
-    pub struct shmid_ds {
-        pub shm_perm: ::ipc_perm,
-        pub shm_segsz: ::size_t,
-        pub shm_lpid: ::pid_t,
-        pub shm_cpid: ::pid_t,
-        // Type of shm_nattc changed from `int` to `shmatt_t` (aka `unsigned
-        // int`) in FreeBSD 12:
-        pub shm_nattch: ::c_int,
-        pub shm_atime: ::time_t,
-        pub shm_dtime: ::time_t,
-        pub shm_ctime: ::time_t,
-    }
-
-    pub struct kinfo_proc {
-        /// Size of this structure.
-        pub ki_structsize: ::c_int,
-        /// Reserved: layout identifier.
-        pub ki_layout: ::c_int,
-        /// Address of command arguments.
-        pub ki_args: *mut ::pargs,
-        // This is normally "struct proc".
-        /// Address of proc.
-        pub ki_paddr: *mut ::c_void,
-        // This is normally "struct user".
-        /// Kernel virtual address of u-area.
-        pub ki_addr: *mut ::c_void,
-        // This is normally "struct vnode".
-        /// Pointer to trace file.
-        pub ki_tracep: *mut ::c_void,
-        // This is normally "struct vnode".
-        /// Pointer to executable file.
-        pub ki_textvp: *mut ::c_void,
-        // This is normally "struct filedesc".
-        /// Pointer to open file info.
-        pub ki_fd: *mut ::c_void,
-        // This is normally "struct vmspace".
-        /// Pointer to kernel vmspace struct.
-        pub ki_vmspace: *mut ::c_void,
-        /// Sleep address.
-        pub ki_wchan: *mut ::c_void,
-        /// Process identifier.
-        pub ki_pid: ::pid_t,
-        /// Parent process ID.
-        pub ki_ppid: ::pid_t,
-        /// Process group ID.
-        pub ki_pgid: ::pid_t,
-        /// tty process group ID.
-        pub ki_tpgid: ::pid_t,
-        /// Process session ID.
-        pub ki_sid: ::pid_t,
-        /// Terminal session ID.
-        pub ki_tsid: ::pid_t,
-        /// Job control counter.
-        pub ki_jobc: ::c_short,
-        /// Unused (just here for alignment).
-        pub ki_spare_short1: ::c_short,
-        /// Controlling tty dev.
-        pub ki_tdev: ::dev_t,
-        /// Signals arrived but not delivered.
-        pub ki_siglist: ::sigset_t,
-        /// Current signal mask.
-        pub ki_sigmask: ::sigset_t,
-        /// Signals being ignored.
-        pub ki_sigignore: ::sigset_t,
-        /// Signals being caught by user.
-        pub ki_sigcatch: ::sigset_t,
-        /// Effective user ID.
-        pub ki_uid: ::uid_t,
-        /// Real user ID.
-        pub ki_ruid: ::uid_t,
-        /// Saved effective user ID.
-        pub ki_svuid: ::uid_t,
-        /// Real group ID.
-        pub ki_rgid: ::gid_t,
-        /// Saved effective group ID.
-        pub ki_svgid: ::gid_t,
-        /// Number of groups.
-        pub ki_ngroups: ::c_short,
-        /// Unused (just here for alignment).
-        pub ki_spare_short2: ::c_short,
-        /// Groups.
-        pub ki_groups: [::gid_t; ::KI_NGROUPS],
-        /// Virtual size.
-        pub ki_size: ::vm_size_t,
-        /// Current resident set size in pages.
-        pub ki_rssize: ::segsz_t,
-        /// Resident set size before last swap.
-        pub ki_swrss: ::segsz_t,
-        /// Text size (pages) XXX.
-        pub ki_tsize: ::segsz_t,
-        /// Data size (pages) XXX.
-        pub ki_dsize: ::segsz_t,
-        /// Stack size (pages).
-        pub ki_ssize: ::segsz_t,
-        /// Exit status for wait & stop signal.
-        pub ki_xstat: ::u_short,
-        /// Accounting flags.
-        pub ki_acflag: ::u_short,
-        /// %cpu for process during `ki_swtime`.
-        pub ki_pctcpu: ::fixpt_t,
-        /// Time averaged value of `ki_cpticks`.
-        pub ki_estcpu: ::u_int,
-        /// Time since last blocked.
-        pub ki_slptime: ::u_int,
-        /// Time swapped in or out.
-        pub ki_swtime: ::u_int,
-        /// Number of copy-on-write faults.
-        pub ki_cow: ::u_int,
-        /// Real time in microsec.
-        pub ki_runtime: u64,
-        /// Starting time.
-        pub ki_start: ::timeval,
-        /// Time used by process children.
-        pub ki_childtime: ::timeval,
-        /// P_* flags.
-        pub ki_flag: ::c_long,
-        /// KI_* flags (below).
-        pub ki_kiflag: ::c_long,
-        /// Kernel trace points.
-        pub ki_traceflag: ::c_int,
-        /// S* process status.
-        pub ki_stat: ::c_char,
-        /// Process "nice" value.
-        pub ki_nice: i8, // signed char
-        /// Process lock (prevent swap) count.
-        pub ki_lock: ::c_char,
-        /// Run queue index.
-        pub ki_rqindex: ::c_char,
-        /// Which cpu we are on.
-        pub ki_oncpu_old: ::c_uchar,
-        /// Last cpu we were on.
-        pub ki_lastcpu_old: ::c_uchar,
-        /// Thread name.
-        pub ki_tdname: [::c_char; ::TDNAMLEN + 1],
-        /// Wchan message.
-        pub ki_wmesg: [::c_char; ::WMESGLEN + 1],
-        /// Setlogin name.
-        pub ki_login: [::c_char; ::LOGNAMELEN + 1],
-        /// Lock name.
-        pub ki_lockname: [::c_char; ::LOCKNAMELEN + 1],
-        /// Command name.
-        pub ki_comm: [::c_char; ::COMMLEN + 1],
-        /// Emulation name.
-        pub ki_emul: [::c_char; ::KI_EMULNAMELEN + 1],
-        /// Login class.
-        pub ki_loginclass: [::c_char; ::LOGINCLASSLEN + 1],
-        /// More thread name.
-        pub ki_moretdname: [::c_char; ::MAXCOMLEN - ::TDNAMLEN + 1],
-        /// Spare string space.
-        pub ki_sparestrings: [[::c_char; 23]; 2], // little hack to allow PartialEq
-        /// Spare room for growth.
-        pub ki_spareints: [::c_int; ::KI_NSPARE_INT],
-        /// Which cpu we are on.
-        pub ki_oncpu: ::c_int,
-        /// Last cpu we were on.
-        pub ki_lastcpu: ::c_int,
-        /// PID of tracing process.
-        pub ki_tracer: ::c_int,
-        /// P2_* flags.
-        pub ki_flag2: ::c_int,
-        /// Default FIB number.
-        pub ki_fibnum: ::c_int,
-        /// Credential flags.
-        pub ki_cr_flags: ::u_int,
-        /// Process jail ID.
-        pub ki_jid: ::c_int,
-        /// Number of threads in total.
-        pub ki_numthreads: ::c_int,
-        /// Thread ID.
-        pub ki_tid: ::lwpid_t,
-        /// Process priority.
-        pub ki_pri: ::priority,
-        /// Process rusage statistics.
-        pub ki_rusage: ::rusage,
-        /// rusage of children processes.
-        pub ki_rusage_ch: ::rusage,
-        // This is normally "struct pcb".
-        /// Kernel virtual addr of pcb.
-        pub ki_pcb: *mut ::c_void,
-        /// Kernel virtual addr of stack.
-        pub ki_kstack: *mut ::c_void,
-        /// User convenience pointer.
-        pub ki_udata: *mut ::c_void,
-        // This is normally "struct thread".
-        pub ki_tdaddr: *mut ::c_void,
-        pub ki_spareptrs: [*mut ::c_void; ::KI_NSPARE_PTR],
-        pub ki_sparelongs: [::c_long; ::KI_NSPARE_LONG],
-        /// PS_* flags.
-        pub ki_sflag: ::c_long,
-        /// kthread flag.
-        pub ki_tdflags: ::c_long,
-    }
-}
-
-s_no_extra_traits! {
-    pub struct dirent {
-        pub d_fileno: ::ino_t,
-        pub d_reclen: u16,
-        pub d_type: u8,
-        // Type of `d_namlen` changed from `char` to `u16` in FreeBSD 12:
-        pub d_namlen: u8,
-        pub d_name: [::c_char; 256],
-    }
-
-    pub struct statfs {
-        pub f_version: u32,
-        pub f_type: u32,
-        pub f_flags: u64,
-        pub f_bsize: u64,
-        pub f_iosize: u64,
-        pub f_blocks: u64,
-        pub f_bfree: u64,
-        pub f_bavail: i64,
-        pub f_files: u64,
-        pub f_ffree: i64,
-        pub f_syncwrites: u64,
-        pub f_asyncwrites: u64,
-        pub f_syncreads: u64,
-        pub f_asyncreads: u64,
-        f_spare: [u64; 10],
-        pub f_namemax: u32,
-        pub f_owner: ::uid_t,
-        pub f_fsid: ::fsid_t,
-        f_charspare: [::c_char; 80],
-        pub f_fstypename: [::c_char; 16],
-        // Array length changed from 88 to 1024 in FreeBSD 12:
-        pub f_mntfromname: [::c_char; 88],
-        // Array length changed from 88 to 1024 in FreeBSD 12:
-        pub f_mntonname: [::c_char; 88],
-    }
-
-    pub struct vnstat {
-        pub vn_fileid: u64,
-        pub vn_size: u64,
-        pub vn_mntdir: *mut ::c_char,
-        pub vn_dev: u32,
-        pub vn_fsid: u32,
-        pub vn_type: ::c_int,
-        pub vn_mode: u16,
-        pub vn_devname: [::c_char; ::SPECNAMELEN as usize + 1],
-    }
-}
-
-cfg_if! {
-    if #[cfg(feature = "extra_traits")] {
-        impl PartialEq for statfs {
-            fn eq(&self, other: &statfs) -> bool {
-                self.f_version == other.f_version
-                    && self.f_type == other.f_type
-                    && 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_syncwrites == other.f_syncwrites
-                    && self.f_asyncwrites == other.f_asyncwrites
-                    && self.f_syncreads == other.f_syncreads
-                    && self.f_asyncreads == other.f_asyncreads
-                    && self.f_namemax == other.f_namemax
-                    && self.f_owner == other.f_owner
-                    && self.f_fsid == other.f_fsid
-                    && self.f_fstypename == other.f_fstypename
-                    && self
-                    .f_mntfromname
-                    .iter()
-                    .zip(other.f_mntfromname.iter())
-                    .all(|(a,b)| a == b)
-                    && self
-                    .f_mntonname
-                    .iter()
-                    .zip(other.f_mntonname.iter())
-                    .all(|(a,b)| a == b)
-            }
-        }
-        impl Eq for statfs {}
-        impl ::fmt::Debug for statfs {
-            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
-                f.debug_struct("statfs")
-                    .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_syncwrites", &self.f_syncwrites)
-                    .field("f_asyncwrites", &self.f_asyncwrites)
-                    .field("f_syncreads", &self.f_syncreads)
-                    .field("f_asyncreads", &self.f_asyncreads)
-                    .field("f_namemax", &self.f_namemax)
-                    .field("f_owner", &self.f_owner)
-                    .field("f_fsid", &self.f_fsid)
-                    .field("f_fstypename", &self.f_fstypename)
-                    .field("f_mntfromname", &&self.f_mntfromname[..])
-                    .field("f_mntonname", &&self.f_mntonname[..])
-                    .finish()
-            }
-        }
-        impl ::hash::Hash for statfs {
-            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
-                self.f_version.hash(state);
-                self.f_type.hash(state);
-                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_syncwrites.hash(state);
-                self.f_asyncwrites.hash(state);
-                self.f_syncreads.hash(state);
-                self.f_asyncreads.hash(state);
-                self.f_namemax.hash(state);
-                self.f_owner.hash(state);
-                self.f_fsid.hash(state);
-                self.f_fstypename.hash(state);
-                self.f_mntfromname.hash(state);
-                self.f_mntonname.hash(state);
-            }
-        }
-
-        impl PartialEq for dirent {
-            fn eq(&self, other: &dirent) -> bool {
-                self.d_fileno == other.d_fileno
-                    && self.d_reclen == other.d_reclen
-                    && self.d_type == other.d_type
-                    && self.d_namlen == other.d_namlen
-                    && self
-                    .d_name[..self.d_namlen as _]
-                    .iter()
-                    .zip(other.d_name.iter())
-                    .all(|(a,b)| a == b)
-            }
-        }
-        impl Eq for dirent {}
-        impl ::fmt::Debug for dirent {
-            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
-                f.debug_struct("dirent")
-                    .field("d_fileno", &self.d_fileno)
-                    .field("d_reclen", &self.d_reclen)
-                    .field("d_type", &self.d_type)
-                    .field("d_namlen", &self.d_namlen)
-                    .field("d_name", &&self.d_name[..self.d_namlen as _])
-                    .finish()
-            }
-        }
-        impl ::hash::Hash for dirent {
-            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
-                self.d_fileno.hash(state);
-                self.d_reclen.hash(state);
-                self.d_type.hash(state);
-                self.d_namlen.hash(state);
-                self.d_name[..self.d_namlen as _].hash(state);
-            }
-        }
-
-        impl PartialEq for vnstat {
-            fn eq(&self, other: &vnstat) -> bool {
-                let self_vn_devname: &[::c_char] = &self.vn_devname;
-                let other_vn_devname: &[::c_char] = &other.vn_devname;
-
-                self.vn_fileid == other.vn_fileid &&
-                self.vn_size == other.vn_size &&
-                self.vn_mntdir == other.vn_mntdir &&
-                self.vn_dev == other.vn_dev &&
-                self.vn_fsid == other.vn_fsid &&
-                self.vn_type == other.vn_type &&
-                self.vn_mode == other.vn_mode &&
-                self_vn_devname == other_vn_devname
-            }
-        }
-        impl Eq for vnstat {}
-        impl ::fmt::Debug for vnstat {
-            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
-                let self_vn_devname: &[::c_char] = &self.vn_devname;
-
-                f.debug_struct("vnstat")
-                    .field("vn_fileid", &self.vn_fileid)
-                    .field("vn_size", &self.vn_size)
-                    .field("vn_mntdir", &self.vn_mntdir)
-                    .field("vn_dev", &self.vn_dev)
-                    .field("vn_fsid", &self.vn_fsid)
-                    .field("vn_type", &self.vn_type)
-                    .field("vn_mode", &self.vn_mode)
-                    .field("vn_devname", &self_vn_devname)
-                    .finish()
-            }
-        }
-        impl ::hash::Hash for vnstat {
-            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
-                let self_vn_devname: &[::c_char] = &self.vn_devname;
-
-                self.vn_fileid.hash(state);
-                self.vn_size.hash(state);
-                self.vn_mntdir.hash(state);
-                self.vn_dev.hash(state);
-                self.vn_fsid.hash(state);
-                self.vn_type.hash(state);
-                self.vn_mode.hash(state);
-                self_vn_devname.hash(state);
-            }
-        }
-    }
-}
-
-pub const ELAST: ::c_int = 96;
-pub const RAND_MAX: ::c_int = 0x7fff_fffd;
-pub const KI_NSPARE_PTR: usize = 6;
-pub const MINCORE_SUPER: ::c_int = 0x20;
-/// max length of devicename
-pub const SPECNAMELEN: ::c_int = 63;
-
-safe_f! {
-    pub {const} fn makedev(major: ::c_uint, minor: ::c_uint) -> ::dev_t {
-        let major = major as ::dev_t;
-        let minor = minor as ::dev_t;
-        (major << 8) | minor
-    }
-}
-
-f! {
-    pub fn major(dev: ::dev_t) -> ::c_int {
-         ((dev >> 8) & 0xff) as ::c_int
-    }
-
-    pub fn minor(dev: ::dev_t) -> ::c_int {
-        (dev & 0xffff00ff) as ::c_int
-    }
-}
-
-extern "C" {
-    // Return type ::c_int was removed in FreeBSD 12
-    pub fn setgrent() -> ::c_int;
-
-    // Type of `addr` argument changed from `const void*` to `void*`
-    // in FreeBSD 12
-    pub fn mprotect(addr: *const ::c_void, len: ::size_t, prot: ::c_int) -> ::c_int;
-
-    // Return type ::c_int was removed in FreeBSD 12
-    pub fn freelocale(loc: ::locale_t) -> ::c_int;
-
-    // Return type ::c_int changed to ::ssize_t in FreeBSD 12:
-    pub fn msgrcv(
-        msqid: ::c_int,
-        msgp: *mut ::c_void,
-        msgsz: ::size_t,
-        msgtyp: ::c_long,
-        msgflg: ::c_int,
-    ) -> ::c_int;
-
-    // Type of `path` argument changed from `const void*` to `void*`
-    // in FreeBSD 12
-    pub fn dirname(path: *const ::c_char) -> *mut ::c_char;
-    pub fn basename(path: *const ::c_char) -> *mut ::c_char;
-}
-
-cfg_if! {
-    if #[cfg(any(target_arch = "x86_64",
-                 target_arch = "aarch64",
-                 target_arch = "riscv64"))] {
-        mod b64;
-        pub use self::b64::*;
-    }
-}
diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs
index 10fcaa03a4ef6..5df6df9499731 100644
--- a/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs
+++ b/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs
@@ -1,32 +1,6 @@
 // APIs in FreeBSD 12 that have changed since 11.
 
-pub type nlink_t = u64;
-pub type dev_t = u64;
-pub type ino_t = ::c_ulong;
-pub type shmatt_t = ::c_uint;
-
 s! {
-    pub struct shmid_ds {
-        pub shm_perm: ::ipc_perm,
-        pub shm_segsz: ::size_t,
-        pub shm_lpid: ::pid_t,
-        pub shm_cpid: ::pid_t,
-        pub shm_nattch: ::shmatt_t,
-        pub shm_atime: ::time_t,
-        pub shm_dtime: ::time_t,
-        pub shm_ctime: ::time_t,
-    }
-
-    pub struct kevent {
-        pub ident: ::uintptr_t,
-        pub filter: ::c_short,
-        pub flags: ::c_ushort,
-        pub fflags: ::c_uint,
-        pub data: i64,
-        pub udata: *mut ::c_void,
-        pub ext: [u64; 4],
-    }
-
     pub struct kvm_page {
         pub version: ::c_uint,
         pub paddr: ::c_ulong,
@@ -221,42 +195,6 @@ s! {
 }
 
 s_no_extra_traits! {
-    pub struct dirent {
-        pub d_fileno: ::ino_t,
-        pub d_off: ::off_t,
-        pub d_reclen: u16,
-        pub d_type: u8,
-        d_pad0: u8,
-        pub d_namlen: u16,
-        d_pad1: u16,
-        pub d_name: [::c_char; 256],
-    }
-
-    pub struct statfs {
-        pub f_version: u32,
-        pub f_type: u32,
-        pub f_flags: u64,
-        pub f_bsize: u64,
-        pub f_iosize: u64,
-        pub f_blocks: u64,
-        pub f_bfree: u64,
-        pub f_bavail: i64,
-        pub f_files: u64,
-        pub f_ffree: i64,
-        pub f_syncwrites: u64,
-        pub f_asyncwrites: u64,
-        pub f_syncreads: u64,
-        pub f_asyncreads: u64,
-        f_spare: [u64; 10],
-        pub f_namemax: u32,
-        pub f_owner: ::uid_t,
-        pub f_fsid: ::fsid_t,
-        f_charspare: [::c_char; 80],
-        pub f_fstypename: [::c_char; 16],
-        pub f_mntfromname: [::c_char; 1024],
-        pub f_mntonname: [::c_char; 1024],
-    }
-
     pub struct vnstat {
         pub vn_fileid: u64,
         pub vn_size: u64,
@@ -271,126 +209,6 @@ s_no_extra_traits! {
 
 cfg_if! {
     if #[cfg(feature = "extra_traits")] {
-        impl PartialEq for statfs {
-            fn eq(&self, other: &statfs) -> bool {
-                self.f_version == other.f_version
-                    && self.f_type == other.f_type
-                    && 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_syncwrites == other.f_syncwrites
-                    && self.f_asyncwrites == other.f_asyncwrites
-                    && self.f_syncreads == other.f_syncreads
-                    && self.f_asyncreads == other.f_asyncreads
-                    && self.f_namemax == other.f_namemax
-                    && self.f_owner == other.f_owner
-                    && self.f_fsid == other.f_fsid
-                    && self.f_fstypename == other.f_fstypename
-                    && self
-                    .f_mntfromname
-                    .iter()
-                    .zip(other.f_mntfromname.iter())
-                    .all(|(a,b)| a == b)
-                    && self
-                    .f_mntonname
-                    .iter()
-                    .zip(other.f_mntonname.iter())
-                    .all(|(a,b)| a == b)
-            }
-        }
-        impl Eq for statfs {}
-        impl ::fmt::Debug for statfs {
-            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
-                f.debug_struct("statfs")
-                    .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_syncwrites", &self.f_syncwrites)
-                    .field("f_asyncwrites", &self.f_asyncwrites)
-                    .field("f_syncreads", &self.f_syncreads)
-                    .field("f_asyncreads", &self.f_asyncreads)
-                    .field("f_namemax", &self.f_namemax)
-                    .field("f_owner", &self.f_owner)
-                    .field("f_fsid", &self.f_fsid)
-                    .field("f_fstypename", &self.f_fstypename)
-                    .field("f_mntfromname", &&self.f_mntfromname[..])
-                    .field("f_mntonname", &&self.f_mntonname[..])
-                    .finish()
-            }
-        }
-        impl ::hash::Hash for statfs {
-            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
-                self.f_version.hash(state);
-                self.f_type.hash(state);
-                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_syncwrites.hash(state);
-                self.f_asyncwrites.hash(state);
-                self.f_syncreads.hash(state);
-                self.f_asyncreads.hash(state);
-                self.f_namemax.hash(state);
-                self.f_owner.hash(state);
-                self.f_fsid.hash(state);
-                self.f_charspare.hash(state);
-                self.f_fstypename.hash(state);
-                self.f_mntfromname.hash(state);
-                self.f_mntonname.hash(state);
-            }
-        }
-
-        impl PartialEq for dirent {
-            fn eq(&self, other: &dirent) -> bool {
-                self.d_fileno == other.d_fileno
-                    && self.d_off == other.d_off
-                    && self.d_reclen == other.d_reclen
-                    && self.d_type == other.d_type
-                    && self.d_namlen == other.d_namlen
-                    && self
-                    .d_name[..self.d_namlen as _]
-                    .iter()
-                    .zip(other.d_name.iter())
-                    .all(|(a,b)| a == b)
-            }
-        }
-        impl Eq for dirent {}
-        impl ::fmt::Debug for dirent {
-            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
-                f.debug_struct("dirent")
-                    .field("d_fileno", &self.d_fileno)
-                    .field("d_off", &self.d_off)
-                    .field("d_reclen", &self.d_reclen)
-                    .field("d_type", &self.d_type)
-                    .field("d_namlen", &self.d_namlen)
-                    .field("d_name", &&self.d_name[..self.d_namlen as _])
-                    .finish()
-            }
-        }
-        impl ::hash::Hash for dirent {
-            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
-                self.d_fileno.hash(state);
-                self.d_off.hash(state);
-                self.d_reclen.hash(state);
-                self.d_type.hash(state);
-                self.d_namlen.hash(state);
-                self.d_name[..self.d_namlen as _].hash(state);
-            }
-        }
-
         impl PartialEq for vnstat {
             fn eq(&self, other: &vnstat) -> bool {
                 let self_vn_devname: &[::c_char] = &self.vn_devname;
@@ -454,10 +272,10 @@ safe_f! {
         let major = major as ::dev_t;
         let minor = minor as ::dev_t;
         let mut dev = 0;
-        dev |= ((major & 0xffffff00) as dev_t) << 32;
-        dev |= ((major & 0x000000ff) as dev_t) << 8;
-        dev |= ((minor & 0x0000ff00) as dev_t) << 24;
-        dev |= ((minor & 0xffff00ff) as dev_t) << 0;
+        dev |= ((major & 0xffffff00) as ::dev_t) << 32;
+        dev |= ((major & 0x000000ff) as ::dev_t) << 8;
+        dev |= ((minor & 0x0000ff00) as ::dev_t) << 24;
+        dev |= ((minor & 0xffff00ff) as ::dev_t) << 0;
         dev
     }
 }
@@ -472,22 +290,6 @@ f! {
     }
 }
 
-extern "C" {
-    pub fn setgrent();
-    pub fn mprotect(addr: *mut ::c_void, len: ::size_t, prot: ::c_int) -> ::c_int;
-    pub fn freelocale(loc: ::locale_t);
-    pub fn msgrcv(
-        msqid: ::c_int,
-        msgp: *mut ::c_void,
-        msgsz: ::size_t,
-        msgtyp: ::c_long,
-        msgflg: ::c_int,
-    ) -> ::ssize_t;
-
-    pub fn dirname(path: *mut ::c_char) -> *mut ::c_char;
-    pub fn basename(path: *mut ::c_char) -> *mut ::c_char;
-}
-
 cfg_if! {
     if #[cfg(any(target_arch = "x86_64",
                  target_arch = "aarch64",
diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs
index 0e04a12e70e47..6d0de88f58910 100644
--- a/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs
+++ b/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs
@@ -1,35 +1,10 @@
 // APIs in FreeBSD 14 that have changed since 11.
 
-pub type nlink_t = u64;
-pub type dev_t = u64;
-pub type ino_t = ::c_ulong;
-pub type shmatt_t = ::c_uint;
 pub type kpaddr_t = u64;
 pub type kssize_t = i64;
 pub type domainset_t = __c_anonymous_domainset;
 
 s! {
-    pub struct shmid_ds {
-        pub shm_perm: ::ipc_perm,
-        pub shm_segsz: ::size_t,
-        pub shm_lpid: ::pid_t,
-        pub shm_cpid: ::pid_t,
-        pub shm_nattch: ::shmatt_t,
-        pub shm_atime: ::time_t,
-        pub shm_dtime: ::time_t,
-        pub shm_ctime: ::time_t,
-    }
-
-    pub struct kevent {
-        pub ident: ::uintptr_t,
-        pub filter: ::c_short,
-        pub flags: ::c_ushort,
-        pub fflags: ::c_uint,
-        pub data: i64,
-        pub udata: *mut ::c_void,
-        pub ext: [u64; 4],
-    }
-
     pub struct kvm_page {
         pub kp_version: ::u_int,
         pub kp_paddr: ::kpaddr_t,
@@ -231,42 +206,6 @@ s! {
 }
 
 s_no_extra_traits! {
-    pub struct dirent {
-        pub d_fileno: ::ino_t,
-        pub d_off: ::off_t,
-        pub d_reclen: u16,
-        pub d_type: u8,
-        d_pad0: u8,
-        pub d_namlen: u16,
-        d_pad1: u16,
-        pub d_name: [::c_char; 256],
-    }
-
-    pub struct statfs {
-        pub f_version: u32,
-        pub f_type: u32,
-        pub f_flags: u64,
-        pub f_bsize: u64,
-        pub f_iosize: u64,
-        pub f_blocks: u64,
-        pub f_bfree: u64,
-        pub f_bavail: i64,
-        pub f_files: u64,
-        pub f_ffree: i64,
-        pub f_syncwrites: u64,
-        pub f_asyncwrites: u64,
-        pub f_syncreads: u64,
-        pub f_asyncreads: u64,
-        f_spare: [u64; 10],
-        pub f_namemax: u32,
-        pub f_owner: ::uid_t,
-        pub f_fsid: ::fsid_t,
-        f_charspare: [::c_char; 80],
-        pub f_fstypename: [::c_char; 16],
-        pub f_mntfromname: [::c_char; 1024],
-        pub f_mntonname: [::c_char; 1024],
-    }
-
     pub struct vnstat {
         pub vn_fileid: u64,
         pub vn_size: u64,
@@ -281,126 +220,6 @@ s_no_extra_traits! {
 
 cfg_if! {
     if #[cfg(feature = "extra_traits")] {
-        impl PartialEq for statfs {
-            fn eq(&self, other: &statfs) -> bool {
-                self.f_version == other.f_version
-                    && self.f_type == other.f_type
-                    && 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_syncwrites == other.f_syncwrites
-                    && self.f_asyncwrites == other.f_asyncwrites
-                    && self.f_syncreads == other.f_syncreads
-                    && self.f_asyncreads == other.f_asyncreads
-                    && self.f_namemax == other.f_namemax
-                    && self.f_owner == other.f_owner
-                    && self.f_fsid == other.f_fsid
-                    && self.f_fstypename == other.f_fstypename
-                    && self
-                    .f_mntfromname
-                    .iter()
-                    .zip(other.f_mntfromname.iter())
-                    .all(|(a,b)| a == b)
-                    && self
-                    .f_mntonname
-                    .iter()
-                    .zip(other.f_mntonname.iter())
-                    .all(|(a,b)| a == b)
-            }
-        }
-        impl Eq for statfs {}
-        impl ::fmt::Debug for statfs {
-            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
-                f.debug_struct("statfs")
-                    .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_syncwrites", &self.f_syncwrites)
-                    .field("f_asyncwrites", &self.f_asyncwrites)
-                    .field("f_syncreads", &self.f_syncreads)
-                    .field("f_asyncreads", &self.f_asyncreads)
-                    .field("f_namemax", &self.f_namemax)
-                    .field("f_owner", &self.f_owner)
-                    .field("f_fsid", &self.f_fsid)
-                    .field("f_fstypename", &self.f_fstypename)
-                    .field("f_mntfromname", &&self.f_mntfromname[..])
-                    .field("f_mntonname", &&self.f_mntonname[..])
-                    .finish()
-            }
-        }
-        impl ::hash::Hash for statfs {
-            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
-                self.f_version.hash(state);
-                self.f_type.hash(state);
-                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_syncwrites.hash(state);
-                self.f_asyncwrites.hash(state);
-                self.f_syncreads.hash(state);
-                self.f_asyncreads.hash(state);
-                self.f_namemax.hash(state);
-                self.f_owner.hash(state);
-                self.f_fsid.hash(state);
-                self.f_charspare.hash(state);
-                self.f_fstypename.hash(state);
-                self.f_mntfromname.hash(state);
-                self.f_mntonname.hash(state);
-            }
-        }
-
-        impl PartialEq for dirent {
-            fn eq(&self, other: &dirent) -> bool {
-                self.d_fileno == other.d_fileno
-                    && self.d_off == other.d_off
-                    && self.d_reclen == other.d_reclen
-                    && self.d_type == other.d_type
-                    && self.d_namlen == other.d_namlen
-                    && self
-                    .d_name[..self.d_namlen as _]
-                    .iter()
-                    .zip(other.d_name.iter())
-                    .all(|(a,b)| a == b)
-            }
-        }
-        impl Eq for dirent {}
-        impl ::fmt::Debug for dirent {
-            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
-                f.debug_struct("dirent")
-                    .field("d_fileno", &self.d_fileno)
-                    .field("d_off", &self.d_off)
-                    .field("d_reclen", &self.d_reclen)
-                    .field("d_type", &self.d_type)
-                    .field("d_namlen", &self.d_namlen)
-                    .field("d_name", &&self.d_name[..self.d_namlen as _])
-                    .finish()
-            }
-        }
-        impl ::hash::Hash for dirent {
-            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
-                self.d_fileno.hash(state);
-                self.d_off.hash(state);
-                self.d_reclen.hash(state);
-                self.d_type.hash(state);
-                self.d_namlen.hash(state);
-                self.d_name[..self.d_namlen as _].hash(state);
-            }
-        }
-
         impl PartialEq for vnstat {
             fn eq(&self, other: &vnstat) -> bool {
                 let self_vn_devname: &[::c_char] = &self.vn_devname;
@@ -473,10 +292,10 @@ safe_f! {
         let major = major as ::dev_t;
         let minor = minor as ::dev_t;
         let mut dev = 0;
-        dev |= ((major & 0xffffff00) as dev_t) << 32;
-        dev |= ((major & 0x000000ff) as dev_t) << 8;
-        dev |= ((minor & 0x0000ff00) as dev_t) << 24;
-        dev |= ((minor & 0xffff00ff) as dev_t) << 0;
+        dev |= ((major & 0xffffff00) as ::dev_t) << 32;
+        dev |= ((major & 0x000000ff) as ::dev_t) << 8;
+        dev |= ((minor & 0x0000ff00) as ::dev_t) << 24;
+        dev |= ((minor & 0xffff00ff) as ::dev_t) << 0;
         dev
     }
 }
@@ -492,17 +311,6 @@ f! {
 }
 
 extern "C" {
-    pub fn setgrent();
-    pub fn mprotect(addr: *mut ::c_void, len: ::size_t, prot: ::c_int) -> ::c_int;
-    pub fn freelocale(loc: ::locale_t);
-    pub fn msgrcv(
-        msqid: ::c_int,
-        msgp: *mut ::c_void,
-        msgsz: ::size_t,
-        msgtyp: ::c_long,
-        msgflg: ::c_int,
-    ) -> ::ssize_t;
-
     pub fn cpuset_getdomain(
         level: ::cpulevel_t,
         which: ::cpuwhich_t,
@@ -519,9 +327,6 @@ extern "C" {
         mask: *const ::domainset_t,
         policy: ::c_int,
     ) -> ::c_int;
-
-    pub fn dirname(path: *mut ::c_char) -> *mut ::c_char;
-    pub fn basename(path: *mut ::c_char) -> *mut ::c_char;
 }
 
 #[link(name = "kvm")]
diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs
index a86ca6e7c56ea..fec43231570f5 100644
--- a/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs
+++ b/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs
@@ -1,35 +1,10 @@
 // APIs in FreeBSD 13 that have changed since 11.
 
-pub type nlink_t = u64;
-pub type dev_t = u64;
-pub type ino_t = ::c_ulong;
-pub type shmatt_t = ::c_uint;
 pub type kpaddr_t = u64;
 pub type kssize_t = i64;
 pub type domainset_t = __c_anonymous_domainset;
 
 s! {
-    pub struct shmid_ds {
-        pub shm_perm: ::ipc_perm,
-        pub shm_segsz: ::size_t,
-        pub shm_lpid: ::pid_t,
-        pub shm_cpid: ::pid_t,
-        pub shm_nattch: ::shmatt_t,
-        pub shm_atime: ::time_t,
-        pub shm_dtime: ::time_t,
-        pub shm_ctime: ::time_t,
-    }
-
-    pub struct kevent {
-        pub ident: ::uintptr_t,
-        pub filter: ::c_short,
-        pub flags: ::c_ushort,
-        pub fflags: ::c_uint,
-        pub data: i64,
-        pub udata: *mut ::c_void,
-        pub ext: [u64; 4],
-    }
-
     pub struct kvm_page {
         pub kp_version: ::u_int,
         pub kp_paddr: ::kpaddr_t,
@@ -231,42 +206,6 @@ s! {
 }
 
 s_no_extra_traits! {
-    pub struct dirent {
-        pub d_fileno: ::ino_t,
-        pub d_off: ::off_t,
-        pub d_reclen: u16,
-        pub d_type: u8,
-        d_pad0: u8,
-        pub d_namlen: u16,
-        d_pad1: u16,
-        pub d_name: [::c_char; 256],
-    }
-
-    pub struct statfs {
-        pub f_version: u32,
-        pub f_type: u32,
-        pub f_flags: u64,
-        pub f_bsize: u64,
-        pub f_iosize: u64,
-        pub f_blocks: u64,
-        pub f_bfree: u64,
-        pub f_bavail: i64,
-        pub f_files: u64,
-        pub f_ffree: i64,
-        pub f_syncwrites: u64,
-        pub f_asyncwrites: u64,
-        pub f_syncreads: u64,
-        pub f_asyncreads: u64,
-        f_spare: [u64; 10],
-        pub f_namemax: u32,
-        pub f_owner: ::uid_t,
-        pub f_fsid: ::fsid_t,
-        f_charspare: [::c_char; 80],
-        pub f_fstypename: [::c_char; 16],
-        pub f_mntfromname: [::c_char; 1024],
-        pub f_mntonname: [::c_char; 1024],
-    }
-
     pub struct vnstat {
         pub vn_fileid: u64,
         pub vn_size: u64,
@@ -281,126 +220,6 @@ s_no_extra_traits! {
 
 cfg_if! {
     if #[cfg(feature = "extra_traits")] {
-        impl PartialEq for statfs {
-            fn eq(&self, other: &statfs) -> bool {
-                self.f_version == other.f_version
-                    && self.f_type == other.f_type
-                    && 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_syncwrites == other.f_syncwrites
-                    && self.f_asyncwrites == other.f_asyncwrites
-                    && self.f_syncreads == other.f_syncreads
-                    && self.f_asyncreads == other.f_asyncreads
-                    && self.f_namemax == other.f_namemax
-                    && self.f_owner == other.f_owner
-                    && self.f_fsid == other.f_fsid
-                    && self.f_fstypename == other.f_fstypename
-                    && self
-                    .f_mntfromname
-                    .iter()
-                    .zip(other.f_mntfromname.iter())
-                    .all(|(a,b)| a == b)
-                    && self
-                    .f_mntonname
-                    .iter()
-                    .zip(other.f_mntonname.iter())
-                    .all(|(a,b)| a == b)
-            }
-        }
-        impl Eq for statfs {}
-        impl ::fmt::Debug for statfs {
-            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
-                f.debug_struct("statfs")
-                    .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_syncwrites", &self.f_syncwrites)
-                    .field("f_asyncwrites", &self.f_asyncwrites)
-                    .field("f_syncreads", &self.f_syncreads)
-                    .field("f_asyncreads", &self.f_asyncreads)
-                    .field("f_namemax", &self.f_namemax)
-                    .field("f_owner", &self.f_owner)
-                    .field("f_fsid", &self.f_fsid)
-                    .field("f_fstypename", &self.f_fstypename)
-                    .field("f_mntfromname", &&self.f_mntfromname[..])
-                    .field("f_mntonname", &&self.f_mntonname[..])
-                    .finish()
-            }
-        }
-        impl ::hash::Hash for statfs {
-            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
-                self.f_version.hash(state);
-                self.f_type.hash(state);
-                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_syncwrites.hash(state);
-                self.f_asyncwrites.hash(state);
-                self.f_syncreads.hash(state);
-                self.f_asyncreads.hash(state);
-                self.f_namemax.hash(state);
-                self.f_owner.hash(state);
-                self.f_fsid.hash(state);
-                self.f_charspare.hash(state);
-                self.f_fstypename.hash(state);
-                self.f_mntfromname.hash(state);
-                self.f_mntonname.hash(state);
-            }
-        }
-
-        impl PartialEq for dirent {
-            fn eq(&self, other: &dirent) -> bool {
-                self.d_fileno == other.d_fileno
-                    && self.d_off == other.d_off
-                    && self.d_reclen == other.d_reclen
-                    && self.d_type == other.d_type
-                    && self.d_namlen == other.d_namlen
-                    && self
-                    .d_name[..self.d_namlen as _]
-                    .iter()
-                    .zip(other.d_name.iter())
-                    .all(|(a,b)| a == b)
-            }
-        }
-        impl Eq for dirent {}
-        impl ::fmt::Debug for dirent {
-            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
-                f.debug_struct("dirent")
-                    .field("d_fileno", &self.d_fileno)
-                    .field("d_off", &self.d_off)
-                    .field("d_reclen", &self.d_reclen)
-                    .field("d_type", &self.d_type)
-                    .field("d_namlen", &self.d_namlen)
-                    .field("d_name", &&self.d_name[..self.d_namlen as _])
-                    .finish()
-            }
-        }
-        impl ::hash::Hash for dirent {
-            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
-                self.d_fileno.hash(state);
-                self.d_off.hash(state);
-                self.d_reclen.hash(state);
-                self.d_type.hash(state);
-                self.d_namlen.hash(state);
-                self.d_name[..self.d_namlen as _].hash(state);
-            }
-        }
-
         impl PartialEq for vnstat {
             fn eq(&self, other: &vnstat) -> bool {
                 let self_vn_devname: &[::c_char] = &self.vn_devname;
@@ -473,10 +292,10 @@ safe_f! {
         let major = major as ::dev_t;
         let minor = minor as ::dev_t;
         let mut dev = 0;
-        dev |= ((major & 0xffffff00) as dev_t) << 32;
-        dev |= ((major & 0x000000ff) as dev_t) << 8;
-        dev |= ((minor & 0x0000ff00) as dev_t) << 24;
-        dev |= ((minor & 0xffff00ff) as dev_t) << 0;
+        dev |= ((major & 0xffffff00) as ::dev_t) << 32;
+        dev |= ((major & 0x000000ff) as ::dev_t) << 8;
+        dev |= ((minor & 0x0000ff00) as ::dev_t) << 24;
+        dev |= ((minor & 0xffff00ff) as ::dev_t) << 0;
         dev
     }
 }
diff --git a/src/unix/bsd/freebsdlike/freebsd/mod.rs b/src/unix/bsd/freebsdlike/freebsd/mod.rs
index 4138af576e936..8ab463b525668 100644
--- a/src/unix/bsd/freebsdlike/freebsd/mod.rs
+++ b/src/unix/bsd/freebsdlike/freebsd/mod.rs
@@ -48,6 +48,11 @@ pub type cpusetid_t = ::c_int;
 
 pub type sctp_assoc_t = u32;
 
+pub type nlink_t = u64;
+pub type dev_t = u64;
+pub type ino_t = ::c_ulong;
+pub type shmatt_t = ::c_uint;
+
 #[cfg_attr(feature = "extra_traits", derive(Debug, Hash, PartialEq, Eq))]
 #[repr(u32)]
 pub enum devstat_support_flags {
@@ -429,8 +434,6 @@ s! {
         pub kve_vn_fileid: u64,
         #[cfg(not(freebsd11))]
         pub kve_vn_fsid_freebsd11: u32,
-        #[cfg(freebsd11)]
-        pub kve_vn_fsid: u32,
         pub kve_flags: ::c_int,
         pub kve_resident: ::c_int,
         pub kve_private_resident: ::c_int,
@@ -441,8 +444,6 @@ s! {
         pub kve_vn_size: u64,
         #[cfg(not(freebsd11))]
         pub kve_vn_rdev_freebsd11: u32,
-        #[cfg(freebsd11)]
-        pub kve_vn_rdev: u32,
         pub kve_vn_mode: u16,
         pub kve_status: u16,
         #[cfg(not(freebsd11))]
@@ -451,8 +452,6 @@ s! {
         pub kve_vn_rdev: u64,
         #[cfg(not(freebsd11))]
         _kve_is_spare: [::c_int; 8],
-        #[cfg(freebsd11)]
-        _kve_is_spare: [::c_int; 12],
         pub kve_path: [[::c_char; 32]; 32],
     }
 
@@ -1319,6 +1318,28 @@ s! {
         pub strchange_instrms: u16,
         pub strchange_outstrms: u16,
     }
+
+    pub struct kevent {
+        pub ident: ::uintptr_t,
+        pub filter: ::c_short,
+        pub flags: ::c_ushort,
+        pub fflags: ::c_uint,
+        pub data: i64,
+        pub udata: *mut ::c_void,
+        pub ext: [u64; 4],
+    }
+
+    pub struct shmid_ds {
+        pub shm_perm: ::ipc_perm,
+        pub shm_segsz: ::size_t,
+        pub shm_lpid: ::pid_t,
+        pub shm_cpid: ::pid_t,
+        pub shm_nattch: ::shmatt_t,
+        pub shm_atime: ::time_t,
+        pub shm_dtime: ::time_t,
+        pub shm_ctime: ::time_t,
+    }
+
 }
 
 s_no_extra_traits! {
@@ -1611,6 +1632,42 @@ s_no_extra_traits! {
         pub cause: sctp_error_cause,
         pub hmac_id: u16,
     }
+
+    pub struct dirent {
+        pub d_fileno: ::ino_t,
+        pub d_off: ::off_t,
+        pub d_reclen: u16,
+        pub d_type: u8,
+        d_pad0: u8,
+        pub d_namlen: u16,
+        d_pad1: u16,
+        pub d_name: [::c_char; 256],
+    }
+
+    pub struct statfs {
+        pub f_version: u32,
+        pub f_type: u32,
+        pub f_flags: u64,
+        pub f_bsize: u64,
+        pub f_iosize: u64,
+        pub f_blocks: u64,
+        pub f_bfree: u64,
+        pub f_bavail: i64,
+        pub f_files: u64,
+        pub f_ffree: i64,
+        pub f_syncwrites: u64,
+        pub f_asyncwrites: u64,
+        pub f_syncreads: u64,
+        pub f_asyncreads: u64,
+        f_spare: [u64; 10],
+        pub f_namemax: u32,
+        pub f_owner: ::uid_t,
+        pub f_fsid: ::fsid_t,
+        f_charspare: [::c_char; 80],
+        pub f_fstypename: [::c_char; 16],
+        pub f_mntfromname: [::c_char; 1024],
+        pub f_mntonname: [::c_char; 1024],
+    }
 }
 
 cfg_if! {
@@ -2567,6 +2624,121 @@ cfg_if! {
                 {self.hmac_id}.hash(state);
             }
         }
+        impl PartialEq for statfs {
+            fn eq(&self, other: &statfs) -> bool {
+                self.f_version == other.f_version
+                    && self.f_type == other.f_type
+                    && 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_syncwrites == other.f_syncwrites
+                    && self.f_asyncwrites == other.f_asyncwrites
+                    && self.f_syncreads == other.f_syncreads
+                    && self.f_asyncreads == other.f_asyncreads
+                    && self.f_namemax == other.f_namemax
+                    && self.f_owner == other.f_owner
+                    && self.f_fsid == other.f_fsid
+                    && self.f_fstypename == other.f_fstypename
+                    && self
+                    .f_mntfromname
+                    .iter()
+                    .zip(other.f_mntfromname.iter())
+                    .all(|(a,b)| a == b)
+                    && self
+                    .f_mntonname
+                    .iter()
+                    .zip(other.f_mntonname.iter())
+                    .all(|(a,b)| a == b)
+            }
+        }
+        impl Eq for statfs {}
+        impl ::fmt::Debug for statfs {
+            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
+                f.debug_struct("statfs")
+                    .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_syncwrites", &self.f_syncwrites)
+                    .field("f_asyncwrites", &self.f_asyncwrites)
+                    .field("f_syncreads", &self.f_syncreads)
+                    .field("f_asyncreads", &self.f_asyncreads)
+                    .field("f_namemax", &self.f_namemax)
+                    .field("f_owner", &self.f_owner)
+                    .field("f_fsid", &self.f_fsid)
+                    .field("f_fstypename", &self.f_fstypename)
+                    .field("f_mntfromname", &&self.f_mntfromname[..])
+                    .field("f_mntonname", &&self.f_mntonname[..])
+                    .finish()
+            }
+        }
+        impl ::hash::Hash for statfs {
+            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
+                self.f_version.hash(state);
+                self.f_type.hash(state);
+                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_syncwrites.hash(state);
+                self.f_asyncwrites.hash(state);
+                self.f_syncreads.hash(state);
+                self.f_asyncreads.hash(state);
+                self.f_namemax.hash(state);
+                self.f_owner.hash(state);
+                self.f_fsid.hash(state);
+                self.f_fstypename.hash(state);
+                self.f_mntfromname.hash(state);
+                self.f_mntonname.hash(state);
+            }
+        }
+
+        impl PartialEq for dirent {
+            fn eq(&self, other: &dirent) -> bool {
+                self.d_fileno == other.d_fileno
+                    && self.d_reclen == other.d_reclen
+                    && self.d_type == other.d_type
+                    && self.d_namlen == other.d_namlen
+                    && self
+                    .d_name[..self.d_namlen as _]
+                    .iter()
+                    .zip(other.d_name.iter())
+                    .all(|(a,b)| a == b)
+            }
+        }
+        impl Eq for dirent {}
+        impl ::fmt::Debug for dirent {
+            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
+                f.debug_struct("dirent")
+                    .field("d_fileno", &self.d_fileno)
+                    .field("d_reclen", &self.d_reclen)
+                    .field("d_type", &self.d_type)
+                    .field("d_namlen", &self.d_namlen)
+                    .field("d_name", &&self.d_name[..self.d_namlen as _])
+                    .finish()
+            }
+        }
+        impl ::hash::Hash for dirent {
+            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
+                self.d_fileno.hash(state);
+                self.d_reclen.hash(state);
+                self.d_type.hash(state);
+                self.d_namlen.hash(state);
+                self.d_name[..self.d_namlen as _].hash(state);
+            }
+        }
     }
 }
 
@@ -3880,13 +4052,7 @@ pub const COMMLEN: usize = 19;
 pub const KI_EMULNAMELEN: usize = 16;
 /// number of groups in ki_groups
 pub const KI_NGROUPS: usize = 16;
-cfg_if! {
-    if #[cfg(freebsd11)] {
-        pub const KI_NSPARE_INT: usize = 4;
-    } else {
-        pub const KI_NSPARE_INT: usize = 2;
-    }
-}
+pub const KI_NSPARE_INT: usize = 2;
 pub const KI_NSPARE_LONG: usize = 12;
 /// Flags for the process credential.
 pub const KI_CRF_CAPABILITY_MODE: usize = 0x00000001;
@@ -4062,7 +4228,7 @@ pub const NZERO: ::c_int = 0;
 pub const RUSAGE_THREAD: ::c_int = 1;
 
 cfg_if! {
-    if #[cfg(any(freebsd11, target_pointer_width = "32"))] {
+    if #[cfg(target_pointer_width = "32")] {
         pub const ARG_MAX: ::c_int = 256 * 1024;
     } else {
         pub const ARG_MAX: ::c_int = 2 * 256 * 1024;
@@ -4357,15 +4523,8 @@ pub const PS_FST_FFLAG_HASLOCK: ::c_int = 0x4000;
 pub const MAXFIDSZ: ::c_int = 16;
 /// Length of type name including null.
 pub const MFSNAMELEN: ::c_int = 16;
-cfg_if! {
-    if #[cfg(any(freebsd10, freebsd11))] {
-        /// Size of on/from name bufs.
-        pub const MNAMELEN: ::c_int = 88;
-    } else {
-        /// Size of on/from name bufs.
-        pub const MNAMELEN: ::c_int = 1024;
-    }
-}
+/// Size of on/from name bufs.
+pub const MNAMELEN: ::c_int = 1024;
 
 /// Using journaled soft updates.
 pub const MNT_SUJ: u64 = 0x100000000;
@@ -4861,26 +5020,6 @@ safe_f! {
     }
 }
 
-cfg_if! {
-    if #[cfg(not(any(freebsd10, freebsd11)))] {
-        extern "C" {
-            pub fn fhlink(fhp: *mut fhandle_t, to: *const ::c_char) -> ::c_int;
-            pub fn fhlinkat(fhp: *mut fhandle_t, tofd: ::c_int, to: *const ::c_char) -> ::c_int;
-            pub fn fhreadlink(
-                fhp: *mut fhandle_t,
-                buf: *mut ::c_char,
-                bufsize: ::size_t,
-            ) -> ::c_int;
-            pub fn getfhat(
-                fd: ::c_int,
-                path: *mut ::c_char,
-                fhp: *mut fhandle,
-                flag: ::c_int,
-            ) -> ::c_int;
-        }
-    }
-}
-
 extern "C" {
     #[cfg_attr(doc, doc(alias = "__errno_location"))]
     #[cfg_attr(doc, doc(alias = "errno"))]
@@ -5174,9 +5313,7 @@ extern "C" {
     pub fn pthread_spin_trylock(lock: *mut pthread_spinlock_t) -> ::c_int;
     pub fn pthread_spin_unlock(lock: *mut pthread_spinlock_t) -> ::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")]
     pub fn fstatfs(fd: ::c_int, buf: *mut statfs) -> ::c_int;
 
     pub fn dup3(src: ::c_int, dst: ::c_int, flags: ::c_int) -> ::c_int;
@@ -5208,10 +5345,6 @@ extern "C" {
     pub fn getfh(path: *const ::c_char, fhp: *mut fhandle_t) -> ::c_int;
     pub fn lgetfh(path: *const ::c_char, fhp: *mut fhandle_t) -> ::c_int;
     pub fn getfsstat(buf: *mut ::statfs, bufsize: ::c_long, mode: ::c_int) -> ::c_int;
-    #[cfg_attr(
-        all(target_os = "freebsd", freebsd11),
-        link_name = "getmntinfo@FBSD_1.0"
-    )]
     pub fn getmntinfo(mntbufp: *mut *mut ::statfs, mode: ::c_int) -> ::c_int;
     pub fn mount(
         type_: *const ::c_char,
@@ -5406,6 +5539,18 @@ extern "C" {
         infotype: *mut ::c_uint,
         flags: *mut ::c_int,
     ) -> ::ssize_t;
+    pub fn setgrent();
+    pub fn mprotect(addr: *mut ::c_void, len: ::size_t, prot: ::c_int) -> ::c_int;
+    pub fn freelocale(loc: ::locale_t);
+    pub fn msgrcv(
+        msqid: ::c_int,
+        msgp: *mut ::c_void,
+        msgsz: ::size_t,
+        msgtyp: ::c_long,
+        msgflg: ::c_int,
+    ) -> ::ssize_t;
+    pub fn dirname(path: *mut ::c_char) -> *mut ::c_char;
+    pub fn basename(path: *mut ::c_char) -> *mut ::c_char;
 }
 
 #[link(name = "memstat")]
@@ -5656,9 +5801,6 @@ cfg_if! {
     } else if #[cfg(freebsd12)] {
         mod freebsd12;
         pub use self::freebsd12::*;
-    } else if #[cfg(any(freebsd10, freebsd11))] {
-        mod freebsd11;
-        pub use self::freebsd11::*;
     } else {
         // Unknown freebsd version
     }
diff --git a/src/unix/bsd/freebsdlike/mod.rs b/src/unix/bsd/freebsdlike/mod.rs
index fe69ca42044ca..c46829c8aa0c6 100644
--- a/src/unix/bsd/freebsdlike/mod.rs
+++ b/src/unix/bsd/freebsdlike/mod.rs
@@ -1545,10 +1545,6 @@ extern "C" {
     pub fn getutxid(ut: *const utmpx) -> *mut utmpx;
     pub fn getutxline(ut: *const utmpx) -> *mut utmpx;
     pub fn initgroups(name: *const ::c_char, basegid: ::gid_t) -> ::c_int;
-    #[cfg_attr(
-        all(target_os = "freebsd", any(freebsd11, freebsd10)),
-        link_name = "kevent@FBSD_1.0"
-    )]
     pub fn kevent(
         kq: ::c_int,
         changelist: *const ::kevent,
@@ -1561,10 +1557,6 @@ extern "C" {
     pub fn lutimes(file: *const ::c_char, times: *const ::timeval) -> ::c_int;
     pub fn memrchr(cx: *const ::c_void, c: ::c_int, n: ::size_t) -> *mut ::c_void;
     pub fn mkfifoat(dirfd: ::c_int, pathname: *const ::c_char, mode: ::mode_t) -> ::c_int;
-    #[cfg_attr(
-        all(target_os = "freebsd", any(freebsd11, freebsd10)),
-        link_name = "mknodat@FBSD_1.1"
-    )]
     pub fn mknodat(
         dirfd: ::c_int,
         pathname: *const ::c_char,
diff --git a/src/unix/bsd/mod.rs b/src/unix/bsd/mod.rs
index 6ce041357ebee..e6ce1cecea625 100644
--- a/src/unix/bsd/mod.rs
+++ b/src/unix/bsd/mod.rs
@@ -614,15 +614,9 @@ extern "C" {
     pub fn strerror_r(errnum: ::c_int, buf: *mut c_char, buflen: ::size_t) -> ::c_int;
     pub fn abs(i: ::c_int) -> ::c_int;
     pub fn labs(i: ::c_long) -> ::c_long;
-    #[cfg_attr(
-        all(target_os = "freebsd", any(freebsd12, freebsd11, freebsd10)),
-        link_name = "rand@FBSD_1.0"
-    )]
+    #[cfg_attr(all(target_os = "freebsd", freebsd12), link_name = "rand@FBSD_1.0")]
     pub fn rand() -> ::c_int;
-    #[cfg_attr(
-        all(target_os = "freebsd", any(freebsd12, freebsd11, freebsd10)),
-        link_name = "srand@FBSD_1.0"
-    )]
+    #[cfg_attr(all(target_os = "freebsd", freebsd12), link_name = "srand@FBSD_1.0")]
     pub fn srand(seed: ::c_uint);
 
     pub fn getifaddrs(ifap: *mut *mut ::ifaddrs) -> ::c_int;
@@ -653,10 +647,6 @@ extern "C" {
         link_name = "glob$INODE64"
     )]
     #[cfg_attr(target_os = "netbsd", link_name = "__glob30")]
-    #[cfg_attr(
-        all(target_os = "freebsd", any(freebsd11, freebsd10)),
-        link_name = "glob@FBSD_1.0"
-    )]
     pub fn glob(
         pattern: *const ::c_char,
         flags: ::c_int,
@@ -664,10 +654,6 @@ extern "C" {
         pglob: *mut ::glob_t,
     ) -> ::c_int;
     #[cfg_attr(target_os = "netbsd", link_name = "__globfree30")]
-    #[cfg_attr(
-        all(target_os = "freebsd", any(freebsd11, freebsd10)),
-        link_name = "globfree@FBSD_1.0"
-    )]
     pub fn globfree(pglob: *mut ::glob_t);
 
     pub fn posix_madvise(addr: *mut ::c_void, len: ::size_t, advice: ::c_int) -> ::c_int;
@@ -835,10 +821,7 @@ extern "C" {
         all(target_os = "macos", target_arch = "x86"),
         link_name = "wait4$UNIX2003"
     )]
-    #[cfg_attr(
-        all(target_os = "freebsd", any(freebsd12, freebsd11, freebsd10)),
-        link_name = "wait4@FBSD_1.0"
-    )]
+    #[cfg_attr(all(target_os = "freebsd", freebsd12), link_name = "wait4@FBSD_1.0")]
     pub fn wait4(
         pid: ::pid_t,
         status: *mut ::c_int,
diff --git a/src/unix/mod.rs b/src/unix/mod.rs
index 9b5ce0fceaafb..90ba885a00d4a 100644
--- a/src/unix/mod.rs
+++ b/src/unix/mod.rs
@@ -732,10 +732,6 @@ extern "C" {
         link_name = "fstat$INODE64"
     )]
     #[cfg_attr(target_os = "netbsd", link_name = "__fstat50")]
-    #[cfg_attr(
-        all(target_os = "freebsd", any(freebsd11, freebsd10)),
-        link_name = "fstat@FBSD_1.0"
-    )]
     pub fn fstat(fildes: ::c_int, buf: *mut stat) -> ::c_int;
 
     pub fn mkdir(path: *const c_char, mode: mode_t) -> ::c_int;
@@ -745,10 +741,6 @@ extern "C" {
         link_name = "stat$INODE64"
     )]
     #[cfg_attr(target_os = "netbsd", link_name = "__stat50")]
-    #[cfg_attr(
-        all(target_os = "freebsd", any(freebsd11, freebsd10)),
-        link_name = "stat@FBSD_1.0"
-    )]
     pub fn stat(path: *const c_char, buf: *mut stat) -> ::c_int;
 
     pub fn pclose(stream: *mut ::FILE) -> ::c_int;
@@ -791,10 +783,6 @@ extern "C" {
         link_name = "readdir$INODE64"
     )]
     #[cfg_attr(target_os = "netbsd", link_name = "__readdir30")]
-    #[cfg_attr(
-        all(target_os = "freebsd", any(freebsd11, freebsd10)),
-        link_name = "readdir@FBSD_1.0"
-    )]
     pub fn readdir(dirp: *mut ::DIR) -> *mut ::dirent;
     #[cfg_attr(
         all(target_os = "macos", target_arch = "x86"),
@@ -829,10 +817,6 @@ extern "C" {
         all(target_os = "macos", not(target_arch = "aarch64")),
         link_name = "fstatat$INODE64"
     )]
-    #[cfg_attr(
-        all(target_os = "freebsd", any(freebsd11, freebsd10)),
-        link_name = "fstatat@FBSD_1.1"
-    )]
     pub fn fstatat(
         dirfd: ::c_int,
         pathname: *const ::c_char,
@@ -1022,10 +1006,6 @@ extern "C" {
         link_name = "lstat$INODE64"
     )]
     #[cfg_attr(target_os = "netbsd", link_name = "__lstat50")]
-    #[cfg_attr(
-        all(target_os = "freebsd", any(freebsd11, freebsd10)),
-        link_name = "lstat@FBSD_1.0"
-    )]
     pub fn lstat(path: *const c_char, buf: *mut stat) -> ::c_int;
 
     #[cfg_attr(
@@ -1277,10 +1257,6 @@ extern "C" {
     pub fn timegm(tm: *mut ::tm) -> time_t;
 
     #[cfg_attr(target_os = "netbsd", link_name = "__mknod50")]
-    #[cfg_attr(
-        all(target_os = "freebsd", any(freebsd11, freebsd10)),
-        link_name = "mknod@FBSD_1.0"
-    )]
     pub fn mknod(pathname: *const ::c_char, mode: ::mode_t, dev: ::dev_t) -> ::c_int;
     pub fn gethostname(name: *mut ::c_char, len: ::size_t) -> ::c_int;
     pub fn endservent();
@@ -1466,10 +1442,6 @@ cfg_if! {
             #[cfg_attr(all(target_os = "macos", not(target_arch = "aarch64")),
                        link_name = "readdir_r$INODE64")]
             #[cfg_attr(target_os = "netbsd", link_name = "__readdir_r30")]
-            #[cfg_attr(
-                all(target_os = "freebsd", any(freebsd11, freebsd10)),
-                link_name = "readdir_r@FBSD_1.0"
-            )]
             #[allow(non_autolinks)] // FIXME: `<>` breaks line length limit.
             /// The 64-bit libc on Solaris and illumos only has readdir_r. If a
             /// 32-bit Solaris or illumos target is ever created, it should use