[PATCH] BZ #19590: Fixed build of shared objects that use libmvec.so functions
Joseph Myers
joseph@codesourcery.com
Wed Feb 10 17:39:00 GMT 2016
On Wed, 10 Feb 2016, H.J. Lu wrote:
> > It is deliberately only part of the static library ABI, not part of the
> > shared library ABI, because the shared libraries should not need more than
> > one internal-namespace exported name for the same interface (and it's a
> > compiler limitation that the other name exists at all).
> >
>
> Let me try to understand the problem:
>
> 1. GCC should generate an alias, foo, which points to bar defined
> in libmvec.so.
> 2. But the alias foo may be removed by GCC sometimes (LTO?).
> 3. As a workaround, we put an alias foo, in libmvec_nonshared.a which
> points to bar defined in libmvec.so.
>
> Am I correct?
Ideally the alias should not exist at all.
The issue is: function foo has two variants for scalar use (foo and
__foo_finite), where calls to foo get remapped to __foo_finite by
bits/math-finite.h under certain conditions. For a given vector type, it
has, logically, one variant (e.g. _ZGVbN2v_foo). But because GCC
determines the names to use when calling vector functions based on the
assembler name of the scalar function, sometimes it generates calls to
_ZGVbN2v___foo_finite instead.
Initially, this was worked around by using top-level asm statements in
bits/math-vector.h to set "_ZGVbN2v___foo_finite = _ZGVbN2v_foo". That
meant that the calls still resulted in references to _ZGVbN2v_foo instead
of _ZGVbN2v___foo_finite in the .o files. But remapping like that proved
not to solve the problem for LTO, so the wrapper _ZGVbN2v___foo_finite was
needed in libmvec_nonshared.a.
The sort of proper solution I envisage is a new attribute that can be used
in bits/math-vector.h, e.g. __attribute__ ((__vector_asm_name__ ("foo"))),
which would mean that the given string is used as the basis for forming
names of vector function variants, instead of using the
DECL_ASSEMBLER_NAME. That way, glibc headers could determine the name of
the scalar version to use (specified with asm) and the name to use as the
basis for vector versions' names (specified with that attribute)
independently.
--
Joseph S. Myers
joseph@codesourcery.com
More information about the Libc-alpha
mailing list