301a9420d9
debuginfod is a lightweight web service that indexes ELF/DWARF debugging resources by build-id and serves them over HTTP. This patch enables objdump and readelf to query debuginfod servers when they are otherwise not able to find separate debug files. Binutils can be built with debuginfod using the --with-debuginfod configure option. This requires that libdebuginfod be installed and found at configure time. debuginfod is packaged with elfutils, starting with version 0.178. For more information see https://sourceware.org/elfutils/. toplevel* config/debuginfod.m4: New file. Add macro AC_DEBUGINFOD. Adds new configure option --with-debuginfod. * configure: Regenerate. * configure.ac: Call AC_DEBUGINFOD. binutils* Makefile.am (readelf_LDADD, objdump_LDADD): Add libdebuginfod. * Makefile.in: Regenerate. * NEWS: Update. * config.in: Regenerate. * configure: Regenerate. * configure.ac: Call AC_DEBUGINFOD. * doc/Makefile.in: Regenerate. * doc/binutils.texi: Add section on using binutils with debuginfod. * dwarf.c (debuginfod_fetch_separate_debug_info): New function. Query debuginfod servers for the target debug file. (load_separate_debug_info): Call debuginfod_fetch_separate_debug_info if configured with debuginfod. (load_separate_debug_files): Add file argument to load_separate_debug_info calls. * dwarf.h (get_build_id): Add declaration. * objdump.c (get_build_id): New function. Get build-id of file. * readelf.c (get_build_id): Likewise. * testsuite/binutils-all/debuginfod.exp: New tests. * testsuite/binutils-all/linkdebug.s: Add .note.gnu.build-id section.
39 lines
1.5 KiB
Plaintext
39 lines
1.5 KiB
Plaintext
dnl Copyright (C) 1997-2019 Free Software Foundation, Inc.
|
|
dnl This file is free software, distributed under the terms of the GNU
|
|
dnl General Public License. As a special exception to the GNU General
|
|
dnl Public License, this file may be distributed as part of a program
|
|
dnl that contains a configuration script generated by Autoconf, under
|
|
dnl the same distribution terms as the rest of that program.
|
|
|
|
AC_DEFUN([AC_DEBUGINFOD],
|
|
[
|
|
# Enable debuginfod
|
|
AC_ARG_WITH([debuginfod],
|
|
AC_HELP_STRING([--with-debuginfod],
|
|
[Enable debuginfo lookups with debuginfod (auto/yes/no)]),
|
|
[], [with_debuginfod=auto])
|
|
AC_MSG_CHECKING([whether to use debuginfod])
|
|
AC_MSG_RESULT([$with_debuginfod])
|
|
|
|
if test "${with_debuginfod}" = no; then
|
|
AC_MSG_WARN([debuginfod support disabled; some features may be unavailable.])
|
|
else
|
|
AC_CHECK_LIB([debuginfod], [debuginfod_begin], [have_debuginfod_lib=yes])
|
|
AC_CHECK_DECL([debuginfod_begin], [have_debuginfod_h=yes], [],
|
|
[#include <elfutils/debuginfod.h>])
|
|
if test "x$have_debuginfod_lib" = "xyes" -a \
|
|
"x$have_debuginfod_h" = "xyes"; then
|
|
AC_DEFINE([HAVE_LIBDEBUGINFOD], [1],
|
|
[Define to 1 if debuginfod is enabled.])
|
|
AC_SUBST([LIBDEBUGINFOD], ["-ldebuginfod"])
|
|
else
|
|
AC_SUBST([LIBDEBUGINFOD], [])
|
|
if test "$with_debuginfod" = yes; then
|
|
AC_MSG_ERROR([debuginfod is missing or unusable])
|
|
else
|
|
AC_MSG_WARN([debuginfod is missing or unusable; some features may be unavailable.])
|
|
fi
|
|
fi
|
|
fi
|
|
])
|