diff --git a/tools/elfutils/Makefile b/tools/elfutils/Makefile index 625cecf58c..ce711ac66c 100644 --- a/tools/elfutils/Makefile +++ b/tools/elfutils/Makefile @@ -3,12 +3,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=elfutils -PKG_VERSION:=0.191 -PKG_RELEASE:=2 +PKG_VERSION:=0.192 +PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 PKG_SOURCE_URL:=https://sourceware.org/$(PKG_NAME)/ftp/$(PKG_VERSION) -PKG_HASH:=df76db71366d1d708365fc7a6c60ca48398f14367eb2b8954efc8897147ad871 +PKG_HASH:=616099beae24aba11f9b63d86ca6cc8d566d968b802391334c91df54eab416b4 PKG_LICENSE:=GPL-3.0-or-later PKG_LICENSE_FILES:=COPYING COPYING-GPLV2 COPYING-LGPLV3 diff --git a/tools/elfutils/patches/000-backport-iquote-include.patch b/tools/elfutils/patches/000-backport-iquote-include.patch deleted file mode 100644 index 2c7657fc8c..0000000000 --- a/tools/elfutils/patches/000-backport-iquote-include.patch +++ /dev/null @@ -1,37 +0,0 @@ -From b426c4db31e7c80d4262abdd845d2ece0c9a841c Mon Sep 17 00:00:00 2001 -From: Alfred Wingate -Date: Wed, 14 Aug 2024 12:14:38 -0400 -Subject: [PATCH] Avoid overriding libcxx system header - -Replace -I with -iquote to avoid overriding stack system header from libcxx-18 -with the previously built stack binary. Override DEFAULT_INLCUDES because m4 -adds -I. by default. - -Signed-off-by: Aaron Merey ---- - config/eu.am | 2 +- - src/Makefile.am | 2 ++ - 2 files changed, 3 insertions(+), 1 deletion(-) - ---- a/config/eu.am -+++ b/config/eu.am -@@ -31,7 +31,7 @@ - ## - - DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -DLOCALEDIR='"${localedir}"' --AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. -+AM_CPPFLAGS = -iquote . -I$(srcdir) -I$(top_srcdir)/lib -I.. - - # Drop the 'u' flag that automake adds by default. It is incompatible - # with deterministic archives. ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -19,6 +19,8 @@ - include $(top_srcdir)/config/eu.am - DEFS += $(YYDEBUG) -DDEBUGPRED=@DEBUGPRED@ \ - -DSRCDIR=\"$(shell cd $(srcdir);pwd)\" -DOBJDIR=\"$(shell pwd)\" -+ -+DEFAULT_INCLUDES = - AM_CPPFLAGS += -I$(srcdir)/../libelf -I$(srcdir)/../libebl \ - -I$(srcdir)/../libdw -I$(srcdir)/../libdwelf \ - -I$(srcdir)/../libdwfl -I$(srcdir)/../libasm -I../debuginfod diff --git a/tools/elfutils/patches/010-backport-mips-support-reloc.patch b/tools/elfutils/patches/010-backport-mips-support-reloc.patch deleted file mode 100644 index e9ef3997d2..0000000000 --- a/tools/elfutils/patches/010-backport-mips-support-reloc.patch +++ /dev/null @@ -1,300 +0,0 @@ -From e259f126f5077923e415e306915de50ed0f0db56 Mon Sep 17 00:00:00 2001 -From: Ying Huang -Date: Tue, 5 Mar 2024 17:51:17 +0800 -Subject: [PATCH] Support Mips architecture - - * backends/Makefile.am (modules): Add mips. - (mips_SRCS): New var for mips_init.c mips_symbol.c. - (libebl_backends_a_SOURCES): Add mips_SRCS. - * backends/mips_init.c: New file. - * backends/mips_reloc.def: Likewise. - * backends/mips_symbol.c: Likewise. - * libebl/eblopenbackend.c (mips_init): Declare. - (machines): Add mips. - * libelf/libelfP.h: Add ELF64_MIPS_R_TYPE{1,2,3} - -Signed-off-by: Ying Huang ---- - backends/Makefile.am | 6 ++- - backends/mips_init.c | 52 +++++++++++++++++++++++ - backends/mips_reloc.def | 93 +++++++++++++++++++++++++++++++++++++++++ - backends/mips_symbol.c | 63 ++++++++++++++++++++++++++++ - libebl/eblopenbackend.c | 2 + - libelf/libelfP.h | 3 ++ - 6 files changed, 217 insertions(+), 2 deletions(-) - create mode 100644 backends/mips_init.c - create mode 100644 backends/mips_reloc.def - create mode 100644 backends/mips_symbol.c - ---- a/backends/Makefile.am -+++ b/backends/Makefile.am -@@ -37,7 +37,7 @@ AM_CPPFLAGS += -I$(top_srcdir)/libebl -I - noinst_LIBRARIES = libebl_backends.a libebl_backends_pic.a - - modules = i386 sh x86_64 ia64 alpha arm aarch64 sparc ppc ppc64 s390 \ -- m68k bpf riscv csky loongarch arc -+ m68k bpf riscv csky loongarch arc mips - - i386_SRCS = i386_init.c i386_symbol.c i386_corenote.c i386_cfi.c \ - i386_retval.c i386_regs.c i386_auxv.c \ -@@ -102,12 +102,14 @@ loongarch_SRCS = loongarch_init.c loonga - - arc_SRCS = arc_init.c arc_symbol.c - -+mips_SRCS = mips_init.c mips_symbol.c -+ - libebl_backends_a_SOURCES = $(i386_SRCS) $(sh_SRCS) $(x86_64_SRCS) \ - $(ia64_SRCS) $(alpha_SRCS) $(arm_SRCS) \ - $(aarch64_SRCS) $(sparc_SRCS) $(ppc_SRCS) \ - $(ppc64_SRCS) $(s390_SRCS) \ - $(m68k_SRCS) $(bpf_SRCS) $(riscv_SRCS) $(csky_SRCS) \ -- $(loongarch_SRCS) $(arc_SRCS) -+ $(loongarch_SRCS) $(arc_SRCS) $(mips_SRCS) - - libebl_backends_pic_a_SOURCES = - am_libebl_backends_pic_a_OBJECTS = $(libebl_backends_a_SOURCES:.c=.os) ---- /dev/null -+++ b/backends/mips_init.c -@@ -0,0 +1,52 @@ -+/* Initialization of MIPS specific backend library. -+ Copyright (C) 2024 CIP United Inc. -+ This file is part of elfutils. -+ -+ This file is free software; you can redistribute it and/or modify -+ it under the terms of either -+ -+ * the GNU Lesser General Public License as published by the Free -+ Software Foundation; either version 3 of the License, or (at -+ your option) any later version -+ -+ or -+ -+ * the GNU General Public License as published by the Free -+ Software Foundation; either version 2 of the License, or (at -+ your option) any later version -+ -+ or both in parallel, as here. -+ -+ 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 copies of the GNU General Public License and -+ the GNU Lesser General Public License along with this program. If -+ not, see . */ -+ -+#ifdef HAVE_CONFIG_H -+# include -+#endif -+ -+#define BACKEND mips_ -+#define RELOC_PREFIX R_MIPS_ -+#include "libebl_CPU.h" -+#include "libelfP.h" -+ -+#define RELOC_TYPE_ID(type) ((type) & 0xff) -+ -+/* This defines the common reloc hooks based on mips_reloc.def. */ -+#include "common-reloc.c" -+ -+Ebl * -+mips_init (Elf *elf __attribute__ ((unused)), -+ GElf_Half machine __attribute__ ((unused)), -+ Ebl *eh) -+{ -+ /* We handle it. */ -+ mips_init_reloc (eh); -+ HOOK (eh, reloc_simple_type); -+ return eh; -+} ---- /dev/null -+++ b/backends/mips_reloc.def -@@ -0,0 +1,93 @@ -+/* List the relocation types for MIPS. -*- C -*- -+ Copyright (C) 2024 CIP United Inc. -+ This file is part of elfutils. -+ -+ This file is free software; you can redistribute it and/or modify -+ it under the terms of either -+ -+ * the GNU Lesser General Public License as published by the Free -+ Software Foundation; either version 3 of the License, or (at -+ your option) any later version -+ -+ or -+ -+ * the GNU General Public License as published by the Free -+ Software Foundation; either version 2 of the License, or (at -+ your option) any later version -+ -+ or both in parallel, as here. -+ -+ 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 copies of the GNU General Public License and -+ the GNU Lesser General Public License along with this program. If -+ not, see . */ -+ -+/* NAME, REL|EXEC|DYN */ -+ -+ -+RELOC_TYPE (NONE, REL|EXEC|DYN) -+RELOC_TYPE (16, REL|EXEC|DYN) -+RELOC_TYPE (32, REL) -+RELOC_TYPE (REL32, REL|EXEC|DYN) -+RELOC_TYPE (26, REL|DYN) -+RELOC_TYPE (HI16, REL) -+RELOC_TYPE (LO16, REL|EXEC|DYN) -+RELOC_TYPE (GPREL16, REL|EXEC|DYN) -+RELOC_TYPE (LITERAL, REL|EXEC|DYN) -+RELOC_TYPE (GOT16, REL|EXEC|DYN) -+RELOC_TYPE (PC16, REL) -+RELOC_TYPE (CALL16, REL) -+RELOC_TYPE (GPREL32, REL) -+RELOC_TYPE (SHIFT5, REL) -+RELOC_TYPE (SHIFT6, REL) -+RELOC_TYPE (64, REL) -+RELOC_TYPE (GOT_DISP, REL) -+RELOC_TYPE (GOT_PAGE, REL) -+RELOC_TYPE (GOT_OFST, REL) -+RELOC_TYPE (GOT_HI16, REL) -+RELOC_TYPE (GOT_LO16, REL) -+RELOC_TYPE (SUB, REL) -+RELOC_TYPE (INSERT_A, REL) -+RELOC_TYPE (INSERT_B, REL) -+RELOC_TYPE (DELETE, REL) -+RELOC_TYPE (HIGHER, REL) -+RELOC_TYPE (HIGHEST, REL) -+RELOC_TYPE (CALL_HI16, REL) -+RELOC_TYPE (CALL_LO16, REL) -+RELOC_TYPE (SCN_DISP, REL) -+RELOC_TYPE (REL16, REL) -+RELOC_TYPE (ADD_IMMEDIATE, REL) -+RELOC_TYPE (PJUMP, REL) -+RELOC_TYPE (RELGOT, REL) -+RELOC_TYPE (JALR, REL) -+RELOC_TYPE (TLS_DTPMOD32, DYN) -+RELOC_TYPE (TLS_DTPREL32, REL) -+RELOC_TYPE (TLS_DTPMOD64, DYN) -+RELOC_TYPE (TLS_DTPREL64, REL) -+RELOC_TYPE (TLS_GD, REL) -+RELOC_TYPE (TLS_LDM, REL) -+RELOC_TYPE (TLS_DTPREL_HI16, REL) -+RELOC_TYPE (TLS_DTPREL_LO16, REL) -+RELOC_TYPE (TLS_GOTTPREL, REL) -+RELOC_TYPE (TLS_TPREL32, REL) -+RELOC_TYPE (TLS_TPREL64, REL) -+RELOC_TYPE (TLS_TPREL_HI16, REL) -+RELOC_TYPE (TLS_TPREL_LO16, REL) -+RELOC_TYPE (GLOB_DAT, REL) -+RELOC_TYPE (PC21_S2, REL) -+RELOC_TYPE (PC26_S2, REL) -+RELOC_TYPE (PC18_S3, REL) -+RELOC_TYPE (PC19_S2, REL) -+RELOC_TYPE (PCHI16, REL) -+RELOC_TYPE (PCLO16, REL) -+RELOC_TYPE (COPY, REL) -+RELOC_TYPE (JUMP_SLOT, REL) -+RELOC_TYPE (PC32, REL) -+RELOC_TYPE (EH, REL) -+RELOC_TYPE (GNU_REL16_S2, REL) -+RELOC_TYPE (GNU_VTINHERIT, REL) -+RELOC_TYPE (GNU_VTENTRY, REL) ---- /dev/null -+++ b/backends/mips_symbol.c -@@ -0,0 +1,63 @@ -+/* MIPS specific symbolic name handling. -+ Copyright (C) 2024 CIP United Inc. -+ This file is part of elfutils. -+ -+ This file is free software; you can redistribute it and/or modify -+ it under the terms of either -+ -+ * the GNU Lesser General Public License as published by the Free -+ Software Foundation; either version 3 of the License, or (at -+ your option) any later version -+ -+ or -+ -+ * the GNU General Public License as published by the Free -+ Software Foundation; either version 2 of the License, or (at -+ your option) any later version -+ -+ or both in parallel, as here. -+ -+ 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 copies of the GNU General Public License and -+ the GNU Lesser General Public License along with this program. If -+ not, see . */ -+ -+#ifdef HAVE_CONFIG_H -+# include -+#endif -+ -+#include -+ -+#include -+#include -+#include -+#include -+#define BACKEND mips_ -+#include "libebl_CPU.h" -+#include "libelfP.h" -+ -+/* Check for the simple reloc types. */ -+Elf_Type -+mips_reloc_simple_type (Ebl *ebl, int type, -+ int *addsub __attribute__ ((unused))) -+{ -+ int typeNew = type; -+ if(ebl->elf->class == ELFCLASS64) -+ typeNew = ELF64_MIPS_R_TYPE1(type); -+ switch (typeNew) -+ { -+ case R_MIPS_64: -+ return ELF_T_XWORD; -+ case R_MIPS_32: -+ return ELF_T_WORD; -+ case R_MIPS_16: -+ return ELF_T_HALF; -+ -+ default: -+ return ELF_T_NUM; -+ } -+} ---- a/libebl/eblopenbackend.c -+++ b/libebl/eblopenbackend.c -@@ -57,6 +57,7 @@ Ebl *riscv_init (Elf *, GElf_Half, Ebl * - Ebl *csky_init (Elf *, GElf_Half, Ebl *); - Ebl *loongarch_init (Elf *, GElf_Half, Ebl *); - Ebl *arc_init (Elf *, GElf_Half, Ebl *); -+Ebl *mips_init (Elf *, GElf_Half, Ebl *); - - /* This table should contain the complete list of architectures as far - as the ELF specification is concerned. */ -@@ -154,6 +155,7 @@ static const struct - { csky_init, "elf_csky", "csky", 4, EM_CSKY, ELFCLASS32, ELFDATA2LSB }, - { loongarch_init, "elf_loongarch", "loongarch", 9, EM_LOONGARCH, ELFCLASS64, ELFDATA2LSB }, - { arc_init, "elf_arc", "arc", 3, EM_ARCV2, ELFCLASS32, ELFDATA2LSB }, -+ { mips_init, "elf_mips", "mips", 4, EM_MIPS, 0, 0 }, - }; - #define nmachines (sizeof (machines) / sizeof (machines[0])) - ---- a/libelf/libelfP.h -+++ b/libelf/libelfP.h -@@ -617,4 +617,7 @@ extern void __libelf_reset_rawdata (Elf_ - #define INVALID_NDX(ndx, type, data) \ - unlikely ((data)->d_size / sizeof (type) <= (unsigned int) (ndx)) - -+#define ELF64_MIPS_R_TYPE1(i) ((i) & 0xff) -+#define ELF64_MIPS_R_TYPE2(i) (((i) >> 8) & 0xff) -+#define ELF64_MIPS_R_TYPE3(i) (((i) >> 16) & 0xff) - #endif /* libelfP.h */ diff --git a/tools/elfutils/patches/012-backport-mips-support-readelf.patch b/tools/elfutils/patches/012-backport-mips-support-readelf.patch index cf2b7c827b..3a61acde6e 100644 --- a/tools/elfutils/patches/012-backport-mips-support-readelf.patch +++ b/tools/elfutils/patches/012-backport-mips-support-readelf.patch @@ -29,11 +29,11 @@ Signed-off-by: Ying Huang arc_SRCS = arc_init.c arc_symbol.c --mips_SRCS = mips_init.c mips_symbol.c -+mips_SRCS = mips_init.c mips_symbol.c mips_attrs.c +-mips_SRCS = mips_init.c mips_symbol.c mips_initreg.c \ ++mips_SRCS = mips_init.c mips_symbol.c mips_attrs.c mips_initreg.c \ + mips_cfi.c mips_unwind.c mips_regs.c mips_retval.c \ + mips_corenote.c - libebl_backends_a_SOURCES = $(i386_SRCS) $(sh_SRCS) $(x86_64_SRCS) \ - $(ia64_SRCS) $(alpha_SRCS) $(arm_SRCS) \ --- /dev/null +++ b/backends/mips_attrs.c @@ -0,0 +1,140 @@ @@ -179,7 +179,7 @@ Signed-off-by: Ying Huang +} --- a/backends/mips_init.c +++ b/backends/mips_init.c -@@ -48,5 +48,12 @@ mips_init (Elf *elf __attribute__ ((unus +@@ -48,6 +48,13 @@ mips_init (Elf *elf __attribute__ ((unus /* We handle it. */ mips_init_reloc (eh); HOOK (eh, reloc_simple_type); @@ -190,8 +190,9 @@ Signed-off-by: Ying Huang + HOOK (eh, dynamic_tag_check); + HOOK (eh, dynamic_tag_name); + HOOK (eh, check_object_attribute); - return eh; - } + HOOK (eh, set_initial_registers_tid); + HOOK (eh, abi_cfi); + HOOK (eh, unwind); --- a/backends/mips_symbol.c +++ b/backends/mips_symbol.c @@ -61,3 +61,574 @@ mips_reloc_simple_type (Ebl *ebl, int ty @@ -771,7 +772,7 @@ Signed-off-by: Ying Huang +} --- a/libelf/libelfP.h +++ b/libelf/libelfP.h -@@ -620,4 +620,5 @@ extern void __libelf_reset_rawdata (Elf_ +@@ -624,4 +624,5 @@ extern void __libelf_reset_rawdata (Elf_ #define ELF64_MIPS_R_TYPE1(i) ((i) & 0xff) #define ELF64_MIPS_R_TYPE2(i) (((i) >> 8) & 0xff) #define ELF64_MIPS_R_TYPE3(i) (((i) >> 16) & 0xff) @@ -993,7 +994,7 @@ Signed-off-by: Ying Huang } } } -@@ -12043,7 +12139,7 @@ print_debug (Dwfl_Module *dwflmod, Ebl * +@@ -12037,7 +12133,7 @@ print_debug (Dwfl_Module *dwflmod, Ebl * GElf_Shdr shdr_mem; GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); @@ -1002,7 +1003,7 @@ Signed-off-by: Ying Huang { const char *name = elf_strptr (ebl->elf, shstrndx, shdr->sh_name); -@@ -12073,7 +12169,7 @@ print_debug (Dwfl_Module *dwflmod, Ebl * +@@ -12067,7 +12163,7 @@ print_debug (Dwfl_Module *dwflmod, Ebl * GElf_Shdr shdr_mem; GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); @@ -1013,25 +1014,24 @@ Signed-off-by: Ying Huang { --- a/tests/Makefile.am +++ b/tests/Makefile.am -@@ -214,7 +214,7 @@ TESTS = run-arextract.sh run-arsymtest.s +@@ -216,7 +216,7 @@ TESTS = run-arextract.sh run-arsymtest.s 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-dwfl-core-noncontig.sh run-cu-dwp-section-info.sh \ -- run-declfiles.sh -+ run-declfiles.sh run-readelf-reloc.sh +- run-declfiles.sh \ ++ run-declfiles.sh run-readelf-reloc.sh \ + run-sysroot.sh if !BIARCH - export ELFUTILS_DISABLE_BIARCH = 1 -@@ -646,7 +646,8 @@ EXTRA_DIST = run-arextract.sh run-arsymt - testfile-dwp-5-cu-index-overflow.dwp.bz2 \ +@@ -684,7 +684,7 @@ EXTRA_DIST = run-arextract.sh run-arsymt testfile-dwp-4-cu-index-overflow.bz2 \ testfile-dwp-4-cu-index-overflow.dwp.bz2 \ -- testfile-dwp-cu-index-overflow.source -+ testfile-dwp-cu-index-overflow.source \ -+ run-readelf-reloc.sh + testfile-dwp-cu-index-overflow.source \ +- testfile-define-file.bz2 \ ++ run-readelf-reloc.sh testfile-define-file.bz2 \ + testfile-sysroot.tar.bz2 run-sysroot.sh run-debuginfod-seekable.sh - if USE_VALGRIND --- /dev/null +++ b/tests/run-readelf-reloc.sh @@ -0,0 +1,42 @@ diff --git a/tools/elfutils/patches/013-backport-mips-support-elflint.patch b/tools/elfutils/patches/013-backport-mips-support-elflint.patch index 906a3bf0f2..2ef9304bd1 100644 --- a/tools/elfutils/patches/013-backport-mips-support-elflint.patch +++ b/tools/elfutils/patches/013-backport-mips-support-elflint.patch @@ -29,7 +29,7 @@ Signed-off-by: Ying Huang --- a/backends/mips_init.c +++ b/backends/mips_init.c -@@ -51,9 +51,12 @@ mips_init (Elf *elf __attribute__ ((unus +@@ -51,10 +51,13 @@ mips_init (Elf *elf __attribute__ ((unus HOOK (eh, section_type_name); HOOK (eh, machine_flag_check); HOOK (eh, machine_flag_name); @@ -40,8 +40,9 @@ Signed-off-by: Ying Huang HOOK (eh, check_object_attribute); + HOOK (eh, check_special_symbol); + HOOK (eh, check_reloc_target_type); - return eh; - } + HOOK (eh, set_initial_registers_tid); + HOOK (eh, abi_cfi); + HOOK (eh, unwind); --- a/backends/mips_symbol.c +++ b/backends/mips_symbol.c @@ -158,6 +158,43 @@ mips_section_type_name (int type, @@ -101,7 +102,7 @@ Signed-off-by: Ying Huang ERROR (_("\ section [%2d] '%s': symbol %zu (%s): non-local section symbol\n"), idx, section_name (ebl, idx), cnt, name); -@@ -3828,6 +3830,10 @@ cannot get section header for section [% +@@ -3829,6 +3831,10 @@ cannot get section header for section [% && ebl_bss_plt_p (ebl)) good_type = SHT_NOBITS; @@ -112,7 +113,7 @@ Signed-off-by: Ying Huang /* In a debuginfo file, any normal section can be SHT_NOBITS. This is only invalid for DWARF sections and .shstrtab. */ if (shdr->sh_type != good_type -@@ -3988,12 +3994,21 @@ section [%2zu] '%s': size not multiple o +@@ -3989,12 +3995,21 @@ section [%2zu] '%s': size not multiple o ERROR (_("section [%2zu] '%s'" " contains invalid processor-specific flag(s)" " %#" PRIx64 "\n"), @@ -137,7 +138,7 @@ Signed-off-by: Ying Huang if (sh_flags != 0) ERROR (_("section [%2zu] '%s' contains unknown flag(s)" " %#" PRIx64 "\n"), -@@ -4059,6 +4074,7 @@ section [%2zu] '%s': merge flag set but +@@ -4060,6 +4075,7 @@ section [%2zu] '%s': merge flag set but switch (shdr->sh_type) { case SHT_PROGBITS: @@ -145,7 +146,7 @@ Signed-off-by: Ying Huang break; case SHT_NOBITS: -@@ -4716,7 +4732,7 @@ program header offset in ELF header and +@@ -4717,7 +4733,7 @@ program header offset in ELF header and if (shdr != NULL && ((is_debuginfo && shdr->sh_type == SHT_NOBITS) || (! is_debuginfo diff --git a/tools/elfutils/patches/014-backport-mips-support-stack.patch b/tools/elfutils/patches/014-backport-mips-support-stack.patch deleted file mode 100644 index 9907a30264..0000000000 --- a/tools/elfutils/patches/014-backport-mips-support-stack.patch +++ /dev/null @@ -1,273 +0,0 @@ -From f2acb06970522a9563d82490f2f1b8fc0bb5b720 Mon Sep 17 00:00:00 2001 -From: Ying Huang -Date: Tue, 5 Mar 2024 17:51:21 +0800 -Subject: [PATCH] stack: Fix stack unwind failure on mips - -Add abi_cfi, set_initial_registers_tid, unwind on mips. - - * backends/Makefile.am (mips_SRCS): Add mips_initreg.c, - mips_cfi.c and mips_unwind.c. - * backends/mips_init.c (mips_init): HOOK abi_cfi, unwind and - set_initial_registers_tid. Set frame_nregs to 71. - * backends/mips_cfi.c: New file. - * backends/mips_initreg.c: Likewise. - * backends/mips_unwind.c: Likewise. - -Signed-off-by: Ying Huang ---- - backends/Makefile.am | 3 +- - backends/mips_cfi.c | 68 +++++++++++++++++++++++++++++++++ - backends/mips_init.c | 4 ++ - backends/mips_initreg.c | 61 ++++++++++++++++++++++++++++++ - backends/mips_unwind.c | 84 +++++++++++++++++++++++++++++++++++++++++ - 5 files changed, 219 insertions(+), 1 deletion(-) - create mode 100644 backends/mips_cfi.c - create mode 100644 backends/mips_initreg.c - create mode 100644 backends/mips_unwind.c - ---- a/backends/Makefile.am -+++ b/backends/Makefile.am -@@ -102,7 +102,8 @@ loongarch_SRCS = loongarch_init.c loonga - - arc_SRCS = arc_init.c arc_symbol.c - --mips_SRCS = mips_init.c mips_symbol.c mips_attrs.c -+mips_SRCS = mips_init.c mips_symbol.c mips_attrs.c mips_initreg.c \ -+ mips_cfi.c mips_unwind.c - - libebl_backends_a_SOURCES = $(i386_SRCS) $(sh_SRCS) $(x86_64_SRCS) \ - $(ia64_SRCS) $(alpha_SRCS) $(arm_SRCS) \ ---- /dev/null -+++ b/backends/mips_cfi.c -@@ -0,0 +1,68 @@ -+/* MIPS ABI-specified defaults for DWARF CFI. -+ Copyright (C) 2009 Red Hat, Inc. -+ Copyright (C) 2024 CIP United Inc. -+ This file is part of elfutils. -+ -+ This file is free software; you can redistribute it and/or modify -+ it under the terms of either -+ -+ * the GNU Lesser General Public License as published by the Free -+ Software Foundation; either version 3 of the License, or (at -+ your option) any later version -+ -+ or -+ -+ * the GNU General Public License as published by the Free -+ Software Foundation; either version 2 of the License, or (at -+ your option) any later version -+ -+ or both in parallel, as here. -+ -+ 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 copies of the GNU General Public License and -+ the GNU Lesser General Public License along with this program. If -+ not, see . */ -+ -+#ifdef HAVE_CONFIG_H -+# include -+#endif -+ -+#include -+ -+#define BACKEND mips_ -+#include "libebl_CPU.h" -+ -+int -+mips_abi_cfi (Ebl *ebl __attribute__ ((unused)), Dwarf_CIE *abi_info) -+{ -+ static const uint8_t abi_cfi[] = -+ { -+ DW_CFA_def_cfa, ULEB128_7 (31), ULEB128_7 (0), -+ /* Callee-saved regs. */ -+ DW_CFA_same_value, ULEB128_7 (16), /* s0 */ -+ DW_CFA_same_value, ULEB128_7 (17), /* s1 */ -+ DW_CFA_same_value, ULEB128_7 (18), /* s2 */ -+ DW_CFA_same_value, ULEB128_7 (19), /* s3 */ -+ DW_CFA_same_value, ULEB128_7 (20), /* s4 */ -+ DW_CFA_same_value, ULEB128_7 (21), /* s5 */ -+ DW_CFA_same_value, ULEB128_7 (22), /* s6 */ -+ DW_CFA_same_value, ULEB128_7 (23), /* s7 */ -+ DW_CFA_same_value, ULEB128_7 (28), /* gp */ -+ DW_CFA_same_value, ULEB128_7 (29), /* sp */ -+ DW_CFA_same_value, ULEB128_7 (30), /* fp */ -+ -+ DW_CFA_val_offset, ULEB128_7 (29), ULEB128_7 (0), -+ }; -+ -+ abi_info->initial_instructions = abi_cfi; -+ abi_info->initial_instructions_end = &abi_cfi[sizeof abi_cfi]; -+ abi_info->data_alignment_factor = 8; -+ -+ abi_info->return_address_register = 31; /* %ra */ -+ -+ return 0; -+} ---- a/backends/mips_init.c -+++ b/backends/mips_init.c -@@ -58,5 +58,9 @@ mips_init (Elf *elf __attribute__ ((unus - HOOK (eh, check_object_attribute); - HOOK (eh, check_special_symbol); - HOOK (eh, check_reloc_target_type); -+ HOOK (eh, set_initial_registers_tid); -+ HOOK (eh, abi_cfi); -+ HOOK (eh, unwind); -+ eh->frame_nregs = 71; - return eh; - } ---- /dev/null -+++ b/backends/mips_initreg.c -@@ -0,0 +1,61 @@ -+/* Fetch live process registers from TID. -+ Copyright (C) 2024 CIP United Inc. -+ This file is part of elfutils. -+ -+ This file is free software; you can redistribute it and/or modify -+ it under the terms of either -+ -+ * the GNU Lesser General Public License as published by the Free -+ Software Foundation; either version 3 of the License, or (at -+ your option) any later version -+ -+ or -+ -+ * the GNU General Public License as published by the Free -+ Software Foundation; either version 2 of the License, or (at -+ your option) any later version -+ -+ or both in parallel, as here. -+ -+ 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 copies of the GNU General Public License and -+ the GNU Lesser General Public License along with this program. If -+ not, see . */ -+ -+#ifdef HAVE_CONFIG_H -+# include -+#endif -+ -+#include -+#if (defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)) && defined(__linux__) -+# include -+# include -+#include -+#endif -+ -+#define BACKEND mips_ -+#include "libebl_CPU.h" -+ -+ -+bool -+mips_set_initial_registers_tid (pid_t tid __attribute__ ((unused)), -+ ebl_tid_registers_t *setfunc __attribute__ ((unused)), -+ void *arg __attribute__ ((unused))) -+{ -+#if (!defined(mips) && !defined(__mips) && !defined(__mips__) && !defined(MIPS) && !defined(__MIPS__)) || !defined(__linux__) -+ return false; -+#else /* __mips__ */ -+/* For PTRACE_GETREGS */ -+ -+ struct pt_regs gregs; -+ if (ptrace (PTRACE_GETREGS, tid, 0, &gregs) != 0) -+ return false; -+ if (! setfunc (-1, 1, (Dwarf_Word *) &gregs.cp0_epc, arg)) -+ return false; -+ return setfunc (0, 32, (Dwarf_Word *) &gregs.regs[0], arg); -+#endif /* __mips__ */ -+} ---- /dev/null -+++ b/backends/mips_unwind.c -@@ -0,0 +1,84 @@ -+/* Get previous frame state for an existing frame state. -+ Copyright (C) 2016 The Qt Company Ltd. -+ Copyright (C) 2024 CIP United Inc. -+ This file is part of elfutils. -+ -+ This file is free software; you can redistribute it and/or modify -+ it under the terms of either -+ -+ * the GNU Lesser General Public License as published by the Free -+ Software Foundation; either version 3 of the License, or (at -+ your option) any later version -+ -+ or -+ -+ * the GNU General Public License as published by the Free -+ Software Foundation; either version 2 of the License, or (at -+ your option) any later version -+ -+ or both in parallel, as here. -+ -+ 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 copies of the GNU General Public License and -+ the GNU Lesser General Public License along with this program. If -+ not, see . */ -+ -+#ifdef HAVE_CONFIG_H -+# include -+#endif -+ -+#define BACKEND mips_ -+#define SP_REG 29 -+#define FP_REG 30 -+#define LR_REG 31 -+#define FP_OFFSET 0 -+#define LR_OFFSET 8 -+#define SP_OFFSET 16 -+ -+#include "libebl_CPU.h" -+ -+/* There was no CFI. Maybe we happen to have a frame pointer and can unwind from that? */ -+ -+bool -+EBLHOOK(unwind) (Ebl *ebl __attribute__ ((unused)), Dwarf_Addr pc __attribute__ ((unused)), -+ ebl_tid_registers_t *setfunc, ebl_tid_registers_get_t *getfunc, -+ ebl_pid_memory_read_t *readfunc, void *arg, -+ bool *signal_framep __attribute__ ((unused))) -+{ -+ Dwarf_Word fp, lr, sp; -+ -+ if (!getfunc(LR_REG, 1, &lr, arg)) -+ return false; -+ -+ if (lr == 0 || !setfunc(-1, 1, &lr, arg)) -+ return false; -+ -+ if (!getfunc(FP_REG, 1, &fp, arg)) -+ fp = 0; -+ -+ if (!getfunc(SP_REG, 1, &sp, arg)) -+ sp = 0; -+ -+ Dwarf_Word newLr, newFp, newSp; -+ -+ if (!readfunc(fp + LR_OFFSET, &newLr, arg)) -+ newLr = 0; -+ -+ if (!readfunc(fp + FP_OFFSET, &newFp, arg)) -+ newFp = 0; -+ -+ newSp = fp + SP_OFFSET; -+ -+ // These are not fatal if they don't work. They will just prevent unwinding at the next frame. -+ setfunc(LR_REG, 1, &newLr, arg); -+ setfunc(FP_REG, 1, &newFp, arg); -+ setfunc(SP_REG, 1, &newSp, arg); -+ -+ // If the fp is invalid, we might still have a valid lr. -+ // But if the fp is valid, then the stack should be moving in the right direction. -+ return fp == 0 || newSp > sp; -+} diff --git a/tools/elfutils/patches/015-backport-mips-support-regs.patch b/tools/elfutils/patches/015-backport-mips-support-regs.patch deleted file mode 100644 index 7547a12140..0000000000 --- a/tools/elfutils/patches/015-backport-mips-support-regs.patch +++ /dev/null @@ -1,475 +0,0 @@ -From db33cb0cac3253c34881c0377ada51d9803eaae0 Mon Sep 17 00:00:00 2001 -From: Ying Huang -Date: Tue, 5 Mar 2024 17:51:22 +0800 -Subject: [PATCH] backends: Add register_info, return_value_location, core_note - on mips - - * backends/Makefile.am (mips_SRCS): Add mips_regs.c, - mips_retval.c and mips_corenote.c. - * backends/mips_init.c (mips_init): HOOK register_info, - return_value_location and core_note. - * backends/mips_corenote.c: New file. - * backends/mips_regs.c: Likewise. - * backends/mips_retval.c: Likewise. - -Signed-off-by: Ying Huang ---- - backends/Makefile.am | 3 +- - backends/mips_corenote.c | 85 +++++++++++++++++ - backends/mips_init.c | 3 + - backends/mips_regs.c | 135 +++++++++++++++++++++++++++ - backends/mips_retval.c | 196 +++++++++++++++++++++++++++++++++++++++ - 5 files changed, 421 insertions(+), 1 deletion(-) - create mode 100644 backends/mips_corenote.c - create mode 100644 backends/mips_regs.c - create mode 100644 backends/mips_retval.c - ---- a/backends/Makefile.am -+++ b/backends/Makefile.am -@@ -103,7 +103,8 @@ loongarch_SRCS = loongarch_init.c loonga - arc_SRCS = arc_init.c arc_symbol.c - - mips_SRCS = mips_init.c mips_symbol.c mips_attrs.c mips_initreg.c \ -- mips_cfi.c mips_unwind.c -+ mips_cfi.c mips_unwind.c mips_regs.c mips_retval.c \ -+ mips_corenote.c - - libebl_backends_a_SOURCES = $(i386_SRCS) $(sh_SRCS) $(x86_64_SRCS) \ - $(ia64_SRCS) $(alpha_SRCS) $(arm_SRCS) \ ---- /dev/null -+++ b/backends/mips_corenote.c -@@ -0,0 +1,85 @@ -+/* MIPS specific core note handling. -+ Copyright (C) 2024 CIP United Inc. -+ This file is part of elfutils. -+ -+ This file is free software; you can redistribute it and/or modify -+ it under the terms of either -+ -+ * the GNU Lesser General Public License as published by the Free -+ Software Foundation; either version 3 of the License, or (at -+ your option) any later version -+ -+ or -+ -+ * the GNU General Public License as published by the Free -+ Software Foundation; either version 2 of the License, or (at -+ your option) any later version -+ -+ or both in parallel, as here. -+ -+ 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 copies of the GNU General Public License and -+ the GNU Lesser General Public License along with this program. If -+ not, see . */ -+ -+#ifdef HAVE_CONFIG_H -+# include -+#endif -+ -+#include -+#include -+#include -+#include -+#include -+ -+#define BACKEND mips_ -+#include "libebl_CPU.h" -+ -+#define BITS 64 -+#ifndef BITS -+# define BITS 32 -+#else -+# define BITS 64 -+#endif -+ -+#define PRSTATUS_REGS_SIZE (45 * (BITS / 8)) -+static const Ebl_Register_Location prstatus_regs[] = -+ { -+ { .offset = 0, .regno = 0, .count = (BITS == 32 ? 40 : 34), .bits = BITS }, -+ { .offset = BITS/8 * (BITS == 32 ? 41 : 35), .regno = (BITS == 32 ? 41 : 35), .count = (BITS == 32 ? 4 : 10), .bits = BITS }, -+ }; -+ -+#define PRSTATUS_REGSET_ITEMS \ -+ { \ -+ .name = "pc", .type = ELF_T_ADDR, .format = 'x', \ -+ .offset = offsetof (struct EBLHOOK(prstatus), pr_reg) + ((BITS/8) * (BITS == 32 ? 40 : 34)), \ -+ .group = "register", \ -+ .pc_register = true \ -+ } -+ -+#if BITS == 32 -+# define ULONG uint32_t -+# define ALIGN_ULONG 4 -+# define TYPE_ULONG ELF_T_WORD -+#define TYPE_LONG ELF_T_SWORD -+#else -+#define ULONG uint64_t -+#define ALIGN_ULONG 8 -+#define TYPE_ULONG ELF_T_XWORD -+#define TYPE_LONG ELF_T_SXWORD -+#endif -+#define PID_T int32_t -+#define UID_T uint32_t -+#define GID_T uint32_t -+#define ALIGN_PID_T 4 -+#define ALIGN_UID_T 4 -+#define ALIGN_GID_T 4 -+#define TYPE_PID_T ELF_T_SWORD -+#define TYPE_UID_T ELF_T_WORD -+#define TYPE_GID_T ELF_T_WORD -+ -+#include "linux-core-note.c" ---- a/backends/mips_init.c -+++ b/backends/mips_init.c -@@ -61,6 +61,9 @@ mips_init (Elf *elf __attribute__ ((unus - HOOK (eh, set_initial_registers_tid); - HOOK (eh, abi_cfi); - HOOK (eh, unwind); -+ HOOK (eh, register_info); -+ HOOK (eh, return_value_location); -+ HOOK (eh, core_note); - eh->frame_nregs = 71; - return eh; - } ---- /dev/null -+++ b/backends/mips_regs.c -@@ -0,0 +1,135 @@ -+/* Register names and numbers for mips DWARF. -+ Copyright (C) 2006 Red Hat, Inc. -+ Copyright (C) 2024 CIP United Inc. -+ This file is part of elfutils. -+ -+ This file is free software; you can redistribute it and/or modify -+ it under the terms of either -+ -+ * the GNU Lesser General Public License as published by the Free -+ Software Foundation; either version 3 of the License, or (at -+ your option) any later version -+ -+ or -+ -+ * the GNU General Public License as published by the Free -+ Software Foundation; either version 2 of the License, or (at -+ your option) any later version -+ -+ or both in parallel, as here. -+ -+ 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 copies of the GNU General Public License and -+ the GNU Lesser General Public License along with this program. If -+ not, see . */ -+ -+#ifdef HAVE_CONFIG_H -+# include -+#endif -+ -+#include -+#include -+#include -+ -+#define BACKEND mips_ -+#include "libebl_CPU.h" -+#include -+ssize_t -+mips_register_info (Ebl *ebl __attribute__ ((unused)), -+ int regno, char *name, size_t namelen, -+ const char **prefix, const char **setname, -+ int *bits, int *type) -+{ -+ if (name == NULL) -+ return 72; -+ -+ if (regno < 0 || regno > 71 || namelen < 4) -+ return -1; -+ -+ *prefix = "$"; -+ if (regno < 38) -+ { -+ *setname = "integer"; -+ *type = DW_ATE_signed; -+ *bits = 32; -+ } -+ else -+ { -+ *setname = "FPU"; -+ *type = DW_ATE_float; -+ *bits = 64; -+ } -+ -+ if (regno < 32) -+ { -+ if (regno < 10) -+ { -+ name[0] = regno + '0'; -+ namelen = 1; -+ } -+ else -+ { -+ name[0] = (regno / 10) + '0'; -+ name[1] = (regno % 10) + '0'; -+ namelen = 2; -+ } -+ if (regno == 28 || regno == 29 || regno == 31) -+ *type = DW_ATE_address; -+ } -+ else if (regno == 32) -+ { -+ return stpcpy (name, "lo") + 1 - name; -+ } -+ else if (regno == 33) -+ { -+ return stpcpy (name, "hi") + 1 - name; -+ } -+ else if (regno == 34) -+ { -+ return stpcpy (name, "pc") + 1 - name; -+ } -+ else if (regno == 35) -+ { -+ *type = DW_ATE_address; -+ return stpcpy (name, "bad") + 1 - name; -+ } -+ else if (regno == 36) -+ { -+ return stpcpy (name, "sr") + 1 - name; -+ } -+ else if (regno == 37) -+ { -+ *type = DW_ATE_address; -+ return stpcpy (name, "cause") + 1 - name; -+ } -+ else if (regno < 70) -+ { -+ name[0] = 'f'; -+ if (regno < 38 + 10) -+ { -+ name[1] = (regno - 38) + '0'; -+ namelen = 2; -+ } -+ else -+ { -+ name[1] = (regno - 38) / 10 + '0'; -+ name[2] = (regno - 38) % 10 + '0'; -+ namelen = 3; -+ } -+ } -+ else if (regno == 70) -+ { -+ return stpcpy (name, "fsr") + 1 - name; -+ } -+ else if (regno == 71) -+ { -+ return stpcpy (name, "fir") + 1 - name; -+ } -+ -+ name[namelen++] = '\0'; -+ return namelen; -+} ---- /dev/null -+++ b/backends/mips_retval.c -@@ -0,0 +1,196 @@ -+/* Function return value location for Linux/mips ABI. -+ Copyright (C) 2005 Red Hat, Inc. -+ Copyright (C) 2024 CIP United Inc. -+ This file is part of elfutils. -+ -+ This file is free software; you can redistribute it and/or modify -+ it under the terms of either -+ -+ * the GNU Lesser General Public License as published by the Free -+ Software Foundation; either version 3 of the License, or (at -+ your option) any later version -+ -+ or -+ -+ * the GNU General Public License as published by the Free -+ Software Foundation; either version 2 of the License, or (at -+ your option) any later version -+ -+ or both in parallel, as here. -+ -+ 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 copies of the GNU General Public License and -+ the GNU Lesser General Public License along with this program. If -+ not, see . */ -+ -+#ifdef HAVE_CONFIG_H -+# include -+#endif -+ -+#include -+#include -+#include -+#include -+#include -+ -+#define BACKEND mips_ -+#include "libebl_CPU.h" -+#include "libdwP.h" -+#include -+ -+/* $v0 or pair $v0, $v1 */ -+static const Dwarf_Op loc_intreg_o32[] = -+ { -+ { .atom = DW_OP_reg2 }, { .atom = DW_OP_piece, .number = 4 }, -+ { .atom = DW_OP_reg3 }, { .atom = DW_OP_piece, .number = 4 }, -+ }; -+ -+static const Dwarf_Op loc_intreg[] = -+ { -+ { .atom = DW_OP_reg2 }, { .atom = DW_OP_piece, .number = 8 }, -+ { .atom = DW_OP_reg3 }, { .atom = DW_OP_piece, .number = 8 }, -+ }; -+#define nloc_intreg 1 -+#define nloc_intregpair 4 -+ -+/* $f0 (float), or pair $f0, $f1 (double). -+ * f2/f3 are used for COMPLEX (= 2 doubles) returns in Fortran */ -+static const Dwarf_Op loc_fpreg_o32[] = -+ { -+ { .atom = DW_OP_regx, .number = 32 }, { .atom = DW_OP_piece, .number = 4 }, -+ { .atom = DW_OP_regx, .number = 33 }, { .atom = DW_OP_piece, .number = 4 }, -+ { .atom = DW_OP_regx, .number = 34 }, { .atom = DW_OP_piece, .number = 4 }, -+ { .atom = DW_OP_regx, .number = 35 }, { .atom = DW_OP_piece, .number = 4 }, -+ }; -+ -+/* $f0, or pair $f0, $f2. */ -+static const Dwarf_Op loc_fpreg[] = -+ { -+ { .atom = DW_OP_regx, .number = 32 }, { .atom = DW_OP_piece, .number = 8 }, -+ { .atom = DW_OP_regx, .number = 34 }, { .atom = DW_OP_piece, .number = 8 }, -+ }; -+#define nloc_fpreg 1 -+#define nloc_fpregpair 4 -+#define nloc_fpregquad 8 -+ -+/* The return value is a structure and is actually stored in stack space -+ passed in a hidden argument by the caller. But, the compiler -+ helpfully returns the address of that space in $v0. */ -+static const Dwarf_Op loc_aggregate[] = -+ { -+ { .atom = DW_OP_breg2, .number = 0 } -+ }; -+#define nloc_aggregate 1 -+ -+int -+mips_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) -+{ -+ unsigned int regsize = (gelf_getclass (functypedie->cu->dbg->elf) == ELFCLASS32 ) ? 4 : 8; -+ if (!regsize) -+ return -2; -+ -+ /* Start with the function's type, and get the DW_AT_type attribute, -+ which is the type of the return value. */ -+ -+ Dwarf_Attribute attr_mem; -+ Dwarf_Attribute *attr = dwarf_attr_integrate (functypedie, DW_AT_type, &attr_mem); -+ if (attr == NULL) -+ /* The function has no return value, like a `void' function in C. */ -+ return 0; -+ -+ Dwarf_Die die_mem; -+ Dwarf_Die *typedie = dwarf_formref_die (attr, &die_mem); -+ int tag = dwarf_tag (typedie); -+ -+ /* Follow typedefs and qualifiers to get to the actual type. */ -+ while (tag == DW_TAG_typedef -+ || tag == DW_TAG_const_type || tag == DW_TAG_volatile_type -+ || tag == DW_TAG_restrict_type) -+ { -+ attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); -+ typedie = dwarf_formref_die (attr, &die_mem); -+ tag = dwarf_tag (typedie); -+ } -+ -+ switch (tag) -+ { -+ case -1: -+ return -1; -+ -+ case DW_TAG_subrange_type: -+ if (! dwarf_hasattr_integrate (typedie, DW_AT_byte_size)) -+ { -+ attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); -+ typedie = dwarf_formref_die (attr, &die_mem); -+ tag = dwarf_tag (typedie); -+ } -+ /* Fall through. */ -+ FALLTHROUGH; -+ -+ case DW_TAG_base_type: -+ case DW_TAG_enumeration_type: -+ CASE_POINTER: -+ { -+ Dwarf_Word size; -+ if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_byte_size, -+ &attr_mem), &size) != 0) -+ { -+ if (dwarf_is_pointer (tag)) -+ size = regsize; -+ else -+ return -1; -+ } -+ if (tag == DW_TAG_base_type) -+ { -+ Dwarf_Word encoding; -+ if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_encoding, -+ &attr_mem), &encoding) != 0) -+ return -1; -+ -+#define ARCH_LOC(loc, regsize) ((regsize) == 4 ? (loc ## _o32) : (loc)) -+ -+ if (encoding == DW_ATE_float) -+ { -+ *locp = ARCH_LOC(loc_fpreg, regsize); -+ if (size <= regsize) -+ return nloc_fpreg; -+ -+ if (size <= 2*regsize) -+ return nloc_fpregpair; -+ -+ if (size <= 4*regsize) -+ return nloc_fpregquad; -+ -+ goto aggregate; -+ } -+ } -+ *locp = ARCH_LOC(loc_intreg, regsize); -+ if (size <= regsize) -+ return nloc_intreg; -+ if (size <= 2*regsize) -+ return nloc_intregpair; -+ -+ /* Else fall through. Shouldn't happen though (at least with gcc) */ -+ } -+ FALLTHROUGH; -+ -+ case DW_TAG_structure_type: -+ case DW_TAG_class_type: -+ case DW_TAG_union_type: -+ case DW_TAG_array_type: -+ aggregate: -+ *locp = loc_aggregate; -+ return nloc_aggregate; -+ case DW_TAG_unspecified_type: -+ return 0; -+ } -+ -+ /* XXX We don't have a good way to return specific errors from ebl calls. -+ This value means we do not understand the type, but it is well-formed -+ DWARF and might be valid. */ -+ return -2; -+} diff --git a/tools/elfutils/patches/095-src-unused-variable.patch b/tools/elfutils/patches/095-src-unused-variable.patch deleted file mode 100644 index be5d285574..0000000000 --- a/tools/elfutils/patches/095-src-unused-variable.patch +++ /dev/null @@ -1,29 +0,0 @@ -From ef8a4b841aaf26326b8961a651dbe915d54d23e7 Mon Sep 17 00:00:00 2001 -From: Jose Quaresma -Date: Tue, 19 Mar 2024 10:34:33 +0000 -Subject: [PATCH] srcfiles: fix unused variable BUFFER_SIZE - -The const variable BUFFER_SIZE is used only on the zip_files -function witch is only available with LIBARCHIVE. - -| ../../elfutils-0.191/src/srcfiles.cxx:81:18: error: unused variable 'BUFFER_SIZE' [-Werror,-Wunused-const-variable] -| 81 | constexpr size_t BUFFER_SIZE = 8192; -| | ^~~~~~~~~~~ - -Signed-off-by: Jose Quaresma ---- - src/srcfiles.cxx | 2 ++ - 1 file changed, 2 insertions(+) - ---- a/src/srcfiles.cxx -+++ b/src/srcfiles.cxx -@@ -78,7 +78,9 @@ ARGP_PROGRAM_VERSION_HOOK_DEF = print_ve - /* Bug report address. */ - ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT; - -+#ifdef HAVE_LIBARCHIVE - constexpr size_t BUFFER_SIZE = 8192; -+#endif - - /* Definitions of arguments for argp functions. */ - static const struct argp_option options[] = diff --git a/tools/elfutils/patches/096-lib-config_h.patch b/tools/elfutils/patches/096-lib-config_h.patch deleted file mode 100644 index cc31fcfff2..0000000000 --- a/tools/elfutils/patches/096-lib-config_h.patch +++ /dev/null @@ -1,29 +0,0 @@ -From c981e61aa301d389f18df5fd279c1ca4d39d38a0 Mon Sep 17 00:00:00 2001 -From: Michael Pratt -Date: Thu, 10 Oct 2024 10:26:54 +0000 -Subject: [PATCH] lib: Add missing config.h include to next_prime.c - -This is the last remaining C source file as of this commit -without the standard conditional inclusion of config.h -as the very first header. - - * lib/next_prime.c: add missing config.h header. - -Signed-off-by: Michael Pratt ---- - lib/next_prime.c | 4 ++++ - 1 file changed, 4 insertions(+) - ---- a/lib/next_prime.c -+++ b/lib/next_prime.c -@@ -27,6 +27,10 @@ - the GNU Lesser General Public License along with this program. If - not, see . */ - -+#ifdef HAVE_CONFIG_H -+# include -+#endif -+ - #include - - diff --git a/tools/elfutils/patches/097-libcpu-config_h.patch b/tools/elfutils/patches/097-libcpu-config_h.patch deleted file mode 100644 index 7bcd858696..0000000000 --- a/tools/elfutils/patches/097-libcpu-config_h.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 7f06ac2b3fc0077f29bcc68064ca8e91fa7cd080 Mon Sep 17 00:00:00 2001 -From: Michael Pratt -Date: Thu, 10 Oct 2024 10:27:02 +0000 -Subject: [PATCH] libcpu: Include config.h before standard headers in lexer - source - -As part of the processing of flex, definitions and headers -are added to output source before any literal text or generated code. - -This causes standard headers to come before config.h -unless config.h is included in a %top block instead -as specified in the flex manual, section 5.1 "Format of the Definitions". - -The %top block is non-POSIX, so using it reinforces -the requirement of "flex" over a standardized "lex" even more. - - * libcpu/i386_lex.l (%top): add flex %top block - and move config.h header inclusion to it. - -Signed-off-by: Michael Pratt ---- - libcpu/i386_lex.l | 10 ++++++---- - 1 file changed, 6 insertions(+), 4 deletions(-) - ---- a/libcpu/i386_lex.l -+++ b/libcpu/i386_lex.l -@@ -1,3 +1,9 @@ -+%top{ -+#ifdef HAVE_CONFIG_H -+# include -+#endif -+} -+ - %{ - /* Copyright (C) 2004, 2005, 2007, 2008 Red Hat, Inc. - Written by Ulrich Drepper , 2004. -@@ -26,10 +32,6 @@ - the GNU Lesser General Public License along with this program. If - not, see . */ - --#ifdef HAVE_CONFIG_H --# include --#endif -- - #include - - #include diff --git a/tools/elfutils/patches/098-libdw-maintainer-clean.patch b/tools/elfutils/patches/098-libdw-maintainer-clean.patch deleted file mode 100644 index f502af226f..0000000000 --- a/tools/elfutils/patches/098-libdw-maintainer-clean.patch +++ /dev/null @@ -1,43 +0,0 @@ -From b68f34725229b08380a1612899b0537f8f597dad Mon Sep 17 00:00:00 2001 -From: Michael Pratt -Date: Thu, 10 Oct 2024 10:27:09 +0000 -Subject: [PATCH] libdw: Let clean targets be unconditional - -The automake rule "maintainer-clean-generic" -is always available and never conditional, -so let the variable that uses it be define -non-conditionally. - -If one actually wants conditional cleaning -they should write a custom rule and set it -as a dependency of a "*clean-local" automake rule. - -There is no need to do conditional cleaning here, -so move the MAINTAINERCLEANFILES variable definition -to the end of the Makefile.am file as it is -in the rest of the project. - - * libdw/Makefile.am: move MAINTAINERCLEANFILES - variable to the end of the file - as a non-conditional definition. - -Signed-off-by: Michael Pratt ---- - libdw/Makefile.am | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/libdw/Makefile.am -+++ b/libdw/Makefile.am -@@ -97,7 +97,6 @@ libdw_a_SOURCES = dwarf_begin.c dwarf_be - - if MAINTAINER_MODE - BUILT_SOURCES = $(srcdir)/known-dwarf.h --MAINTAINERCLEANFILES = $(srcdir)/known-dwarf.h - $(srcdir)/known-dwarf.h: $(top_srcdir)/config/known-dwarf.awk $(srcdir)/dwarf.h - gawk -f $^ > $@.new - mv -f $@.new $@ -@@ -154,3 +153,4 @@ noinst_HEADERS = libdwP.h memory-access. - EXTRA_DIST = libdw.map - - MOSTLYCLEANFILES = $(am_libdw_pic_a_OBJECTS) libdw.so libdw.so.$(VERSION) -+MAINTAINERCLEANFILES = $(srcdir)/known-dwarf.h diff --git a/tools/elfutils/patches/099-remove-unlocked-stdio.patch b/tools/elfutils/patches/099-remove-unlocked-stdio.patch deleted file mode 100644 index a0089a3a4c..0000000000 --- a/tools/elfutils/patches/099-remove-unlocked-stdio.patch +++ /dev/null @@ -1,687 +0,0 @@ -From 12d58cf3e30dee91ed7aadb6475a15c6e74cc88b Mon Sep 17 00:00:00 2001 -From: Michael Pratt -Date: Wed, 16 Oct 2024 19:53:52 +0000 -Subject: [PATCH] Remove usage of "unlocked" variant of stdio print functions - -These "unlocked" Linux Standard Base variants of standard functions -are not available on some systems that are still capable -of building Linux and ELFs. - -The difference is negligible for simple printing to stdout. - -POSIX also states for the similar putc_unlocked(): - - These functions can safely be used in a multi-threaded program - if and only if they are called while the invoking thread owns - the (FILE *) object, as is the case after a successful call - to the flockfile() or ftrylockfile() functions. - -... - - These unlocked versions can be safely used - only within explicitly locked program regions, - using exported locking primitives. - -and these precautions were never done. - -Use the standard forms of these print functions. - -There is inconsistent use of fputc_unlocked() with putc_unlocked(), -so consistently use the safer fputc() instead. - -Signed-off-by: Michael Pratt ---- - libasm/asm_align.c | 4 +- - libcpu/i386_parse.y | 4 +- - libebl/eblobjnote.c | 4 +- - src/nm.c | 20 +++++----- - src/objdump.c | 24 ++++++------ - src/readelf.c | 90 ++++++++++++++++++++++----------------------- - src/size.c | 8 ++-- - src/strings.c | 20 +++++----- - tests/showptable.c | 8 ++-- - 9 files changed, 91 insertions(+), 91 deletions(-) - ---- a/libasm/asm_align.c -+++ b/libasm/asm_align.c -@@ -60,13 +60,13 @@ asm_align (AsmScn_t *asmscn, GElf_Word v - fprintf (asmscn->ctx->out.file, "%02hhx\n", asmscn->pattern->bytes[0]); - else - { -- fputc_unlocked ('"', asmscn->ctx->out.file); -+ fputc ('"', asmscn->ctx->out.file); - - for (size_t cnt = 0; cnt < asmscn->pattern->len; ++cnt) - fprintf (asmscn->ctx->out.file, "\\x%02hhx", - asmscn->pattern->bytes[cnt]); - -- fputs_unlocked ("\"\n", asmscn->ctx->out.file); -+ fputs ("\"\n", asmscn->ctx->out.file); - } - return 0; - } ---- a/libcpu/i386_parse.y -+++ b/libcpu/i386_parse.y -@@ -1158,7 +1158,7 @@ instrtable_out (void) - EMIT_SUFFIX (w1); - EMIT_SUFFIX (W1); - -- fputc_unlocked ('\n', outfile); -+ fputc ('\n', outfile); - - for (int i = 0; i < 3; ++i) - { -@@ -1333,7 +1333,7 @@ instrtable_out (void) - b = b->next; - } - -- fputc_unlocked ('\n', outfile); -+ fputc ('\n', outfile); - } - fputs ("};\n", outfile); - } ---- a/libebl/eblobjnote.c -+++ b/libebl/eblobjnote.c -@@ -643,10 +643,10 @@ ebl_object_note (Ebl *ebl, uint32_t name - for (size_t cnt = 1; cnt < descsz / 4; ++cnt) - { - if (cnt > 1) -- putchar_unlocked ('.'); -+ putchar ('.'); - printf ("%" PRIu32, buf[cnt]); - } -- putchar_unlocked ('\n'); -+ putchar ('\n'); - } - if (descsz / 4 > FIXED_TAG_BYTES) - free (buf); ---- a/src/nm.c -+++ b/src/nm.c -@@ -439,7 +439,7 @@ handle_ar (int fd, Elf *elf, const char - Elf_Arhdr *arhdr = NULL; - size_t arhdr_off = 0; /* Note: 0 is no valid offset. */ - -- fputs_unlocked (_("\nArchive index:\n"), stdout); -+ fputs (_("\nArchive index:\n"), stdout); - - while (arsym->as_off != 0) - { -@@ -825,8 +825,8 @@ show_symbols_sysv (Ebl *ebl, GElf_Word s - /* If we have to precede the line with the file name. */ - if (print_file_name) - { -- fputs_unlocked (fullname, stdout); -- putchar_unlocked (':'); -+ fputs (fullname, stdout); -+ putchar (':'); - } - - /* Convert the address. */ -@@ -972,8 +972,8 @@ show_symbols_bsd (Elf *elf, const GElf_E - /* If we have to precede the line with the file name. */ - if (print_file_name) - { -- fputs_unlocked (fullname, stdout); -- putchar_unlocked (':'); -+ fputs (fullname, stdout); -+ putchar (':'); - } - - bool is_tls = GELF_ST_TYPE (syms[cnt].sym.st_info) == STT_TLS; -@@ -1046,8 +1046,8 @@ show_symbols_bsd (Elf *elf, const GElf_E - } - - if (color_mode) -- fputs_unlocked (color_off, stdout); -- putchar_unlocked ('\n'); -+ fputs (color_off, stdout); -+ putchar ('\n'); - } - - #ifdef USE_DEMANGLE -@@ -1104,9 +1104,9 @@ show_symbols_posix (Elf *elf, const GElf - /* If we have to precede the line with the file name. */ - if (print_file_name) - { -- fputs_unlocked (fullname, stdout); -- putchar_unlocked (':'); -- putchar_unlocked (' '); -+ fputs (fullname, stdout); -+ putchar (':'); -+ putchar (' '); - } - - printf ("%s %c%s", symstr, ---- a/src/objdump.c -+++ b/src/objdump.c -@@ -580,12 +580,12 @@ show_full_content (Ebl *ebl, const char - printf ("%02hhx%02hhx%02hhx%02hhx ", - cp[inner], cp[inner + 1], cp[inner + 2], - cp[inner + 3]); -- fputc_unlocked (' ', stdout); -+ fputc (' ', stdout); - - for (size_t inner = 0; inner < 16; ++inner) -- fputc_unlocked (isascii (cp[inner]) && isprint (cp[inner]) -+ fputc (isascii (cp[inner]) && isprint (cp[inner]) - ? cp[inner] : '.', stdout); -- fputc_unlocked ('\n', stdout); -+ fputc ('\n', stdout); - } - - printf (" %04zx ", cnt); -@@ -601,14 +601,14 @@ show_full_content (Ebl *ebl, const char - - for (inner = 2 * (16 - inner) + (16 - inner + 3) / 4 + 1; inner > 0; - --inner) -- fputc_unlocked (' ', stdout); -+ fputc (' ', stdout); - - for (inner = 0; inner < remaining; ++inner) -- fputc_unlocked (isascii (cp[inner]) && isprint (cp[inner]) -+ fputc (isascii (cp[inner]) && isprint (cp[inner]) - ? cp[inner] : '.', stdout); -- fputc_unlocked ('\n', stdout); -+ fputc ('\n', stdout); - -- fputc_unlocked ('\n', stdout); -+ fputc ('\n', stdout); - } - } - -@@ -640,12 +640,12 @@ disasm_output (char *buf, size_t buflen, - printf ("%8" PRIx64 ": ", (uint64_t) info->addr); - - if (info->bytes_color != NULL) -- fputs_unlocked (info->bytes_color, stdout); -+ fputs (info->bytes_color, stdout); - size_t cnt; - for (cnt = 0; cnt < (size_t) MIN (info->cur - info->last_end, 8); ++cnt) - printf (" %02" PRIx8, info->last_end[cnt]); - if (info->bytes_color != NULL) -- fputs_unlocked (color_off, stdout); -+ fputs (color_off, stdout); - - printf ("%*s %.*s\n", - (int) (8 - cnt) * 3 + 1, "", (int) buflen, buf); -@@ -663,12 +663,12 @@ disasm_output (char *buf, size_t buflen, - printf ("%8" PRIx64 ": ", (uint64_t) info->addr); - - if (info->bytes_color != NULL) -- fputs_unlocked (info->bytes_color, stdout); -+ fputs (info->bytes_color, stdout); - for (; cnt < (size_t) (info->cur - info->last_end); ++cnt) - printf (" %02" PRIx8, info->last_end[cnt]); - if (info->bytes_color != NULL) -- fputs_unlocked (color_off, stdout); -- putchar_unlocked ('\n'); -+ fputs (color_off, stdout); -+ putchar ('\n'); - info->addr += info->cur - info->last_end - 8; - } - ---- a/src/readelf.c -+++ b/src/readelf.c -@@ -1127,7 +1127,7 @@ print_file_type (unsigned short int e_ty - static void - print_ehdr (Ebl *ebl, GElf_Ehdr *ehdr) - { -- fputs_unlocked (_("ELF Header:\n Magic: "), stdout); -+ fputs (_("ELF Header:\n Magic: "), stdout); - for (size_t cnt = 0; cnt < EI_NIDENT; ++cnt) - printf (" %02hhx", ehdr->e_ident[cnt]); - -@@ -1154,7 +1154,7 @@ print_ehdr (Ebl *ebl, GElf_Ehdr *ehdr) - printf (_(" ABI Version: %hhd\n"), - ehdr->e_ident[EI_ABIVERSION]); - -- fputs_unlocked (_(" Type: "), stdout); -+ fputs (_(" Type: "), stdout); - print_file_type (ehdr->e_type); - - const char *machine = dwelf_elf_e_machine_string (ehdr->e_machine); -@@ -1196,9 +1196,9 @@ print_ehdr (Ebl *ebl, GElf_Ehdr *ehdr) - printf (_(" (%" PRIu32 " in [0].sh_info)"), - (uint32_t) shdr->sh_info); - else -- fputs_unlocked (_(" ([0] not available)"), stdout); -+ fputs (_(" ([0] not available)"), stdout); - } -- fputc_unlocked ('\n', stdout); -+ fputc ('\n', stdout); - - printf (_(" Size of section header entries: %" PRId16 " %s\n"), - ehdr->e_shentsize, _("(bytes)")); -@@ -1213,9 +1213,9 @@ print_ehdr (Ebl *ebl, GElf_Ehdr *ehdr) - printf (_(" (%" PRIu32 " in [0].sh_size)"), - (uint32_t) shdr->sh_size); - else -- fputs_unlocked (_(" ([0] not available)"), stdout); -+ fputs (_(" ([0] not available)"), stdout); - } -- fputc_unlocked ('\n', stdout); -+ fputc ('\n', stdout); - - if (unlikely (ehdr->e_shstrndx == SHN_XINDEX)) - { -@@ -1406,7 +1406,7 @@ There are %zd section headers, starting - } - } - -- fputc_unlocked ('\n', stdout); -+ fputc ('\n', stdout); - } - - -@@ -1552,22 +1552,22 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr) - && shdr->sh_addr >= relro_from - && shdr->sh_addr + shdr->sh_size <= relro_to) - { -- fputs_unlocked (" [RELRO:", stdout); -+ fputs (" [RELRO:", stdout); - in_relro = true; - } - else if (has_relro && in_relro && shdr->sh_addr >= relro_to) - { -- fputs_unlocked ("]", stdout); -+ fputs ("]", stdout); - in_relro = false; - } - else if (has_relro && in_relro - && shdr->sh_addr + shdr->sh_size > relro_to) -- fputs_unlocked ("] p_type == PT_LOAD && (phdr->p_flags & PF_W) == 0) - { - if (!in_ro) - { -- fputs_unlocked (" [RO:", stdout); -+ fputs (" [RO:", stdout); - in_ro = true; - } - } -@@ -1592,12 +1592,12 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr) - { - if ((phdr2->p_flags & PF_W) == 0 && !in_ro) - { -- fputs_unlocked (" [RO:", stdout); -+ fputs (" [RO:", stdout); - in_ro = true; - } - else if ((phdr2->p_flags & PF_W) != 0 && in_ro) - { -- fputs_unlocked ("]", stdout); -+ fputs ("]", stdout); - in_ro = false; - } - } -@@ -1610,16 +1610,16 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr) - if (has_relro && in_relro - && shdr->sh_addr + shdr->sh_size > relro_to) - { -- fputs_unlocked (">", stdout); -+ fputs (">", stdout); - in_relro = false; - } - } - } - if (in_relro || in_ro) -- fputs_unlocked ("]", stdout); -+ fputs ("]", stdout); - - /* Finish the line. */ -- fputc_unlocked ('\n', stdout); -+ fputc ('\n', stdout); - } - } - -@@ -1788,8 +1788,8 @@ print_flags (int class, GElf_Xword d_val - if (d_val & flags[cnt].mask) - { - if (!first) -- putchar_unlocked (' '); -- fputs_unlocked (flags[cnt].str, stdout); -+ putchar (' '); -+ fputs (flags[cnt].str, stdout); - d_val &= ~flags[cnt].mask; - first = false; - } -@@ -1797,11 +1797,11 @@ print_flags (int class, GElf_Xword d_val - if (d_val != 0) - { - if (!first) -- putchar_unlocked (' '); -+ putchar (' '); - printf ("%#0*" PRIx64, class == ELFCLASS32 ? 10 : 18, d_val); - } - -- putchar_unlocked ('\n'); -+ putchar ('\n'); - } - - -@@ -1909,7 +1909,7 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn, - phdr->p_offset); - } - -- fputs_unlocked (_(" Type Value\n"), stdout); -+ fputs (_(" Type Value\n"), stdout); - - /* if --use-dynamic option is enabled, - use the string table to get the related library info. */ -@@ -1953,7 +1953,7 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn, - case DT_BIND_NOW: - case DT_TEXTREL: - /* No further output. */ -- fputc_unlocked ('\n', stdout); -+ fputc ('\n', stdout); - break; - - case DT_NEEDED: -@@ -2147,7 +2147,7 @@ handle_relocs_rel (Ebl *ebl, GElf_Ehdr * - elf_strptr (ebl->elf, shstrndx, shdr->sh_name), - shdr->sh_offset, - nentries); -- fputs_unlocked (class == ELFCLASS32 -+ fputs (class == ELFCLASS32 - ? _("\ - Offset Type Value Name\n") - : _("\ -@@ -2384,7 +2384,7 @@ handle_relocs_rela (Ebl *ebl, GElf_Ehdr - elf_strptr (ebl->elf, shstrndx, shdr->sh_name), - shdr->sh_offset, - nentries); -- fputs_unlocked (class == ELFCLASS32 -+ fputs (class == ELFCLASS32 - ? _("\ - Offset Type Value Addend Name\n") - : _("\ -@@ -2891,7 +2891,7 @@ process_symtab (Ebl *ebl, unsigned int n - } - } - -- putchar_unlocked ('\n'); -+ putchar ('\n'); - } - } - -@@ -2973,7 +2973,7 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, G - (unsigned int) shdr->sh_link, - elf_strptr (ebl->elf, shstrndx, glink->sh_name)); - -- fputs_unlocked (class == ELFCLASS32 -+ fputs (class == ELFCLASS32 - ? _("\ - Num: Value Size Type Bind Vis Ndx Name\n") - : _("\ -@@ -3649,12 +3649,12 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, G - { - ssize_t n; - case 0: -- fputs_unlocked (_(" 0 *local* "), -+ fputs (_(" 0 *local* "), - stdout); - break; - - case 1: -- fputs_unlocked (_(" 1 *global* "), -+ fputs (_(" 1 *global* "), - stdout); - break; - -@@ -3671,7 +3671,7 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, G - break; - } - } -- putchar_unlocked ('\n'); -+ putchar ('\n'); - } - - -@@ -3718,7 +3718,7 @@ print_hash_info (Ebl *ebl, Elf_Scn *scn, - uint64_t success = 0; - - /* xgettext:no-c-format */ -- fputs_unlocked (_("\ -+ fputs (_("\ - Length Number % of total Coverage\n"), stdout); - printf (_(" 0 %6" PRIu32 " %5.1f%%\n"), - counts[0], (counts[0] * 100.0) / nbucket); -@@ -4140,7 +4140,7 @@ print_attributes (Ebl *ebl, const GElf_E - if (unlikely (*p++ != 'A')) - return; - -- fputs_unlocked (_(" Owner Size\n"), stdout); -+ fputs (_(" Owner Size\n"), stdout); - - /* Loop over the sections. */ - while (left (data, p) >= 4) -@@ -7233,7 +7233,7 @@ print_encoding_base (const char *pfx, un - if (w & 0x70) - { - if (w != fde_encoding) -- fputc_unlocked (' ', stdout); -+ fputc (' ', stdout); - - w = print_relinfo (w); - } -@@ -9772,7 +9772,7 @@ print_debug_line_section (Dwfl_Module *d - { - get_uleb128 (u128, linep, lineendp); - if (n != standard_opcode_lengths[opcode]) -- putc_unlocked (',', stdout); -+ fputc (',', stdout); - printf (" %u", u128); - } - -@@ -10525,7 +10525,7 @@ print_debug_macinfo_section (Dwfl_Module - \nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n"), - elf_ndxscn (scn), section_name (ebl, shdr), - (uint64_t) shdr->sh_offset); -- putc_unlocked ('\n', stdout); -+ fputc ('\n', stdout); - - /* There is no function in libdw to iterate over the raw content of - the section but it is easy enough to do. */ -@@ -10687,7 +10687,7 @@ print_debug_macro_section (Dwfl_Module * - \nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n"), - elf_ndxscn (scn), section_name (ebl, shdr), - (uint64_t) shdr->sh_offset); -- putc_unlocked ('\n', stdout); -+ fputc ('\n', stdout); - - /* Get the source file information for all CUs. Uses same - datastructure as macinfo. But uses offset field to directly -@@ -10840,15 +10840,15 @@ print_debug_macro_section (Dwfl_Module * - goto invalid_data; - args--; - if (args > 0) -- putchar_unlocked (','); -+ putchar (','); - } - } - else - printf (_(" no arguments.")); -- putchar_unlocked ('\n'); -+ putchar ('\n'); - } - } -- putchar_unlocked ('\n'); -+ putchar ('\n'); - - int level = 1; - if (readp + 1 > readendp) -@@ -11025,14 +11025,14 @@ print_debug_macro_section (Dwfl_Module * - if (args > 0) - printf (", "); - } -- putchar_unlocked ('\n'); -+ putchar ('\n'); - } - - if (readp + 1 > readendp) - goto invalid_data; - opcode = *readp++; - if (opcode == 0) -- putchar_unlocked ('\n'); -+ putchar ('\n'); - } - } - } -@@ -11368,7 +11368,7 @@ print_debug_frame_hdr_section (Dwfl_Modu - /* +4 because of the 4 byte header of the section. */ - (uint64_t) shdr->sh_offset + 4 + eh_frame_ptr); - -- putchar_unlocked ('\n'); -+ putchar ('\n'); - } - - uint64_t fde_count = 0; -@@ -11546,7 +11546,7 @@ print_debug_exception_table (Dwfl_Module - else if (ar_disp != 0) - puts (" -> ???"); - else -- putchar_unlocked ('\n'); -+ putchar ('\n'); - ++u; - } - while (readp < action_table_end); -@@ -13200,19 +13200,19 @@ handle_core_note (Ebl *ebl, const GElf_N - nregloc == 0 ? nhdr->n_descsz : 0, - items, nitems); - if (colno != 0) -- putchar_unlocked ('\n'); -+ putchar ('\n'); - - colno = handle_core_registers (ebl, ebl->elf, desc + regs_offset, - reglocs, nregloc); - if (colno != 0) -- putchar_unlocked ('\n'); -+ putchar ('\n'); - } - - static void - handle_notes_data (Ebl *ebl, const GElf_Ehdr *ehdr, - GElf_Off start, Elf_Data *data) - { -- fputs_unlocked (_(" Owner Data size Type\n"), stdout); -+ fputs (_(" Owner Data size Type\n"), stdout); - - if (data == NULL) - goto bad_note; ---- a/src/size.c -+++ b/src/size.c -@@ -411,7 +411,7 @@ show_sysv (Elf *elf, const char *prefix, - maxlen = MAX (maxlen, (int) strlen (name)); - } - -- fputs_unlocked (fname, stdout); -+ fputs (fname, stdout); - if (prefix != NULL) - printf (_(" (ex %s)"), prefix); - printf (":\n%-*s %*s %*s\n", -@@ -483,7 +483,7 @@ show_sysv_one_line (Elf *elf) - continue; - - if (! first) -- fputs_unlocked (" + ", stdout); -+ fputs (" + ", stdout); - first = false; - - printf ((radix == radix_hex ? "%" PRIx64 "(%s)" -@@ -555,7 +555,7 @@ show_bsd (Elf *elf, const char *prefix, - fname); - if (prefix != NULL) - printf (_(" (ex %s)"), prefix); -- fputs_unlocked ("\n", stdout); -+ fputs ("\n", stdout); - - total_textsize += textsize; - total_datasize += datasize; -@@ -607,7 +607,7 @@ show_segments (Elf *elf, const char *ful - continue; - - if (! first) -- fputs_unlocked (" + ", stdout); -+ fputs (" + ", stdout); - first = false; - - printf (radix == radix_hex ? "%" PRIx64 "(%c%c%c)" ---- a/src/strings.c -+++ b/src/strings.c -@@ -345,8 +345,8 @@ process_chunk_mb (const char *fname, con - /* We found a match. */ - if (unlikely (fname != NULL)) - { -- fputs_unlocked (fname, stdout); -- fputs_unlocked (": ", stdout); -+ fputs (fname, stdout); -+ fputs (": ", stdout); - } - - if (unlikely (radix != radix_none)) -@@ -357,7 +357,7 @@ process_chunk_mb (const char *fname, con - - if (unlikely (*unprinted != NULL)) - { -- fputs_unlocked (*unprinted, stdout); -+ fputs (*unprinted, stdout); - free (*unprinted); - *unprinted = NULL; - } -@@ -366,8 +366,8 @@ process_chunk_mb (const char *fname, con - assume the file data is encoded in UCS-2/UTF-16 or - UCS-4/UTF-32 respectively we could convert the string. - But there is no such guarantee. */ -- fwrite_unlocked (start, 1, buf - start, stdout); -- putc_unlocked ('\n', stdout); -+ fwrite (start, 1, buf - start, stdout); -+ fputc ('\n', stdout); - } - - start = ++buf; -@@ -413,8 +413,8 @@ process_chunk (const char *fname, const - /* We found a match. */ - if (likely (fname != NULL)) - { -- fputs_unlocked (fname, stdout); -- fputs_unlocked (": ", stdout); -+ fputs (fname, stdout); -+ fputs (": ", stdout); - } - - if (likely (radix != radix_none)) -@@ -425,12 +425,12 @@ process_chunk (const char *fname, const - - if (unlikely (*unprinted != NULL)) - { -- fputs_unlocked (*unprinted, stdout); -+ fputs (*unprinted, stdout); - free (*unprinted); - *unprinted = NULL; - } -- fwrite_unlocked (start, 1, buf - start, stdout); -- putc_unlocked ('\n', stdout); -+ fwrite (start, 1, buf - start, stdout); -+ fputc ('\n', stdout); - } - - start = ++buf; ---- a/tests/showptable.c -+++ b/tests/showptable.c -@@ -111,11 +111,11 @@ main (int argc, char *argv[]) - (unsigned long long int) phdr->p_memsz, - (unsigned long long int) phdr->p_align); - -- putc_unlocked ((phdr->p_flags & PF_X) ? 'X' : ' ', stdout); -- putc_unlocked ((phdr->p_flags & PF_W) ? 'W' : ' ', stdout); -- putc_unlocked ((phdr->p_flags & PF_R) ? 'R' : ' ', stdout); -+ fputc ((phdr->p_flags & PF_X) ? 'X' : ' ', stdout); -+ fputc ((phdr->p_flags & PF_W) ? 'W' : ' ', stdout); -+ fputc ((phdr->p_flags & PF_R) ? 'R' : ' ', stdout); - -- putc_unlocked ('\n', stdout); -+ fputc ('\n', stdout); - - if (phdr->p_type == PT_INTERP) - { diff --git a/tools/elfutils/patches/100-portability.patch b/tools/elfutils/patches/100-portability.patch index c2d14e575f..a82cd69ba2 100644 --- a/tools/elfutils/patches/100-portability.patch +++ b/tools/elfutils/patches/100-portability.patch @@ -23,7 +23,7 @@ # Only available since automake 1.12 m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) AC_CHECK_TOOL([READELF], [readelf]) -@@ -635,6 +639,8 @@ AC_COMPILE_IFELSE([AC_LANG_SOURCE([])], +@@ -646,6 +650,8 @@ AC_COMPILE_IFELSE([AC_LANG_SOURCE([])], CFLAGS="$old_CFLAGS"]) AS_IF([test "x$ac_cv_fno_addrsig" = "xyes"], CFLAGS="$CFLAGS -fno-addrsig") @@ -34,9 +34,9 @@ LIBS="$saved_LIBS" --- a/lib/eu-config.h +++ b/lib/eu-config.h -@@ -59,14 +59,19 @@ - # define once(once_control, init_routine) init_routine() - #endif /* USE_LOCKS */ +@@ -31,14 +31,19 @@ + + #include "locks.h" -#include +#include @@ -55,7 +55,7 @@ #ifdef __i386__ # define internal_function __attribute__ ((regparm (3), stdcall)) -@@ -77,7 +82,7 @@ +@@ -49,7 +54,7 @@ #define internal_strong_alias(name, aliasname) \ extern __typeof (name) aliasname __attribute__ ((alias (#name))) internal_function; @@ -64,7 +64,7 @@ #define attribute_hidden \ __attribute__ ((visibility ("hidden"))) #else -@@ -166,7 +171,7 @@ asm (".section predict_data, \"aw\"; .pr +@@ -138,7 +143,7 @@ asm (".section predict_data, \"aw\"; .pr #endif /* Avoid PLT entries. */ @@ -203,7 +203,7 @@ +#include #include #include - + #include "eu-search.h" --- a/config/libdebuginfod.pc.in +++ b/config/libdebuginfod.pc.in @@ -8,5 +8,5 @@ Description: elfutils library to query d @@ -237,7 +237,7 @@ Requires.private: zlib @LIBZSTD@ --- a/libebl/eblopenbackend.c +++ b/libebl/eblopenbackend.c -@@ -200,8 +200,6 @@ static bool default_object_note (const c +@@ -202,8 +202,6 @@ static bool default_object_note (const c uint32_t descsz, const char *desc); static bool default_debugscn_p (const char *name); static bool default_copy_reloc_p (int reloc); @@ -246,7 +246,7 @@ static bool default_check_special_symbol (Elf *elf, const GElf_Sym *sym, const char *name, -@@ -253,8 +251,8 @@ fill_defaults (Ebl *result) +@@ -255,8 +253,8 @@ fill_defaults (Ebl *result) result->object_note = default_object_note; result->debugscn_p = default_debugscn_p; result->copy_reloc_p = default_copy_reloc_p; @@ -257,7 +257,7 @@ result->check_special_symbol = default_check_special_symbol; result->data_marker_symbol = default_data_marker_symbol; result->check_st_other_bits = default_check_st_other_bits; -@@ -636,8 +634,6 @@ default_copy_reloc_p (int reloc __attrib +@@ -638,8 +636,6 @@ default_copy_reloc_p (int reloc __attrib { return false; } diff --git a/tools/elfutils/patches/101-shared-conditional.patch b/tools/elfutils/patches/101-shared-conditional.patch index 800aa079a1..4eeee6a682 100644 --- a/tools/elfutils/patches/101-shared-conditional.patch +++ b/tools/elfutils/patches/101-shared-conditional.patch @@ -9,7 +9,7 @@ AC_CACHE_CHECK([whether gcc supports __attribute__((visibility()))], ac_cv_visibility, [dnl save_CFLAGS="$CFLAGS" -@@ -419,7 +421,10 @@ AS_HELP_STRING([--enable-install-elfh],[ +@@ -423,7 +425,10 @@ AS_HELP_STRING([--enable-install-elfh],[ AM_CONDITIONAL(INSTALL_ELFH, test "$install_elfh" = yes) AM_CONDITIONAL(BUILD_STATIC, [dnl @@ -132,7 +132,7 @@ libdebuginfod_a_SOURCES = debuginfod-client.c libdebuginfod_pic_a_SOURCES = debuginfod-client.c -@@ -111,12 +113,16 @@ $(LIBDEBUGINFOD_SONAME): $(srcdir)/libde +@@ -111,12 +113,17 @@ $(LIBDEBUGINFOD_SONAME): $(srcdir)/libde libdebuginfod.so: $(LIBDEBUGINFOD_SONAME) ln -fs $< $@ @@ -146,9 +146,10 @@ +else +libdebuginfod_a_LIBADD = $(foreach dep,$(wildcard $(libdebuginfod_so_LDLIBS:.so=.a)) $(LIBS:.so=.a),$(if $(findstring a,$(suffix $(dep))),$(addprefix $(dir $(dep)),$(shell cat $(basename $(dep)).manifest)),$(dep))) +endif - ++ uninstall: uninstall-am rm -f $(DESTDIR)$(libdir)/libdebuginfod-$(PACKAGE_VERSION).so + rm -f $(DESTDIR)$(libdir)/$(LIBDEBUGINFOD_SONAME) --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -50,7 +50,7 @@ check_PROGRAMS = arextract arsymtest new @@ -158,9 +159,9 @@ - buildid deleted deleted-lib.so aggregate_size peel_type \ + buildid aggregate_size peel_type \ vdsosyms \ - getsrc_die strptr newdata elfstrtab dwfl-proc-attach \ - elfshphehdr elfstrmerge dwelfgnucompressed elfgetchdr \ -@@ -180,7 +180,7 @@ TESTS = run-arextract.sh run-arsymtest.s + getsrc_die strptr newdata newzdata \ + elfstrtab dwfl-proc-attach \ +@@ -181,7 +181,7 @@ TESTS = run-arextract.sh run-arsymtest.s run-readelf-addr.sh run-readelf-str.sh \ run-readelf-multi-noline.sh \ run-readelf-types.sh \ @@ -168,10 +169,10 @@ + run-readelf-dwz-multi.sh run-allfcts-multi.sh \ run-linkmap-cut.sh run-aggregate-size.sh run-peel-type.sh \ vdsosyms run-readelf-A.sh \ - run-getsrc-die.sh run-strptr.sh newdata elfstrtab dwfl-proc-attach \ -@@ -284,6 +284,11 @@ funcretval_test__11_SOURCES = funcretval - TESTS += run-funcretval++11.sh - endif + run-getsrc-die.sh run-strptr.sh newdata newzdata \ +@@ -298,6 +298,11 @@ check_PROGRAMS += funcretval_test_struct + funcretval_test_struct_SOURCES = funcretval_test_struct.c + TESTS += run-funcretval-struct-native.sh +if BUILD_SHARED +check_PROGRAMS += deleted deleted-lib.so diff --git a/tools/elfutils/patches/110-objects-manifest.patch b/tools/elfutils/patches/110-objects-manifest.patch index 983331dfa7..35ef131190 100644 --- a/tools/elfutils/patches/110-objects-manifest.patch +++ b/tools/elfutils/patches/110-objects-manifest.patch @@ -39,7 +39,7 @@ MAINTAINERCLEANFILES = $(srcdir)/known-dwarf.h --- a/libdwfl/Makefile.am +++ b/libdwfl/Makefile.am -@@ -93,4 +93,10 @@ am_libdwfl_pic_a_OBJECTS = $(libdwfl_a_S +@@ -94,4 +94,10 @@ am_libdwfl_pic_a_OBJECTS = $(libdwfl_a_S noinst_HEADERS = libdwflP.h @@ -78,7 +78,7 @@ +MOSTLYCLEANFILES = $(am_libebl_pic_a_OBJECTS) $(EXTRA_libebl_a_DEPENDENCIES) --- a/backends/Makefile.am +++ b/backends/Makefile.am -@@ -119,4 +119,9 @@ am_libebl_backends_pic_a_OBJECTS = $(lib +@@ -122,4 +122,9 @@ am_libebl_backends_pic_a_OBJECTS = $(lib noinst_HEADERS = libebl_CPU.h common-reloc.c linux-core-note.c x86_corenote.c EXTRA_DIST = $(modules:=_reloc.def) @@ -119,9 +119,9 @@ CLEANFILES += $(am_libelf_pic_a_OBJECTS) libelf.so libelf.so.$(VERSION) --- a/lib/Makefile.am +++ b/lib/Makefile.am -@@ -41,3 +41,10 @@ noinst_HEADERS = fixedsizehash.h libeu.h - eu-config.h color.h printversion.h bpf.h \ - atomics.h stdatomic-fbsd.h dynamicsizehash_concurrent.h +@@ -42,3 +42,10 @@ noinst_HEADERS = fixedsizehash.h libeu.h + atomics.h stdatomic-fbsd.h dynamicsizehash_concurrent.h \ + eu-search.h locks.h EXTRA_DIST = dynamicsizehash.c dynamicsizehash_concurrent.c + +EXTRA_libeu_a_DEPENDENCIES = libeu.manifest