From f13b85e376229df14baaa231a29c4e5eccd7b6a7 Mon Sep 17 00:00:00 2001 From: Cole Robinson Date: Wed, 3 Aug 2016 10:24:30 -0400 Subject: [PATCH] pdwtags: don't fail on unhandled tags (bz 1348200) --- ...-t-stop-processing-after-finding-uns.patch | 56 +++++++++++++++++++ dwarves.spec | 8 ++- 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 0001-dwarf_loader-Don-t-stop-processing-after-finding-uns.patch diff --git a/0001-dwarf_loader-Don-t-stop-processing-after-finding-uns.patch b/0001-dwarf_loader-Don-t-stop-processing-after-finding-uns.patch new file mode 100644 index 0000000..4505e05 --- /dev/null +++ b/0001-dwarf_loader-Don-t-stop-processing-after-finding-uns.patch @@ -0,0 +1,56 @@ +From be7b691756ff334705eb6faf51a196540e02e96c Mon Sep 17 00:00:00 2001 +Message-Id: +From: Arnaldo Carvalho de Melo +Date: Thu, 16 Aug 2012 14:55:14 -0300 +Subject: [PATCH] dwarf_loader: Don't stop processing after finding unsupported + tag + +After emitting a warning that a tag is not supported __die__process_tag +was returning NULL, making die__process_unit think that the problem +was insufficient memory. + +Introduce a global variable 'unsupported_tag' and return it instead, +that way die__process_unit can distinguish ENOMEM from unsupported tags. + +Reported-by: Thiago Macieira +Tested-by: Thiago Macieira +Signed-off-by: Arnaldo Carvalho de Melo +--- + dwarf_loader.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/dwarf_loader.c b/dwarf_loader.c +index e034237..e9e1671 100644 +--- a/dwarf_loader.c ++++ b/dwarf_loader.c +@@ -1539,6 +1539,8 @@ static struct tag *die__create_new_function(Dwarf_Die *die, struct cu *cu) + return function ? &function->proto.tag : NULL; + } + ++static struct tag unsupported_tag; ++ + static struct tag *__die__process_tag(Dwarf_Die *die, struct cu *cu, + int top_level, const char *fn) + { +@@ -1578,7 +1580,7 @@ static struct tag *__die__process_tag(Dwarf_Die *die, struct cu *cu, + tag = die__create_new_variable(die, cu); break; + default: + __cu__tag_not_handled(die, fn); +- tag = NULL; ++ tag = &unsupported_tag; + break; + } + +@@ -1595,6 +1597,9 @@ static int die__process_unit(Dwarf_Die *die, struct cu *cu) + if (tag == NULL) + return -ENOMEM; + ++ if (tag == &unsupported_tag) ++ continue; ++ + long id = -1; + cu__add_tag(cu, tag, &id); + cu__hash(cu, tag); +-- +2.7.4 + diff --git a/dwarves.spec b/dwarves.spec index 811c4e8..39bd129 100644 --- a/dwarves.spec +++ b/dwarves.spec @@ -3,13 +3,15 @@ Name: dwarves Version: 1.10 -Release: 9%{?dist} +Release: 10%{?dist} License: GPLv2 Summary: Debugging Information Manipulation Tools Group: Development/Tools URL: http://acmel.wordpress.com Source: http://fedorapeople.org/~acme/dwarves/%{name}-%{version}.tar.bz2 Patch0: dwarves-remove-dw_tag_mutable_type.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=1348200 +Patch1: 0001-dwarf_loader-Don-t-stop-processing-after-finding-uns.patch BuildRequires: cmake BuildRequires: zlib-devel BuildRequires: elfutils-devel >= 0.130 @@ -51,6 +53,7 @@ Debugging information processing library development files. %prep %setup -q -c -n %{name}-%{version} %patch0 -p1 +%patch1 -p1 %build %cmake . @@ -116,6 +119,9 @@ rm -rf %{buildroot} %{_libdir}/%{libname}_reorganize.so %changelog +* Wed Aug 03 2016 Cole Robinson - 1.10-9%{?dist} +- pdwtags: don't fail on unhandled tags (bz 1348200) + * Wed Feb 03 2016 Fedora Release Engineering - 1.10-9 - Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild