[llvm-dev] Targeting old glibc

Alexandre Bique via llvm-dev llvm-dev at lists.llvm.org
Tue Nov 10 00:27:30 PST 2020


Thank you very much for your help Fāng-ruì Sòng.

I've tried various things like linking directly to libm-2.32 but it
didn't work, it seems that libm-2.32 still pulls libmvec.

I have the following linker flags:

CLANG_LDFLAGS="-fuse-ld=lld -static-libstdc++ -static-libgcc
-fvisibility=hidden -fdata-sections -ffunction-sections"
CLANG_LDFLAGS="$CLANG_LDFLAGS -Wl,--gc-sections -Wl,-O1
-Wl,--as-needed -Wl,--strip-all"
CLANG_LDFLAGS="$CLANG_LDFLAGS -Wl,-y,exp,-y,exp at GLIBC_2.29,-y,exp at GLIBC_2.2.5"

How to find what is pulling libmvec?

On the other hand, I don't understand why I have to specify that I
want exp from glibc 2.2 or 2.29, I just want the exp symbol, and if
possible the latest version available on the system.
Because I don't have a high precision requirement so they would all be
fine. Is that possible?

Regards,
Alexandre Bique

On Mon, Nov 9, 2020 at 7:06 PM Fāng-ruì Sòng <maskray at google.com> wrote:
>
> On Mon, Nov 9, 2020 at 10:04 AM Fāng-ruì Sòng <maskray at google.com> wrote:
> >
> > No. A shared object is needed if it is linked in (1)--no-as-needed
> > mode or (2) after --gc-sections, a symbol referenced by a live input
> > section  is defined by the shared object.
>
> A shared object is needed if it is linked in (1) --no-as-needed mode
> or (2) after --gc-sections, a symbol referenced by a live input
> section  is defined by the shared object as non-STB_WEAK.
>
> > You'll need to check whether a symbol is defined by libmvec.so.1
> >
> > On Mon, Nov 9, 2020 at 9:57 AM Alexandre Bique
> > <bique.alexandre at gmail.com> wrote:
> > >
> > > On Mon, Nov 9, 2020 at 6:52 PM Fāng-ruì Sòng <maskray at google.com> wrote:
> > > > Recent libm.a and libm.so are actually linker scripts
> > > >
> > > > % cat /usr/lib/x86_64-linux-gnu/libm.a
> > > > /* GNU ld script
> > > > */
> > > > OUTPUT_FORMAT(elf64-x86-64)
> > > > GROUP ( /usr/lib/x86_64-linux-gnu/libm-2.31.a
> > > > /usr/lib/x86_64-linux-gnu/libmvec.a )
> > > > % cat /usr/lib/x86_64-linux-gnu/libm.so
> > > > /* GNU ld script
> > > > */
> > > > OUTPUT_FORMAT(elf64-x86-64)
> > > > GROUP ( /lib/x86_64-linux-gnu/libm.so.6  AS_NEEDED (
> > > > /lib/x86_64-linux-gnu/libmvec.so.1 ) )
> > >
> > > In this script the libmvec is mentioned as "AS_NEEDED", and it is not
> > > needed in my case, yet lld pulls its dependency toward exp at GLIBC_2.29.
> > >
> > > Is it a bug in lld?
> > >
> > > Regards,
> > > Alexandre
> >
> >
> >
> > --
> > 宋方睿
>
>
>
> --
> 宋方睿


More information about the llvm-dev mailing list