On Thu, Jul 11, 2013 at 4:44 PM, Stefan Kristiansson
<stefan.kristians...@saunalahti.fi> wrote:
> Hi all,
>
> Thanks to Sebastian Macke it was discovered that the constructors
> and destructors in dynamic loaded libraries were never executed.
> After some more investigation, it became clear that not even __init and
> __fini were execute.
> The dynamic linker performs init/fini execution by looking for the
> DT_INIT/DT_FINI elements in the dynamic library and what is found
> there is executed [1][2].
> The problem now was that DT_INIT/DT_FINI elements were never inserted into
> the dynamic library and the reason for that is that GNU linker expects
> the init and fini function names to be _init and _fini and not __init and
> __fini [3].
>
> AFAICT, there are two options to solve this:
> 1) rename our __init and __fini functions to _init and _fini
> 2) set link_info.init_function to __init and link_info.fini_function to __fini
>
> I think 1) is the path to take, mostly because that is the naming that most
> architectures follow and none does 2).
>
> Following this mail comes a set of patches that I intend to commit to
> uClibc, binutils and gcc unless someone has any objections or better ideas
> to solve this.
> It might not be strictly necessary to do the change in all of those
> repositories, but I think it's worth being consistent on this.

Top job, as usual :)

I can't see why we shouldn't make these changes.

Cheers

Julius

>
> Stefan
>
> [1] 
> https://github.com/openrisc/uClibc-or1k/blob/master/ldso/libdl/libdl.c#L636
> [2] 
> https://github.com/openrisc/uClibc-or1k/blob/master/ldso/libdl/libdl.c#L845
> [3] https://github.com/openrisc/or1k-src/blob/or1k/ld/ldmain.c#L288
> _______________________________________________
> OpenRISC mailing list
> OpenRISC@lists.openrisc.net
> http://lists.openrisc.net/listinfo/openrisc
_______________________________________________
OpenRISC mailing list
OpenRISC@lists.openrisc.net
http://lists.openrisc.net/listinfo/openrisc

Reply via email to