diff --git a/include/bits/errno.h b/include/bits/errno.h
index 3d6409a2e781f58453b21df1218a2fd7f7bd04b4..9594ee574d9cec805e44c09bc28a172e37882735 100644
--- a/include/bits/errno.h
+++ b/include/bits/errno.h
@@ -9,6 +9,7 @@ extern "C" {
 
 #define errno (*__errno_location())
 #define program_invocation_name (*__program_invocation_name())
+#define program_invocation_short_name (*__program_invocation_short_name())
 
 #ifdef __cplusplus
 } // extern "C"
diff --git a/src/header/errno/mod.rs b/src/header/errno/mod.rs
index 0530f74ee442c3a9850ea9969af4a01c2eec5393..7a51f0b202546e46970eeac59c4688be1895f85e 100644
--- a/src/header/errno/mod.rs
+++ b/src/header/errno/mod.rs
@@ -18,6 +18,23 @@ pub unsafe extern "C" fn __program_invocation_name() -> *mut *mut c_char {
     &mut platform::inner_argv[0]
 }
 
+#[no_mangle]
+pub unsafe extern "C" fn __program_invocation_short_name() -> *mut *mut c_char {
+    let mut ptr = platform::inner_argv[0];
+    let mut slash_ptr = ptr;
+    loop {
+        let b = *ptr as u8;
+        if b == 0 {
+            return &mut slash_ptr;
+        } else {
+            ptr = ptr.add(1);
+            if b == b'/' {
+                slash_ptr = ptr;
+            }
+        }
+    }
+}
+
 pub const EPERM: c_int = 1; /* Operation not permitted */
 pub const ENOENT: c_int = 2; /* No such file or directory */
 pub const ESRCH: c_int = 3; /* No such process */
diff --git a/tests/errno.c b/tests/errno.c
index 699bfa96a59106da4cd78f3d9e3a27df6872fcca..92bc5515a8f4fc1e24107bae05f2da8c3fe3c468 100644
--- a/tests/errno.c
+++ b/tests/errno.c
@@ -5,9 +5,11 @@
 int main(int argc, char **argv) {
     puts(argv[0]);
     puts(program_invocation_name);
+    puts(program_invocation_short_name);
 
     program_invocation_name = "yes, you can change this";
 
     puts(argv[0]);
     puts(program_invocation_name);
+    puts(program_invocation_short_name);
 }
diff --git a/tests/expected/bins_dynamic/errno.stdout b/tests/expected/bins_dynamic/errno.stdout
index 4c4608349b07c566aec56afba6cf755868ec8393..b3aff4878b1ac58eaa9466b018cfffafbbfeffd7 100644
--- a/tests/expected/bins_dynamic/errno.stdout
+++ b/tests/expected/bins_dynamic/errno.stdout
@@ -1,4 +1,6 @@
 bins_dynamic/errno
 bins_dynamic/errno
+errno
+yes, you can change this
 yes, you can change this
 yes, you can change this
diff --git a/tests/expected/bins_static/errno.stdout b/tests/expected/bins_static/errno.stdout
index 9d4b10bd4fc502a3e5b28adb0e6d09d403a8e098..a8236cdb85b918c41a7850e63fbfecd254b558f6 100644
--- a/tests/expected/bins_static/errno.stdout
+++ b/tests/expected/bins_static/errno.stdout
@@ -1,4 +1,6 @@
 bins_static/errno
 bins_static/errno
+errno
+yes, you can change this
 yes, you can change this
 yes, you can change this