libpari-gmp.so.2.13.0 not being built with RUNPATH

Jeffrey Walton <[email protected]>
Newsgroups gmane.comp.mathematics.pari.devel
Message-ID <CAH8yC8kFz36U_4ODnqQUyZyL3UR=vEdtYpkLg_FON76Xe2ZmXA@mail.gmail.com>
Hi Everyone,

I'm trying to perform some testing of PARI/GP. I'm building the
pari-2.13.0 release tarball from sources. In particular, I am working
on Asan testing looking for memory errors. CFLAGS, CXXFLAGS and
LDFLAGS include -fsanitize=address. CFLAGS and CXXFLAGS include
-fno-omit-frame-pointer. I've also built Gzip, Ncurses, Readline and
GMP with the same Asan flags.

Here's the rub... The Asan builds are installed at
--prefix=$HOME/ok2delete-asan. To facilitate Asan, Here are the
interesting flags. Everything gets built with the same flags.

       CPPFLAGS: -I/home/jwalton/ok2delete-asan/include -DNDEBUG -DTEST_ASAN=1
         CFLAGS: -g2 -O2 -fsanitize=address -fno-omit-frame-pointer
-march=native -fPIC -pthread
       CXXFLAGS: -g2 -O2 -fsanitize=address -fno-omit-frame-pointer
-march=native -fPIC -pthread
        LDFLAGS: -L/home/jwalton/ok2delete-asan/lib -fsanitize=address
-Wl,-R,'$ORIGIN/../lib' -Wl,-R,/home/jwalton/ok2delete-asan/lib
-Wl,--enable-new-dtags -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack
-Wl,-z,origin

-Wl,-R + -Wl,--enable-new-dtags sets a RUNPATH. -Wl,-R sets a RPATH.
The difference is, a RUNPATH allows a LD_LIBRARY_PATH override. It is
what we are supposed to use nowadays on Linux.

Now, when 'make all' is run, libpari-gmp.so.2.13.0 is missing its
RUNPATH (-Wl,-R,<loc> + -Wl,--enable-new-dtags):

gcc  -o "/home/jwalton/Build-Scripts/pari-2.13.0/Olinux-x86_64"/libpari-gmp.so.2.13.0
-shared  -O3 -Wall -fno-strict-aliasing -fomit-frame-pointer  -g2 -O2
-fsanitize=address -fno-omit-frame-pointer -march=native -fPIC
-pthread -I/home/jwalton/ok2delete-asan/include -DNDEBUG -DTEST_ASAN=1
-fPIC -Wl,-shared,-soname=libpari-gmp.so.7  mpker.o mpinl.o alglin1.o
alglin2.o alglin3.o aprcl.o arith1.o arith2.o base1.o base2.o base3.o
base4.o base5.o bb_group.o bb_hnf.o bern.o bibli1.o bibli2.o bit.o
bnflog.o bnfunits.o buch1.o buch2.o buch3.o buch4.o char.o concat.o
crvwtors.o dirichlet.o ecpp.o ellanal.o elliptic.o ellisog.o
ellpadic.o ellpadiclambdamu.o ellsea.o elltors.o F2v.o F2x.o F2xqE.o
FF.o Fle.o Flv.o Flx.o FlxqE.o Flxq_log.o FlxX.o FpE.o FpV.o FpX.o
FpX_factor.o FpXQX_factor.o FpXX.o galconj.o gen1.o gen2.o gen3.o
Hensel.o hnf_snf.o hyperell.o hypergeom.o ifactor1.o kummer.o lfun.o
lfunquad.o lfunutils.o lll.o map.o matperm.o mellininv.o mftrace.o
modsym.o msfarey.o nffactor.o perm.o polarit1.o polarit2.o polarit3.o
polclass.o polmodular.o prime.o Qfb.o qfisom.o qfsolve.o QX_factor.o
random.o RgV.o RgX.o rootpol.o Ser.o subcyclo.o subfield.o subgroup.o
trans1.o trans2.o trans3.o volcano.o zetamult.o ZG.o ZV.o ZX.o anal.o
compile.o default.o es.o eval.o forprime.o gplib.o hash.o init.o
intnum.o members.o paricfg.o pariinl.o parse.o readline.o str.o
sumiter.o algebras.o elldata.o ellfromeqn.o forperm.o forsubset.o
galois.o galpol.o genus2red.o groupid.o krasner.o mpqs.o part.o
ratpoints.o stark.o thue.o mt.o single.o plotport.o plottty.o -lc -lm
-L/home/jwalton/ok2delete-asan/lib -lgmp    -lm

