summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2024-10-20 13:37:08 +0000
committerCoprDistGit <infra@openeuler.org>2024-10-20 13:37:08 +0000
commita5fff07e5a6dc497183a481e63a4ef2afe918c48 (patch)
treee6ee576aa5ec17590f0444cb75839e9a870c37f5
parent160d55ff2fd9c38e36485a291c3a2f32f0954ee5 (diff)
automatic import of elfutils
-rw-r--r--elfutils-0.190-profile-empty-urls.patch96
-rw-r--r--elfutils-0.190-riscv-flatten.patch359
-rw-r--r--elfutils.spec4
3 files changed, 0 insertions, 459 deletions
diff --git a/elfutils-0.190-profile-empty-urls.patch b/elfutils-0.190-profile-empty-urls.patch
deleted file mode 100644
index dab4d9b..0000000
--- a/elfutils-0.190-profile-empty-urls.patch
+++ /dev/null
@@ -1,96 +0,0 @@
-commit 0ba2e4aa9945019a8c6db95d27d142b660a63a79
-Author: Mark Wielaard <mark@klomp.org>
-Date: Tue Mar 26 21:42:39 2024 +0100
-
- config: Make sure profile.sh succeeds with set -e and set -o pipefail
-
- profile.sh might fail with set -o pipefail because:
-
- cat /dev/null "${prefix}/etc/debuginfod"/*.urls 2>/dev/null | tr '\n' ' '
-
- might fail when there isn't an *.urls file the first command in the
- pipe fails (the 2>/dev/null is there to hide that failure).
-
- This can be fixed by adding || : at the end.
-
- This works because : always succeeds and produces no outpur which is
- what the script expects when the command would fail.
-
- Also add a new testcase that runs profile.sh with bout set -e
- and set -o pipefail.
-
- * config/profile.sh.in: Add || : at end of pipe.
- * tests/run-debuginfod-client-profile.sh: New test.
- * tests/Makefile.am (TESTS): Add run-debuginfod-client-profile.sh.
- (EXTRA_DIST): Likewise.
-
- https://sourceware.org/bugzilla/show_bug.cgi?id=31562
-
- Signed-off-by: Mark Wielaard <mark@klomp.org>
-
-diff --git a/config/profile.sh.in b/config/profile.sh.in
-index 3f4397dcb44d..84d3260ddcfc 100644
---- a/config/profile.sh.in
-+++ b/config/profile.sh.in
-@@ -6,7 +6,7 @@
-
- if [ -z "$DEBUGINFOD_URLS" ]; then
- prefix="@prefix@"
-- DEBUGINFOD_URLS=$(cat /dev/null "@sysconfdir@/debuginfod"/*.urls 2>/dev/null | tr '\n' ' ')
-+ DEBUGINFOD_URLS=$(cat /dev/null "@sysconfdir@/debuginfod"/*.urls 2>/dev/null | tr '\n' ' ' || :)
- [ -n "$DEBUGINFOD_URLS" ] && export DEBUGINFOD_URLS || unset DEBUGINFOD_URLS
- unset prefix
- fi
-diff --git a/tests/Makefile.am b/tests/Makefile.am
-index 9315ec3bbe4c..344d6706e16e 100644
---- a/tests/Makefile.am
-+++ b/tests/Makefile.am
-@@ -209,6 +209,7 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \
- run-disasm-riscv64.sh \
- run-pt_gnu_prop-tests.sh \
- run-getphdrnum.sh run-test-includes.sh \
-+ run-debuginfod-client-profile.sh \
- leb128 read_unaligned \
- msg_tst system-elf-libelf-test system-elf-gelf-test \
- $(asm_TESTS) run-disasm-bpf.sh run-low_high_pc-dw-form-indirect.sh \
-@@ -636,6 +637,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \
- testfile_pt_gnu_prop.bz2 testfile_pt_gnu_prop32.bz2 \
- run-getphdrnum.sh testfile-phdrs.elf.bz2 \
- run-test-includes.sh run-low_high_pc-dw-form-indirect.sh \
-+ run-debuginfod-client-profile.sh \
- run-readelf-dw-form-indirect.sh testfile-dw-form-indirect.bz2 \
- run-nvidia-extended-linemap-libdw.sh run-nvidia-extended-linemap-readelf.sh \
- testfile_nvidia_linemap.bz2 \
-diff --git a/tests/run-debuginfod-client-profile.sh b/tests/run-debuginfod-client-profile.sh
-new file mode 100755
-index 000000000000..7435ced83f15
---- /dev/null
-+++ b/tests/run-debuginfod-client-profile.sh
-@@ -0,0 +1,27 @@
-+#! /bin/sh
-+# Copyright (C) 2024 Mark J. Wielaard
-+# This file is part of elfutils.
-+#
-+# This file is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 3 of the License, or
-+# (at your option) any later version.
-+#
-+# elfutils is distributed in the hope that it will be useful, but
-+# WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program. If not, see <http://www.gnu.org/licenses/>.
-+
-+. $srcdir/test-subr.sh
-+
-+# Make sure the profile.sh or profile.d/debuginfod.sh works even with
-+# set -e (any command error is an error) and set -o pipefail (any error
-+# in a pipe fails the whole pipe command).
-+
-+set -e
-+set -o pipefail
-+
-+source ${abs_top_builddir}/config/profile.sh
diff --git a/elfutils-0.190-riscv-flatten.patch b/elfutils-0.190-riscv-flatten.patch
deleted file mode 100644
index a96d339..0000000
--- a/elfutils-0.190-riscv-flatten.patch
+++ /dev/null
@@ -1,359 +0,0 @@
-From e39336df6588c3f9853be7d02819aee262ba2121 Mon Sep 17 00:00:00 2001
-From: Mark Wielaard <mark@klomp.org>
-Date: Tue, 19 Mar 2024 22:43:10 +0000
-Subject: [PATCH] riscv: Partial implementation of flatten_aggregate
-
-dwfl_module_return_value_location would fail on riscv for functions
-which return a (small) struct. This patch implements the simplest
-cases of flatten_aggregate in backends/riscv_retval.c. It just handles
-structs containing one or two members of the same base type which fit
-completely or in pieces in one or two general or floating point
-registers.
-
-It also adds a specific test case run-funcretval-struct.sh containing
-small structs of ints, longs, floats and doubles. All these testscases
-now work for riscv. There is already a slightly more extensive
-testcase for this in tests/run-funcretval.sh but that only has a
-testcase for aarch64.
-
- * backends/riscv_retval.c (flatten_aggregate_arg): Implement
- for the simple cases where we have a struct with one or two
- members of the same base type.
- (pass_by_flattened_arg): Likewise. Call either
- pass_in_gpr_lp64 or pass_in_fpr_lp64d.
- (riscv_return_value_location_lp64ifd): Call
- flatten_aggregate_arg including size.
- * tests/Makefile.am (TESTS): Add run-funcretval-struct.sh
- and run-funcretval-struct-native.sh.
- (check_PROGRAMS): Add funcretval_test_struct.
- (funcretval_test_struct_SOURCES): New.
- (EXTRA_DIST): Add run-funcretval-struct.sh,
- funcretval_test_struct_riscv.bz2 and
- run-funcretval-struct-native.sh.
- * tests/funcretval_test_struct_riscv.bz2: New test binary.
- * tests/run-funcretval-struct-native.sh: New test.
- * tests/run-funcretval-struct.sh: Likewise.
-
-https://sourceware.org/bugzilla/show_bug.cgi?id=31142
-
-Signed-off-by: Mark Wielaard <mark@klomp.org>
----
- backends/riscv_retval.c | 123 ++++++++++++++++++++++---
- tests/Makefile.am | 7 ++
- tests/funcretval_test_struct.c | 86 +++++++++++++++++
- tests/funcretval_test_struct_riscv.bz2 | Bin 0 -> 3821 bytes
- tests/run-funcretval-struct-native.sh | 22 +++++
- tests/run-funcretval-struct.sh | 35 +++++++
- 6 files changed, 262 insertions(+), 11 deletions(-)
- create mode 100644 tests/funcretval_test_struct.c
- create mode 100755 tests/funcretval_test_struct_riscv.bz2
- create mode 100755 tests/run-funcretval-struct-native.sh
- create mode 100755 tests/run-funcretval-struct.sh
-
-Fedora NOTE: Both the riscv specific test files weren't included
- (funcretval_test_struct_riscv.bz2 and run-funcretval-struct.sh)
- Because it contained a binary test. The native test is included
- though.
-
-diff --git a/backends/riscv_retval.c b/backends/riscv_retval.c
-index 0a1e02f81cd2..50c451a4ba32 100644
---- a/backends/riscv_retval.c
-+++ b/backends/riscv_retval.c
-@@ -1,6 +1,7 @@
- /* Function return value location for Linux/RISC-V ABI.
- Copyright (C) 2018 Sifive, Inc.
- Copyright (C) 2013 Red Hat, Inc.
-+ Copyright (C) 2024 Mark J. Wielaard <mark@klomp.org>
- This file is part of elfutils.
-
- This file is free software; you can redistribute it and/or modify
-@@ -105,23 +106,123 @@ pass_in_fpr_lp64d (const Dwarf_Op **locp, Dwarf_Word size)
- return size <= 8 ? 1 : 4;
- }
-
-+/* Checks if we can "flatten" the given type, Only handles the simple
-+ cases where we have a struct with one or two the same base type
-+ elements. */
- static int
--flatten_aggregate_arg (Dwarf_Die *typedie __attribute__ ((unused)),
-- Dwarf_Die *arg0 __attribute__ ((unused)),
-- Dwarf_Die *arg1 __attribute__ ((unused)))
-+flatten_aggregate_arg (Dwarf_Die *typedie,
-+ Dwarf_Word size,
-+ Dwarf_Die *arg0,
-+ Dwarf_Die *arg1)
- {
-- /* ??? */
-+ int tag0, tag1;
-+ Dwarf_Die member;
-+ Dwarf_Word encoding0, encoding1;
-+ Dwarf_Attribute attr;
-+ Dwarf_Word size0, size1;
-+
-+ if (size < 8 || size > 16)
-+ return 0;
-+
-+ if (dwarf_child (typedie, arg0) != 0)
-+ return 0;
-+
-+ tag0 = dwarf_tag (arg0);
-+ while (tag0 != -1 && tag0 != DW_TAG_member)
-+ {
-+ if (dwarf_siblingof (arg0, arg0) != 0)
-+ return 0;
-+ tag0 = dwarf_tag (arg0);
-+ }
-+
-+ if (tag0 != DW_TAG_member)
-+ return 0;
-+
-+ /* Remember where we are. */
-+ member = *arg0;
-+
-+ tag0 = dwarf_peeled_die_type (arg0, arg0);
-+ if (tag0 != DW_TAG_base_type)
-+ return 0;
-+
-+ if (dwarf_attr_integrate (arg0, DW_AT_encoding, &attr) == NULL
-+ || dwarf_formudata (&attr, &encoding0) != 0)
-+ return 0;
-+
-+ if (dwarf_bytesize_aux (arg0, &size0) != 0)
-+ return 0;
-+
-+ if (size == size0)
-+ return 1; /* This one member is the whole size. */
-+
-+ if (size != 2 * size0)
-+ return 0; /* We only handle two of the same. */
-+
-+ /* Look for another member with the same encoding. */
-+ if (dwarf_siblingof (&member, arg1) != 0)
-+ return 0;
-+
-+ tag1 = dwarf_tag (arg1);
-+ while (tag1 != -1 && tag1 != DW_TAG_member)
-+ {
-+ if (dwarf_siblingof (arg1, arg1) != 0)
-+ return 0;
-+ tag1 = dwarf_tag (arg1);
-+ }
-+
-+ if (tag1 != DW_TAG_member)
-+ return 0;
-+
-+ tag1 = dwarf_peeled_die_type (arg1, arg1);
-+ if (tag1 != DW_TAG_base_type)
-+ return 0; /* We can only handle two equal base types for now. */
-+
-+ if (dwarf_attr_integrate (arg1, DW_AT_encoding, &attr) == NULL
-+ || dwarf_formudata (&attr, &encoding1) != 0
-+ || encoding0 != encoding1)
-+ return 0; /* We can only handle two of the same for now. */
-+
-+ if (dwarf_bytesize_aux (arg1, &size1) != 0)
-+ return 0;
-+
-+ if (size0 != size1)
-+ return 0; /* We can only handle two of the same for now. */
-+
- return 1;
- }
-
-+/* arg0 and arg1 should be the peeled die types found by
-+ flatten_aggregate_arg. */
- static int
--pass_by_flattened_arg (const Dwarf_Op **locp __attribute__ ((unused)),
-- Dwarf_Word size __attribute__ ((unused)),
-- Dwarf_Die *arg0 __attribute__ ((unused)),
-- Dwarf_Die *arg1 __attribute__ ((unused)))
-+pass_by_flattened_arg (const Dwarf_Op **locp,
-+ Dwarf_Word size,
-+ Dwarf_Die *arg0,
-+ Dwarf_Die *arg1 __attribute__((unused)))
- {
-- /* ??? */
-- return -2;
-+ /* For now we just assume arg0 and arg1 are the same type and
-+ encoding. */
-+ Dwarf_Word encoding;
-+ Dwarf_Attribute attr;
-+
-+ if (dwarf_attr_integrate (arg0, DW_AT_encoding, &attr) == NULL
-+ || dwarf_formudata (&attr, &encoding) != 0)
-+ return -1;
-+
-+ switch (encoding)
-+ {
-+ case DW_ATE_boolean:
-+ case DW_ATE_signed:
-+ case DW_ATE_unsigned:
-+ case DW_ATE_unsigned_char:
-+ case DW_ATE_signed_char:
-+ return pass_in_gpr_lp64 (locp, size);
-+
-+ case DW_ATE_float:
-+ return pass_in_fpr_lp64d (locp, size);
-+
-+ default:
-+ return -1;
-+ }
- }
-
- int
-@@ -158,7 +259,7 @@ riscv_return_value_location_lp64ifd (int fp, Dwarf_Die *functypedie,
- provided the floating-point real is no more than FLEN bits wide and
- the integer is no more than XLEN bits wide. */
- if (tag == DW_TAG_structure_type
-- && flatten_aggregate_arg (&typedie, &arg0, &arg1))
-+ && flatten_aggregate_arg (&typedie, size, &arg0, &arg1))
- return pass_by_flattened_arg (locp, size, &arg0, &arg1);
- /* Aggregates larger than 2*XLEN bits are passed by reference. */
- else if (size > 16)
-diff --git a/tests/Makefile.am b/tests/Makefile.am
-index 9141074fe44c..9315ec3bbe4c 100644
---- a/tests/Makefile.am
-+++ b/tests/Makefile.am
-@@ -284,6 +285,10 @@ funcretval_test__11_SOURCES = funcretval_test++11.cxx
- TESTS += run-funcretval++11.sh
- endif
-
-+check_PROGRAMS += funcretval_test_struct
-+funcretval_test_struct_SOURCES = funcretval_test_struct.c
-+TESTS += run-funcretval-struct-native.sh
-+
- EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \
- run-ar-N.sh \
- run-show-die-info.sh run-get-files.sh run-get-lines.sh \
-@@ -635,6 +641,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \
- testfile_nvidia_linemap.bz2 \
- testfile-largealign.o.bz2 run-strip-largealign.sh \
- run-funcretval++11.sh \
-+ run-funcretval-struct-native.sh \
- test-ar-duplicates.a.bz2 \
- run-dwfl-core-noncontig.sh testcore-noncontig.bz2 \
- testfile-dwarf5-line-clang.bz2 \
-diff --git a/tests/funcretval_test_struct.c b/tests/funcretval_test_struct.c
-new file mode 100644
-index 000000000000..df94bde0a42d
---- /dev/null
-+++ b/tests/funcretval_test_struct.c
-@@ -0,0 +1,86 @@
-+/* Copyright (C) 2024 Mark J. Wielaard <mark@klomp.org>
-+ This file is part of elfutils.
-+
-+ This file is free software; you can redistribute it and/or modify
-+ it under the terms of the GNU General Public License as published by
-+ the Free Software Foundation; either version 3 of the License, or
-+ (at your option) any later version.
-+
-+ elfutils is distributed in the hope that it will be useful, but
-+ WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ GNU General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public License
-+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
-+
-+typedef struct
-+ {
-+ int q;
-+ int r;
-+ } div_t;
-+
-+typedef struct
-+ {
-+ long q;
-+ long r;
-+ } ldiv_t;
-+
-+typedef struct
-+ {
-+ float x;
-+ float y;
-+ } point_t;
-+
-+typedef struct
-+ {
-+ double x;
-+ double y;
-+ } dpoint_t;
-+
-+div_t __attribute__((__noinline__))
-+div (int n, int d)
-+{
-+ div_t r;
-+ r.q = n / d;
-+ r.r = n % d;
-+ return r;
-+}
-+
-+ldiv_t __attribute__((__noinline__))
-+ldiv (long n, long d)
-+{
-+ ldiv_t r;
-+ r.q = n / d;
-+ r.r = n % d;
-+ return r;
-+}
-+
-+point_t __attribute__((__noinline__))
-+mkpt (float x, float y)
-+{
-+ point_t r;
-+ r.x = x;
-+ r.y = y;
-+ return r;
-+}
-+
-+dpoint_t __attribute__((__noinline__))
-+dmkpt (double x, double y)
-+{
-+ dpoint_t r;
-+ r.x = x;
-+ r.y = y;
-+ return r;
-+}
-+
-+int
-+main (void)
-+{
-+ div_t d = div (3, 2);
-+ ldiv_t ld = ldiv (3, 2);
-+ point_t p = mkpt (3.0f, 1.0f);
-+ dpoint_t dp = dmkpt (3.0d, 1.0d);
-+
-+ return d.q - (int) p.y + ld.q - (int) dp.y;
-+}
-
-diff --git a/tests/run-funcretval-struct-native.sh b/tests/run-funcretval-struct-native.sh
-new file mode 100755
-index 000000000000..798edb3b61b3
---- /dev/null
-+++ b/tests/run-funcretval-struct-native.sh
-@@ -0,0 +1,22 @@
-+#! /bin/sh
-+# Copyright (C) 2024 Mark J. Wielaard <mark@klomp.org>
-+# This file is part of elfutils.
-+#
-+# This file is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 3 of the License, or
-+# (at your option) any later version.
-+#
-+# elfutils is distributed in the hope that it will be useful, but
-+# WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program. If not, see <http://www.gnu.org/licenses/>.
-+
-+. $srcdir/test-subr.sh
-+
-+# Just run it, we don't know what the native representation is.
-+# But it should at least work and not error out.
-+testrun $abs_builddir/funcretval -e $abs_builddir/funcretval_test_struct
---
-2.44.0
-
diff --git a/elfutils.spec b/elfutils.spec
index dc0ce80..aed3691 100644
--- a/elfutils.spec
+++ b/elfutils.spec
@@ -8,10 +8,6 @@ Source: https://sourceware.org/elfutils/ftp/%{version}/elfutils-%{version}.tar.b
Patch0: Fix-segfault-in-eu-ar-m.patch
Patch1: Fix-issue-of-moving-files-by-ar-or-br.patch
-# https://sourceware.org/bugzilla/show_bug.cgi?id=31562
-Patch2: elfutils-0.190-profile-empty-urls.patch
-# https://sourceware.org/bugzilla/show_bug.cgi?id=31142
-Patch3: elfutils-0.190-riscv-flatten.patch
Requires: elfutils-libelf = %{version}-%{release}
Requires: elfutils-libs = %{version}-%{release}