From a02de956406198d33feeb5d24182ee2b540dc8bd Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 1 May 2020 00:15:04 +0200 Subject: [PATCH] 0.179-2 - Add elfutils-0.179-debug-client-alt-link.patch --- elfutils-0.179-debug-client-alt-link.patch | 60 ++++++++++++++++++++++ elfutils.spec | 7 ++- 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 elfutils-0.179-debug-client-alt-link.patch diff --git a/elfutils-0.179-debug-client-alt-link.patch b/elfutils-0.179-debug-client-alt-link.patch new file mode 100644 index 0000000..bb84954 --- /dev/null +++ b/elfutils-0.179-debug-client-alt-link.patch @@ -0,0 +1,60 @@ +From b1d2404cc6ca0d9ce786e229a87c24db49163cfe Mon Sep 17 00:00:00 2001 +From: Mark Wielaard +Date: Thu, 30 Apr 2020 23:57:26 +0200 +Subject: [PATCH] libdwfl: Handle debugaltlink in dwfl_standard_find_debuginfo. + +When we fall back to the debuginfod client then we need to do the +same trick we do for local lookups in dwfl_build_id_find_debuginfo. +If the debug file (dw) is already set, then we must be looking for +the altfile. But we cannot use the actual file/path name given as +hint. We'll have to lookup the alt file "build-id". Because the +debuginfod client only handles build-ids. + +Previously we would use the build-id of the main file which meant +the debuginfod client would give us another copy of the debug file, +which would then be set as its own altfile. This caused lots of +confusion... + +Signed-off-by: Mark Wielaard +--- + libdwfl/ChangeLog | 5 +++++ + libdwfl/find-debuginfo.c | 23 +++++++++++++++++++++-- + 2 files changed, 26 insertions(+), 2 deletions(-) + +diff --git a/libdwfl/find-debuginfo.c b/libdwfl/find-debuginfo.c +index 2dd11c48..4cfd0b8b 100644 +--- a/libdwfl/find-debuginfo.c ++++ b/libdwfl/find-debuginfo.c +@@ -398,8 +398,27 @@ dwfl_standard_find_debuginfo (Dwfl_Module *mod, + free (canon); + } + +- if (fd < 0 && bits_len > 0) +- fd = __libdwfl_debuginfod_find_debuginfo (mod->dwfl, bits, bits_len); ++ /* 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. ++ If the debug file (dw) is already set, then we must be ++ looking for the altfile. But we cannot use the actual ++ file/path name given as hint. We'll have to lookup the ++ alt file "build-id". Because the debuginfod client only ++ handles build-ids. */ ++ if (fd < 0) ++ { ++ if (mod->dw != NULL) ++ { ++ const char *altname; ++ bits_len = INTUSE(dwelf_dwarf_gnu_debugaltlink) (mod->dw, &altname, ++ (const void **) ++ &bits); ++ } ++ ++ if (bits_len > 0) ++ fd = __libdwfl_debuginfod_find_debuginfo (mod->dwfl, bits, bits_len); ++ } + + return fd; + } +-- +2.18.2 + diff --git a/elfutils.spec b/elfutils.spec index 7e59ae4..aed7cf2 100644 --- a/elfutils.spec +++ b/elfutils.spec @@ -1,6 +1,6 @@ Name: elfutils Version: 0.179 -%global baserelease 1 +%global baserelease 2 Release: %{baserelease}%{?dist} URL: http://elfutils.org/ %global source_url ftp://sourceware.org/pub/elfutils/%{version}/ @@ -55,6 +55,7 @@ BuildRequires: curl %endif # Patches +Patch1: elfutils-0.179-debug-client-alt-link.patch %description Elfutils is a collection of utilities, including stack (to show @@ -246,6 +247,7 @@ such servers to download those files on demand. %setup -q # Apply patches +%patch1 -p1 -b .debug-client-alt # In case the above patches added any new test scripts, make sure they # are executable. @@ -423,6 +425,9 @@ exit 0 %systemd_postun_with_restart debuginfod.service %changelog +* Thu Apr 30 2020 Mark Wielaard - 0.179-2 +- Add elfutils-0.179-debug-client-alt-link.patch + * Mon Mar 30 2020 Mark Wielaard - 0.179-1 - New upstream release. debuginfod-client: