[PATCH] New configuration option for lite exit

Jeff Johnston jjohnstn@redhat.com
Thu Jun 13 20:55:00 GMT 2013


On 06/07/2013 05:46 AM, Ye Joey wrote:
> On Thu, May 30, 2013 at 3:29 AM, Jeff Johnston <jjohnstn@redhat.com> wrote:
>> Sorry I have been busy with an up-coming Eclipse release and two customer
>> presentations.
>>
>> Looking at it, this needs documentation as it is not straight-forward with
>> regards to how the whole design ties together (i.e. what are the behaviour
>> rules for the application / compiler).  You might also state what this
>> accomplishes on your initial platform.
> Jeff,
>
> To explain what this patch is doing, following call relation is useful:
>
> _mainCRTStartup -> atexit -> __register_exitproc
> _mainCRTStartup -> exit -> __call_exitprocs
> _mainCRTStartup -> __libc_init_array -> __cxa_atexit -> __register_exitproc
>
> Here an -> means arrow tail invokes arrow head. All invocations here
> are non-weak reference in current newlib.
>
> This patch does three things:
> 1. Change some of above invocations to weak, so that size expansive
> function __register_exitproc and __call_exitprocs can be skipped if
> not used.
> 2. Build dependences between symbol A and B, so that if A is non-weak
> referenced B will also be.
> 3. Add new option to enable/disable above
>
> As for item 1, following calls are changed to weak reference:
>    _mainCRTStartup w-> atexit
>    exit w-> __call_exitprocs
>    __cxa_atexit w-> __register_exitproc
> By doing so, a normal program without atexit will escape from the
> burden of cleaning up.
>
> As for item 2, following symbol dependences are built:
>    atexit and __call_exitprocs, so that if atexit is explicitly called
> by user, it will be effective when exit
>    __cxa_finalize and __register_exitproc, this might not be necessary.
> __register_exitproc and __call_exitproc is more appropriate. Should
> update this later.
>
> As for item 3, --enable-lite-exit is introduced to enable above
> change, which is by default disabled.
>>

Please add such documentation to your patch.  I might suggest both 
adding it to the new README section you have started regarding newlib 
configuration options and to at least one of the source files and you 
can reference that file from the others (e.g. put it in atexit and have 
the other files that are changed tell the developer to look in atexit.c 
for more details)..

>> AFAICT, if a call is made to __cxa_atexit, nothing will occur unless a call
>> is also made to __cxa_finalize or atexit() or on_exit().  The exit list
>> won't be run on exit if just on_exit() is called because __call_exitprocs()
>> won't be brought in.
> This doesn't appear to be true, as __call_exitprocs is always called in exit.
>

Maybe I'm missing something.  Following the logic, __call_exitprocs is a 
weak reference in exit.  If the user calls on_exit without an atexit() 
call then nothing solidifies the __call_exitprocs linkage.

If I am correct, please fix and update documentation.

> Thanks,
> Joey
>



More information about the Newlib mailing list