 |
|
|
|
Actions
|
|
[ Date Prev][ Date Next][ Thread Prev][ Thread Next][ Date Index][ Thread Index]
Re: [cxx-abi-dev] Type mismatch in __cxa_atexit and __cxa_finalize
- To: Matt Austern <austern@xxxxxxxxx>
- Subject: Re: [cxx-abi-dev] Type mismatch in __cxa_atexit and __cxa_finalize
- From: Mark Mitchell <mark@xxxxxxxxxxxxxxxx>
- Date: Fri, 27 Feb 2004 11:25:29 -0800
Matt Austern wrote:
Maybe this is old news; I'm sure everyone who has implemented atexit in
terms of __cxa_atexit must have noticed it already.
I believe that GNU libc implemented both atexit and __cxa_atexit atop
some other interface, but I haven't looked in a long time.
The obvious fix would be to say that:
1. atexit(f) invokes __cxa_atexit((void(*)(void*)) f, 0, 0).
2. If you're passing __cxa_atexit a function that does take an
argument, the parameter may not be 0.
3. When __cxa_finalize invokes a function f on a parameter p, it should
do the equivalent of:
if (p)
(*f)(p);
else
(*((void (*)(void)) f))();
That's a reasonable approach, but point (2) worries me -- that might
represent a change for some existing implementations.
An alternative would be to remove the explicit impliciation in the ABI
that atexit is implemented atop __cxa_atexit, and just indicate that (a)
the calls to the registered functions must be interleaved in the
appropriate way, and (b) __cxa_finalize called with a NULL DSO parameter
must call the functions registered with atexit.
Thoughts?
--
Mark Mitchell
CodeSourcery, LLC
mark@xxxxxxxxxxxxxxxx
|
|