summaryrefslogtreecommitdiff
path: root/libdwfl
diff options
context:
space:
mode:
authorDmitry V. Levin <ldv@altlinux.org>2020-08-20 23:27:24 +0300
committerMark Wielaard <mark@klomp.org>2020-08-31 10:39:35 +0200
commit4ced3010ad1133159eb48bedda92af93e3a73d5a (patch)
treecfed684caf561ecb079f6845a971c59742ebcc55 /libdwfl
parentdf91c6af98ac09acce5a906afef3e3fe21b24734 (diff)
downloadelfutils-4ced3010ad1133159eb48bedda92af93e3a73d5a.tar.gz
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 <ldv@altlinux.org> Signed-off-by: Mark Wielaard <mark@klomp.org>
Diffstat (limited to 'libdwfl')
-rw-r--r--libdwfl/ChangeLog18
-rw-r--r--libdwfl/Makefile.am5
-rw-r--r--libdwfl/dwfl_build_id_find_elf.c2
-rw-r--r--libdwfl/dwfl_end.c2
-rw-r--r--libdwfl/find-debuginfo.c2
-rw-r--r--libdwfl/libdwflP.h8
6 files changed, 35 insertions, 2 deletions
diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog
index e59efd77..ca10ce88 100644
--- a/libdwfl/ChangeLog
+++ b/libdwfl/ChangeLog
@@ -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
diff --git a/libdwfl/Makefile.am b/libdwfl/Makefile.am
index 47bd62a5..1de05492 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 f685c979..7b604d47 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 4f6c722a..b1840191 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 eb68d549..449df5a1 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 25753de2..ad6779ad 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