On Fri, Nov 19, 2021 at 05:58:19PM +0100, Florian Weimer wrote: > * Dmitry V. Levin: > > > Let's make clear what's going on here. First of all, dwfl-proc-attach.c > > does not use dlopen so it doesn't pull it in and doesn't need -ldl. > > In regular builds, dwfl-proc-attach.o is linked with ../libdw/libdw.so > > which in turn uses dlopen and is already linked with -ldl. > > When elfutils is configured with --enable-gprof or --enable-gcov, > > BUILD_STATIC is enabled and dwfl-proc-attach.o is linked with > > ../libdw/libdw.a -lz $(zip_LIBS) $(libelf) $(libebl) -ldl -lpthread > > which already contains -ldl. > > In any case, I fail to understand why dwfl-proc-attach might need > > an extra -ldl, especially in LDFLAGS which goes before LDADD > > in the linking command. > > It may have to do with --as-needed that some builds use. If there are > no pending undefined references, some linkers drop earlier shared object > references with --as-needed (similar to what happens with static > archives). > > The GCC LTO plugin results in ld looking at more objects in greater > detail for some reason. Without LTO and --as-needed, you probably don't > get a dlopen export (if you do not link with -E) because indirect > dependencies are not consulted, breaking the valgrind workaround because > there is no interposition.
Thanks. I suppose adding -rdynamic to dwfl_proc_attach_LDFLAGS should be a more correct fix. -- ldv