diff --git a/0001-backends-Handle-DW_TAG_unspecified_type-in-dwarf_pee.patch b/0001-backends-Handle-DW_TAG_unspecified_type-in-dwarf_pee.patch deleted file mode 100644 index cd364de..0000000 --- a/0001-backends-Handle-DW_TAG_unspecified_type-in-dwarf_pee.patch +++ /dev/null @@ -1,138 +0,0 @@ -From f2c522567ad63ac293535fba9704895e685ab5bc Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Thu, 26 Jan 2023 18:19:15 +0100 -Subject: [PATCH] backends: Handle DW_TAG_unspecified_type in - dwarf_peeled_die_type - -binutils 2.40 introduces DW_TAG_unspecified_type for assembly -functions with an unknown return type. This breaks the -run-funcretval.sh testcase because dwfl_module_return_value_location -returns an error for such functions because it cannot determine the -return value location. Fix that by treating DW_TAG_unspecified_type -as if the DIE doesn't have a DW_AT_type. - -Also update the testcase to explicitly checking for -DW_TAG_unspecified_type and printing "returns unspecified type". - -https://sourceware.org/bugzilla/show_bug.cgi?id=30047 - -Signed-off-by: Mark Wielaard ---- - NEWS | 5 +++++ - backends/ChangeLog | 5 +++++ - backends/libebl_CPU.h | 14 ++++++++++++-- - tests/ChangeLog | 5 +++++ - tests/funcretval.c | 14 +++++++++++++- - 5 files changed, 40 insertions(+), 3 deletions(-) - -diff --git a/NEWS b/NEWS -index 71534b8c..80faca39 100644 ---- a/NEWS -+++ b/NEWS -@@ -1,3 +1,8 @@ -+Version 0.189 -+ -+libdwfl: dwfl_module_return_value_location now returns 0 (no return type) -+ for DIEs that point to a DW_TAG_unspecified_type. -+ - Version 0.188 - - readelf: Add -D, --use-dynamic option. -diff --git a/backends/ChangeLog b/backends/ChangeLog -index 40ec7c0c..81f08314 100644 ---- a/backends/ChangeLog -+++ b/backends/ChangeLog -@@ -1,3 +1,8 @@ -+2023-02-07 Mark Wielaard -+ -+ * libebl_CPU.h (dwarf_peeled_die_type): Explicitly handle -+ DW_TAG_unspecified_type as if there was no DW_AT_type. -+ - 2023-01-19 Mark Wielaard - - * sparc_reloc.def (NONE): Add EXEC and DYN. -diff --git a/backends/libebl_CPU.h b/backends/libebl_CPU.h -index 2abad76f..3b2cc3e4 100644 ---- a/backends/libebl_CPU.h -+++ b/backends/libebl_CPU.h -@@ -1,5 +1,6 @@ - /* Common interface for libebl modules. - Copyright (C) 2000, 2001, 2002, 2003, 2005, 2013, 2014 Red Hat, Inc. -+ Copyright (C) 2023 Mark J. Wielaard - This file is part of elfutils. - - This file is free software; you can redistribute it and/or modify -@@ -53,7 +54,9 @@ extern bool (*generic_debugscn_p) (const char *) attribute_hidden; - dwarf_tag (_die); }) - - /* Get a type die corresponding to DIE. Peel CV qualifiers off -- it. */ -+ it. Returns zero if the DIE doesn't have a type, or the type -+ is DW_TAG_unspecified_type. Returns -1 on error. Otherwise -+ returns the result tag DW_AT value. */ - static inline int - dwarf_peeled_die_type (Dwarf_Die *die, Dwarf_Die *result) - { -@@ -69,7 +72,14 @@ dwarf_peeled_die_type (Dwarf_Die *die, Dwarf_Die *result) - if (dwarf_peel_type (result, result) != 0) - return -1; - -- return DWARF_TAG_OR_RETURN (result); -+ if (result == NULL) -+ return -1; -+ -+ int tag = dwarf_tag (result); -+ if (tag == DW_TAG_unspecified_type) -+ return 0; /* Treat an unspecified type as if there was no type. */ -+ -+ return tag; - } - - static inline bool -diff --git a/tests/ChangeLog b/tests/ChangeLog -index 974a3a4f..89f1a991 100644 ---- a/tests/ChangeLog -+++ b/tests/ChangeLog -@@ -1,3 +1,8 @@ -+2023-02-07 Mark Wielaard -+ -+ * tests/funcretval.c (handle_function): Check for -+ DW_TAG_unspecified_type. -+ - 2023-02-03 Mark Wielaard - - * run-addr2line-C-test.sh: Check ELFUTILS_DISABLE_DEMANGLE. -diff --git a/tests/funcretval.c b/tests/funcretval.c -index 16cd1a44..41198ab7 100644 ---- a/tests/funcretval.c -+++ b/tests/funcretval.c -@@ -1,5 +1,6 @@ - /* Test program for dwfl_module_return_value_location. - Copyright (C) 2005 Red Hat, Inc. -+ Copyright (C) 2023 Mark J. Wielaard - This file is part of elfutils. - - This file is free software; you can redistribute it and/or modify -@@ -67,7 +68,18 @@ handle_function (Dwarf_Die *funcdie, void *arg) - error (EXIT_FAILURE, 0, "dwfl_module_return_value_location: %s", - dwfl_errmsg (-1)); - else if (nlocops == 0) -- puts ("returns no value"); -+ { -+ // Check if this is the special unspecified type -+ // https://sourceware.org/bugzilla/show_bug.cgi?id=30047 -+ Dwarf_Die die_mem, *typedie = &die_mem; -+ Dwarf_Attribute attr_mem, *attr; -+ attr = dwarf_attr_integrate (funcdie, DW_AT_type, &attr_mem); -+ if (dwarf_formref_die (attr, typedie) != NULL -+ && dwarf_tag (typedie) == DW_TAG_unspecified_type) -+ puts ("returns unspecified type"); -+ else -+ puts ("returns no value"); -+ } - else - { - printf ("return value location:"); --- -2.43.0 - diff --git a/elfutils.spec b/elfutils.spec index b7ee331..574ba3b 100644 --- a/elfutils.spec +++ b/elfutils.spec @@ -80,8 +80,6 @@ Patch2: elfutils-0.190-fix-core-noncontig.patch # Remove obscure tests that can fail on i386. Patch3: elfutils-0.190-remove-ET_REL-unstrip-test.patch -# Fix testsuite failure with binutils 2.40 or newer. -Patch10: 0001-backends-Handle-DW_TAG_unspecified_type-in-dwarf_pee.patch %description Elfutils is a collection of utilities, including stack (to show