diff --git a/include/errno.h b/include/errno.h
new file mode 100644
index 0000000000000000000000000000000000000000..f1761777c5bd1cdff39b0b42764baac82aee1c12
--- /dev/null
+++ b/include/errno.h
@@ -0,0 +1 @@
+extern int errno;
diff --git a/src/platform/src/lib.rs b/src/platform/src/lib.rs
index 63fc300c1c2eb97efe0cde33ed580685c1869ae7..0719f8b84307ba8e69946064d4bc8347a750dbcc 100644
--- a/src/platform/src/lib.rs
+++ b/src/platform/src/lib.rs
@@ -29,6 +29,7 @@ use core::fmt;
 use types::*;
 
 #[thread_local]
+#[no_mangle]
 pub static mut errno: c_int = 0;
 
 pub unsafe fn c_str(s: *const c_char) -> &'static [u8] {
diff --git a/tests/error.c b/tests/error.c
new file mode 100644
index 0000000000000000000000000000000000000000..f904b7349bbaac12d1b6593f25ecd8860e909dab
--- /dev/null
+++ b/tests/error.c
@@ -0,0 +1,8 @@
+#include <unistd.h>
+#include <stdio.h>
+#include <errno.h>
+
+int main(int argc, char** argv) {
+    chdir("nonexistent"); 
+    printf("errno: %d\n", errno);
+}