[patch] Implement __cxa_atexit

Jeff Johnston jjohnstn@redhat.com
Sun Sep 12 19:34:00 GMT 2004


Patch checked in with modifications to make it compile for _REENT_SMALL.

Thanks,

-- Jeff J.

Paul Brook wrote:
> 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.



More information about the Newlib mailing list