]> git.ipfire.org Git - thirdparty/elfutils.git/commitdiff
libdwfl: do not dlopen libdebuginfod.so in --disable-libdebuginfod mode
authorDmitry V. Levin <ldv@altlinux.org>
Thu, 20 Aug 2020 20:27:24 +0000 (23:27 +0300)
committerMark Wielaard <mark@klomp.org>
Mon, 31 Aug 2020 08:39:35 +0000 (10:39 +0200)
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 <ldv@altlinux.org>
Signed-off-by: Mark Wielaard <mark@klomp.org>
ChangeLog
configure.ac
libdwfl/ChangeLog
libdwfl/Makefile.am
libdwfl/dwfl_build_id_find_elf.c
libdwfl/dwfl_end.c
libdwfl/find-debuginfo.c
libdwfl/libdwflP.h

index c6b526fecd6e48d5f021efb814ef051eefb51bfe..0f00fadebdbded1101a080f446d16718e95d6128 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2020-08-20  Dmitry V. Levin  <ldv@altlinux.org>
+
+       * configure.ac (--enable-libdebuginfod): AC_DEFINE ENABLE_LIBDEBUGINFOD.
+
 2020-07-17  Mark Wielaard  <mark@klomp.org>
 
        * configure.ac: Set -DBAD_FTS=1 also for CXXFLAGS.
index e2f213ab1e2362f2a49b90edef67bf69b92c2621..f3f1597b05b18d129734e8adc8e13a5b349b80c4 100644 (file)
@@ -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"])
 
index e59efd7731ada54b73022c602e633671cb26a258..ca10ce88a136790c30216fcf40561eb80957bc14 100644 (file)
@@ -1,3 +1,21 @@
+2020-08-20  Dmitry V. Levin  <ldv@altlinux.org>
+
+       * 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  <mark@klomp.org>
 
        * argp-std.c (parse_opt): Don't assert, but call fail when
index 47bd62a5e430e6361a49d304285695b094dc2512..1de054920bf04ffb8c88b2c16bf7eca9ddb90b6c 100644 (file)
@@ -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
index f685c97958cd35b7f6f65b816f817ab969c49282..7b604d47e970ccc9c40ef67926d65f62dce9805c 100644 (file)
@@ -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)
index 4f6c722a7c56a43c1c1ab43ef65926e52617cc72..b1840191fb17f972ef8f787c9c4d548f86c761fa 100644 (file)
@@ -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);
index eb68d549d6e5e03ec60eceb2ed6f77f64b241232..449df5a14b19bedf2795498dd9523342a2382b00 100644 (file)
@@ -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;
 }
index 25753de2f819f5fb5527f9656d4da3a538026d30..ad6779ad5704634b257827a7a28d815a74c2ff53 100644 (file)
 
 #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