Hello community, here is the log from the commit of package dwarves for openSUSE:Factory checked in at 2020-09-25 16:23:54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/dwarves (Old) and /work/SRC/openSUSE:Factory/.dwarves.new.4249 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "dwarves" Fri Sep 25 16:23:54 2020 rev:22 rq:835930 version:1.17 Changes: -------- --- /work/SRC/openSUSE:Factory/dwarves/dwarves.changes 2020-09-05 23:58:29.831136505 +0200 +++ /work/SRC/openSUSE:Factory/.dwarves.new.4249/dwarves.changes 2020-09-25 16:26:42.407633845 +0200 @@ -1,0 +2,8 @@ +Mon Sep 21 18:48:25 UTC 2020 - Tom de Vries <tdevr...@suse.com> + +- Backport fixes for segfault when processing dwz-ed kernel + [bsc#1176095,https://github.com/acmel/dwarves/issues/10]. + * dwarves-dwarf_loader-Bail-out-at-DW_TAG_imported_unit-tags.patch + * dwarves-dwarf_loader-Ignore-entries-in-a-DW_TAG_partial_unit-for-now.patch + +------------------------------------------------------------------- New: ---- dwarves-dwarf_loader-Bail-out-at-DW_TAG_imported_unit-tags.patch dwarves-dwarf_loader-Ignore-entries-in-a-DW_TAG_partial_unit-for-now.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ dwarves.spec ++++++ --- /var/tmp/diff_new_pack.qCTjd7/_old 2020-09-25 16:26:43.015634383 +0200 +++ /var/tmp/diff_new_pack.qCTjd7/_new 2020-09-25 16:26:43.023634390 +0200 @@ -29,6 +29,8 @@ Source2: https://fedorapeople.org/~acme/dwarves/dwarves-%version.tar.sign Source9: baselibs.conf Patch0: libbpf-Fix-libbpf-hashmap-on-I-LP32-architectures.patch +Patch1: dwarves-dwarf_loader-Ignore-entries-in-a-DW_TAG_partial_unit-for-now.patch +Patch2: dwarves-dwarf_loader-Bail-out-at-DW_TAG_imported_unit-tags.patch BuildRequires: cmake BuildRequires: libdw-devel >= 0.170 %if 0%{?suse_version} < 1550 ++++++ dwarves-dwarf_loader-Bail-out-at-DW_TAG_imported_unit-tags.patch ++++++ >From 2ecc308518edfe059f34fd1ad69ef39ad011cab9 Mon Sep 17 00:00:00 2001 From: Arnaldo Carvalho de Melo <a...@redhat.com> Date: Fri, 18 Sep 2020 16:56:13 -0300 Subject: [PATCH] dwarf_loader: Bail out at DW_TAG_imported_unit tags We need to support these in a future version, for now, just bail out to avoid segfaults afterwards. $ pahole examples/sles/vmlinux-5.3.18-109.g8ff6392-default.debug WARNING: DW_TAG_partial_unit used, some types will not be considered! Probably this was optimized using a tool like 'dwz' A future version of pahole will take support this. $ Reported-by: Tom de Vries Bugtracker: https://github.com/acmel/dwarves/issues/10 Signed-off-by: Arnaldo Carvalho de Melo <a...@redhat.com> --- dwarf_loader.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dwarf_loader.c b/dwarf_loader.c index 74e0227..fd058aa 100644 --- a/dwarf_loader.c +++ b/dwarf_loader.c @@ -1615,6 +1615,8 @@ static struct tag *__die__process_tag(Dwarf_Die *die, struct cu *cu, struct tag *tag; switch (dwarf_tag(die)) { + case DW_TAG_imported_unit: + return NULL; // We don't support imported units yet, so to avoid segfaults case DW_TAG_array_type: tag = die__create_new_array(die, cu); break; case DW_TAG_base_type: -- 2.28.0 ++++++ dwarves-dwarf_loader-Ignore-entries-in-a-DW_TAG_partial_unit-for-now.patch ++++++ >From 8c92fd298101171dc8479acf4af2fdd2fad88c28 Mon Sep 17 00:00:00 2001 From: Arnaldo Carvalho de Melo <a...@redhat.com> Date: Fri, 18 Sep 2020 13:53:01 -0300 Subject: [PATCH] dwarf_loader: Ignore entries in a DW_TAG_partial_unit, for now We will have to keep all CUs in memory and do lookups in imported units, for now, just don't segfault. Reported-by: Tom de Vries Bugtracker: https://github.com/acmel/dwarves/issues/10 Signed-off-by: Arnaldo Carvalho de Melo <a...@redhat.com> --- dwarf_loader.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/dwarf_loader.c b/dwarf_loader.c index b8d7b35..74e0227 100644 --- a/dwarf_loader.c +++ b/dwarf_loader.c @@ -2085,7 +2085,19 @@ static int die__process(Dwarf_Die *die, struct cu *cu) Dwarf_Die child; const uint16_t tag = dwarf_tag(die); - if (tag != DW_TAG_compile_unit && tag != DW_TAG_type_unit && tag != DW_TAG_partial_unit) { + if (tag == DW_TAG_partial_unit) { + static bool warned; + + if (!warned) { + fprintf(stderr, "WARNING: DW_TAG_partial_unit used, some types will not be considered!\n" + " Probably this was optimized using a tool like 'dwz'\n" + " A future version of pahole will take support this.\n"); + warned = true; + } + return 0; // so that other units can be processed + } + + if (tag != DW_TAG_compile_unit && tag != DW_TAG_type_unit) { fprintf(stderr, "%s: DW_TAG_compile_unit, DW_TAG_type_unit or DW_TAG_partial_unit expected got %s!\n", __FUNCTION__, dwarf_tag_name(tag)); return -EINVAL; -- 2.28.0