diff options
author | Dmitry V. Levin <ldv@altlinux.org> | 2020-08-20 23:27:24 +0300 |
---|---|---|
committer | Mark Wielaard <mark@klomp.org> | 2020-08-31 10:39:35 +0200 |
commit | 4ced3010ad1133159eb48bedda92af93e3a73d5a (patch) | |
tree | cfed684caf561ecb079f6845a971c59742ebcc55 /libdwfl | |
parent | df91c6af98ac09acce5a906afef3e3fe21b24734 (diff) | |
download | elfutils-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/ChangeLog | 18 | ||||
-rw-r--r-- | libdwfl/Makefile.am | 5 | ||||
-rw-r--r-- | libdwfl/dwfl_build_id_find_elf.c | 2 | ||||
-rw-r--r-- | libdwfl/dwfl_end.c | 2 | ||||
-rw-r--r-- | libdwfl/find-debuginfo.c | 2 | ||||
-rw-r--r-- | libdwfl/libdwflP.h | 8 |
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 |