RFA: reducing size of _atexit structure for _REENT_SMALL

Nick Clifton nickc@redhat.com
Wed Mar 15 05:58:00 GMT 2006


Hi Jeff,


>   The reason that the implementation is such is because ANSI C90 
> actually states for atexit(): "The implementation shall support the 
> registration of at least 32 functions".  This isn't true if you only 
> support dynamically allocated storage.
> 
>   Now that said, there is the question of how much a _REENT_SMALL 
> processor wishes to adhere to ANSI C.  At the very least, I think this 
> should be governed by YAF (yet another flag).  Comments?

You are right, although I was trying to avoid defining yet another flag. 
  I think that in this case ANSI conformance would only be compromised 
if there was insufficient room to allocate memory for the 32 element 
function pointer array when the first atexit function called.  If this 
were to happen then the application would have to be operating at the 
very limits of its available memory, and it could only have gotten to 
this situation because _REENT_SMALL had reduced the size of the _reent 
structure sufficiently to allow it to run in the first place.  Thus I 
think that this (theoretical) application could never run in an ANSI 
conformant way because it just needs too much memory.

I like to keep things simple, so to my mind it is simpler and cleaner to 
just use the _REENT_SMALL definition to make this change the _reent 
structure, rather than introducing yet another flag.  I realise that it 
does break strict ANSI conformance, but I think that this is OK.  We 
could include a warning comment in reent.h (or config.h) to let people 
who define _REENT_SMALL know the risks.

Cheers
   Nick



More information about the Newlib mailing list