On Mon, May 11, 2015 at 11:20:15AM +0100, Szabolcs Nagy wrote:
> 
> 
> On 09/05/15 19:57, Szabolcs Nagy wrote:
> > * H.J. Lu <hjl.to...@gmail.com> [2015-05-09 10:41:41 -0700]:
> >> There are
> >>
> >>      4: 0000000000002b70   806 FUNC    GLOBAL DEFAULT   12
> >> __cpu_indicator_init@GCC_4.8.0
> >>     38: 00000000002153d0    16 OBJECT  GLOBAL DEFAULT   25 
> >> __cpu_model@GCC_4.8.0
> >>
> >> and
> >>
> >> 000000000215000  0000000400000001 R_X86_64_64
> >> 0000000000002b70 __cpu_indicator_init@GCC_4.8.0 + 0
> >> 0000000000215220  0000002600000006 R_X86_64_GLOB_DAT
> >> 00000000002153d0 __cpu_model@GCC_4.8.0 + 0
> >>
> >> in libgcc_s.so.1.  Musl ld.so must be fixed to handle it.
> >>
> 
> Rich is looking at how to do this non-intrusively, but
> it seems non-trivial (some users of musl prefer not to
> resolve such versioned symbols).
> 
> > 
> > i think it might be enough to add __cpu_indicator_init_local
> > as an alias to __cpu_indicator_init in libgcc.a and then use
> > the *_local symbol from the ifunc resolver, that way no new
> > dependency is added to libgcc_s.so handling.
> 
> i tried this approach and it seems to work: passes all
> multiversioning tests on x86_64.
> 
> i think it's no worse than the symver approach.
> 
> is it ok to change the current fix to this?

No.  Instead of piling hacks like this just fix it in musl.
libgcc certainly isn't the only library that uses @ symbol versions,
e.g. libstdc++ does as well, as well as many other shared libraries.

        Jakub

Reply via email to