[Bug modula2/108261] modula-2 module registration process seems to fail with shared libraries.
iains at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Jan 11 15:02:50 GMT 2023
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108261
--- Comment #16 from Iain Sandoe <iains at gcc dot gnu.org> ---
(In reply to Iain Sandoe from comment #13)
> (In reply to Iain Sandoe from comment #12)
> > (In reply to Gaius Mulley from comment #11)
> > > > when a module has the same name but a different interface are the
> > > symbols distinct (i.e. mangled differently)?
> > >
> > > no. So, as you say, the ordering of the static link works fine. I
> > > had assumed that dynamic libraries also adhered to a similar ordering.
> > > From what we are observing it seems that all the ctors fire but the
> > > API integrity is preserved due to library ordering? (Or have I
> > > misunderstood dynamic linking?). (Or worse this might be true on
> > > gnu/linux but not on other platforms?).
> >
> > comment #6 seems to indicate possible issues on linux too? (or I
> > misunderstand)
> >
> > To find out what's actually happening will mean digging through the init in
> > the debugger ..
>
> One additional thought, perhaps lazy binding could be responsible; usually
> Darwin will not bind symbols on load, but on first use (speeds up startup).
> However there is an option to force bind-on-load (when I get a chance, will
> try that
That did not resolve the problem.
Actually, to come back to the first conversation we had (about the
cross-linking issue) .. the underlying problem is a layering one.
Assuming that multiple symbols with the same name is not reliable in one
process...
... and we cannot (easily) rename one set....
the simplest solution is:
- define a libm2com.so (containing the modules common to iso and pim.
- make each of libm2iso and libm2pim depend on libm2com.
so we have
if (iso)
libs = m2iso,m2com
else
libs = m2pim,m2com
That means we can get rid of the sledgehammer of "undefined, dynamic_lookup"
and we have no run-time symbols clashes.
We have suggested this before in various discussions .. and I guess it is a
bunch of configure work .. but I am beginning to think it is going to be a lot
less work than trying to solve the unknown issues we have now.
(we can, of course, make the default fscaffold-static as a work-around) but
then scaffold-dynamic is essentially unusable still.)
More information about the Gcc-bugs
mailing list