about summary refs log tree commit diff
path: root/stdlib/stdlib.h
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2009-03-08 19:53:12 +0000
committerUlrich Drepper <drepper@redhat.com>2009-03-08 19:53:12 +0000
commit610e67ed5af7e1acf2f96bb964cc2131af570a3d (patch)
tree14daa2846118122a858f3f498a525456a7d74ba0 /stdlib/stdlib.h
parent130ca12eb3d9b2fec32847699ca08ea25aec9130 (diff)
downloadglibc-610e67ed5af7e1acf2f96bb964cc2131af570a3d.tar.gz
glibc-610e67ed5af7e1acf2f96bb964cc2131af570a3d.tar.xz
glibc-610e67ed5af7e1acf2f96bb964cc2131af570a3d.zip
* stdlib/Makefile (routines): Add quick_exit, at_quick_exit, and
	cxa_at_quick_exit.
	(static-only-routines): Add at_quick_exit.
	* stdlib/Versions: Export quick_exit and __cxa_at_quick_exit for
	GLIBC_2.10.
	* stdlib/quick_exit.c: New file.
	* stdlib/at_quick_exit.c: New file.
	* stdlib/cxa_at_quick_exit.c: New file.
	* stdlib/cxa_atexit.c (__cxa_atexit): Move body to new function.  Call
	it appropriately.
	(__internal_atexit): New function.
	(__new_exitfn): Now takes parameter to point to the list to use.
	* stdlib/cxa_finalize.c: Remove quick_exit handlers, don't call them.
	* stdlib/exit.c (__run_exit_handlers): New function.  Split from...
	(exit): ...here.  Just call __run_exit_handlers appropriately.
	* stdlib/exit.h: Declare __quick_exit_funcs, __run_exit_handlers,
	__internal_atexit, __cxa_at_quick_exit.  Adjust __new_exitfn.
	* stdlib/on_exit.c: Adjust call to __new_exitfn.
	* stdlib/stdlib.h: Declare at_quick_exit and quick_exit.
Diffstat (limited to 'stdlib/stdlib.h')
-rw-r--r--stdlib/stdlib.h23
1 files changed, 22 insertions, 1 deletions
diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h
index ff249ad4cb..77bb860454 100644
--- a/stdlib/stdlib.h
+++ b/stdlib/stdlib.h
@@ -515,6 +515,18 @@ extern void abort (void) __THROW __attribute__ ((__noreturn__));
 
 /* Register a function to be called when `exit' is called.  */
 extern int atexit (void (*__func) (void)) __THROW __nonnull ((1));
+
+#ifdef __USE_GNU
+// XXX There should be a macro to signal with C++ revision is used.
+// XXX This function is in the C++1x revision.
+/* Register a function to be called when `quick_exit' is called.  */
+# ifdef __cplusplus
+extern "C++" int at_quick_exit (void (*__func) (void))
+     __THROW __asm ("at_quick_exit") __nonnull ((1));
+# else
+extern int at_quick_exit (void (*__func) (void)) __THROW __nonnull ((1));
+# endif
+#endif
 __END_NAMESPACE_STD
 
 #ifdef	__USE_MISC
@@ -526,9 +538,18 @@ extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
 
 __BEGIN_NAMESPACE_STD
 /* Call all functions registered with `atexit' and `on_exit',
-   in the reverse of the order in which they were registered
+   in the reverse of the order in which they were registered,
    perform stdio cleanup, and terminate program execution with STATUS.  */
 extern void exit (int __status) __THROW __attribute__ ((__noreturn__));
+
+#ifdef __USE_GNU
+// XXX There should be a macro to signal with C++ revision is used.
+// XXX This function is in the C++1x revision.
+/* Call all functions registered with `at_quick_exit' in the reverse
+   of the order in which they were registered and terminate program
+   execution with STATUS.  */
+extern void quick_exit (int __status) __THROW __attribute__ ((__noreturn__));
+#endif
 __END_NAMESPACE_STD
 
 #ifdef __USE_ISOC99