diff --git a/include/bits/unistd.h b/include/bits/unistd.h
new file mode 100644
index 0000000000000000000000000000000000000000..a7167d047a4988f8fce0372e674c4a4514663fb1
--- /dev/null
+++ b/include/bits/unistd.h
@@ -0,0 +1,7 @@
+#ifndef _BITS_UNISTD_H
+#define _BITS_UNISTD_H
+
+int execl(const char *path, const char* argv0, ...);
+int execle(const char *path, const char* argv0, ...);
+
+#endif
diff --git a/include/bits/exec.h b/src/c/unistd.c
similarity index 82%
rename from include/bits/exec.h
rename to src/c/unistd.c
index 242f02781f6efa3a0fa20c1aaa389f59735caee2..a2a78ce727dc9d161c8d6c55213bcd0c72a24bcf 100644
--- a/include/bits/exec.h
+++ b/src/c/unistd.c
@@ -1,7 +1,7 @@
-#ifndef _BITS_EXEC_H
-#define _BITS_EXEC_H
+#include <stdarg.h>
+#include <stddef.h>
 
-extern int execv(const char *path, char *const *argv);
+int execv(const char *path, char *const *argv);
 
 int execl(const char *path, const char* argv0, ...)
 {
@@ -24,7 +24,7 @@ int execl(const char *path, const char* argv0, ...)
 	}
 }
 
-extern int execve(const char *path, char *const *argv, char *const *envp);
+int execve(const char *path, char *const *argv, char *const *envp);
 
 int execle(const char *path, const char* argv0, ...)
 {
diff --git a/src/unistd/cbindgen.toml b/src/unistd/cbindgen.toml
index ef4ad8123a3ed5aed99c7d22f7187965d2a72dca..a10250c6ddd2b485719f28ee675929235850f5c4 100644
--- a/src/unistd/cbindgen.toml
+++ b/src/unistd/cbindgen.toml
@@ -1,6 +1,6 @@
-sys_includes = ["stddef.h", "stdint.h", "sys/types.h", "stdarg.h", "bits/exec.h"]
+sys_includes = ["stddef.h", "stdint.h", "sys/types.h"]
 include_guard = "_UNISTD_H"
-trailer = "#include <bits/fcntl.h>"
+trailer = "#include <bits/fcntl.h>\n#include <bits/unistd.h>"
 language = "C"
 
 [enum]