aboutsummaryrefslogtreecommitdiff
path: root/stdlib/exit.c
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/exit.c')
-rw-r--r--stdlib/exit.c107
1 files changed, 0 insertions, 107 deletions
diff --git a/stdlib/exit.c b/stdlib/exit.c
deleted file mode 100644
index c0b6d666c7..0000000000
--- a/stdlib/exit.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sysdep.h>
-#include "exit.h"
-
-#include "set-hooks.h"
-DEFINE_HOOK (__libc_atexit, (void))
-
-
-/* Call all functions registered with `atexit' and `on_exit',
- in the reverse of the order in which they were registered
- perform stdio cleanup, and terminate program execution with STATUS. */
-void
-attribute_hidden
-__run_exit_handlers (int status, struct exit_function_list **listp,
- bool run_list_atexit, bool run_dtors)
-{
- /* First, call the TLS destructors. */
-#ifndef SHARED
- if (&__call_tls_dtors != NULL)
-#endif
- if (run_dtors)
- __call_tls_dtors ();
-
- /* We do it this way to handle recursive calls to exit () made by
- the functions registered with `atexit' and `on_exit'. We call
- everyone on the list and use the status value in the last
- exit (). */
- while (*listp != NULL)
- {
- struct exit_function_list *cur = *listp;
-
- while (cur->idx > 0)
- {
- const struct exit_function *const f =
- &cur->fns[--cur->idx];
- switch (f->flavor)
- {
- void (*atfct) (void);
- void (*onfct) (int status, void *arg);
- void (*cxafct) (void *arg, int status);
-
- case ef_free:
- case ef_us:
- break;
- case ef_on:
- onfct = f->func.on.fn;
-#ifdef PTR_DEMANGLE
- PTR_DEMANGLE (onfct);
-#endif
- onfct (status, f->func.on.arg);
- break;
- case ef_at:
- atfct = f->func.at;
-#ifdef PTR_DEMANGLE
- PTR_DEMANGLE (atfct);
-#endif
- atfct ();
- break;
- case ef_cxa:
- cxafct = f->func.cxa.fn;
-#ifdef PTR_DEMANGLE
- PTR_DEMANGLE (cxafct);
-#endif
- cxafct (f->func.cxa.arg, status);
- break;
- }
- }
-
- *listp = cur->next;
- if (*listp != NULL)
- /* Don't free the last element in the chain, this is the statically
- allocate element. */
- free (cur);
- }
-
- if (run_list_atexit)
- RUN_HOOK (__libc_atexit, ());
-
- _exit (status);
-}
-
-
-void
-exit (int status)
-{
- __run_exit_handlers (status, &__exit_funcs, true, true);
-}
-libc_hidden_def (exit)