[patch] Implement __cxa_atexit
Paul Brook
paul@codesourcery.com
Sun Sep 5 04:27:00 GMT 2004
The attached patch implements __cxa_atexit and __cxa_finalize.
As the name suggests these are used by C++ code to register static object
destructors. They are documented in section 3.3.5 of the C++ ABI
(http://www.codesourcery.com/cxx-abi/abi.html)
Despite this they are generally provided by the C library, not the C++ runtime
library.
I basically took the exitsing atexit/on_exit implementation, broke it out into
separate files, and added the extra _dso_handle field. I also modified the
_REENT_SMALL case to allow more than 32 handlers to be registered.
Tested with cross to arm-none-elf.
Ok?
Paul
2004-09-03 Paul Brook <paul@codesourcery.com>
* libc/include/sys/reent.h (struct _on_exit_args): Add _dso_handle
and _is_cxa.
(struct _atexit): Add _next when _REENT_SMALL.
(struct _reent): Add _atexit0 when _REENT_SMALL.
(_REENT_INIT_PTR): Adjust.
* libc/stdlib/Makefile.am (GENERAL_SOURCES): Add __atexit.c and
__call_exit.c.
(EXTENDED_SOURCES): Add cxa_atexit.c and cxa_finalize.c.
* libc/stdlib/Makefile.in: Regenerate.
* libc/stdlib/__atexit.c: New file.
* libc/stdlib/__call_atexit.c: New file.
* libc/stdlib/atexit.h: Remove old definitions. Add new.
* libc/stdlib/atexit.c (atexit): Use __register_exitproc.
* libc/stdlib/cxa_atexit.c: New file.
* libc/stdlib/cxa_finalize.c: New file.
* libc/stdlib/exit.c (exit): Use __call_exitprocs.
* libc/stdlib/on_exit.c (on_exit): Use __register_exitproc.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch.cxa_atexit
Type: text/x-diff
Size: 21499 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/newlib/attachments/20040905/61310c18/attachment.bin>
More information about the Newlib
mailing list