On 07/24/2013 04:42 PM, Martin Nowak
wrote:
The basic
problem to solve is that _minfo* sections must be merged by the
linker but _minfo_beg and _minfo_end must not be be external
symbols as the executable would superimpose them.
This is currently done with section groups of internal symbols.
I recently had the idea that it should also work with hidden
external symbols but I still have to verify that.
If it works we could move the functionality into the glue layer so
that it can hopefully be reused by GDC and LDC.
Otherwise we could also try to add support for section groups and
internal symbols in the glue layer but that might be a lot of
work.
Best,
Martin
I tried that out and it works.
The linker will correctly merge the external weak symbols, but
because they are hidden they remain inaccessible
from outside of a shared library. Thus the runtime linker won't
interpose the bracketing symbols with the
ones from
the executable or another shared library.
This should be fairly simple to implement in the glue layer, we only
need to mark the COMDAT variables as hidden.