diff --git a/libc-test/build.rs b/libc-test/build.rs
index f2c6c3ccddf5a..09dc440400590 100644
--- a/libc-test/build.rs
+++ b/libc-test/build.rs
@@ -2489,6 +2489,8 @@ fn test_freebsd(target: &str) {
     cfg.skip_fn(move |name| {
         // skip those that are manually verified
         match name {
+            // This is introduced in FreeBSD 14.1
+            "execvpe" => true,
             // The `uname` function in the `utsname.h` FreeBSD header is a C
             // inline function (has no symbol) that calls the `__xuname` symbol.
             // Therefore the function pointer comparison does not make sense for it.
diff --git a/libc-test/semver/freebsd.txt b/libc-test/semver/freebsd.txt
index 5a049d102114e..bb6d67c6d0079 100644
--- a/libc-test/semver/freebsd.txt
+++ b/libc-test/semver/freebsd.txt
@@ -1873,6 +1873,7 @@ eui64_hostton
 eui64_ntoa
 eui64_ntohost
 exect
+execvpe
 execvP
 explicit_bzero
 extattr_delete_fd
diff --git a/src/unix/bsd/freebsdlike/freebsd/mod.rs b/src/unix/bsd/freebsdlike/freebsd/mod.rs
index a2942913b95d1..53f1f7adcaffd 100644
--- a/src/unix/bsd/freebsdlike/freebsd/mod.rs
+++ b/src/unix/bsd/freebsdlike/freebsd/mod.rs
@@ -5534,6 +5534,12 @@ extern "C" {
         idx1: ::c_ulong,
         idx2: ::c_ulong,
     ) -> ::c_int;
+
+    pub fn execvpe(
+        file: *const ::c_char,
+        argv: *const *const ::c_char,
+        envp: *const *const ::c_char,
+    ) -> ::c_int;
 }
 
 #[link(name = "memstat")]