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


Reply via email to