diff options
-rw-r--r-- | src/stdlib/_Exit.c | 4 | ||||
-rw-r--r-- | src/stdlib/abort.c | 9 | ||||
-rw-r--r-- | src/stdlib/quick_exit.c | 3 |
3 files changed, 10 insertions, 6 deletions
diff --git a/src/stdlib/_Exit.c b/src/stdlib/_Exit.c index b973ebbc..59d045fe 100644 --- a/src/stdlib/_Exit.c +++ b/src/stdlib/_Exit.c @@ -1,12 +1,16 @@ #if 0 #include <stdlib.h> +#include "_safety.h" #include "_syscall.h" /** cause normal program termination without handlers **/ _Noreturn void _Exit(int status) { long scno = __syscall_lookup(exit); + + SIGNAL_SAFE(1); + for (;;) { __syscall(scno, status); } diff --git a/src/stdlib/abort.c b/src/stdlib/abort.c index fb2578c8..cf968456 100644 --- a/src/stdlib/abort.c +++ b/src/stdlib/abort.c @@ -1,13 +1,13 @@ -#if 0 - #include <stdlib.h> -#include <sys/types.h> #include <signal.h> +#include "_safety.h" /** cause abnormal program termination **/ _Noreturn void abort(void) { + SIGNAL_SAFE(1); + for (;;) { raise(SIGABRT); } @@ -26,6 +26,3 @@ IMPLEMENTATION(whether temporary files are removed) IMPLEMENTATION(the value of unsuccessful termination returned to the host environment) STDC(1) */ - - -#endif diff --git a/src/stdlib/quick_exit.c b/src/stdlib/quick_exit.c index 56d4c560..e1f1213a 100644 --- a/src/stdlib/quick_exit.c +++ b/src/stdlib/quick_exit.c @@ -1,11 +1,14 @@ #if 0 #include <stdlib.h> +#include "_safety.h" #include "_stdlib.h" /** cause normal quick program termination **/ _Noreturn void quick_exit(int status) { + SIGNAL_SAFE(1); + /* execute all at_quick_exit() registered functions in reverse order */ while (__stdlib.at_quick_exit) { __stdlib.at_quick_exit->fn(); |