summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/stdlib/_Exit.c4
-rw-r--r--src/stdlib/abort.c9
-rw-r--r--src/stdlib/quick_exit.c3
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();