aboutsummaryrefslogtreecommitdiff
path: root/lib/libc/csu/libc_start1.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc/csu/libc_start1.c')
-rw-r--r--lib/libc/csu/libc_start1.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/libc/csu/libc_start1.c b/lib/libc/csu/libc_start1.c
index 045ea1e68141..5b08ba03ba8c 100644
--- a/lib/libc/csu/libc_start1.c
+++ b/lib/libc/csu/libc_start1.c
@@ -28,6 +28,7 @@
#include <sys/param.h>
#include <sys/elf.h>
#include <sys/elf_common.h>
+#include <errno.h>
#include <stdlib.h>
#include "libc_private.h"
@@ -169,6 +170,13 @@ __libc_start1(int argc, char *argv[], char *env[], void (*cleanup)(void),
}
handle_static_init(argc, argv, env);
+
+ /*
+ * C17 4.3 paragraph 3:
+ * The value of errno in the initial thread is zero at program
+ * startup.
+ */
+ errno = 0;
exit(mainX(argc, argv, env));
}
@@ -194,5 +202,6 @@ __libc_start1_gcrt(int argc, char *argv[], char *env[],
monstartup(eprolp, etextp);
handle_static_init(argc, argv, env);
+ errno = 0;
exit(mainX(argc, argv, env));
}