From: Dmitry V. Levin Date: Thu, 20 Aug 2020 20:27:24 +0000 (+0300) Subject: libdwfl: do not dlopen libdebuginfod.so in --disable-libdebuginfod mode X-Git-Tag: elfutils-0.181~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4ced3010ad1133159eb48bedda92af93e3a73d5a;p=thirdparty%2Felfutils.git libdwfl: do not dlopen libdebuginfod.so in --disable-libdebuginfod mode debuginfod-client.c used to try to dlopen libdebuginfod.so even if libdebuginfod was completely disabled using --disable-libdebuginfod. Fix this by disabling build of debuginfod-client.c and disabling all __libdwfl_debuginfod_* invocations in --disable-libdebuginfod mode. Signed-off-by: Dmitry V. Levin Signed-off-by: Mark Wielaard --- diff --git a/ChangeLog b/ChangeLog index c6b526fec..0f00fadeb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2020-08-20 Dmitry V. Levin + + * configure.ac (--enable-libdebuginfod): AC_DEFINE ENABLE_LIBDEBUGINFOD. + 2020-07-17 Mark Wielaard * configure.ac: Set -DBAD_FTS=1 also for CXXFLAGS. diff --git a/configure.ac b/configure.ac index e2f213ab1..f3f1597b0 100644 --- a/configure.ac +++ b/configure.ac @@ -693,7 +693,10 @@ AS_IF([test "x$enable_libdebuginfod" != "xno"], [ fi ]) -AS_IF([test "x$enable_libdebuginfod" = "xdummy"],AC_DEFINE([DUMMY_LIBDEBUGINFOD],[1],[Build dummy libdebuginfod])) +AS_IF([test "x$enable_libdebuginfod" = "xyes" || test "x$enable_libdebuginfod" = "xdummy"], + [AC_DEFINE([ENABLE_LIBDEBUGINFOD], [1], [Enable libdebuginfod])]) +AS_IF([test "x$enable_libdebuginfod" = "xdummy"], + [AC_DEFINE([DUMMY_LIBDEBUGINFOD], [1], [Build dummy libdebuginfod])]) AM_CONDITIONAL([LIBDEBUGINFOD],[test "x$enable_libdebuginfod" = "xyes" || test "x$enable_libdebuginfod" = "xdummy"]) AM_CONDITIONAL([DUMMY_LIBDEBUGINFOD],[test "x$enable_libdebuginfod" = "xdummy"]) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index e59efd773..ca10ce88a 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,21 @@ +2020-08-20 Dmitry V. Levin + + * Makefile.am (libdwfl_a_SOURCES): Conditionalize + debuginfod-client.c on LIBDEBUGINFOD. + * dwfl_build_id_find_elf.c (dwfl_build_id_find_elf): Conditionalize + __libdwfl_debuginfod_find_executable invocation on + ENABLE_LIBDEBUGINFOD. + * dwfl_end.c (dwfl_end): Conditionalize __libdwfl_debuginfod_end + invocation on ENABLE_LIBDEBUGINFOD. + * find-debuginfo.c (dwfl_standard_find_debuginfo): Conditionalize + __libdwfl_debuginfod_find_debuginfo invocation on + ENABLE_LIBDEBUGINFOD. + * libdwflP.h: Guard debuginfod.h include with ENABLE_LIBDEBUGINFOD. + (struct Dwfl): Guard debuginfod field with ENABLE_LIBDEBUGINFOD. + (__libdwfl_debuginfod_find_executable, + __libdwfl_debuginfod_find_debuginfo, __libdwfl_debuginfod_end): + Guard declarations with ENABLE_LIBDEBUGINFOD. + 2020-07-05 Mark Wielaard * argp-std.c (parse_opt): Don't assert, but call fail when diff --git a/libdwfl/Makefile.am b/libdwfl/Makefile.am index 47bd62a5e..1de054920 100644 --- a/libdwfl/Makefile.am +++ b/libdwfl/Makefile.am @@ -70,7 +70,7 @@ libdwfl_a_SOURCES = dwfl_begin.c dwfl_end.c dwfl_error.c dwfl_version.c \ link_map.c core-file.c open.c image-header.c \ dwfl_frame.c frame_unwind.c dwfl_frame_pc.c \ linux-pid-attach.c linux-core-attach.c dwfl_frame_regs.c \ - gzip.c debuginfod-client.c + gzip.c if BZLIB libdwfl_a_SOURCES += bzip2.c @@ -78,6 +78,9 @@ endif if LZMA libdwfl_a_SOURCES += lzma.c endif +if LIBDEBUGINFOD +libdwfl_a_SOURCES += debuginfod-client.c +endif libdwfl = $(libdw) libdw = ../libdw/libdw.so diff --git a/libdwfl/dwfl_build_id_find_elf.c b/libdwfl/dwfl_build_id_find_elf.c index f685c9795..7b604d47e 100644 --- a/libdwfl/dwfl_build_id_find_elf.c +++ b/libdwfl/dwfl_build_id_find_elf.c @@ -192,12 +192,14 @@ dwfl_build_id_find_elf (Dwfl_Module *mod, } else { +#ifdef ENABLE_LIBDEBUGINFOD /* If all else fails and a build-id is available, query the debuginfo-server if enabled. */ if (fd < 0 && mod->build_id_len > 0) fd = __libdwfl_debuginfod_find_executable (mod->dwfl, mod->build_id_bits, mod->build_id_len); +#endif } if (fd < 0 && errno == 0 && mod->build_id_len > 0) diff --git a/libdwfl/dwfl_end.c b/libdwfl/dwfl_end.c index 4f6c722a7..b1840191f 100644 --- a/libdwfl/dwfl_end.c +++ b/libdwfl/dwfl_end.c @@ -39,7 +39,9 @@ dwfl_end (Dwfl *dwfl) if (dwfl == NULL) return; +#ifdef ENABLE_LIBDEBUGINFOD __libdwfl_debuginfod_end (dwfl->debuginfod); +#endif if (dwfl->process) __libdwfl_process_free (dwfl->process); diff --git a/libdwfl/find-debuginfo.c b/libdwfl/find-debuginfo.c index eb68d549d..449df5a14 100644 --- a/libdwfl/find-debuginfo.c +++ b/libdwfl/find-debuginfo.c @@ -401,6 +401,7 @@ dwfl_standard_find_debuginfo (Dwfl_Module *mod, free (canon); } +#ifdef ENABLE_LIBDEBUGINFOD /* Still nothing? Try if we can use the debuginfod client. But note that we might be looking for the alt file. We use the same trick as dwfl_build_id_find_debuginfo. @@ -422,6 +423,7 @@ dwfl_standard_find_debuginfo (Dwfl_Module *mod, if (bits_len > 0) fd = __libdwfl_debuginfod_find_debuginfo (mod->dwfl, bits, bits_len); } +#endif return fd; } diff --git a/libdwfl/libdwflP.h b/libdwfl/libdwflP.h index 25753de2f..ad6779ad5 100644 --- a/libdwfl/libdwflP.h +++ b/libdwfl/libdwflP.h @@ -40,7 +40,10 @@ #include "../libdw/libdwP.h" /* We need its INTDECLs. */ #include "../libdwelf/libdwelfP.h" + +#ifdef ENABLE_LIBDEBUGINFOD #include "../debuginfod/debuginfod.h" +#endif typedef struct Dwfl_Process Dwfl_Process; @@ -115,8 +118,9 @@ struct Dwfl_User_Core struct Dwfl { const Dwfl_Callbacks *callbacks; +#ifdef ENABLE_LIBDEBUGINFOD debuginfod_client *debuginfod; - +#endif Dwfl_Module *modulelist; /* List in order used by full traversals. */ Dwfl_Process *process; @@ -631,6 +635,7 @@ extern Dwfl_Error __libdw_open_elf (int fd, Elf **elfp) internal_function; extern bool __libdwfl_dynamic_vaddr_get (Elf *elf, GElf_Addr *vaddrp) internal_function; +#ifdef ENABLE_LIBDEBUGINFOD /* Internal interface to libdebuginfod (if installed). */ int __libdwfl_debuginfod_find_executable (Dwfl *dwfl, @@ -642,6 +647,7 @@ __libdwfl_debuginfod_find_debuginfo (Dwfl *dwfl, size_t build_id_len); void __libdwfl_debuginfod_end (debuginfod_client *c); +#endif /* These are working nicely for --core, but are not ready to be