Upgrade to upstream elfutils 0.191
Drop upstreamed patches elfutils-0.190-fix-core-noncontig.patch elfutils-0.190-gcc-14.patch elfutils-0.190-remove-ET_REL-unstrip-test.patch Drop testcore-noncontig.bz2 Add elfutils-0.191-profile-empty-urls.patch Add elfutils-0.191-riscv-flatten.patch Add feature flag for reenabling elfutils-libelf-devel-static and elfutils-devel-static Resolves: RHEL-29197
This commit is contained in:
parent
fc141358f5
commit
d36bf0429d
1
.gitignore
vendored
1
.gitignore
vendored
@ -31,3 +31,4 @@
|
|||||||
/elfutils-0.188.tar.bz2
|
/elfutils-0.188.tar.bz2
|
||||||
/elfutils-0.189.tar.bz2
|
/elfutils-0.189.tar.bz2
|
||||||
/elfutils-0.190.tar.bz2
|
/elfutils-0.190.tar.bz2
|
||||||
|
/elfutils-0.191.tar.bz2
|
||||||
|
@ -1,329 +0,0 @@
|
|||||||
From 0fba72fed595f77ca19a57553096ce3cc81cf8f3 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Aaron Merey <amerey@redhat.com>
|
|
||||||
Date: Fri, 24 Nov 2023 14:52:38 -0500
|
|
||||||
Subject: [PATCH] libdwfl: Correctly handle corefile non-contiguous segments
|
|
||||||
|
|
||||||
It is possible for segments of different shared libaries to be interleaved
|
|
||||||
in memory such that the segments of one library are located in between
|
|
||||||
non-contiguous segments of another library.
|
|
||||||
|
|
||||||
For example, this can be seen with firefox on RHEL 7.9 where multiple
|
|
||||||
shared libraries could be mapped in between ld-2.17.so segments:
|
|
||||||
|
|
||||||
[...]
|
|
||||||
7f0972082000-7f09720a4000 00000000 139264 /usr/lib64/ld-2.17.so
|
|
||||||
7f09720a4000-7f09720a5000 00000000 4096 /memfd:mozilla-ipc (deleted)
|
|
||||||
7f09720a5000-7f09720a7000 00000000 8192 /memfd:mozilla-ipc (deleted)
|
|
||||||
7f09720a7000-7f09720a9000 00000000 8192 /memfd:mozilla-ipc (deleted)
|
|
||||||
7f0972134000-7f0972136000 00000000 8192 /usr/lib64/firefox/libmozwayland.so
|
|
||||||
7f0972136000-7f0972137000 00002000 4096 /usr/lib64/firefox/libmozwayland.so
|
|
||||||
7f0972137000-7f0972138000 00003000 4096 /usr/lib64/firefox/libmozwayland.so
|
|
||||||
7f0972138000-7f0972139000 00003000 4096 /usr/lib64/firefox/libmozwayland.so
|
|
||||||
7f097213a000-7f0972147000 00000000 53248 /usr/lib64/firefox/libmozsqlite3.so
|
|
||||||
7f0972147000-7f097221e000 0000d000 880640 /usr/lib64/firefox/libmozsqlite3.so
|
|
||||||
7f097221e000-7f0972248000 000e4000 172032 /usr/lib64/firefox/libmozsqlite3.so
|
|
||||||
7f0972248000-7f0972249000 0010e000 4096 /usr/lib64/firefox/libmozsqlite3.so
|
|
||||||
7f0972249000-7f097224c000 0010e000 12288 /usr/lib64/firefox/libmozsqlite3.so
|
|
||||||
7f097224c000-7f0972250000 00111000 16384 /usr/lib64/firefox/libmozsqlite3.so
|
|
||||||
7f0972250000-7f0972253000 00000000 12288 /usr/lib64/firefox/liblgpllibs.so
|
|
||||||
[...]
|
|
||||||
7f09722a3000-7f09722a4000 00021000 4096 /usr/lib64/ld-2.17.so
|
|
||||||
7f09722a4000-7f09722a5000 00022000 4096 /usr/lib64/ld-2.17.so
|
|
||||||
|
|
||||||
dwfl_segment_report_module did not account for the possibility of
|
|
||||||
interleaving non-contiguous segments, resulting in premature closure
|
|
||||||
of modules as well as failing to report modules.
|
|
||||||
|
|
||||||
Fix this by removing segment skipping in dwfl_segment_report_module.
|
|
||||||
When dwfl_segment_report_module reported a module, it would return
|
|
||||||
the index of the segment immediately following the end address of the
|
|
||||||
current module. Since there's a chance that other modules might fall
|
|
||||||
within this address range, dwfl_segment_report_module instead returns
|
|
||||||
the index of the next segment.
|
|
||||||
|
|
||||||
This patch also fixes premature module closure that can occur in
|
|
||||||
dwfl_segment_report_module when interleaving non-contiguous segments
|
|
||||||
are found. Previously modules with start and end addresses that overlap
|
|
||||||
with the current segment would have their build-ids compared with the
|
|
||||||
current segment's build-id. If there was a mismatch, that module would
|
|
||||||
be closed. Avoid closing modules in this case when mismatching build-ids
|
|
||||||
correspond to distinct modules.
|
|
||||||
|
|
||||||
https://sourceware.org/bugzilla/show_bug.cgi?id=30975
|
|
||||||
|
|
||||||
Signed-off-by: Aaron Merey <amerey@redhat.com>
|
|
||||||
---
|
|
||||||
libdwfl/dwfl_segment_report_module.c | 37 ++++++++----
|
|
||||||
tests/Makefile.am | 8 ++-
|
|
||||||
tests/dwfl-core-noncontig.c | 82 +++++++++++++++++++++++++++
|
|
||||||
tests/run-dwfl-core-noncontig.sh | 63 ++++++++++++++++++++
|
|
||||||
4 files changed, 177 insertions(+), 14 deletions(-)
|
|
||||||
create mode 100644 tests/dwfl-core-noncontig.c
|
|
||||||
create mode 100755 tests/run-dwfl-core-noncontig.sh
|
|
||||||
|
|
||||||
diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c
|
|
||||||
index 3ef62a7d..09ee37b3 100644
|
|
||||||
--- a/libdwfl/dwfl_segment_report_module.c
|
|
||||||
+++ b/libdwfl/dwfl_segment_report_module.c
|
|
||||||
@@ -737,17 +737,34 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
|
|
||||||
&& invalid_elf (module->elf, module->disk_file_has_build_id,
|
|
||||||
&build_id))
|
|
||||||
{
|
|
||||||
- elf_end (module->elf);
|
|
||||||
- close (module->fd);
|
|
||||||
- module->elf = NULL;
|
|
||||||
- module->fd = -1;
|
|
||||||
+ /* If MODULE's build-id doesn't match the disk file's
|
|
||||||
+ build-id, close ELF only if MODULE and ELF refer to
|
|
||||||
+ different builds of files with the same name. This
|
|
||||||
+ prevents premature closure of the correct ELF in cases
|
|
||||||
+ where segments of a module are non-contiguous in memory. */
|
|
||||||
+ if (name != NULL && module->name[0] != '\0'
|
|
||||||
+ && strcmp (basename (module->name), basename (name)) == 0)
|
|
||||||
+ {
|
|
||||||
+ elf_end (module->elf);
|
|
||||||
+ close (module->fd);
|
|
||||||
+ module->elf = NULL;
|
|
||||||
+ module->fd = -1;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
- if (module->elf != NULL)
|
|
||||||
+ else if (module->elf != NULL)
|
|
||||||
{
|
|
||||||
- /* Ignore this found module if it would conflict in address
|
|
||||||
- space with any already existing module of DWFL. */
|
|
||||||
+ /* This module has already been reported. */
|
|
||||||
skip_this_module = true;
|
|
||||||
}
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ /* Only report this module if we haven't already done so. */
|
|
||||||
+ for (Dwfl_Module *mod = dwfl->modulelist; mod != NULL;
|
|
||||||
+ mod = mod->next)
|
|
||||||
+ if (mod->low_addr == module_start
|
|
||||||
+ && mod->high_addr == module_end)
|
|
||||||
+ skip_this_module = true;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
if (skip_this_module)
|
|
||||||
goto out;
|
|
||||||
@@ -781,10 +798,6 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- /* Our return value now says to skip the segments contained
|
|
||||||
- within the module. */
|
|
||||||
- ndx = addr_segndx (dwfl, segment, module_end, true);
|
|
||||||
-
|
|
||||||
/* Examine its .dynamic section to get more interesting details.
|
|
||||||
If it has DT_SONAME, we'll use that as the module name.
|
|
||||||
If it has a DT_DEBUG, then it's actually a PIE rather than a DSO.
|
|
||||||
@@ -929,6 +942,8 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
|
|
||||||
ndx = -1;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
+ else
|
|
||||||
+ ndx++;
|
|
||||||
|
|
||||||
/* We have reported the module. Now let the caller decide whether we
|
|
||||||
should read the whole thing in right now. */
|
|
||||||
diff --git a/tests/Makefile.am b/tests/Makefile.am
|
|
||||||
index 7fb8efb1..9f8f7698 100644
|
|
||||||
--- a/tests/Makefile.am
|
|
||||||
+++ b/tests/Makefile.am
|
|
||||||
@@ -42,7 +42,7 @@ check_PROGRAMS = arextract arsymtest newfile saridx scnnames sectiondump \
|
|
||||||
dwfl-bug-addr-overflow arls dwfl-bug-fd-leak \
|
|
||||||
dwfl-addr-sect dwfl-bug-report early-offscn \
|
|
||||||
dwfl-bug-getmodules dwarf-getmacros dwarf-ranges addrcfi \
|
|
||||||
- dwarfcfi \
|
|
||||||
+ dwfl-core-noncontig dwarfcfi \
|
|
||||||
test-flag-nobits dwarf-getstring rerequest_tag \
|
|
||||||
alldts typeiter typeiter2 low_high_pc \
|
|
||||||
test-elf_cntl_gelf_getshdr dwflsyms dwfllines \
|
|
||||||
@@ -212,7 +212,7 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \
|
|
||||||
$(asm_TESTS) run-disasm-bpf.sh run-low_high_pc-dw-form-indirect.sh \
|
|
||||||
run-nvidia-extended-linemap-libdw.sh run-nvidia-extended-linemap-readelf.sh \
|
|
||||||
run-readelf-dw-form-indirect.sh run-strip-largealign.sh \
|
|
||||||
- run-readelf-Dd.sh
|
|
||||||
+ run-readelf-Dd.sh run-dwfl-core-noncontig.sh
|
|
||||||
|
|
||||||
if !BIARCH
|
|
||||||
export ELFUTILS_DISABLE_BIARCH = 1
|
|
||||||
@@ -632,7 +632,8 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \
|
|
||||||
run-nvidia-extended-linemap-libdw.sh run-nvidia-extended-linemap-readelf.sh \
|
|
||||||
testfile_nvidia_linemap.bz2 \
|
|
||||||
testfile-largealign.o.bz2 run-strip-largealign.sh \
|
|
||||||
- run-funcretval++11.sh
|
|
||||||
+ run-funcretval++11.sh \
|
|
||||||
+ run-dwfl-core-noncontig.sh testcore-noncontig.bz2
|
|
||||||
|
|
||||||
|
|
||||||
if USE_VALGRIND
|
|
||||||
@@ -738,6 +739,7 @@ dwfl_bug_fd_leak_LDADD = $(libeu) $(libdw) $(libebl) $(libelf)
|
|
||||||
dwfl_bug_report_LDADD = $(libdw) $(libebl) $(libelf)
|
|
||||||
dwfl_bug_getmodules_LDADD = $(libeu) $(libdw) $(libebl) $(libelf)
|
|
||||||
dwfl_addr_sect_LDADD = $(libeu) $(libdw) $(libebl) $(libelf) $(argp_LDADD)
|
|
||||||
+dwfl_core_noncontig_LDADD = $(libdw) $(libelf)
|
|
||||||
dwarf_getmacros_LDADD = $(libdw)
|
|
||||||
dwarf_ranges_LDADD = $(libdw)
|
|
||||||
dwarf_getstring_LDADD = $(libdw)
|
|
||||||
diff --git a/tests/dwfl-core-noncontig.c b/tests/dwfl-core-noncontig.c
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000..04558e28
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/tests/dwfl-core-noncontig.c
|
|
||||||
@@ -0,0 +1,82 @@
|
|
||||||
+/* Test program for dwfl_getmodules bug.
|
|
||||||
+ Copyright (C) 2008 Red Hat, Inc.
|
|
||||||
+ 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/>. */
|
|
||||||
+
|
|
||||||
+#include <config.h>
|
|
||||||
+#include <stdio.h>
|
|
||||||
+#include <fcntl.h>
|
|
||||||
+#include <assert.h>
|
|
||||||
+#include ELFUTILS_HEADER(dwfl)
|
|
||||||
+#include ELFUTILS_HEADER(elf)
|
|
||||||
+
|
|
||||||
+static const Dwfl_Callbacks cb =
|
|
||||||
+{
|
|
||||||
+ NULL,
|
|
||||||
+ NULL,
|
|
||||||
+ NULL,
|
|
||||||
+ NULL,
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+main (int argc, char **argv)
|
|
||||||
+{
|
|
||||||
+ assert (argc == 2);
|
|
||||||
+
|
|
||||||
+ Dwfl *dwfl = dwfl_begin (&cb);
|
|
||||||
+
|
|
||||||
+ int fd = open (argv[1], O_RDONLY);
|
|
||||||
+ assert (fd != -1);
|
|
||||||
+
|
|
||||||
+ Elf *elf = elf_begin (fd, ELF_C_READ, NULL);
|
|
||||||
+ (void) dwfl_core_file_report (dwfl, elf, argv[0]);
|
|
||||||
+
|
|
||||||
+ /* testcore-noncontig contains a shared library mapped between
|
|
||||||
+ non-contiguous segments of another shared library:
|
|
||||||
+
|
|
||||||
+ [...]
|
|
||||||
+ 7f14e458c000-7f14e45ae000 00000000 139264 /usr/lib64/ld-2.17.so (1)
|
|
||||||
+ 7f14e4795000-7f14e4798000 00000000 12288 /usr/lib64/firefox/liblgpllibs.so (2)
|
|
||||||
+ 7f14e4798000-7f14e479d000 00003000 20480 /usr/lib64/firefox/liblgpllibs.so
|
|
||||||
+ 7f14e479d000-7f14e479f000 00008000 8192 /usr/lib64/firefox/liblgpllibs.so
|
|
||||||
+ 7f14e479f000-7f14e47a0000 00009000 4096 /usr/lib64/firefox/liblgpllibs.so
|
|
||||||
+ 7f14e47a0000-7f14e47a1000 0000a000 4096 /usr/lib64/firefox/liblgpllibs.so (3)
|
|
||||||
+ 7f14e47ad000-7f14e47ae000 00021000 4096 /usr/lib64/ld-2.17.so (4)
|
|
||||||
+ 7f14e47ae000-7f14e47af000 00022000 4096 /usr/lib64/ld-2.17.so */
|
|
||||||
+
|
|
||||||
+ /* First segment of the non-contiguous module (1). */
|
|
||||||
+ int seg = dwfl_addrsegment (dwfl, 0x7f14e458c000, NULL);
|
|
||||||
+ assert (seg == 32);
|
|
||||||
+
|
|
||||||
+ /* First segment of the module within the non-contiguous module's address
|
|
||||||
+ range (2). */
|
|
||||||
+ seg = dwfl_addrsegment (dwfl, 0x7f14e4795000, NULL);
|
|
||||||
+ assert (seg == 33);
|
|
||||||
+
|
|
||||||
+ /* Last segment of the module within the non-contiguous module's
|
|
||||||
+ address range (3). */
|
|
||||||
+ seg = dwfl_addrsegment (dwfl, 0x7f14e47a0000, NULL);
|
|
||||||
+ assert (seg == 37);
|
|
||||||
+
|
|
||||||
+ /* First segment of non-contiguous module following its address space
|
|
||||||
+ gap (4). */
|
|
||||||
+ seg = dwfl_addrsegment (dwfl, 0x7f14e47ad000, NULL);
|
|
||||||
+ assert (seg == 40);
|
|
||||||
+
|
|
||||||
+ dwfl_end (dwfl);
|
|
||||||
+ elf_end (elf);
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
diff --git a/tests/run-dwfl-core-noncontig.sh b/tests/run-dwfl-core-noncontig.sh
|
|
||||||
new file mode 100755
|
|
||||||
index 00000000..1245b67f
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/tests/run-dwfl-core-noncontig.sh
|
|
||||||
@@ -0,0 +1,63 @@
|
|
||||||
+#! /bin/sh
|
|
||||||
+# Copyright (C) 2023 Red Hat, Inc.
|
|
||||||
+# 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
|
|
||||||
+
|
|
||||||
+# Test whether libdwfl can handle corefiles containing non-contiguous
|
|
||||||
+# segments where multiple modules are contained within the address
|
|
||||||
+# space of some other module.
|
|
||||||
+
|
|
||||||
+# testcore-noncontig was generated from the following program with
|
|
||||||
+# systemd-coredump on RHEL 7.9 Workstation, kernel
|
|
||||||
+# 3.10.0-1160.105.1.el7.x86_64. liblgpllibs.so was packaged with
|
|
||||||
+# firefox-115.4.0-1.el7_9.x86_64.rpm.
|
|
||||||
+
|
|
||||||
+# #include <unistd.h>
|
|
||||||
+# #include <dlfcn.h>
|
|
||||||
+#
|
|
||||||
+# int main () {
|
|
||||||
+# dlopen ("/usr/lib64/firefox/liblgpllibs.so", RTLD_GLOBAL | RTLD_NOW);
|
|
||||||
+# sleep (60);
|
|
||||||
+# return 0;
|
|
||||||
+# }
|
|
||||||
+#
|
|
||||||
+# gcc -ldl -o test test.c
|
|
||||||
+
|
|
||||||
+tempfiles out
|
|
||||||
+testfiles testcore-noncontig
|
|
||||||
+
|
|
||||||
+testrun ${abs_builddir}/dwfl-core-noncontig testcore-noncontig
|
|
||||||
+
|
|
||||||
+# Remove parts of the output that could change depending on which
|
|
||||||
+# libraries are locally installed.
|
|
||||||
+testrun ${abs_top_builddir}/src/unstrip -n --core testcore-noncontig \
|
|
||||||
+ | sed 's/+/ /g' | cut -d " " -f1,3 | sort > out
|
|
||||||
+
|
|
||||||
+testrun_compare cat out <<\EOF
|
|
||||||
+0x400000 3a1748a544b40a38b3be3d2d13ffa34a2a5a71c0@0x400284
|
|
||||||
+0x7f14e357e000 edf51350c7f71496149d064aa8b1441f786df88a@0x7f14e357e1d8
|
|
||||||
+0x7f14e3794000 7615604eaf4a068dfae5085444d15c0dee93dfbd@0x7f14e37941d8
|
|
||||||
+0x7f14e3a96000 09cfb171310110bc7ea9f4476c9fa044d85baff4@0x7f14e3a96210
|
|
||||||
+0x7f14e3d9e000 e10cc8f2b932fc3daeda22f8dac5ebb969524e5b@0x7f14e3d9e248
|
|
||||||
+0x7f14e3fba000 fc4fa58e47a5acc137eadb7689bce4357c557a96@0x7f14e3fba280
|
|
||||||
+0x7f14e4388000 7f2e9cb0769d7e57bd669b485a74b537b63a57c4@0x7f14e43881d8
|
|
||||||
+0x7f14e458c000 62c449974331341bb08dcce3859560a22af1e172@0x7f14e458c1d8
|
|
||||||
+0x7f14e4795000 175efdcef445455872a86a6fbee7567ca16a513e@0x7f14e4795248
|
|
||||||
+0x7ffcfe59f000 80d79b32785868a2dc10047b39a80d1daec8923d@0x7ffcfe59f328
|
|
||||||
+EOF
|
|
||||||
+
|
|
||||||
+exit 0
|
|
||||||
--
|
|
||||||
2.41.0
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
|||||||
From: Sergei Trofimovich <slyich@gmail.com>
|
|
||||||
Date: Thu, 21 Dec 2023 09:23:30 +0000 (+0000)
|
|
||||||
Subject: tests: fix build against upcoming `gcc-14` (`-Werror=calloc-transposed-args`)
|
|
||||||
X-Git-Url: https://sourceware.org/git/?p=elfutils.git;a=commitdiff_plain;h=ae580d48278b9924da7503886b37be34378e1b04;hp=a2194f6b305bf0d0b9dd49dccd0a5c21994c8eea
|
|
||||||
|
|
||||||
tests: fix build against upcoming `gcc-14` (`-Werror=calloc-transposed-args`)
|
|
||||||
|
|
||||||
`gcc-14` added a new `-Wcalloc-transposed-args` warning recently. It
|
|
||||||
detected minor infelicity in `calloc()` API usage in `elfutils`:
|
|
||||||
|
|
||||||
elfstrmerge.c: In function 'main':
|
|
||||||
elfstrmerge.c:450:32: error:
|
|
||||||
'calloc' sizes specified with 'sizeof' in the earlier argument and not in the later argument [-Werror=calloc-transposed-args]
|
|
||||||
450 | newscnbufs = calloc (sizeof (void *), newshnums);
|
|
||||||
| ^~~~
|
|
||||||
elfstrmerge.c:450:32: note: earlier argument should specify number of elements, later size of each element
|
|
||||||
|
|
||||||
Signed-off-by: Sergei Trofimovich <slyich@gmail.com>
|
|
||||||
---
|
|
||||||
|
|
||||||
diff --git a/tests/elfstrmerge.c b/tests/elfstrmerge.c
|
|
||||||
index 56350bb91..4eb58bbb5 100644
|
|
||||||
--- a/tests/elfstrmerge.c
|
|
||||||
+++ b/tests/elfstrmerge.c
|
|
||||||
@@ -447,7 +447,7 @@ main (int argc, char **argv)
|
|
||||||
}
|
|
||||||
|
|
||||||
newshnums = shdrnum - 1;
|
|
||||||
- newscnbufs = calloc (sizeof (void *), newshnums);
|
|
||||||
+ newscnbufs = calloc (newshnums, sizeof (void *));
|
|
||||||
if (newscnbufs == NULL)
|
|
||||||
fail_errno ("Couldn't allocate memory for new section buffers", NULL);
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
|||||||
From 010cacd89b847659b3c666ac963269b06a8c5058 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Aaron Merey <amerey@redhat.com>
|
|
||||||
Date: Tue, 28 Nov 2023 16:41:35 -0500
|
|
||||||
Subject: [PATCH] tests/run-strip-strmerge.sh: remove ET_REL unstrip and
|
|
||||||
elflint tests
|
|
||||||
|
|
||||||
These tests can fail on i386. Remove them for now since stripping and
|
|
||||||
unstripping an ET_REL file is obscure.
|
|
||||||
|
|
||||||
---
|
|
||||||
tests/run-strip-strmerge.sh | 6 ------
|
|
||||||
1 file changed, 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/tests/run-strip-strmerge.sh b/tests/run-strip-strmerge.sh
|
|
||||||
index aa9c1eb..67543eb 100755
|
|
||||||
--- a/tests/run-strip-strmerge.sh
|
|
||||||
+++ b/tests/run-strip-strmerge.sh
|
|
||||||
@@ -69,11 +69,5 @@ echo elflint $stripped
|
|
||||||
testrun ${abs_top_builddir}/src/elflint --gnu $stripped
|
|
||||||
echo elflint $debugfile
|
|
||||||
testrun ${abs_top_builddir}/src/elflint --gnu -d $debugfile
|
|
||||||
-echo unstrip
|
|
||||||
-testrun ${abs_top_builddir}/src/unstrip -o $remerged $stripped $debugfile
|
|
||||||
-echo elflint $remerged
|
|
||||||
-testrun ${abs_top_builddir}/src/elflint --gnu $remerged
|
|
||||||
-echo elfcmp
|
|
||||||
-testrun ${abs_top_builddir}/src/elfcmp $merged $remerged
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
--
|
|
||||||
2.41.0
|
|
||||||
|
|
96
elfutils-0.191-profile-empty-urls.patch
Normal file
96
elfutils-0.191-profile-empty-urls.patch
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
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
|
359
elfutils-0.191-riscv-flatten.patch
Normal file
359
elfutils-0.191-riscv-flatten.patch
Normal file
@ -0,0 +1,359 @@
|
|||||||
|
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
|
||||||
|
|
@ -1,13 +1,16 @@
|
|||||||
|
# Rebuild --with static to enable static subpackages
|
||||||
|
# This is *not* supported by elfutils maintainers
|
||||||
|
%bcond_with static
|
||||||
|
|
||||||
Name: elfutils
|
Name: elfutils
|
||||||
Version: 0.190
|
Version: 0.191
|
||||||
%global baserelease 6
|
%global baserelease 1
|
||||||
Release: %{baserelease}%{?dist}
|
Release: %{baserelease}%{?dist}
|
||||||
URL: http://elfutils.org/
|
URL: http://elfutils.org/
|
||||||
%global source_url ftp://sourceware.org/pub/elfutils/%{version}/
|
%global source_url ftp://sourceware.org/pub/elfutils/%{version}/
|
||||||
License: GPL-3.0-or-later and (GPL-2.0-or-later or LGPL-3.0-or-later) and GFDL-1.3-no-invariants-or-later
|
License: GPL-3.0-or-later and (GPL-2.0-or-later or LGPL-3.0-or-later) and GFDL-1.3-no-invariants-or-later
|
||||||
Source: %{?source_url}%{name}-%{version}.tar.bz2
|
Source: %{?source_url}%{name}-%{version}.tar.bz2
|
||||||
Source1: elfutils-debuginfod.sysusers
|
Source1: elfutils-debuginfod.sysusers
|
||||||
Source2: testcore-noncontig.bz2
|
|
||||||
Summary: A collection of utilities and DSOs to handle ELF files and DWARF data
|
Summary: A collection of utilities and DSOs to handle ELF files and DWARF data
|
||||||
|
|
||||||
# Needed for isa specific Provides and Requires.
|
# Needed for isa specific Provides and Requires.
|
||||||
@ -75,12 +78,6 @@ BuildRequires: gettext-devel
|
|||||||
|
|
||||||
# For s390x... FDO package notes are bogus.
|
# For s390x... FDO package notes are bogus.
|
||||||
Patch1: elfutils-0.186-fdo-swap.patch
|
Patch1: elfutils-0.186-fdo-swap.patch
|
||||||
# PR30975: Fix handling of corefiles with non-contiguous .so segments.
|
|
||||||
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
|
|
||||||
# tests: fix build against gcc-14 (-Werror=calloc-transposed-args)
|
|
||||||
Patch4: elfutils-0.190-gcc-14.patch
|
|
||||||
|
|
||||||
%description
|
%description
|
||||||
Elfutils is a collection of utilities, including stack (to show
|
Elfutils is a collection of utilities, including stack (to show
|
||||||
@ -126,7 +123,6 @@ Recommends: elfutils-debuginfod-client-devel%{depsuffix} = %{version}-%{release}
|
|||||||
%else
|
%else
|
||||||
Requires: elfutils-debuginfod-client-devel%{depsuffix} = %{version}-%{release}
|
Requires: elfutils-debuginfod-client-devel%{depsuffix} = %{version}-%{release}
|
||||||
%endif
|
%endif
|
||||||
Obsoletes: elfutils-devel-static < 0.180-5
|
|
||||||
|
|
||||||
%description devel
|
%description devel
|
||||||
The elfutils-devel package contains the libraries to create
|
The elfutils-devel package contains the libraries to create
|
||||||
@ -134,6 +130,22 @@ applications for handling compiled objects. libdw provides access
|
|||||||
to the DWARF debugging information. libasm provides a programmable
|
to the DWARF debugging information. libasm provides a programmable
|
||||||
assembler interface.
|
assembler interface.
|
||||||
|
|
||||||
|
%if %{with static}
|
||||||
|
%package devel-static
|
||||||
|
Summary: Static archives to handle compiled objects
|
||||||
|
License: GPL-2.0-or-later or LGPL-3.0-or-later
|
||||||
|
%if 0%{!?_isa:1}
|
||||||
|
Provides: elfutils-devel-static%{depsuffix} = %{version}-%{release}
|
||||||
|
%endif
|
||||||
|
Requires: elfutils-devel%{depsuffix} = %{version}-%{release}
|
||||||
|
Requires: elfutils-libelf-devel-static%{depsuffix} = %{version}-%{release}
|
||||||
|
Requires: libzstd-static%{depsuffix}
|
||||||
|
|
||||||
|
%description devel-static
|
||||||
|
The elfutils-devel-static package contains the static archives
|
||||||
|
with the code to handle compiled objects.
|
||||||
|
%endif
|
||||||
|
|
||||||
%package libelf
|
%package libelf
|
||||||
Summary: Library to read and write ELF files
|
Summary: Library to read and write ELF files
|
||||||
License: GPL-2.0-or-later or LGPL-3.0-or-later
|
License: GPL-2.0-or-later or LGPL-3.0-or-later
|
||||||
@ -156,7 +168,6 @@ Provides: elfutils-libelf-devel%{depsuffix} = %{version}-%{release}
|
|||||||
%endif
|
%endif
|
||||||
Requires: elfutils-libelf%{depsuffix} = %{version}-%{release}
|
Requires: elfutils-libelf%{depsuffix} = %{version}-%{release}
|
||||||
Obsoletes: libelf-devel <= 0.8.2-2
|
Obsoletes: libelf-devel <= 0.8.2-2
|
||||||
Obsoletes: elfutils-libelf-devel-static < 0.180-5
|
|
||||||
|
|
||||||
%description libelf-devel
|
%description libelf-devel
|
||||||
The elfutils-libelf-devel package contains the libraries to create
|
The elfutils-libelf-devel package contains the libraries to create
|
||||||
@ -164,6 +175,20 @@ applications for handling compiled objects. libelf allows you to
|
|||||||
access the internals of the ELF object file format, so you can see the
|
access the internals of the ELF object file format, so you can see the
|
||||||
different sections of an ELF file.
|
different sections of an ELF file.
|
||||||
|
|
||||||
|
%if %{with static}
|
||||||
|
%package libelf-devel-static
|
||||||
|
Summary: Static archive of libelf
|
||||||
|
License: GPL-2.0-or-later or LGPL-3.0-or-later
|
||||||
|
%if 0%{!?_isa:1}
|
||||||
|
Provides: elfutils-libelf-devel-static%{depsuffix} = %{version}-%{release}
|
||||||
|
%endif
|
||||||
|
Requires: elfutils-libelf-devel%{depsuffix} = %{version}-%{release}
|
||||||
|
|
||||||
|
%description libelf-devel-static
|
||||||
|
The elfutils-libelf-static package contains the static archive
|
||||||
|
for libelf.
|
||||||
|
%endif
|
||||||
|
|
||||||
%if %{provide_yama_scope}
|
%if %{provide_yama_scope}
|
||||||
%package default-yama-scope
|
%package default-yama-scope
|
||||||
Summary: Default yama attach scope sysctl setting
|
Summary: Default yama attach scope sysctl setting
|
||||||
@ -265,8 +290,6 @@ autoreconf -f -v -i
|
|||||||
# are executable.
|
# are executable.
|
||||||
find . -name \*.sh ! -perm -0100 -print | xargs chmod +x
|
find . -name \*.sh ! -perm -0100 -print | xargs chmod +x
|
||||||
|
|
||||||
cp %{SOURCE2} tests
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
# Remove -Wall from default flags. The makefiles enable enough warnings
|
# Remove -Wall from default flags. The makefiles enable enough warnings
|
||||||
# themselves, and they use -Werror. Appending -Wall defeats the cases where
|
# themselves, and they use -Werror. Appending -Wall defeats the cases where
|
||||||
@ -293,8 +316,10 @@ trap '' EXIT
|
|||||||
%make_install
|
%make_install
|
||||||
|
|
||||||
chmod +x ${RPM_BUILD_ROOT}%{_prefix}/%{_lib}/lib*.so*
|
chmod +x ${RPM_BUILD_ROOT}%{_prefix}/%{_lib}/lib*.so*
|
||||||
|
%if %{without static}
|
||||||
# We don't want the static libraries
|
# We don't want the static libraries
|
||||||
rm ${RPM_BUILD_ROOT}%{_prefix}/%{_lib}/lib{elf,dw,asm}.a
|
rm ${RPM_BUILD_ROOT}%{_prefix}/%{_lib}/lib{elf,dw,asm}.a
|
||||||
|
%endif
|
||||||
|
|
||||||
%find_lang %{name}
|
%find_lang %{name}
|
||||||
|
|
||||||
@ -385,6 +410,12 @@ fi
|
|||||||
%{_libdir}/libdw.so
|
%{_libdir}/libdw.so
|
||||||
%{_libdir}/pkgconfig/libdw.pc
|
%{_libdir}/pkgconfig/libdw.pc
|
||||||
|
|
||||||
|
%if %{with static}
|
||||||
|
%files devel-static
|
||||||
|
%{_libdir}/libdw.a
|
||||||
|
%{_libdir}/libasm.a
|
||||||
|
%endif
|
||||||
|
|
||||||
%files -f %{name}.lang libelf
|
%files -f %{name}.lang libelf
|
||||||
%license COPYING-GPLV2 COPYING-LGPLV3
|
%license COPYING-GPLV2 COPYING-LGPLV3
|
||||||
%{_libdir}/libelf-%{version}.so
|
%{_libdir}/libelf-%{version}.so
|
||||||
@ -398,6 +429,11 @@ fi
|
|||||||
%{_libdir}/pkgconfig/libelf.pc
|
%{_libdir}/pkgconfig/libelf.pc
|
||||||
%{_mandir}/man3/elf_*.3*
|
%{_mandir}/man3/elf_*.3*
|
||||||
|
|
||||||
|
%if %{with static}
|
||||||
|
%files libelf-devel-static
|
||||||
|
%{_libdir}/libelf.a
|
||||||
|
%endif
|
||||||
|
|
||||||
%if %{provide_yama_scope}
|
%if %{provide_yama_scope}
|
||||||
%files default-yama-scope
|
%files default-yama-scope
|
||||||
%{_sysctldir}/10-default-yama-scope.conf
|
%{_sysctldir}/10-default-yama-scope.conf
|
||||||
@ -451,13 +487,23 @@ exit 0
|
|||||||
%systemd_postun_with_restart debuginfod.service
|
%systemd_postun_with_restart debuginfod.service
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Apr 11 2024 Aaron Merey <amerey@redhat.com> - 0.191-1
|
||||||
|
- Upgrade to upstream elfutils 0.191
|
||||||
|
- Drop upstreamed patches
|
||||||
|
elfutils-0.190-fix-core-noncontig.patch
|
||||||
|
elfutils-0.190-gcc-14.patch
|
||||||
|
elfutils-0.190-remove-ET_REL-unstrip-test.patch
|
||||||
|
- Drop testcore-noncontig.bz2
|
||||||
|
- Add elfutils-0.191-profile-empty-urls.patch
|
||||||
|
- Add elfutils-0.191-riscv-flatten.patch
|
||||||
|
- Add feature flag for reenabling elfutils-libelf-devel-static and elfutils-devel-static
|
||||||
|
|
||||||
* Wed Jan 24 2024 Fedora Release Engineering <releng@fedoraproject.org> - 0.190-6
|
* Wed Jan 24 2024 Fedora Release Engineering <releng@fedoraproject.org> - 0.190-6
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||||
|
|
||||||
* Fri Jan 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 0.190-5
|
* Fri Jan 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 0.190-5
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||||
|
|
||||||
|
|
||||||
* Tue Nov 28 2023 Aaron Merey <amerey@fedoraproject.org> - 0.190-4
|
* Tue Nov 28 2023 Aaron Merey <amerey@fedoraproject.org> - 0.190-4
|
||||||
- Add elfutils-0.190-remove-ET_REL-unstrip-test.patch
|
- Add elfutils-0.190-remove-ET_REL-unstrip-test.patch
|
||||||
|
|
||||||
|
2
sources
2
sources
@ -1 +1 @@
|
|||||||
SHA512 (elfutils-0.190.tar.bz2) = 9c4f5328097e028286c42f29e39dc3d80914b656cdfbbe05b639e91bc787ae8ae64dd4d69a6e317ce30c01648ded10281b86a51e718295f4c589df1225a48102
|
SHA512 (elfutils-0.191.tar.bz2) = e22d85f25317a79b36d370347e50284c9120c86f9830f08791b7b6a7b4ad89b9bf4c7c71129133b8d193a0edffb2a2c17987b7e48428b9670aff5ce918777e04
|
||||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user