This is the mail archive of the
newlib@sources.redhat.com
mailing list for the newlib project.
Re: [patch] Implement __cxa_atexit
- From: Christopher Faylor <me at cgf dot cx>
- To: Jeff Johnston <jjohnstn at redhat dot com>
- Cc: Paul Brook <paul at codesourcery dot com>, newlib at sources dot redhat dot com
- Date: Sun, 12 Sep 2004 15:35:37 -0400
- Subject: Re: [patch] Implement __cxa_atexit
- References: <200409031916.38234.paul@codesourcery.com> <4140B35E.1010308@redhat.com>
On Thu, Sep 09, 2004 at 03:47:42PM -0400, Jeff Johnston wrote:
>Patch checked in with modifications to make it compile for _REENT_SMALL.
It appears that this patch changes the size of the _reent structure,
causing problems for cygwin when interacting with any programs which
were linked with the previous structure.
Isn't changing the size of reent a bad idea, or, at least, isn't making
changes to the middle of _reent a no-no?
cgf
>-- 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.
>