And:

    $ find . -name libpari-gmp.so.2.13.0
    ./pari-2.13.0/Olinux-x86_64/libpari-gmp.so.2.13.0
    $ readelf -d pari-2.13.0/Olinux-x86_64/libpari-gmp.so.2.13.0 |
grep -E 'RPATH|RUNPATH'
    $

No RPATH or RUNPATH. Without the RPATH or RUNPATH, then the wrong
libraries will be loaded at runtime by the dynamic linker.

Here's what I expect to see (using GMP as an example):

    $ readelf -d ~/ok2delete-asan/lib/libgmp.so.10.4.1 | grep -E 'RPATH|RUNPATH'
     0x000000000000001d (RUNPATH)            Library runpath:
[$ORIGIN/../lib:/home/jwalton/ok2delete-asan/lib]

I think that leads to the next failure. When 'make test-all' is run,
the linker encounters a failure:

Making test-all in Olinux-x86_64
make[1]: Entering directory
'/home/jwalton/Build-Scripts/pari-2.13.0/Olinux-x86_64'
rm -f gp-sta
gcc  -o gp-sta -O3 -Wall -fno-strict-aliasing -fomit-frame-pointer
-g2 -O2 -fsanitize=address -fno-omit-frame-pointer -march=native -fPIC
-pthread -I/home/jwalton/ok2delete-asan/include -DNDEBUG -DTEST_ASAN=1
-Wl,--export-dynamic -L/home/jwalton/ok2delete-asan/lib
-fsanitize=address -Wl,-R,'$ORIGIN/../lib'
-Wl,-R,/home/jwalton/ok2delete-asan/lib -Wl,--enable-new-dtags
-Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack -Wl,-z,origin mpker.o
mpinl.o alglin1.o alglin2.o alglin3.o aprcl.o arith1.o arith2.o
base1.o base2.o base3.o base4.o base5.o bb_group.o bb_hnf.o bern.o
bibli1.o bibli2.o bit.o bnflog.o bnfunits.o buch1.o buch2.o buch3.o
buch4.o char.o concat.o crvwtors.o dirichlet.o ecpp.o ellanal.o
elliptic.o ellisog.o ellpadic.o ellpadiclambdamu.o ellsea.o elltors.o
F2v.o F2x.o F2xqE.o FF.o Fle.o Flv.o Flx.o FlxqE.o Flxq_log.o FlxX.o
FpE.o FpV.o FpX.o FpX_factor.o FpXQX_factor.o FpXX.o galconj.o gen1.o
gen2.o gen3.o Hensel.o hnf_snf.o hyperell.o hypergeom.o ifactor1.o
kummer.o lfun.o lfunquad.o lfunutils.o lll.o map.o matperm.o
mellininv.o mftrace.o modsym.o msfarey.o nffactor.o perm.o polarit1.o
polarit2.o polarit3.o polclass.o polmodular.o prime.o Qfb.o qfisom.o
qfsolve.o QX_factor.o random.o RgV.o RgX.o rootpol.o Ser.o subcyclo.o
subfield.o subgroup.o trans1.o trans2.o trans3.o volcano.o zetamult.o
ZG.o ZV.o ZX.o anal.o compile.o default.o es.o eval.o forprime.o
gplib.o hash.o init.o intnum.o members.o paricfg.o pariinl.o parse.o
readline.o str.o sumiter.o algebras.o elldata.o ellfromeqn.o forperm.o
forsubset.o galois.o galpol.o genus2red.o groupid.o krasner.o mpqs.o
part.o ratpoints.o stark.o thue.o mt.o single.o plotport.o plottty.o
emacs.o gp.o gp_rl.o texmacs.o whatnow.o plotnone.o
-Wl,-rpath,"/home/jwalton/Build-Scripts/pari-2.13.0"/Olinux-x86_64:"/home/jwalton/ok2delete-asan/lib":/home/jwalton/ok2delete-asan/lib
-L/home/jwalton/ok2delete-asan/lib -lreadline -ltinfo
-L/home/jwalton/ok2delete-asan/lib -lgmp    -lm
/usr/bin/ld: es.o: undefined reference to symbol 'dlsym@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libdl.so.2: error adding symbols: DSO missing
from command line

I also don't see anything special about es.o. It looks OK:

gcc  -c -I. -I../src/headers -fPIC -O3 -Wall -fno-strict-aliasing
-fomit-frame-pointer  -g2 -O2 -fsanitize=address
-fno-omit-frame-pointer -march=native -fPIC -pthread
-I/home/jwalton/ok2delete-asan/include -DNDEBUG -DTEST_ASAN=1 -o es.o
../src/language/es.c

I am fairly certain the recipe for libpari-gmp.so.2.13.0 needs to be
fixed. It must use LDFLAGS. There may be other problems, but this one
is the first that needs to be fixed.

Jeff
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.