PATCH: Disable dynamic allocation in atexit

Jeff Johnston jjohnstn@redhat.com
Tue Mar 21 01:59:00 GMT 2006


Mark Mitchell wrote:
> Jeff Johnston wrote:
> 
>>Mark,
>>
>>  The patch is fine, but it's got me thinking I want to do a bit more.
> 
> 
> To be 100% clear, I'm interpreting that as approval, and I'll check it
> in.  If that's not OK, shout!
>

I had meant for you to wait.  There should at least be a way to default 
this for a platform in configure.host.  See newlib_io_pos_args for an 
example unless you want me to do it.

> 
>>  The one question I am pondering is whether to make
>>static-only-32-entry, the default for non-_REENT_SMALL platforms.
>>Normally I preach backwards-compatibility, but I can't think of any
>>applications off-hand that should require more than 32 entries.  This
>>makes the empty program compact by default which I think is a good thing.
> 
> 
> One thing to bear in mind is that C++ applications will register an
> atexit function for every statically allocated object with a destructor.
>  For example:
> 
>   struct S { ~S(); };
>   S s;
> 
> will result in an atexit call to clean up "s".
> 

I hadn't thought about destructors so it is clear I should stick with 
dynamic being the default for both _REENT_SMALL and non-_REENT_SMALL.


> So, I think in medium-size C++ applications, it's easy to get more than
> 32 slots.  ARM has invented a way for the compiler to collaborate to say
> how many slots are needed so that the linker can allocate just the right
> number.  This is a good trick, and we should implement it at some point.
>  (Even though it was originally designed for ARM, it could be made to
> work on all platforms.)
> 
> I'm not sure whether it makes sense to implement your plan before this
> feature is added; you understand the userbase better than I.
> 


> Thanks,
> 



More information about the Newlib mailing list