summaryrefslogtreecommitdiff
path: root/src/stdlib
diff options
context:
space:
mode:
authorJakob Kaivo <jkk@ung.org>2019-02-27 19:52:24 -0500
committerJakob Kaivo <jkk@ung.org>2019-02-27 19:52:24 -0500
commit8261f21ea9676bccccf9d03dd0ad72d841bd1ec3 (patch)
treef5fc50a4947cc714dcdfdbe32a3074025f2f1db5 /src/stdlib
parent98f4736e705952cffdc58736a0b3f0fa74bbdbb4 (diff)
make final call in infinite loop so _Noreturn holds true
Diffstat (limited to 'src/stdlib')
-rw-r--r--src/stdlib/_Exit.c6
-rw-r--r--src/stdlib/abort.c5
-rw-r--r--src/stdlib/exit.c6
3 files changed, 11 insertions, 6 deletions
diff --git a/src/stdlib/_Exit.c b/src/stdlib/_Exit.c
index a90d4a24..e1f9d192 100644
--- a/src/stdlib/_Exit.c
+++ b/src/stdlib/_Exit.c
@@ -4,8 +4,10 @@
/** cause normal program termination without handlers **/
_Noreturn void _Exit(int status)
{
- __syscall("_exit", status);
- for (;;);
+ long scno = ((syscall_lookup_t)__libc(SYSCALL_LOOKUP))("exit");
+ for (;;) {
+ __syscall(scno, status);
+ }
}
/***
diff --git a/src/stdlib/abort.c b/src/stdlib/abort.c
index d079bdf1..4c5fd8a4 100644
--- a/src/stdlib/abort.c
+++ b/src/stdlib/abort.c
@@ -8,8 +8,9 @@
_Noreturn void abort(void)
{
- raise(SIGABRT);
- for(;;); /* silence gcc warning about returning */
+ for (;;) {
+ raise(SIGABRT);
+ }
}
/***
diff --git a/src/stdlib/exit.c b/src/stdlib/exit.c
index 8207fd81..f7ce5325 100644
--- a/src/stdlib/exit.c
+++ b/src/stdlib/exit.c
@@ -7,6 +7,7 @@
/** cause normal program termination **/
_Noreturn void exit(int status)
{
+ long scno = ((syscall_lookup_t)__libc(SYSCALL_LOOKUP))("exit");
struct atexit *ae = __libc(ATEXIT);
/* execute all atexit() registered functions in reverse order */
@@ -26,8 +27,9 @@ _Noreturn void exit(int status)
*/
(void)status;
- __syscall(((long (*)(char*))__libc(SYSCALL_LOOKUP))("exit"), status);
- for (;;); /* quiet _Noreturn functions returns warning */
+ for (;;) {
+ __syscall(scno, status);
+ }
}
/***