From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: In-Reply-To: <20200730190000.3332966-1-r.schwebel@pengutronix.de> MIME-Version: 1.0 Message-Id: From: Michael Olbrich Date: Mon, 03 Aug 2020 08:30:14 +0200 Subject: Re: [ptxdist] [APPLIED] libelf: version bump 0.176 -> 0.180 List-Id: PTXdist Development Mailing List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: ptxdist@pengutronix.de Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ptxdist-bounces@pengutronix.de Sender: "ptxdist" To: ptxdist@pengutronix.de Cc: Robert Schwebel Thanks, applied as 05d3ca083559903486ed883fffead6df987985cd. Michael [sent from post-receive hook] On Mon, 03 Aug 2020 08:30:14 +0200, Robert Schwebel wrote: > Adapt configure options accordingly. > > Since 0.180, the libebl_$ARCH.so libraries are compiled into libdw.so, > so they don't have to be installed separately any more. See upstream > commit 4f937e24dc7ad1820fc7c99a6dd6422657f14666 for details. > > The old patch series was ported from debian; most of the patches have > been applied upstream; from the new debian patch series for 0.180-1, > only the -Werror patch seems relevant to me, so I leave it inside. > > Signed-off-by: Robert Schwebel > Message-Id: <20200730190000.3332966-1-r.schwebel@pengutronix.de> > Signed-off-by: Michael Olbrich > > diff --git a/patches/elfutils-0.176/0001-hppa_backend.patch b/patches/elfutils-0.176/0001-hppa_backend.patch > deleted file mode 100644 > index dcb4f1eeb743..000000000000 > --- a/patches/elfutils-0.176/0001-hppa_backend.patch > +++ /dev/null > @@ -1,831 +0,0 @@ > -From: Michael Olbrich > -Date: Mon, 4 Mar 2019 13:20:35 +0100 > -Subject: [PATCH] hppa_backend > - > -Imported from elfutils_0.176-1.debian.tar.xz > - > -Signed-off-by: Michael Olbrich > ---- > - backends/Makefile.am | 8 +- > - backends/libebl_parisc.h | 9 ++ > - backends/parisc_init.c | 73 ++++++++++++++++ > - backends/parisc_regs.c | 159 ++++++++++++++++++++++++++++++++++ > - backends/parisc_reloc.def | 128 ++++++++++++++++++++++++++++ > - backends/parisc_retval.c | 213 ++++++++++++++++++++++++++++++++++++++++++++++ > - backends/parisc_symbol.c | 113 ++++++++++++++++++++++++ > - libelf/elf.h | 11 +++ > - 8 files changed, 712 insertions(+), 2 deletions(-) > - create mode 100644 backends/libebl_parisc.h > - create mode 100644 backends/parisc_init.c > - create mode 100644 backends/parisc_regs.c > - create mode 100644 backends/parisc_reloc.def > - create mode 100644 backends/parisc_retval.c > - create mode 100644 backends/parisc_symbol.c > - > -diff --git a/backends/Makefile.am b/backends/Makefile.am > -index 2126a2eca42e..5671a32c4210 100644 > ---- a/backends/Makefile.am > -+++ b/backends/Makefile.am > -@@ -33,12 +33,13 @@ AM_CPPFLAGS += -I$(top_srcdir)/libebl -I$(top_srcdir)/libasm \ > - > - > - modules = i386 sh x86_64 ia64 alpha arm aarch64 sparc ppc ppc64 s390 \ > -- tilegx m68k bpf riscv > -+ tilegx m68k bpf riscv parisc > - libebl_pic = libebl_i386_pic.a libebl_sh_pic.a libebl_x86_64_pic.a \ > - libebl_ia64_pic.a libebl_alpha_pic.a libebl_arm_pic.a \ > - libebl_aarch64_pic.a libebl_sparc_pic.a libebl_ppc_pic.a \ > - libebl_ppc64_pic.a libebl_s390_pic.a libebl_tilegx_pic.a \ > -- libebl_m68k_pic.a libebl_bpf_pic.a libebl_riscv_pic.a > -+ libebl_m68k_pic.a libebl_bpf_pic.a libebl_riscv_pic.a \ > -+ libebl_parisc_pic.a > - noinst_LIBRARIES = $(libebl_pic) > - noinst_DATA = $(libebl_pic:_pic.a=.so) > - > -@@ -136,6 +137,9 @@ riscv_SRCS = riscv_init.c riscv_symbol.c riscv_cfi.c riscv_regs.c \ > - libebl_riscv_pic_a_SOURCES = $(riscv_SRCS) > - am_libebl_riscv_pic_a_OBJECTS = $(riscv_SRCS:.c=.os) > - > -+parisc_SRCS = parisc_init.c parisc_symbol.c parisc_regs.c parisc_retval.c > -+libebl_parisc_pic_a_SOURCES = $(parisc_SRCS) > -+am_libebl_parisc_pic_a_OBJECTS = $(parisc_SRCS:.c=.os) > - > - libebl_%.so libebl_%.map: libebl_%_pic.a $(libelf) $(libdw) $(libeu) > - @rm -f $(@:.so=.map) > -diff --git a/backends/libebl_parisc.h b/backends/libebl_parisc.h > -new file mode 100644 > -index 000000000000..f473b793e533 > ---- /dev/null > -+++ b/backends/libebl_parisc.h > -@@ -0,0 +1,9 @@ > -+#ifndef _LIBEBL_HPPA_H > -+#define _LIBEBL_HPPA_H 1 > -+ > -+#include > -+ > -+extern int parisc_return_value_location_32(Dwarf_Die *, const Dwarf_Op **locp); > -+extern int parisc_return_value_location_64(Dwarf_Die *, const Dwarf_Op **locp); > -+ > -+#endif > -diff --git a/backends/parisc_init.c b/backends/parisc_init.c > -new file mode 100644 > -index 000000000000..f1e401cfe1d2 > ---- /dev/null > -+++ b/backends/parisc_init.c > -@@ -0,0 +1,73 @@ > -+/* Initialization of PA-RISC specific backend library. > -+ Copyright (C) 2002, 2005, 2006 Red Hat, Inc. > -+ This file is part of Red Hat elfutils. > -+ Written by Ulrich Drepper , 2002. > -+ > -+ Red Hat elfutils 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; version 2 of the License. > -+ > -+ Red Hat 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 Red Hat elfutils; if not, write to the Free Software Foundation, > -+ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. > -+ > -+ Red Hat elfutils is an included package of the Open Invention Network. > -+ An included package of the Open Invention Network is a package for which > -+ Open Invention Network licensees cross-license their patents. No patent > -+ license is granted, either expressly or impliedly, by designation as an > -+ included package. Should you wish to participate in the Open Invention > -+ Network licensing program, please visit www.openinventionnetwork.com > -+ . */ > -+ > -+#ifdef HAVE_CONFIG_H > -+# include > -+#endif > -+ > -+#define BACKEND parisc_ > -+#define RELOC_PREFIX R_PARISC_ > -+#include "libebl_CPU.h" > -+#include "libebl_parisc.h" > -+ > -+/* This defines the common reloc hooks based on parisc_reloc.def. */ > -+#include "common-reloc.c" > -+ > -+ > -+const char * > -+parisc_init (Elf *elf __attribute__ ((unused)), > -+ GElf_Half machine __attribute__ ((unused)), > -+ Ebl *eh, > -+ size_t ehlen) > -+{ > -+ int pa64 = 0; > -+ > -+ /* Check whether the Elf_BH object has a sufficent size. */ > -+ if (ehlen < sizeof (Ebl)) > -+ return NULL; > -+ > -+ if (elf) { > -+ GElf_Ehdr ehdr_mem; > -+ GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem); > -+ if (ehdr && (ehdr->e_flags & EF_PARISC_WIDE)) > -+ pa64 = 1; > -+ } > -+ /* We handle it. */ > -+ eh->name = "PA-RISC"; > -+ parisc_init_reloc (eh); > -+ HOOK (eh, reloc_simple_type); > -+ HOOK (eh, machine_flag_check); > -+ HOOK (eh, symbol_type_name); > -+ HOOK (eh, segment_type_name); > -+ HOOK (eh, section_type_name); > -+ HOOK (eh, register_info); > -+ if (pa64) > -+ eh->return_value_location = parisc_return_value_location_64; > -+ else > -+ eh->return_value_location = parisc_return_value_location_32; > -+ > -+ return MODVERSION; > -+} > -diff --git a/backends/parisc_regs.c b/backends/parisc_regs.c > -new file mode 100644 > -index 000000000000..3895f8eb00b6 > ---- /dev/null > -+++ b/backends/parisc_regs.c > -@@ -0,0 +1,159 @@ > -+/* Register names and numbers for PA-RISC DWARF. > -+ Copyright (C) 2005, 2006 Red Hat, Inc. > -+ This file is part of Red Hat elfutils. > -+ > -+ Red Hat elfutils 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; version 2 of the License. > -+ > -+ Red Hat 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 Red Hat elfutils; if not, write to the Free Software Foundation, > -+ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. > -+ > -+ Red Hat elfutils is an included package of the Open Invention Network. > -+ An included package of the Open Invention Network is a package for which > -+ Open Invention Network licensees cross-license their patents. No patent > -+ license is granted, either expressly or impliedly, by designation as an > -+ included package. Should you wish to participate in the Open Invention > -+ Network licensing program, please visit www.openinventionnetwork.com > -+ . */ > -+ > -+#ifdef HAVE_CONFIG_H > -+# include > -+#endif > -+ > -+#include > -+#include > -+ > -+#define BACKEND parisc_ > -+#include "libebl_CPU.h" > -+ > -+ssize_t > -+parisc_register_info (Ebl *ebl, int regno, char *name, size_t namelen, > -+ const char **prefix, const char **setname, > -+ int *bits, int *type) > -+{ > -+ int pa64 = 0; > -+ > -+ if (ebl->elf) { > -+ GElf_Ehdr ehdr_mem; > -+ GElf_Ehdr *ehdr = gelf_getehdr (ebl->elf, &ehdr_mem); > -+ if (ehdr->e_flags & EF_PARISC_WIDE) > -+ pa64 = 1; > -+ } > -+ > -+ int nregs = pa64 ? 127 : 128; > -+ > -+ if (name == NULL) > -+ return nregs; > -+ > -+ if (regno < 0 || regno >= nregs || namelen < 6) > -+ return -1; > -+ > -+ *prefix = "%"; > -+ > -+ if (regno < 32) > -+ { > -+ *setname = "integer"; > -+ *type = DW_ATE_signed; > -+ if (pa64) > -+ { > -+ *bits = 64; > -+ } > -+ else > -+ { > -+ *bits = 32; > -+ } > -+ } > -+ else if (regno == 32) > -+ { > -+ *setname = "special"; > -+ if (pa64) > -+ { > -+ *bits = 6; > -+ } > -+ else > -+ { > -+ *bits = 5; > -+ } > -+ *type = DW_ATE_unsigned; > -+ } > -+ else > -+ { > -+ *setname = "FPU"; > -+ *type = DW_ATE_float; > -+ if (pa64) > -+ { > -+ *bits = 64; > -+ } > -+ else > -+ { > -+ *bits = 32; > -+ } > -+ } > -+ > -+ if (regno < 33) { > -+ switch (regno) > -+ { > -+ case 0 ... 9: > -+ name[0] = 'r'; > -+ name[1] = regno + '0'; > -+ namelen = 2; > -+ break; > -+ case 10 ... 31: > -+ name[0] = 'r'; > -+ name[1] = regno / 10 + '0'; > -+ name[2] = regno % 10 + '0'; > -+ namelen = 3; > -+ break; > -+ case 32: > -+ *prefix = NULL; > -+ name[0] = 'S'; > -+ name[1] = 'A'; > -+ name[2] = 'R'; > -+ namelen = 3; > -+ break; > -+ } > -+ } > -+ else { > -+ if (pa64 && ((regno - 72) % 2)) { > -+ *setname = NULL; > -+ return 0; > -+ } > -+ > -+ switch (regno) > -+ { > -+ case 72 + 0 ... 72 + 11: > -+ name[0] = 'f'; > -+ name[1] = 'r'; > -+ name[2] = (regno + 8 - 72) / 2 + '0'; > -+ namelen = 3; > -+ if ((regno + 8 - 72) % 2) { > -+ name[3] = 'R'; > -+ namelen++; > -+ } > -+ break; > -+ case 72 + 12 ... 72 + 55: > -+ name[0] = 'f'; > -+ name[1] = 'r'; > -+ name[2] = (regno + 8 - 72) / 2 / 10 + '0'; > -+ name[3] = (regno + 8 - 72) / 2 % 10 + '0'; > -+ namelen = 4; > -+ if ((regno + 8 - 72) % 2) { > -+ name[4] = 'R'; > -+ namelen++; > -+ } > -+ break; > -+ default: > -+ *setname = NULL; > -+ return 0; > -+ } > -+ } > -+ name[namelen++] = '\0'; > -+ return namelen; > -+} > -diff --git a/backends/parisc_reloc.def b/backends/parisc_reloc.def > -new file mode 100644 > -index 000000000000..1f875bab33a0 > ---- /dev/null > -+++ b/backends/parisc_reloc.def > -@@ -0,0 +1,128 @@ > -+/* List the relocation types for PA-RISC. -*- C -*- > -+ Copyright (C) 2005 Red Hat, Inc. > -+ This file is part of Red Hat elfutils. > -+ > -+ Red Hat elfutils 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; version 2 of the License. > -+ > -+ Red Hat 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 Red Hat elfutils; if not, write to the Free Software Foundation, > -+ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. > -+ > -+ Red Hat elfutils is an included package of the Open Invention Network. > -+ An included package of the Open Invention Network is a package for which > -+ Open Invention Network licensees cross-license their patents. No patent > -+ license is granted, either expressly or impliedly, by designation as an > -+ included package. Should you wish to participate in the Open Invention > -+ Network licensing program, please visit www.openinventionnetwork.com > -+ . */ > -+ > -+/* NAME, REL|EXEC|DYN */ > -+ > -+RELOC_TYPE (NONE, EXEC|DYN) > -+RELOC_TYPE (DIR32, REL|EXEC|DYN) > -+RELOC_TYPE (DIR21L, REL|EXEC|DYN) > -+RELOC_TYPE (DIR17R, REL) > -+RELOC_TYPE (DIR17F, REL) > -+RELOC_TYPE (DIR14R, REL|DYN) > -+RELOC_TYPE (PCREL32, REL) > -+RELOC_TYPE (PCREL21L, REL) > -+RELOC_TYPE (PCREL17R, REL) > -+RELOC_TYPE (PCREL17F, REL) > -+RELOC_TYPE (PCREL14R, REL|EXEC) > -+RELOC_TYPE (DPREL21L, REL) > -+RELOC_TYPE (DPREL14WR, REL) > -+RELOC_TYPE (DPREL14DR, REL) > -+RELOC_TYPE (DPREL14R, REL) > -+RELOC_TYPE (GPREL21L, 0) > -+RELOC_TYPE (GPREL14R, 0) > -+RELOC_TYPE (LTOFF21L, REL) > -+RELOC_TYPE (LTOFF14R, REL) > -+RELOC_TYPE (DLTIND14F, 0) > -+RELOC_TYPE (SETBASE, 0) > -+RELOC_TYPE (SECREL32, REL) > -+RELOC_TYPE (BASEREL21L, 0) > -+RELOC_TYPE (BASEREL17R, 0) > -+RELOC_TYPE (BASEREL14R, 0) > -+RELOC_TYPE (SEGBASE, 0) > -+RELOC_TYPE (SEGREL32, REL) > -+RELOC_TYPE (PLTOFF21L, 0) > -+RELOC_TYPE (PLTOFF14R, 0) > -+RELOC_TYPE (PLTOFF14F, 0) > -+RELOC_TYPE (LTOFF_FPTR32, 0) > -+RELOC_TYPE (LTOFF_FPTR21L, 0) > -+RELOC_TYPE (LTOFF_FPTR14R, 0) > -+RELOC_TYPE (FPTR64, 0) > -+RELOC_TYPE (PLABEL32, REL|DYN) > -+RELOC_TYPE (PCREL64, 0) > -+RELOC_TYPE (PCREL22C, 0) > -+RELOC_TYPE (PCREL22F, 0) > -+RELOC_TYPE (PCREL14WR, 0) > -+RELOC_TYPE (PCREL14DR, 0) > -+RELOC_TYPE (PCREL16F, 0) > -+RELOC_TYPE (PCREL16WF, 0) > -+RELOC_TYPE (PCREL16DF, 0) > -+RELOC_TYPE (DIR64, REL|DYN) > -+RELOC_TYPE (DIR14WR, REL) > -+RELOC_TYPE (DIR14DR, REL) > -+RELOC_TYPE (DIR16F, REL) > -+RELOC_TYPE (DIR16WF, REL) > -+RELOC_TYPE (DIR16DF, REL) > -+RELOC_TYPE (GPREL64, 0) > -+RELOC_TYPE (GPREL14WR, 0) > -+RELOC_TYPE (GPREL14DR, 0) > -+RELOC_TYPE (GPREL16F, 0) > -+RELOC_TYPE (GPREL16WF, 0) > -+RELOC_TYPE (GPREL16DF, 0) > -+RELOC_TYPE (LTOFF64, 0) > -+RELOC_TYPE (LTOFF14WR, 0) > -+RELOC_TYPE (LTOFF14DR, 0) > -+RELOC_TYPE (LTOFF16F, 0) > -+RELOC_TYPE (LTOFF16WF, 0) > -+RELOC_TYPE (LTOFF16DF, 0) > -+RELOC_TYPE (SECREL64, 0) > -+RELOC_TYPE (BASEREL14WR, 0) > -+RELOC_TYPE (BASEREL14DR, 0) > -+RELOC_TYPE (SEGREL64, 0) > -+RELOC_TYPE (PLTOFF14WR, 0) > -+RELOC_TYPE (PLTOFF14DR, 0) > -+RELOC_TYPE (PLTOFF16F, 0) > -+RELOC_TYPE (PLTOFF16WF, 0) > -+RELOC_TYPE (PLTOFF16DF, 0) > -+RELOC_TYPE (LTOFF_FPTR64, 0) > -+RELOC_TYPE (LTOFF_FPTR14WR, 0) > -+RELOC_TYPE (LTOFF_FPTR14DR, 0) > -+RELOC_TYPE (LTOFF_FPTR16F, 0) > -+RELOC_TYPE (LTOFF_FPTR16WF, 0) > -+RELOC_TYPE (LTOFF_FPTR16DF, 0) > -+RELOC_TYPE (COPY, EXEC) > -+RELOC_TYPE (IPLT, EXEC|DYN) > -+RELOC_TYPE (EPLT, 0) > -+RELOC_TYPE (TPREL32, DYN) > -+RELOC_TYPE (TPREL21L, 0) > -+RELOC_TYPE (TPREL14R, 0) > -+RELOC_TYPE (LTOFF_TP21L, 0) > -+RELOC_TYPE (LTOFF_TP14R, 0) > -+RELOC_TYPE (LTOFF_TP14F, 0) > -+RELOC_TYPE (TPREL64, 0) > -+RELOC_TYPE (TPREL14WR, 0) > -+RELOC_TYPE (TPREL14DR, 0) > -+RELOC_TYPE (TPREL16F, 0) > -+RELOC_TYPE (TPREL16WF, 0) > -+RELOC_TYPE (TPREL16DF, 0) > -+RELOC_TYPE (LTOFF_TP64, 0) > -+RELOC_TYPE (LTOFF_TP14WR, 0) > -+RELOC_TYPE (LTOFF_TP14DR, 0) > -+RELOC_TYPE (LTOFF_TP16F, 0) > -+RELOC_TYPE (LTOFF_TP16WF, 0) > -+RELOC_TYPE (LTOFF_TP16DF, 0) > -+RELOC_TYPE (TLS_DTPMOD32, DYN) > -+RELOC_TYPE (TLS_DTPMOD64, DYN) > -+ > -+#define NO_RELATIVE_RELOC 1 > -diff --git a/backends/parisc_retval.c b/backends/parisc_retval.c > -new file mode 100644 > -index 000000000000..df7ec3a06e85 > ---- /dev/null > -+++ b/backends/parisc_retval.c > -@@ -0,0 +1,213 @@ > -+/* Function return value location for Linux/PA-RISC ABI. > -+ Copyright (C) 2005 Red Hat, Inc. > -+ This file is part of Red Hat elfutils. > -+ > -+ Red Hat elfutils 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; version 2 of the License. > -+ > -+ Red Hat 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 Red Hat elfutils; if not, write to the Free Software Foundation, > -+ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. > -+ > -+ Red Hat elfutils is an included package of the Open Invention Network. > -+ An included package of the Open Invention Network is a package for which > -+ Open Invention Network licensees cross-license their patents. No patent > -+ license is granted, either expressly or impliedly, by designation as an > -+ included package. Should you wish to participate in the Open Invention > -+ Network licensing program, please visit www.openinventionnetwork.com > -+ . */ > -+ > -+#ifdef HAVE_CONFIG_H > -+# include > -+#endif > -+ > -+#include > -+#include > -+ > -+#define BACKEND parisc_ > -+#include "libebl_CPU.h" > -+#include "libebl_parisc.h" > -+ > -+/* %r28, or pair %r28, %r29. */ > -+static const Dwarf_Op loc_intreg32[] = > -+ { > -+ { .atom = DW_OP_reg28 }, { .atom = DW_OP_piece, .number = 4 }, > -+ { .atom = DW_OP_reg29 }, { .atom = DW_OP_piece, .number = 4 }, > -+ }; > -+ > -+static const Dwarf_Op loc_intreg[] = > -+ { > -+ { .atom = DW_OP_reg28 }, { .atom = DW_OP_piece, .number = 8 }, > -+ { .atom = DW_OP_reg29 }, { .atom = DW_OP_piece, .number = 8 }, > -+ }; > -+#define nloc_intreg 1 > -+#define nloc_intregpair 4 > -+ > -+/* %fr4L, or pair %fr4L, %fr4R on pa-32 */ > -+static const Dwarf_Op loc_fpreg32[] = > -+ { > -+ { .atom = DW_OP_regx, .number = 72 }, { .atom = DW_OP_piece, .number = 4 }, > -+ { .atom = DW_OP_regx, .number = 73 }, { .atom = DW_OP_piece, .number = 4 }, > -+ }; > -+#define nloc_fpreg32 2 > -+#define nloc_fpregpair32 4 > -+ > -+/* $fr4 */ > -+static const Dwarf_Op loc_fpreg[] = > -+ { > -+ { .atom = DW_OP_regx, .number = 72 }, > -+ }; > -+#define nloc_fpreg 1 > -+ > -+#if 0 > -+/* The return value is a structure and is actually stored in stack space > -+ passed in a hidden argument by the caller. Address of the location is stored > -+ in %r28 before function call, but it may be changed by function. */ > -+static const Dwarf_Op loc_aggregate[] = > -+ { > -+ { .atom = DW_OP_breg28 }, > -+ }; > -+#define nloc_aggregate 1 > -+#endif > -+ > -+static int > -+parisc_return_value_location_ (Dwarf_Die *functypedie, const Dwarf_Op **locp, int pa64) > -+{ > -+ Dwarf_Word regsize = pa64 ? 8 : 4; > -+ > -+ /* 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. */ > -+ > -+ case DW_TAG_base_type: > -+ case DW_TAG_enumeration_type: > -+ case DW_TAG_pointer_type: > -+ case DW_TAG_ptr_to_member_type: > -+ { > -+ Dwarf_Word size; > -+ if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_byte_size, > -+ &attr_mem), &size) != 0) > -+ { > -+ if (tag == DW_TAG_pointer_type || tag == DW_TAG_ptr_to_member_type) > -+ size = 4; > -+ 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; > -+ > -+ if (encoding == DW_ATE_float) > -+ { > -+ if (pa64) { > -+ *locp = loc_fpreg; > -+ if (size <= 8) > -+ return nloc_fpreg; > -+ } > -+ else { > -+ *locp = loc_fpreg32; > -+ if (size <= 4) > -+ return nloc_fpreg32; > -+ else if (size <= 8) > -+ return nloc_fpregpair32; > -+ } > -+ goto aggregate; > -+ } > -+ } > -+ if (pa64) > -+ *locp = loc_intreg; > -+ else > -+ *locp = loc_intreg32; > -+ if (size <= regsize) > -+ return nloc_intreg; > -+ if (size <= 2 * regsize) > -+ return nloc_intregpair; > -+ > -+ /* Else fall through. */ > -+ } > -+ > -+ case DW_TAG_structure_type: > -+ case DW_TAG_class_type: > -+ case DW_TAG_union_type: > -+ case DW_TAG_array_type: > -+ aggregate: { > -+ Dwarf_Word size; > -+ if (dwarf_aggregate_size (typedie, &size) != 0) > -+ return -1; > -+ if (pa64) > -+ *locp = loc_intreg; > -+ else > -+ *locp = loc_intreg32; > -+ if (size <= regsize) > -+ return nloc_intreg; > -+ if (size <= 2 * regsize) > -+ return nloc_intregpair; > -+#if 0 > -+ /* there should be some way to know this location... But I do not see it. */ > -+ *locp = loc_aggregate; > -+ return nloc_aggregate; > -+#endif > -+ /* fall through. */ > -+ } > -+ } > -+ > -+ /* 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; > -+} > -+ > -+int > -+parisc_return_value_location_32 (Dwarf_Die *functypedie, const Dwarf_Op **locp) > -+{ > -+ return parisc_return_value_location_ (functypedie, locp, 0); > -+} > -+ > -+int > -+parisc_return_value_location_64 (Dwarf_Die *functypedie, const Dwarf_Op **locp) > -+{ > -+ return parisc_return_value_location_ (functypedie, locp, 1); > -+} > -+ > -diff --git a/backends/parisc_symbol.c b/backends/parisc_symbol.c > -new file mode 100644 > -index 000000000000..5754bd8a2384 > ---- /dev/null > -+++ b/backends/parisc_symbol.c > -@@ -0,0 +1,113 @@ > -+/* PA-RISC specific symbolic name handling. > -+ Copyright (C) 2002, 2005 Red Hat, Inc. > -+ This file is part of Red Hat elfutils. > -+ Written by Ulrich Drepper , 2002. > -+ > -+ Red Hat elfutils 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; version 2 of the License. > -+ > -+ Red Hat 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 Red Hat elfutils; if not, write to the Free Software Foundation, > -+ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. > -+ > -+ Red Hat elfutils is an included package of the Open Invention Network. > -+ An included package of the Open Invention Network is a package for which > -+ Open Invention Network licensees cross-license their patents. No patent > -+ license is granted, either expressly or impliedly, by designation as an > -+ included package. Should you wish to participate in the Open Invention > -+ Network licensing program, please visit www.openinventionnetwork.com > -+ . */ > -+ > -+#ifdef HAVE_CONFIG_H > -+# include > -+#endif > -+ > -+#include > -+#include > -+ > -+#define BACKEND parisc_ > -+#include "libebl_CPU.h" > -+ > -+const char * > -+parisc_segment_type_name (int segment, char *buf __attribute__ ((unused)), > -+ size_t len __attribute__ ((unused))) > -+{ > -+ switch (segment) > -+ { > -+ case PT_PARISC_ARCHEXT: > -+ return "PARISC_ARCHEXT"; > -+ case PT_PARISC_UNWIND: > -+ return "PARISC_UNWIND"; > -+ default: > -+ break; > -+ } > -+ return NULL; > -+} > -+ > -+/* Return symbolic representation of symbol type. */ > -+const char * > -+parisc_symbol_type_name(int symbol, char *buf __attribute__ ((unused)), > -+ size_t len __attribute__ ((unused))) > -+{ > -+ if (symbol == STT_PARISC_MILLICODE) > -+ return "PARISC_MILLI"; > -+ return NULL; > -+} > -+ > -+/* Return symbolic representation of section type. */ > -+const char * > -+parisc_section_type_name (int type, > -+ char *buf __attribute__ ((unused)), > -+ size_t len __attribute__ ((unused))) > -+{ > -+ switch (type) > -+ { > -+ case SHT_PARISC_EXT: > -+ return "PARISC_EXT"; > -+ case SHT_PARISC_UNWIND: > -+ return "PARISC_UNWIND"; > -+ case SHT_PARISC_DOC: > -+ return "PARISC_DOC"; > -+ } > -+ > -+ return NULL; > -+} > -+ > -+/* Check whether machine flags are valid. */ > -+bool > -+parisc_machine_flag_check (GElf_Word flags) > -+{ > -+ if (flags &~ (EF_PARISC_TRAPNIL | EF_PARISC_EXT | EF_PARISC_LSB | > -+ EF_PARISC_WIDE | EF_PARISC_NO_KABP | > -+ EF_PARISC_LAZYSWAP | EF_PARISC_ARCH)) > -+ return 0; > -+ > -+ GElf_Word arch = flags & EF_PARISC_ARCH; > -+ > -+ return ((arch == EFA_PARISC_1_0) || (arch == EFA_PARISC_1_1) || > -+ (arch == EFA_PARISC_2_0)); > -+} > -+ > -+/* Check for the simple reloc types. */ > -+Elf_Type > -+parisc_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type, > -+ int *addsub __attribute__ ((unused))) > -+{ > -+ switch (type) > -+ { > -+ case R_PARISC_DIR64: > -+ case R_PARISC_SECREL64: > -+ return ELF_T_XWORD; > -+ case R_PARISC_DIR32: > -+ case R_PARISC_SECREL32: > -+ return ELF_T_WORD; > -+ default: > -+ return ELF_T_NUM; > -+ } > -+} > -diff --git a/libelf/elf.h b/libelf/elf.h > -index 75043bcbf900..631005418650 100644 > ---- a/libelf/elf.h > -+++ b/libelf/elf.h > -@@ -2155,16 +2155,24 @@ enum > - #define R_PARISC_PCREL17F 12 /* 17 bits of rel. address. */ > - #define R_PARISC_PCREL14R 14 /* Right 14 bits of rel. address. */ > - #define R_PARISC_DPREL21L 18 /* Left 21 bits of rel. address. */ > -+#define R_PARISC_DPREL14WR 19 > -+#define R_PARISC_DPREL14DR 20 > - #define R_PARISC_DPREL14R 22 /* Right 14 bits of rel. address. */ > - #define R_PARISC_GPREL21L 26 /* GP-relative, left 21 bits. */ > - #define R_PARISC_GPREL14R 30 /* GP-relative, right 14 bits. */ > - #define R_PARISC_LTOFF21L 34 /* LT-relative, left 21 bits. */ > - #define R_PARISC_LTOFF14R 38 /* LT-relative, right 14 bits. */ > -+#define R_PARISC_DLTIND14F 39 > -+#define R_PARISC_SETBASE 40 > - #define R_PARISC_SECREL32 41 /* 32 bits section rel. address. */ > -+#define R_PARISC_BASEREL21L 42 > -+#define R_PARISC_BASEREL17R 43 > -+#define R_PARISC_BASEREL14R 46 > - #define R_PARISC_SEGBASE 48 /* No relocation, set segment base. */ > - #define R_PARISC_SEGREL32 49 /* 32 bits segment rel. address. */ > - #define R_PARISC_PLTOFF21L 50 /* PLT rel. address, left 21 bits. */ > - #define R_PARISC_PLTOFF14R 54 /* PLT rel. address, right 14 bits. */ > -+#define R_PARISC_PLTOFF14F 55 > - #define R_PARISC_LTOFF_FPTR32 57 /* 32 bits LT-rel. function pointer. */ > - #define R_PARISC_LTOFF_FPTR21L 58 /* LT-rel. fct ptr, left 21 bits. */ > - #define R_PARISC_LTOFF_FPTR14R 62 /* LT-rel. fct ptr, right 14 bits. */ > -@@ -2173,6 +2181,7 @@ enum > - #define R_PARISC_PLABEL21L 66 /* Left 21 bits of fdesc address. */ > - #define R_PARISC_PLABEL14R 70 /* Right 14 bits of fdesc address. */ > - #define R_PARISC_PCREL64 72 /* 64 bits PC-rel. address. */ > -+#define R_PARISC_PCREL22C 73 > - #define R_PARISC_PCREL22F 74 /* 22 bits PC-rel. address. */ > - #define R_PARISC_PCREL14WR 75 /* PC-rel. address, right 14 bits. */ > - #define R_PARISC_PCREL14DR 76 /* PC rel. address, right 14 bits. */ > -@@ -2198,6 +2207,8 @@ enum > - #define R_PARISC_LTOFF16WF 102 /* 16 bits LT-rel. address. */ > - #define R_PARISC_LTOFF16DF 103 /* 16 bits LT-rel. address. */ > - #define R_PARISC_SECREL64 104 /* 64 bits section rel. address. */ > -+#define R_PARISC_BASEREL14WR 107 > -+#define R_PARISC_BASEREL14DR 108 > - #define R_PARISC_SEGREL64 112 /* 64 bits segment rel. address. */ > - #define R_PARISC_PLTOFF14WR 115 /* PLT-rel. address, right 14 bits. */ > - #define R_PARISC_PLTOFF14DR 116 /* PLT-rel. address, right 14 bits. */ > diff --git a/patches/elfutils-0.176/0002-arm_backend.patch b/patches/elfutils-0.176/0002-arm_backend.patch > deleted file mode 100644 > index 0c19e2968125..000000000000 > --- a/patches/elfutils-0.176/0002-arm_backend.patch > +++ /dev/null > @@ -1,620 +0,0 @@ > -From: Michael Olbrich > -Date: Mon, 4 Mar 2019 13:20:36 +0100 > -Subject: [PATCH] arm_backend > - > -Imported from elfutils_0.176-1.debian.tar.xz > - > -Signed-off-by: Michael Olbrich > ---- > - backends/arm_init.c | 18 ++++- > - backends/arm_regs.c | 132 ++++++++++++++++++++++++++++++++++++ > - backends/arm_retval.c | 43 +++++++++++- > - backends/libebl_arm.h | 9 +++ > - libelf/elf.h | 11 +++ > - tests/run-addrcfi.sh | 93 ++++++++++++++++++++++++- > - tests/run-allregs.sh | 95 +++++++++++++++++++++++++- > - tests/run-readelf-mixed-corenote.sh | 11 ++- > - 8 files changed, 400 insertions(+), 12 deletions(-) > - create mode 100644 backends/libebl_arm.h > - > -diff --git a/backends/arm_init.c b/backends/arm_init.c > -index f2b1b11ea5bb..1b71f1615e6d 100644 > ---- a/backends/arm_init.c > -+++ b/backends/arm_init.c > -@@ -35,20 +35,31 @@ > - #define RELOC_PREFIX R_ARM_ > - #include "libebl_CPU.h" > - > -+#include "libebl_arm.h" > -+ > - /* This defines the common reloc hooks based on arm_reloc.def. */ > - #include "common-reloc.c" > - > - > - const char * > --arm_init (Elf *elf __attribute__ ((unused)), > -+arm_init (Elf *elf, > - GElf_Half machine __attribute__ ((unused)), > - Ebl *eh, > - size_t ehlen) > - { > -+ int soft_float = 0; > -+ > - /* Check whether the Elf_BH object has a sufficent size. */ > - if (ehlen < sizeof (Ebl)) > - return NULL; > - > -+ if (elf) { > -+ GElf_Ehdr ehdr_mem; > -+ GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem); > -+ if (ehdr && (ehdr->e_flags & EF_ARM_SOFT_FLOAT)) > -+ soft_float = 1; > -+ } > -+ > - /* We handle it. */ > - eh->name = "ARM"; > - arm_init_reloc (eh); > -@@ -60,7 +71,10 @@ arm_init (Elf *elf __attribute__ ((unused)), > - HOOK (eh, core_note); > - HOOK (eh, auxv_info); > - HOOK (eh, check_object_attribute); > -- HOOK (eh, return_value_location); > -+ if (soft_float) > -+ eh->return_value_location = arm_return_value_location_soft; > -+ else > -+ eh->return_value_location = arm_return_value_location_hard; > - HOOK (eh, abi_cfi); > - HOOK (eh, check_reloc_target_type); > - HOOK (eh, symbol_type_name); > -diff --git a/backends/arm_regs.c b/backends/arm_regs.c > -index a46a4c9982cc..418c93180b31 100644 > ---- a/backends/arm_regs.c > -+++ b/backends/arm_regs.c > -@@ -31,6 +31,7 @@ > - #endif > - > - #include > -+#include > - #include > - > - #define BACKEND arm_ > -@@ -76,6 +77,9 @@ arm_register_info (Ebl *ebl __attribute__ ((unused)), > - break; > - > - case 16 + 0 ... 16 + 7: > -+ /* AADWARF says that there are no registers in that range, > -+ * but gcc maps FPA registers here > -+ */ > - regno += 96 - 16; > - FALLTHROUGH; > - case 96 + 0 ... 96 + 7: > -@@ -87,11 +91,139 @@ arm_register_info (Ebl *ebl __attribute__ ((unused)), > - namelen = 2; > - break; > - > -+ case 64 + 0 ... 64 + 9: > -+ *setname = "VFP"; > -+ *bits = 32; > -+ *type = DW_ATE_float; > -+ name[0] = 's'; > -+ name[1] = regno - 64 + '0'; > -+ namelen = 2; > -+ break; > -+ > -+ case 64 + 10 ... 64 + 31: > -+ *setname = "VFP"; > -+ *bits = 32; > -+ *type = DW_ATE_float; > -+ name[0] = 's'; > -+ name[1] = (regno - 64) / 10 + '0'; > -+ name[2] = (regno - 64) % 10 + '0'; > -+ namelen = 3; > -+ break; > -+ > -+ case 104 + 0 ... 104 + 7: > -+ /* XXX TODO: > -+ * This can be either intel wireless MMX general purpose/control > -+ * registers or xscale accumulator, which have different usage. > -+ * We only have the intel wireless MMX here now. > -+ * The name needs to be changed for the xscale accumulator too. */ > -+ *setname = "MMX"; > -+ *type = DW_ATE_unsigned; > -+ *bits = 32; > -+ memcpy(name, "wcgr", 4); > -+ name[4] = regno - 104 + '0'; > -+ namelen = 5; > -+ break; > -+ > -+ case 112 + 0 ... 112 + 9: > -+ *setname = "MMX"; > -+ *type = DW_ATE_unsigned; > -+ *bits = 64; > -+ name[0] = 'w'; > -+ name[1] = 'r'; > -+ name[2] = regno - 112 + '0'; > -+ namelen = 3; > -+ break; > -+ > -+ case 112 + 10 ... 112 + 15: > -+ *setname = "MMX"; > -+ *type = DW_ATE_unsigned; > -+ *bits = 64; > -+ name[0] = 'w'; > -+ name[1] = 'r'; > -+ name[2] = '1'; > -+ name[3] = regno - 112 - 10 + '0'; > -+ namelen = 4; > -+ break; > -+ > - case 128: > -+ *setname = "state"; > - *type = DW_ATE_unsigned; > - return stpcpy (name, "spsr") + 1 - name; > - > -+ case 129: > -+ *setname = "state"; > -+ *type = DW_ATE_unsigned; > -+ return stpcpy(name, "spsr_fiq") + 1 - name; > -+ > -+ case 130: > -+ *setname = "state"; > -+ *type = DW_ATE_unsigned; > -+ return stpcpy(name, "spsr_irq") + 1 - name; > -+ > -+ case 131: > -+ *setname = "state"; > -+ *type = DW_ATE_unsigned; > -+ return stpcpy(name, "spsr_abt") + 1 - name; > -+ > -+ case 132: > -+ *setname = "state"; > -+ *type = DW_ATE_unsigned; > -+ return stpcpy(name, "spsr_und") + 1 - name; > -+ > -+ case 133: > -+ *setname = "state"; > -+ *type = DW_ATE_unsigned; > -+ return stpcpy(name, "spsr_svc") + 1 - name; > -+ > -+ case 144 ... 150: > -+ *setname = "integer"; > -+ *type = DW_ATE_signed; > -+ *bits = 32; > -+ return sprintf(name, "r%d_usr", regno - 144 + 8) + 1; > -+ > -+ case 151 ... 157: > -+ *setname = "integer"; > -+ *type = DW_ATE_signed; > -+ *bits = 32; > -+ return sprintf(name, "r%d_fiq", regno - 151 + 8) + 1; > -+ > -+ case 158 ... 159: > -+ *setname = "integer"; > -+ *type = DW_ATE_signed; > -+ *bits = 32; > -+ return sprintf(name, "r%d_irq", regno - 158 + 13) + 1; > -+ > -+ case 160 ... 161: > -+ *setname = "integer"; > -+ *type = DW_ATE_signed; > -+ *bits = 32; > -+ return sprintf(name, "r%d_abt", regno - 160 + 13) + 1; > -+ > -+ case 162 ... 163: > -+ *setname = "integer"; > -+ *type = DW_ATE_signed; > -+ *bits = 32; > -+ return sprintf(name, "r%d_und", regno - 162 + 13) + 1; > -+ > -+ case 164 ... 165: > -+ *setname = "integer"; > -+ *type = DW_ATE_signed; > -+ *bits = 32; > -+ return sprintf(name, "r%d_svc", regno - 164 + 13) + 1; > -+ > -+ case 192 ... 199: > -+ *setname = "MMX"; > -+ *bits = 32; > -+ *type = DW_ATE_unsigned; > -+ name[0] = 'w'; > -+ name[1] = 'c'; > -+ name[2] = regno - 192 + '0'; > -+ namelen = 3; > -+ break; > -+ > - case 256 + 0 ... 256 + 9: > -+ /* XXX TODO: Neon also uses those registers and can contain > -+ * both float and integers */ > - *setname = "VFP"; > - *type = DW_ATE_float; > - *bits = 64; > -diff --git a/backends/arm_retval.c b/backends/arm_retval.c > -index 1c28f016b5bc..313e4eb266a3 100644 > ---- a/backends/arm_retval.c > -+++ b/backends/arm_retval.c > -@@ -48,6 +48,13 @@ static const Dwarf_Op loc_intreg[] = > - #define nloc_intreg 1 > - #define nloc_intregs(n) (2 * (n)) > - > -+/* f1 */ /* XXX TODO: f0 can also have number 96 if program was compiled with -mabi=aapcs */ > -+static const Dwarf_Op loc_fpreg[] = > -+ { > -+ { .atom = DW_OP_reg16 }, > -+ }; > -+#define nloc_fpreg 1 > -+ > - /* 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 r0. */ > -@@ -58,8 +65,9 @@ static const Dwarf_Op loc_aggregate[] = > - #define nloc_aggregate 1 > - > - > --int > --arm_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) > -+static int > -+arm_return_value_location_ (Dwarf_Die *functypedie, const Dwarf_Op **locp, > -+ int soft_float) > - { > - /* Start with the function's type, and get the DW_AT_type attribute, > - which is the type of the return value. */ > -@@ -98,6 +106,21 @@ arm_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) > - 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; > -+ > -+ if ((encoding == DW_ATE_float) && !soft_float) > -+ { > -+ *locp = loc_fpreg; > -+ if (size <= 8) > -+ return nloc_fpreg; > -+ goto aggregate; > -+ } > -+ } > - if (size <= 16) > - { > - intreg: > -@@ -106,6 +129,7 @@ arm_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) > - } > - > - aggregate: > -+ /* XXX TODO sometimes aggregates are returned in r0 (-mabi=aapcs) */ > - *locp = loc_aggregate; > - return nloc_aggregate; > - } > -@@ -125,3 +149,18 @@ arm_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) > - DWARF and might be valid. */ > - return -2; > - } > -+ > -+/* return location for -mabi=apcs-gnu -msoft-float */ > -+int > -+arm_return_value_location_soft (Dwarf_Die *functypedie, const Dwarf_Op **locp) > -+{ > -+ return arm_return_value_location_ (functypedie, locp, 1); > -+} > -+ > -+/* return location for -mabi=apcs-gnu -mhard-float (current default) */ > -+int > -+arm_return_value_location_hard (Dwarf_Die *functypedie, const Dwarf_Op **locp) > -+{ > -+ return arm_return_value_location_ (functypedie, locp, 0); > -+} > -+ > -diff --git a/backends/libebl_arm.h b/backends/libebl_arm.h > -new file mode 100644 > -index 000000000000..c00770c2e887 > ---- /dev/null > -+++ b/backends/libebl_arm.h > -@@ -0,0 +1,9 @@ > -+#ifndef _LIBEBL_ARM_H > -+#define _LIBEBL_ARM_H 1 > -+ > -+#include > -+ > -+extern int arm_return_value_location_soft(Dwarf_Die *, const Dwarf_Op **locp); > -+extern int arm_return_value_location_hard(Dwarf_Die *, const Dwarf_Op **locp); > -+ > -+#endif > -diff --git a/libelf/elf.h b/libelf/elf.h > -index 631005418650..5dc632b73a3b 100644 > ---- a/libelf/elf.h > -+++ b/libelf/elf.h > -@@ -2694,6 +2694,9 @@ enum > - #define EF_ARM_EABI_VER4 0x04000000 > - #define EF_ARM_EABI_VER5 0x05000000 > - > -+/* EI_OSABI values */ > -+#define ELFOSABI_ARM_AEABI 64 /* Contains symbol versioning. */ > -+ > - /* Additional symbol types for Thumb. */ > - #define STT_ARM_TFUNC STT_LOPROC /* A Thumb function. */ > - #define STT_ARM_16BIT STT_HIPROC /* A Thumb label. */ > -@@ -2711,12 +2714,19 @@ enum > - > - /* Processor specific values for the Phdr p_type field. */ > - #define PT_ARM_EXIDX (PT_LOPROC + 1) /* ARM unwind segment. */ > -+#define PT_ARM_UNWIND PT_ARM_EXIDX > - > - /* Processor specific values for the Shdr sh_type field. */ > - #define SHT_ARM_EXIDX (SHT_LOPROC + 1) /* ARM unwind section. */ > - #define SHT_ARM_PREEMPTMAP (SHT_LOPROC + 2) /* Preemption details. */ > - #define SHT_ARM_ATTRIBUTES (SHT_LOPROC + 3) /* ARM attributes section. */ > - > -+/* Processor specific values for the Dyn d_tag field. */ > -+#define DT_ARM_RESERVED1 (DT_LOPROC + 0) > -+#define DT_ARM_SYMTABSZ (DT_LOPROC + 1) > -+#define DT_ARM_PREEMTMAB (DT_LOPROC + 2) > -+#define DT_ARM_RESERVED2 (DT_LOPROC + 3) > -+#define DT_ARM_NUM 4 > - > - /* AArch64 relocs. */ > - > -@@ -3009,6 +3019,7 @@ enum > - TLS block (LDR, STR). */ > - #define R_ARM_TLS_IE12GP 111 /* 12 bit GOT entry relative > - to GOT origin (LDR). */ > -+/* 112 - 127 private range */ > - #define R_ARM_ME_TOO 128 /* Obsolete. */ > - #define R_ARM_THM_TLS_DESCSEQ 129 > - #define R_ARM_THM_TLS_DESCSEQ16 129 > -diff --git a/tests/run-addrcfi.sh b/tests/run-addrcfi.sh > -index fd89d025a3f6..462d7c58b7cb 100755 > ---- a/tests/run-addrcfi.sh > -+++ b/tests/run-addrcfi.sh > -@@ -3554,6 +3554,38 @@ dwarf_cfi_addrframe (.eh_frame): no matching address range > - FPA reg21 (f5): undefined > - FPA reg22 (f6): undefined > - FPA reg23 (f7): undefined > -+ VFP reg64 (s0): undefined > -+ VFP reg65 (s1): undefined > -+ VFP reg66 (s2): undefined > -+ VFP reg67 (s3): undefined > -+ VFP reg68 (s4): undefined > -+ VFP reg69 (s5): undefined > -+ VFP reg70 (s6): undefined > -+ VFP reg71 (s7): undefined > -+ VFP reg72 (s8): undefined > -+ VFP reg73 (s9): undefined > -+ VFP reg74 (s10): undefined > -+ VFP reg75 (s11): undefined > -+ VFP reg76 (s12): undefined > -+ VFP reg77 (s13): undefined > -+ VFP reg78 (s14): undefined > -+ VFP reg79 (s15): undefined > -+ VFP reg80 (s16): undefined > -+ VFP reg81 (s17): undefined > -+ VFP reg82 (s18): undefined > -+ VFP reg83 (s19): undefined > -+ VFP reg84 (s20): undefined > -+ VFP reg85 (s21): undefined > -+ VFP reg86 (s22): undefined > -+ VFP reg87 (s23): undefined > -+ VFP reg88 (s24): undefined > -+ VFP reg89 (s25): undefined > -+ VFP reg90 (s26): undefined > -+ VFP reg91 (s27): undefined > -+ VFP reg92 (s28): undefined > -+ VFP reg93 (s29): undefined > -+ VFP reg94 (s30): undefined > -+ VFP reg95 (s31): undefined > - FPA reg96 (f0): undefined > - FPA reg97 (f1): undefined > - FPA reg98 (f2): undefined > -@@ -3562,7 +3594,66 @@ dwarf_cfi_addrframe (.eh_frame): no matching address range > - FPA reg101 (f5): undefined > - FPA reg102 (f6): undefined > - FPA reg103 (f7): undefined > -- integer reg128 (spsr): undefined > -+ MMX reg104 (wcgr0): undefined > -+ MMX reg105 (wcgr1): undefined > -+ MMX reg106 (wcgr2): undefined > -+ MMX reg107 (wcgr3): undefined > -+ MMX reg108 (wcgr4): undefined > -+ MMX reg109 (wcgr5): undefined > -+ MMX reg110 (wcgr6): undefined > -+ MMX reg111 (wcgr7): undefined > -+ MMX reg112 (wr0): undefined > -+ MMX reg113 (wr1): undefined > -+ MMX reg114 (wr2): undefined > -+ MMX reg115 (wr3): undefined > -+ MMX reg116 (wr4): undefined > -+ MMX reg117 (wr5): undefined > -+ MMX reg118 (wr6): undefined > -+ MMX reg119 (wr7): undefined > -+ MMX reg120 (wr8): undefined > -+ MMX reg121 (wr9): undefined > -+ MMX reg122 (wr10): undefined > -+ MMX reg123 (wr11): undefined > -+ MMX reg124 (wr12): undefined > -+ MMX reg125 (wr13): undefined > -+ MMX reg126 (wr14): undefined > -+ MMX reg127 (wr15): undefined > -+ state reg128 (spsr): undefined > -+ state reg129 (spsr_fiq): undefined > -+ state reg130 (spsr_irq): undefined > -+ state reg131 (spsr_abt): undefined > -+ state reg132 (spsr_und): undefined > -+ state reg133 (spsr_svc): undefined > -+ integer reg144 (r8_usr): undefined > -+ integer reg145 (r9_usr): undefined > -+ integer reg146 (r10_usr): undefined > -+ integer reg147 (r11_usr): undefined > -+ integer reg148 (r12_usr): undefined > -+ integer reg149 (r13_usr): undefined > -+ integer reg150 (r14_usr): undefined > -+ integer reg151 (r8_fiq): undefined > -+ integer reg152 (r9_fiq): undefined > -+ integer reg153 (r10_fiq): undefined > -+ integer reg154 (r11_fiq): undefined > -+ integer reg155 (r12_fiq): undefined > -+ integer reg156 (r13_fiq): undefined > -+ integer reg157 (r14_fiq): undefined > -+ integer reg158 (r13_irq): undefined > -+ integer reg159 (r14_irq): undefined > -+ integer reg160 (r13_abt): undefined > -+ integer reg161 (r14_abt): undefined > -+ integer reg162 (r13_und): undefined > -+ integer reg163 (r14_und): undefined > -+ integer reg164 (r13_svc): undefined > -+ integer reg165 (r14_svc): undefined > -+ MMX reg192 (wc0): undefined > -+ MMX reg193 (wc1): undefined > -+ MMX reg194 (wc2): undefined > -+ MMX reg195 (wc3): undefined > -+ MMX reg196 (wc4): undefined > -+ MMX reg197 (wc5): undefined > -+ MMX reg198 (wc6): undefined > -+ MMX reg199 (wc7): undefined > - VFP reg256 (d0): undefined > - VFP reg257 (d1): undefined > - VFP reg258 (d2): undefined > -diff --git a/tests/run-allregs.sh b/tests/run-allregs.sh > -index 1422bd67dbf0..dc0fc9914873 100755 > ---- a/tests/run-allregs.sh > -+++ b/tests/run-allregs.sh > -@@ -2672,7 +2672,28 @@ integer registers: > - 13: sp (sp), address 32 bits > - 14: lr (lr), address 32 bits > - 15: pc (pc), address 32 bits > -- 128: spsr (spsr), unsigned 32 bits > -+ 144: r8_usr (r8_usr), signed 32 bits > -+ 145: r9_usr (r9_usr), signed 32 bits > -+ 146: r10_usr (r10_usr), signed 32 bits > -+ 147: r11_usr (r11_usr), signed 32 bits > -+ 148: r12_usr (r12_usr), signed 32 bits > -+ 149: r13_usr (r13_usr), signed 32 bits > -+ 150: r14_usr (r14_usr), signed 32 bits > -+ 151: r8_fiq (r8_fiq), signed 32 bits > -+ 152: r9_fiq (r9_fiq), signed 32 bits > -+ 153: r10_fiq (r10_fiq), signed 32 bits > -+ 154: r11_fiq (r11_fiq), signed 32 bits > -+ 155: r12_fiq (r12_fiq), signed 32 bits > -+ 156: r13_fiq (r13_fiq), signed 32 bits > -+ 157: r14_fiq (r14_fiq), signed 32 bits > -+ 158: r13_irq (r13_irq), signed 32 bits > -+ 159: r14_irq (r14_irq), signed 32 bits > -+ 160: r13_abt (r13_abt), signed 32 bits > -+ 161: r14_abt (r14_abt), signed 32 bits > -+ 162: r13_und (r13_und), signed 32 bits > -+ 163: r14_und (r14_und), signed 32 bits > -+ 164: r13_svc (r13_svc), signed 32 bits > -+ 165: r14_svc (r14_svc), signed 32 bits > - FPA registers: > - 16: f0 (f0), float 96 bits > - 17: f1 (f1), float 96 bits > -@@ -2690,7 +2711,72 @@ FPA registers: > - 101: f5 (f5), float 96 bits > - 102: f6 (f6), float 96 bits > - 103: f7 (f7), float 96 bits > -+MMX registers: > -+ 104: wcgr0 (wcgr0), unsigned 32 bits > -+ 105: wcgr1 (wcgr1), unsigned 32 bits > -+ 106: wcgr2 (wcgr2), unsigned 32 bits > -+ 107: wcgr3 (wcgr3), unsigned 32 bits > -+ 108: wcgr4 (wcgr4), unsigned 32 bits > -+ 109: wcgr5 (wcgr5), unsigned 32 bits > -+ 110: wcgr6 (wcgr6), unsigned 32 bits > -+ 111: wcgr7 (wcgr7), unsigned 32 bits > -+ 112: wr0 (wr0), unsigned 64 bits > -+ 113: wr1 (wr1), unsigned 64 bits > -+ 114: wr2 (wr2), unsigned 64 bits > -+ 115: wr3 (wr3), unsigned 64 bits > -+ 116: wr4 (wr4), unsigned 64 bits > -+ 117: wr5 (wr5), unsigned 64 bits > -+ 118: wr6 (wr6), unsigned 64 bits > -+ 119: wr7 (wr7), unsigned 64 bits > -+ 120: wr8 (wr8), unsigned 64 bits > -+ 121: wr9 (wr9), unsigned 64 bits > -+ 122: wr10 (wr10), unsigned 64 bits > -+ 123: wr11 (wr11), unsigned 64 bits > -+ 124: wr12 (wr12), unsigned 64 bits > -+ 125: wr13 (wr13), unsigned 64 bits > -+ 126: wr14 (wr14), unsigned 64 bits > -+ 127: wr15 (wr15), unsigned 64 bits > -+ 192: wc0 (wc0), unsigned 32 bits > -+ 193: wc1 (wc1), unsigned 32 bits > -+ 194: wc2 (wc2), unsigned 32 bits > -+ 195: wc3 (wc3), unsigned 32 bits > -+ 196: wc4 (wc4), unsigned 32 bits > -+ 197: wc5 (wc5), unsigned 32 bits > -+ 198: wc6 (wc6), unsigned 32 bits > -+ 199: wc7 (wc7), unsigned 32 bits > - VFP registers: > -+ 64: s0 (s0), float 32 bits > -+ 65: s1 (s1), float 32 bits > -+ 66: s2 (s2), float 32 bits > -+ 67: s3 (s3), float 32 bits > -+ 68: s4 (s4), float 32 bits > -+ 69: s5 (s5), float 32 bits > -+ 70: s6 (s6), float 32 bits > -+ 71: s7 (s7), float 32 bits > -+ 72: s8 (s8), float 32 bits > -+ 73: s9 (s9), float 32 bits > -+ 74: s10 (s10), float 32 bits > -+ 75: s11 (s11), float 32 bits > -+ 76: s12 (s12), float 32 bits > -+ 77: s13 (s13), float 32 bits > -+ 78: s14 (s14), float 32 bits > -+ 79: s15 (s15), float 32 bits > -+ 80: s16 (s16), float 32 bits > -+ 81: s17 (s17), float 32 bits > -+ 82: s18 (s18), float 32 bits > -+ 83: s19 (s19), float 32 bits > -+ 84: s20 (s20), float 32 bits > -+ 85: s21 (s21), float 32 bits > -+ 86: s22 (s22), float 32 bits > -+ 87: s23 (s23), float 32 bits > -+ 88: s24 (s24), float 32 bits > -+ 89: s25 (s25), float 32 bits > -+ 90: s26 (s26), float 32 bits > -+ 91: s27 (s27), float 32 bits > -+ 92: s28 (s28), float 32 bits > -+ 93: s29 (s29), float 32 bits > -+ 94: s30 (s30), float 32 bits > -+ 95: s31 (s31), float 32 bits > - 256: d0 (d0), float 64 bits > - 257: d1 (d1), float 64 bits > - 258: d2 (d2), float 64 bits > -@@ -2723,6 +2809,13 @@ VFP registers: > - 285: d29 (d29), float 64 bits > - 286: d30 (d30), float 64 bits > - 287: d31 (d31), float 64 bits > -+state registers: > -+ 128: spsr (spsr), unsigned 32 bits > -+ 129: spsr_fiq (spsr_fiq), unsigned 32 bits > -+ 130: spsr_irq (spsr_irq), unsigned 32 bits > -+ 131: spsr_abt (spsr_abt), unsigned 32 bits > -+ 132: spsr_und (spsr_und), unsigned 32 bits > -+ 133: spsr_svc (spsr_svc), unsigned 32 bits > - EOF > - > - # See run-readelf-mixed-corenote.sh for instructions to regenerate > -diff --git a/tests/run-readelf-mixed-corenote.sh b/tests/run-readelf-mixed-corenote.sh > -index c960f1d6160e..e4bf0746b208 100755 > ---- a/tests/run-readelf-mixed-corenote.sh > -+++ b/tests/run-readelf-mixed-corenote.sh > -@@ -31,12 +31,11 @@ Note segment of 892 bytes at offset 0x274: > - pid: 11087, ppid: 11063, pgrp: 11087, sid: 11063 > - utime: 0.000000, stime: 0.010000, cutime: 0.000000, cstime: 0.000000 > - orig_r0: -1, fpvalid: 1 > -- r0: 1 r1: -1091672508 r2: -1091672500 > -- r3: 0 r4: 0 r5: 0 > -- r6: 33728 r7: 0 r8: 0 > -- r9: 0 r10: -1225703496 r11: -1091672844 > -- r12: 0 sp: 0xbeee64f4 lr: 0xb6dc3f48 > -- pc: 0x00008500 spsr: 0x60000010 > -+ r0: 1 r1: -1091672508 r2: -1091672500 r3: 0 > -+ r4: 0 r5: 0 r6: 33728 r7: 0 > -+ r8: 0 r9: 0 r10: -1225703496 r11: -1091672844 > -+ r12: 0 sp: 0xbeee64f4 lr: 0xb6dc3f48 pc: 0x00008500 > -+ spsr: 0x60000010 > - CORE 124 PRPSINFO > - state: 0, sname: R, zomb: 0, nice: 0, flag: 0x00400500 > - uid: 0, gid: 0, pid: 11087, ppid: 11063, pgrp: 11087, sid: 11063 > diff --git a/patches/elfutils-0.176/0003-mips_backend.patch b/patches/elfutils-0.176/0003-mips_backend.patch > deleted file mode 100644 > index e613f4a05418..000000000000 > --- a/patches/elfutils-0.176/0003-mips_backend.patch > +++ /dev/null > @@ -1,712 +0,0 @@ > -From: Michael Olbrich > -Date: Mon, 4 Mar 2019 13:20:36 +0100 > -Subject: [PATCH] mips_backend > - > -Imported from elfutils_0.176-1.debian.tar.xz > - > -Signed-off-by: Michael Olbrich > ---- > - backends/Makefile.am | 8 +- > - backends/mips_init.c | 59 +++++++++ > - backends/mips_regs.c | 104 ++++++++++++++++ > - backends/mips_reloc.def | 79 ++++++++++++ > - backends/mips_retval.c | 321 ++++++++++++++++++++++++++++++++++++++++++++++++ > - backends/mips_symbol.c | 53 ++++++++ > - libebl/eblopenbackend.c | 2 + > - 7 files changed, 624 insertions(+), 2 deletions(-) > - create mode 100644 backends/mips_init.c > - create mode 100644 backends/mips_regs.c > - create mode 100644 backends/mips_reloc.def > - create mode 100644 backends/mips_retval.c > - create mode 100644 backends/mips_symbol.c > - > -diff --git a/backends/Makefile.am b/backends/Makefile.am > -index 5671a32c4210..ba84da61cd20 100644 > ---- a/backends/Makefile.am > -+++ b/backends/Makefile.am > -@@ -33,13 +33,13 @@ AM_CPPFLAGS += -I$(top_srcdir)/libebl -I$(top_srcdir)/libasm \ > - > - > - modules = i386 sh x86_64 ia64 alpha arm aarch64 sparc ppc ppc64 s390 \ > -- tilegx m68k bpf riscv parisc > -+ tilegx m68k bpf riscv parisc mips > - libebl_pic = libebl_i386_pic.a libebl_sh_pic.a libebl_x86_64_pic.a \ > - libebl_ia64_pic.a libebl_alpha_pic.a libebl_arm_pic.a \ > - libebl_aarch64_pic.a libebl_sparc_pic.a libebl_ppc_pic.a \ > - libebl_ppc64_pic.a libebl_s390_pic.a libebl_tilegx_pic.a \ > - libebl_m68k_pic.a libebl_bpf_pic.a libebl_riscv_pic.a \ > -- libebl_parisc_pic.a > -+ libebl_parisc_pic.a libebl_mips_pic.a > - noinst_LIBRARIES = $(libebl_pic) > - noinst_DATA = $(libebl_pic:_pic.a=.so) > - > -@@ -141,6 +141,10 @@ parisc_SRCS = parisc_init.c parisc_symbol.c parisc_regs.c parisc_retval.c > - libebl_parisc_pic_a_SOURCES = $(parisc_SRCS) > - am_libebl_parisc_pic_a_OBJECTS = $(parisc_SRCS:.c=.os) > - > -+mips_SRCS = mips_init.c mips_symbol.c mips_regs.c mips_retval.c > -+libebl_mips_pic_a_SOURCES = $(mips_SRCS) > -+am_libebl_mips_pic_a_OBJECTS = $(mips_SRCS:.c=.os) > -+ > - libebl_%.so libebl_%.map: libebl_%_pic.a $(libelf) $(libdw) $(libeu) > - @rm -f $(@:.so=.map) > - $(AM_V_at)echo 'ELFUTILS_$(PACKAGE_VERSION) { global: $*_init; local: *; };' \ > -diff --git a/backends/mips_init.c b/backends/mips_init.c > -new file mode 100644 > -index 000000000000..975c04e1e168 > ---- /dev/null > -+++ b/backends/mips_init.c > -@@ -0,0 +1,59 @@ > -+/* Initialization of mips specific backend library. > -+ Copyright (C) 2006 Red Hat, Inc. > -+ This file is part of Red Hat elfutils. > -+ > -+ Red Hat elfutils 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; version 2 of the License. > -+ > -+ Red Hat 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 Red Hat elfutils; if not, write to the Free Software Foundation, > -+ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. > -+ > -+ Red Hat elfutils is an included package of the Open Invention Network. > -+ An included package of the Open Invention Network is a package for which > -+ Open Invention Network licensees cross-license their patents. No patent > -+ license is granted, either expressly or impliedly, by designation as an > -+ included package. Should you wish to participate in the Open Invention > -+ Network licensing program, please visit www.openinventionnetwork.com > -+ . */ > -+ > -+#ifdef HAVE_CONFIG_H > -+# include > -+#endif > -+ > -+#define BACKEND mips_ > -+#define RELOC_PREFIX R_MIPS_ > -+#include "libebl_CPU.h" > -+ > -+/* This defines the common reloc hooks based on mips_reloc.def. */ > -+#include "common-reloc.c" > -+ > -+const char * > -+mips_init (Elf *elf __attribute__ ((unused)), > -+ GElf_Half machine __attribute__ ((unused)), > -+ Ebl *eh, > -+ size_t ehlen) > -+{ > -+ /* Check whether the Elf_BH object has a sufficent size. */ > -+ if (ehlen < sizeof (Ebl)) > -+ return NULL; > -+ > -+ /* We handle it. */ > -+ if (machine == EM_MIPS) > -+ eh->name = "MIPS R3000 big-endian"; > -+ else if (machine == EM_MIPS_RS3_LE) > -+ eh->name = "MIPS R3000 little-endian"; > -+ > -+ mips_init_reloc (eh); > -+ HOOK (eh, reloc_simple_type); > -+ HOOK (eh, return_value_location); > -+ HOOK (eh, register_info); > -+ > -+ return MODVERSION; > -+} > -diff --git a/backends/mips_regs.c b/backends/mips_regs.c > -new file mode 100644 > -index 000000000000..44f86cb46302 > ---- /dev/null > -+++ b/backends/mips_regs.c > -@@ -0,0 +1,104 @@ > -+/* Register names and numbers for MIPS DWARF. > -+ Copyright (C) 2006 Red Hat, Inc. > -+ This file is part of Red Hat elfutils. > -+ > -+ Red Hat elfutils 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; version 2 of the License. > -+ > -+ Red Hat 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 Red Hat elfutils; if not, write to the Free Software Foundation, > -+ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. > -+ > -+ Red Hat elfutils is an included package of the Open Invention Network. > -+ An included package of the Open Invention Network is a package for which > -+ Open Invention Network licensees cross-license their patents. No patent > -+ license is granted, either expressly or impliedly, by designation as an > -+ included package. Should you wish to participate in the Open Invention > -+ Network licensing program, please visit www.openinventionnetwork.com > -+ . */ > -+ > -+#ifdef HAVE_CONFIG_H > -+# include > -+#endif > -+ > -+#include > -+#include > -+ > -+#define BACKEND mips_ > -+#include "libebl_CPU.h" > -+ > -+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 66; > -+ > -+ if (regno < 0 || regno > 65 || namelen < 4) > -+ return -1; > -+ > -+ *prefix = "$"; > -+ > -+ if (regno < 32) > -+ { > -+ *setname = "integer"; > -+ *type = DW_ATE_signed; > -+ *bits = 32; > -+ if (regno < 32 + 10) > -+ { > -+ name[0] = regno + '0'; > -+ namelen = 1; > -+ } > -+ else > -+ { > -+ name[0] = (regno / 10) + '0'; > -+ name[1] = (regno % 10) + '0'; > -+ namelen = 2; > -+ } > -+ } > -+ else if (regno < 64) > -+ { > -+ *setname = "FPU"; > -+ *type = DW_ATE_float; > -+ *bits = 32; > -+ name[0] = 'f'; > -+ if (regno < 32 + 10) > -+ { > -+ name[1] = (regno - 32) + '0'; > -+ namelen = 2; > -+ } > -+ else > -+ { > -+ name[1] = (regno - 32) / 10 + '0'; > -+ name[2] = (regno - 32) % 10 + '0'; > -+ namelen = 3; > -+ } > -+ } > -+ else if (regno == 64) > -+ { > -+ *type = DW_ATE_signed; > -+ *bits = 32; > -+ name[0] = 'h'; > -+ name[1] = 'i'; > -+ namelen = 2; > -+ } > -+ else > -+ { > -+ *type = DW_ATE_signed; > -+ *bits = 32; > -+ name[0] = 'l'; > -+ name[1] = 'o'; > -+ namelen = 2; > -+ } > -+ > -+ name[namelen++] = '\0'; > -+ return namelen; > -+} > -diff --git a/backends/mips_reloc.def b/backends/mips_reloc.def > -new file mode 100644 > -index 000000000000..457997020340 > ---- /dev/null > -+++ b/backends/mips_reloc.def > -@@ -0,0 +1,79 @@ > -+/* List the relocation types for mips. -*- C -*- > -+ Copyright (C) 2006 Red Hat, Inc. > -+ This file is part of Red Hat elfutils. > -+ > -+ Red Hat elfutils 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; version 2 of the License. > -+ > -+ Red Hat 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 Red Hat elfutils; if not, write to the Free Software Foundation, > -+ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. > -+ > -+ Red Hat elfutils is an included package of the Open Invention Network. > -+ An included package of the Open Invention Network is a package for which > -+ Open Invention Network licensees cross-license their patents. No patent > -+ license is granted, either expressly or impliedly, by designation as an > -+ included package. Should you wish to participate in the Open Invention > -+ Network licensing program, please visit www.openinventionnetwork.com > -+ . */ > -+ > -+/* NAME, REL|EXEC|DYN */ > -+ > -+RELOC_TYPE (NONE, 0) > -+RELOC_TYPE (16, 0) > -+RELOC_TYPE (32, 0) > -+RELOC_TYPE (REL32, 0) > -+RELOC_TYPE (26, 0) > -+RELOC_TYPE (HI16, 0) > -+RELOC_TYPE (LO16, 0) > -+RELOC_TYPE (GPREL16, 0) > -+RELOC_TYPE (LITERAL, 0) > -+RELOC_TYPE (GOT16, 0) > -+RELOC_TYPE (PC16, 0) > -+RELOC_TYPE (CALL16, 0) > -+RELOC_TYPE (GPREL32, 0) > -+ > -+RELOC_TYPE (SHIFT5, 0) > -+RELOC_TYPE (SHIFT6, 0) > -+RELOC_TYPE (64, 0) > -+RELOC_TYPE (GOT_DISP, 0) > -+RELOC_TYPE (GOT_PAGE, 0) > -+RELOC_TYPE (GOT_OFST, 0) > -+RELOC_TYPE (GOT_HI16, 0) > -+RELOC_TYPE (GOT_LO16, 0) > -+RELOC_TYPE (SUB, 0) > -+RELOC_TYPE (INSERT_A, 0) > -+RELOC_TYPE (INSERT_B, 0) > -+RELOC_TYPE (DELETE, 0) > -+RELOC_TYPE (HIGHER, 0) > -+RELOC_TYPE (HIGHEST, 0) > -+RELOC_TYPE (CALL_HI16, 0) > -+RELOC_TYPE (CALL_LO16, 0) > -+RELOC_TYPE (SCN_DISP, 0) > -+RELOC_TYPE (REL16, 0) > -+RELOC_TYPE (ADD_IMMEDIATE, 0) > -+RELOC_TYPE (PJUMP, 0) > -+RELOC_TYPE (RELGOT, 0) > -+RELOC_TYPE (JALR, 0) > -+RELOC_TYPE (TLS_DTPMOD32, 0) > -+RELOC_TYPE (TLS_DTPREL32, 0) > -+RELOC_TYPE (TLS_DTPMOD64, 0) > -+RELOC_TYPE (TLS_DTPREL64, 0) > -+RELOC_TYPE (TLS_GD, 0) > -+RELOC_TYPE (TLS_LDM, 0) > -+RELOC_TYPE (TLS_DTPREL_HI16, 0) > -+RELOC_TYPE (TLS_DTPREL_LO16, 0) > -+RELOC_TYPE (TLS_GOTTPREL, 0) > -+RELOC_TYPE (TLS_TPREL32, 0) > -+RELOC_TYPE (TLS_TPREL64, 0) > -+RELOC_TYPE (TLS_TPREL_HI16, 0) > -+RELOC_TYPE (TLS_TPREL_LO16, 0) > -+ > -+#define NO_COPY_RELOC 1 > -+#define NO_RELATIVE_RELOC 1 > -diff --git a/backends/mips_retval.c b/backends/mips_retval.c > -new file mode 100644 > -index 000000000000..656cd1f47507 > ---- /dev/null > -+++ b/backends/mips_retval.c > -@@ -0,0 +1,321 @@ > -+/* Function return value location for Linux/mips ABI. > -+ Copyright (C) 2005 Red Hat, Inc. > -+ This file is part of Red Hat elfutils. > -+ > -+ Red Hat elfutils 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; version 2 of the License. > -+ > -+ Red Hat 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 Red Hat elfutils; if not, write to the Free Software Foundation, > -+ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. > -+ > -+ Red Hat elfutils is an included package of the Open Invention Network. > -+ An included package of the Open Invention Network is a package for which > -+ Open Invention Network licensees cross-license their patents. No patent > -+ license is granted, either expressly or impliedly, by designation as an > -+ included package. Should you wish to participate in the Open Invention > -+ Network licensing program, please visit www.openinventionnetwork.com > -+ . */ > -+ > -+#ifdef HAVE_CONFIG_H > -+# include > -+#endif > -+ > -+#include > -+#include > -+#include > -+#include > -+ > -+#include "../libebl/libeblP.h" > -+#include "../libdw/libdwP.h" > -+ > -+#define BACKEND mips_ > -+#include "libebl_CPU.h" > -+ > -+/* The ABI of the file. Also see EF_MIPS_ABI2 above. */ > -+#define EF_MIPS_ABI 0x0000F000 > -+ > -+/* The original o32 abi. */ > -+#define E_MIPS_ABI_O32 0x00001000 > -+ > -+/* O32 extended to work on 64 bit architectures */ > -+#define E_MIPS_ABI_O64 0x00002000 > -+ > -+/* EABI in 32 bit mode */ > -+#define E_MIPS_ABI_EABI32 0x00003000 > -+ > -+/* EABI in 64 bit mode */ > -+#define E_MIPS_ABI_EABI64 0x00004000 > -+ > -+/* All the possible MIPS ABIs. */ > -+enum mips_abi > -+ { > -+ MIPS_ABI_UNKNOWN = 0, > -+ MIPS_ABI_N32, > -+ MIPS_ABI_O32, > -+ MIPS_ABI_N64, > -+ MIPS_ABI_O64, > -+ MIPS_ABI_EABI32, > -+ MIPS_ABI_EABI64, > -+ MIPS_ABI_LAST > -+ }; > -+ > -+/* Find the mips ABI of the current file */ > -+enum mips_abi find_mips_abi(Elf *elf) > -+{ > -+ GElf_Ehdr ehdr_mem; > -+ GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem); > -+ > -+ if (ehdr == NULL) > -+ return MIPS_ABI_LAST; > -+ > -+ GElf_Word elf_flags = ehdr->e_flags; > -+ > -+ /* Check elf_flags to see if it specifies the ABI being used. */ > -+ switch ((elf_flags & EF_MIPS_ABI)) > -+ { > -+ case E_MIPS_ABI_O32: > -+ return MIPS_ABI_O32; > -+ case E_MIPS_ABI_O64: > -+ return MIPS_ABI_O64; > -+ case E_MIPS_ABI_EABI32: > -+ return MIPS_ABI_EABI32; > -+ case E_MIPS_ABI_EABI64: > -+ return MIPS_ABI_EABI64; > -+ default: > -+ if ((elf_flags & EF_MIPS_ABI2)) > -+ return MIPS_ABI_N32; > -+ } > -+ > -+ /* GCC creates a pseudo-section whose name describes the ABI. */ > -+ size_t shstrndx; > -+ if (elf_getshdrstrndx (elf, &shstrndx) < 0) > -+ return MIPS_ABI_LAST; > -+ > -+ const char *name; > -+ Elf_Scn *scn = NULL; > -+ while ((scn = elf_nextscn (elf, scn)) != NULL) > -+ { > -+ GElf_Shdr shdr_mem; > -+ GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); > -+ if (shdr == NULL) > -+ return MIPS_ABI_LAST; > -+ > -+ name = elf_strptr (elf, shstrndx, shdr->sh_name) ?: ""; > -+ if (strncmp (name, ".mdebug.", 8) != 0) > -+ continue; > -+ > -+ if (strcmp (name, ".mdebug.abi32") == 0) > -+ return MIPS_ABI_O32; > -+ else if (strcmp (name, ".mdebug.abiN32") == 0) > -+ return MIPS_ABI_N32; > -+ else if (strcmp (name, ".mdebug.abi64") == 0) > -+ return MIPS_ABI_N64; > -+ else if (strcmp (name, ".mdebug.abiO64") == 0) > -+ return MIPS_ABI_O64; > -+ else if (strcmp (name, ".mdebug.eabi32") == 0) > -+ return MIPS_ABI_EABI32; > -+ else if (strcmp (name, ".mdebug.eabi64") == 0) > -+ return MIPS_ABI_EABI64; > -+ else > -+ return MIPS_ABI_UNKNOWN; > -+ } > -+ > -+ return MIPS_ABI_UNKNOWN; > -+} > -+ > -+unsigned int > -+mips_abi_regsize (enum mips_abi abi) > -+{ > -+ switch (abi) > -+ { > -+ case MIPS_ABI_EABI32: > -+ case MIPS_ABI_O32: > -+ return 4; > -+ case MIPS_ABI_N32: > -+ case MIPS_ABI_N64: > -+ case MIPS_ABI_O64: > -+ case MIPS_ABI_EABI64: > -+ return 8; > -+ case MIPS_ABI_UNKNOWN: > -+ case MIPS_ABI_LAST: > -+ default: > -+ return 0; > -+ } > -+} > -+ > -+ > -+/* $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) > -+{ > -+ /* First find the ABI used by the elf object */ > -+ enum mips_abi abi = find_mips_abi(functypedie->cu->dbg->elf); > -+ > -+ /* Something went seriously wrong while trying to figure out the ABI */ > -+ if (abi == MIPS_ABI_LAST) > -+ return -1; > -+ > -+ /* We couldn't identify the ABI, but the file seems valid */ > -+ if (abi == MIPS_ABI_UNKNOWN) > -+ return -2; > -+ > -+ /* Can't handle EABI variants */ > -+ if ((abi == MIPS_ABI_EABI32) || (abi == MIPS_ABI_EABI64)) > -+ return -2; > -+ > -+ unsigned int regsize = mips_abi_regsize (abi); > -+ 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. */ > -+ > -+ case DW_TAG_base_type: > -+ case DW_TAG_enumeration_type: > -+ case DW_TAG_pointer_type: > -+ case DW_TAG_ptr_to_member_type: > -+ { > -+ Dwarf_Word size; > -+ if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_byte_size, > -+ &attr_mem), &size) != 0) > -+ { > -+ if (tag == DW_TAG_pointer_type || tag == DW_TAG_ptr_to_member_type) > -+ 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 ABI_LOC(loc, regsize) ((regsize) == 4 ? (loc ## _o32) : (loc)) > -+ > -+ if (encoding == DW_ATE_float) > -+ { > -+ *locp = ABI_LOC(loc_fpreg, regsize); > -+ if (size <= regsize) > -+ return nloc_fpreg; > -+ > -+ if (size <= 2*regsize) > -+ return nloc_fpregpair; > -+ > -+ if (size <= 4*regsize && abi == MIPS_ABI_O32) > -+ return nloc_fpregquad; > -+ > -+ goto aggregate; > -+ } > -+ } > -+ *locp = ABI_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) */ > -+ } > -+ > -+ case DW_TAG_structure_type: > -+ case DW_TAG_class_type: > -+ case DW_TAG_union_type: > -+ case DW_TAG_array_type: > -+ aggregate: > -+ /* XXX TODO: Can't handle structure return with other ABI's yet :-/ */ > -+ if ((abi != MIPS_ABI_O32) && (abi != MIPS_ABI_O64)) > -+ return -2; > -+ > -+ *locp = loc_aggregate; > -+ return nloc_aggregate; > -+ } > -+ > -+ /* 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/backends/mips_symbol.c b/backends/mips_symbol.c > -new file mode 100644 > -index 000000000000..261b05dad2d3 > ---- /dev/null > -+++ b/backends/mips_symbol.c > -@@ -0,0 +1,53 @@ > -+/* MIPS specific symbolic name handling. > -+ Copyright (C) 2002, 2003, 2005 Red Hat, Inc. > -+ This file is part of Red Hat elfutils. > -+ Written by Jakub Jelinek , 2002. > -+ > -+ Red Hat elfutils 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; version 2 of the License. > -+ > -+ Red Hat 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 Red Hat elfutils; if not, write to the Free Software Foundation, > -+ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. > -+ > -+ Red Hat elfutils is an included package of the Open Invention Network. > -+ An included package of the Open Invention Network is a package for which > -+ Open Invention Network licensees cross-license their patents. No patent > -+ license is granted, either expressly or impliedly, by designation as an > -+ included package. Should you wish to participate in the Open Invention > -+ Network licensing program, please visit www.openinventionnetwork.com > -+ . */ > -+ > -+#ifdef HAVE_CONFIG_H > -+# include > -+#endif > -+ > -+#include > -+#include > -+ > -+#define BACKEND mips_ > -+#include "libebl_CPU.h" > -+ > -+/* Check for the simple reloc types. */ > -+Elf_Type > -+mips_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type, > -+ int *addsub __attribute__ ((unused))) > -+{ > -+ switch (type) > -+ { > -+ case R_MIPS_16: > -+ return ELF_T_HALF; > -+ case R_MIPS_32: > -+ return ELF_T_WORD; > -+ case R_MIPS_64: > -+ return ELF_T_XWORD; > -+ default: > -+ return ELF_T_NUM; > -+ } > -+} > -diff --git a/libebl/eblopenbackend.c b/libebl/eblopenbackend.c > -index d54b720756c3..6cf766f65115 100644 > ---- a/libebl/eblopenbackend.c > -+++ b/libebl/eblopenbackend.c > -@@ -71,6 +71,8 @@ static const struct > - { "sparc", "elf_sparc", "sparc", 5, EM_SPARC, 0, 0 }, > - { "sparc", "elf_sparcv8plus", "sparc", 5, EM_SPARC32PLUS, 0, 0 }, > - { "s390", "ebl_s390", "s390", 4, EM_S390, 0, 0 }, > -+ { "mips", "elf_mips", "mips", 4, EM_MIPS, 0, 0 }, > -+ { "mips", "elf_mipsel", "mipsel", 4, EM_MIPS_RS3_LE, 0, 0 }, > - > - { "m32", "elf_m32", "m32", 3, EM_M32, 0, 0 }, > - { "m68k", "elf_m68k", "m68k", 4, EM_68K, ELFCLASS32, ELFDATA2MSB }, > diff --git a/patches/elfutils-0.176/0004-Make-readelf-w-output-debug-information-on-mips.patch b/patches/elfutils-0.176/0004-Make-readelf-w-output-debug-information-on-mips.patch > deleted file mode 100644 > index 445f7ab6054b..000000000000 > --- a/patches/elfutils-0.176/0004-Make-readelf-w-output-debug-information-on-mips.patch > +++ /dev/null > @@ -1,29 +0,0 @@ > -From: Kurt Roeckx > -Date: Mon, 4 Mar 2019 13:20:36 +0100 > -Subject: [PATCH] Make readelf -w output debug information on mips > - > -Upstreams wants a change where this is handled by a hook that needs > -to be filled in by the backend for the arch. > - > - > -Imported from elfutils_0.176-1.debian.tar.xz > - > -Signed-off-by: Michael Olbrich > ---- > - src/readelf.c | 3 ++- > - 1 file changed, 2 insertions(+), 1 deletion(-) > - > -diff --git a/src/readelf.c b/src/readelf.c > -index 33706bdefacf..ef13159b744d 100644 > ---- a/src/readelf.c > -+++ b/src/readelf.c > -@@ -11148,7 +11148,8 @@ print_debug (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr) > - GElf_Shdr shdr_mem; > - GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); > - > -- if (shdr != NULL && shdr->sh_type == SHT_PROGBITS) > -+ if (shdr != NULL && ( > -+ (shdr->sh_type == SHT_PROGBITS) || (shdr->sh_type == SHT_MIPS_DWARF))) > - { > - static const struct > - { > diff --git a/patches/elfutils-0.176/0005-Ignore-differences-between-mips-machine-identifiers.patch b/patches/elfutils-0.176/0005-Ignore-differences-between-mips-machine-identifiers.patch > deleted file mode 100644 > index 9860b4548922..000000000000 > --- a/patches/elfutils-0.176/0005-Ignore-differences-between-mips-machine-identifiers.patch > +++ /dev/null > @@ -1,34 +0,0 @@ > -From: James Cowgill > -Date: Mon, 5 Jan 2015 15:16:58 +0000 > -Subject: [PATCH] Ignore differences between mips machine identifiers > - > -Little endian binaries actually use EM_MIPS so you can't tell the endianness > -from the elf machine id. Also, the EM_MIPS_RS3_LE machine is dead anyway (the > -kernel will not load binaries containing it). > - > -Signed-off-by: James Cowgill > - > -Imported from elfutils_0.176-1.debian.tar.xz > - > -Signed-off-by: Michael Olbrich > ---- > - backends/mips_init.c | 6 +----- > - 1 file changed, 1 insertion(+), 5 deletions(-) > - > -diff --git a/backends/mips_init.c b/backends/mips_init.c > -index 975c04e1e168..8482e7fe6e96 100644 > ---- a/backends/mips_init.c > -+++ b/backends/mips_init.c > -@@ -45,11 +45,7 @@ mips_init (Elf *elf __attribute__ ((unused)), > - return NULL; > - > - /* We handle it. */ > -- if (machine == EM_MIPS) > -- eh->name = "MIPS R3000 big-endian"; > -- else if (machine == EM_MIPS_RS3_LE) > -- eh->name = "MIPS R3000 little-endian"; > -- > -+ eh->name = "MIPS"; > - mips_init_reloc (eh); > - HOOK (eh, reloc_simple_type); > - HOOK (eh, return_value_location); > diff --git a/patches/elfutils-0.176/0006-Add-support-for-mips64-abis-in-mips_retval.c.patch b/patches/elfutils-0.176/0006-Add-support-for-mips64-abis-in-mips_retval.c.patch > deleted file mode 100644 > index 29c754e2e213..000000000000 > --- a/patches/elfutils-0.176/0006-Add-support-for-mips64-abis-in-mips_retval.c.patch > +++ /dev/null > @@ -1,168 +0,0 @@ > -From: James Cowgill > -Date: Mon, 5 Jan 2015 15:17:01 +0000 > -Subject: [PATCH] Add support for mips64 abis in mips_retval.c > - > -Signed-off-by: James Cowgill > - > -Imported from elfutils_0.176-1.debian.tar.xz > - > -Signed-off-by: Michael Olbrich > ---- > - backends/mips_retval.c | 104 ++++++++++++++++++++++++++++++++++++++++++++----- > - 1 file changed, 94 insertions(+), 10 deletions(-) > - > -diff --git a/backends/mips_retval.c b/backends/mips_retval.c > -index 656cd1f47507..57487bbb8e2f 100644 > ---- a/backends/mips_retval.c > -+++ b/backends/mips_retval.c > -@@ -91,6 +91,8 @@ enum mips_abi find_mips_abi(Elf *elf) > - default: > - if ((elf_flags & EF_MIPS_ABI2)) > - return MIPS_ABI_N32; > -+ else if ((ehdr->e_ident[EI_CLASS] == ELFCLASS64)) > -+ return MIPS_ABI_N64; > - } > - > - /* GCC creates a pseudo-section whose name describes the ABI. */ > -@@ -195,6 +197,57 @@ static const Dwarf_Op loc_aggregate[] = > - }; > - #define nloc_aggregate 1 > - > -+/* Test if a struct member is a float */ > -+static int is_float_child(Dwarf_Die *childdie) > -+{ > -+ /* Test if this is actually a struct member */ > -+ if (dwarf_tag(childdie) != DW_TAG_member) > -+ return 0; > -+ > -+ /* Get type of member */ > -+ Dwarf_Attribute attr_mem; > -+ Dwarf_Die child_type_mem; > -+ Dwarf_Die *child_typedie = > -+ dwarf_formref_die(dwarf_attr_integrate(childdie, > -+ DW_AT_type, > -+ &attr_mem), &child_type_mem); > -+ > -+ if (dwarf_tag(child_typedie) != DW_TAG_base_type) > -+ return 0; > -+ > -+ /* Get base subtype */ > -+ Dwarf_Word encoding; > -+ if (dwarf_formudata (dwarf_attr_integrate (child_typedie, > -+ DW_AT_encoding, > -+ &attr_mem), &encoding) != 0) > -+ return 0; > -+ > -+ return encoding == DW_ATE_float; > -+} > -+ > -+/* Returns the number of fpregs which can be returned in the given struct */ > -+static int get_struct_fpregs(Dwarf_Die *structtypedie) > -+{ > -+ Dwarf_Die child_mem; > -+ int fpregs = 0; > -+ > -+ /* Get first structure member */ > -+ if (dwarf_child(structtypedie, &child_mem) != 0) > -+ return 0; > -+ > -+ do > -+ { > -+ /* Ensure this register is a float */ > -+ if (!is_float_child(&child_mem)) > -+ return 0; > -+ > -+ fpregs++; > -+ } > -+ while (dwarf_siblingof (&child_mem, &child_mem) == 0); > -+ > -+ return fpregs; > -+} > -+ > - int > - mips_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) > - { > -@@ -240,6 +293,7 @@ mips_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) > - tag = dwarf_tag (typedie); > - } > - > -+ Dwarf_Word size; > - switch (tag) > - { > - case -1: > -@@ -258,8 +312,6 @@ mips_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) > - case DW_TAG_enumeration_type: > - case DW_TAG_pointer_type: > - case DW_TAG_ptr_to_member_type: > -- { > -- Dwarf_Word size; > - if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_byte_size, > - &attr_mem), &size) != 0) > - { > -@@ -289,7 +341,7 @@ mips_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) > - if (size <= 4*regsize && abi == MIPS_ABI_O32) > - return nloc_fpregquad; > - > -- goto aggregate; > -+ goto large; > - } > - } > - *locp = ABI_LOC(loc_intreg, regsize); > -@@ -298,18 +350,50 @@ mips_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) > - if (size <= 2*regsize) > - return nloc_intregpair; > - > -- /* Else fall through. Shouldn't happen though (at least with gcc) */ > -- } > -+ /* Else pass in memory. Shouldn't happen though (at least with gcc) */ > -+ goto large; > - > - case DW_TAG_structure_type: > - case DW_TAG_class_type: > - case DW_TAG_union_type: > -- case DW_TAG_array_type: > -- aggregate: > -- /* XXX TODO: Can't handle structure return with other ABI's yet :-/ */ > -- if ((abi != MIPS_ABI_O32) && (abi != MIPS_ABI_O64)) > -- return -2; > -+ /* Handle special cases for structures <= 128 bytes in newer ABIs */ > -+ if (abi == MIPS_ABI_EABI32 || abi == MIPS_ABI_EABI64 || > -+ abi == MIPS_ABI_N32 || abi == MIPS_ABI_N64) > -+ { > -+ if (dwarf_aggregate_size (typedie, &size) == 0 && size <= 16) > -+ { > -+ /* > -+ * Special case in N64 / N32 - > -+ * structures containing only floats are returned in fp regs. > -+ * Everything else is returned in integer regs. > -+ */ > -+ if (tag != DW_TAG_union_type && > -+ (abi == MIPS_ABI_N32 || abi == MIPS_ABI_N64)) > -+ { > -+ int num_fpregs = get_struct_fpregs(typedie); > -+ if (num_fpregs == 1 || num_fpregs == 2) > -+ { > -+ *locp = loc_fpreg; > -+ if (num_fpregs == 1) > -+ return nloc_fpreg; > -+ else > -+ return nloc_fpregpair; > -+ } > -+ } > -+ > -+ *locp = loc_intreg; > -+ if (size <= 8) > -+ return nloc_intreg; > -+ else > -+ return nloc_intregpair; > -+ } > -+ } > -+ > -+ /* Fallthrough to handle large types */ > - > -+ case DW_TAG_array_type: > -+ large: > -+ /* Return large structures in memory */ > - *locp = loc_aggregate; > - return nloc_aggregate; > - } > diff --git a/patches/elfutils-0.176/0007-Add-mips-n64-relocation-format-hack.patch b/patches/elfutils-0.176/0007-Add-mips-n64-relocation-format-hack.patch > deleted file mode 100644 > index 46d7240ac2b7..000000000000 > --- a/patches/elfutils-0.176/0007-Add-mips-n64-relocation-format-hack.patch > +++ /dev/null > @@ -1,229 +0,0 @@ > -From: James Cowgill > -Date: Mon, 5 Jan 2015 15:17:02 +0000 > -Subject: [PATCH] Add mips n64 relocation format hack > - > -MIPSEL N64 ELF files use a slightly different format for storing relocation > -entries which is incompatible with the normal R_SYM / R_INFO macros. > -To workaround this, we rearrange the bytes in the relocation's r_info field > -when reading and writing the relocations. > - > -This patch also ensures that strip.c sets the correct value of e_machine > -before manipulating relocations so that these changes take effect. > - > -Signed-off-by: James Cowgill > - > -Imported from elfutils_0.176-1.debian.tar.xz > - > -Signed-off-by: Michael Olbrich > ---- > - libelf/gelf_getrel.c | 25 +++++++++++++++++++++++-- > - libelf/gelf_getrela.c | 25 +++++++++++++++++++++++-- > - libelf/gelf_update_rel.c | 20 +++++++++++++++++++- > - libelf/gelf_update_rela.c | 20 +++++++++++++++++++- > - src/strip.c | 17 +++++++++++++++++ > - 5 files changed, 101 insertions(+), 6 deletions(-) > - > -diff --git a/libelf/gelf_getrel.c b/libelf/gelf_getrel.c > -index 309e3d37457b..2a81a97c9a45 100644 > ---- a/libelf/gelf_getrel.c > -+++ b/libelf/gelf_getrel.c > -@@ -36,6 +36,7 @@ > - > - #include "libelfP.h" > - > -+#define EF_MIPS_ABI 0x0000F000 > - > - GElf_Rel * > - gelf_getrel (Elf_Data *data, int ndx, GElf_Rel *dst) > -@@ -89,8 +90,28 @@ gelf_getrel (Elf_Data *data, int ndx, GElf_Rel *dst) > - result = NULL; > - } > - else > -- result = memcpy (dst, &((Elf64_Rel *) data_scn->d.d_buf)[ndx], > -- sizeof (Elf64_Rel)); > -+ { > -+ GElf_Ehdr hdr; > -+ result = memcpy (dst, &((Elf64_Rel *) data_scn->d.d_buf)[ndx], > -+ sizeof (Elf64_Rel)); > -+ > -+ if (gelf_getehdr(scn->elf, &hdr) != NULL && > -+ hdr.e_ident[EI_DATA] == ELFDATA2LSB && > -+ hdr.e_machine == EM_MIPS && > -+ (hdr.e_flags & EF_MIPS_ABI) == 0) > -+ { > -+ /* > -+ * The relocation format is mangled on MIPSEL N64 > -+ * We'll adjust it so at least R_SYM will work on it > -+ */ > -+ GElf_Xword r_info = dst->r_info; > -+ dst->r_info = (r_info << 32) | > -+ ((r_info >> 8) & 0xFF000000) | > -+ ((r_info >> 24) & 0x00FF0000) | > -+ ((r_info >> 40) & 0x0000FF00) | > -+ ((r_info >> 56) & 0x000000FF); > -+ } > -+ } > - } > - > - rwlock_unlock (scn->elf->lock); > -diff --git a/libelf/gelf_getrela.c b/libelf/gelf_getrela.c > -index d695f6593dc4..1f42a80b4c7e 100644 > ---- a/libelf/gelf_getrela.c > -+++ b/libelf/gelf_getrela.c > -@@ -36,6 +36,7 @@ > - > - #include "libelfP.h" > - > -+#define EF_MIPS_ABI 0x0000F000 > - > - GElf_Rela * > - gelf_getrela (Elf_Data *data, int ndx, GElf_Rela *dst) > -@@ -90,8 +91,28 @@ gelf_getrela (Elf_Data *data, int ndx, GElf_Rela *dst) > - result = NULL; > - } > - else > -- result = memcpy (dst, &((Elf64_Rela *) data_scn->d.d_buf)[ndx], > -- sizeof (Elf64_Rela)); > -+ { > -+ GElf_Ehdr hdr; > -+ result = memcpy (dst, &((Elf64_Rela *) data_scn->d.d_buf)[ndx], > -+ sizeof (Elf64_Rela)); > -+ > -+ if (gelf_getehdr(scn->elf, &hdr) != NULL && > -+ hdr.e_ident[EI_DATA] == ELFDATA2LSB && > -+ hdr.e_machine == EM_MIPS && > -+ (hdr.e_flags & EF_MIPS_ABI) == 0) > -+ { > -+ /* > -+ * The relocation format is mangled on MIPSEL N64 > -+ * We'll adjust it so at least R_SYM will work on it > -+ */ > -+ GElf_Xword r_info = dst->r_info; > -+ dst->r_info = (r_info << 32) | > -+ ((r_info >> 8) & 0xFF000000) | > -+ ((r_info >> 24) & 0x00FF0000) | > -+ ((r_info >> 40) & 0x0000FF00) | > -+ ((r_info >> 56) & 0x000000FF); > -+ } > -+ } > - } > - > - rwlock_unlock (scn->elf->lock); > -diff --git a/libelf/gelf_update_rel.c b/libelf/gelf_update_rel.c > -index 14f62e973a5e..90955566e4ad 100644 > ---- a/libelf/gelf_update_rel.c > -+++ b/libelf/gelf_update_rel.c > -@@ -36,6 +36,7 @@ > - > - #include "libelfP.h" > - > -+#define EF_MIPS_ABI 0x0000F000 > - > - int > - gelf_update_rel (Elf_Data *dst, int ndx, GElf_Rel *src) > -@@ -86,6 +87,9 @@ gelf_update_rel (Elf_Data *dst, int ndx, GElf_Rel *src) > - } > - else > - { > -+ GElf_Ehdr hdr; > -+ GElf_Rel value = *src; > -+ > - /* Check whether we have to resize the data buffer. */ > - if (INVALID_NDX (ndx, Elf64_Rel, &data_scn->d)) > - { > -@@ -93,7 +97,21 @@ gelf_update_rel (Elf_Data *dst, int ndx, GElf_Rel *src) > - goto out; > - } > - > -- ((Elf64_Rel *) data_scn->d.d_buf)[ndx] = *src; > -+ if (gelf_getehdr(scn->elf, &hdr) != NULL && > -+ hdr.e_ident[EI_DATA] == ELFDATA2LSB && > -+ hdr.e_machine == EM_MIPS && > -+ (hdr.e_flags & EF_MIPS_ABI) == 0) > -+ { > -+ /* Undo the MIPSEL N64 hack from gelf_getrel */ > -+ GElf_Xword r_info = value.r_info; > -+ value.r_info = (r_info >> 32) | > -+ ((r_info << 8) & 0x000000FF00000000) | > -+ ((r_info << 24) & 0x0000FF0000000000) | > -+ ((r_info << 40) & 0x00FF000000000000) | > -+ ((r_info << 56) & 0xFF00000000000000); > -+ } > -+ > -+ ((Elf64_Rel *) data_scn->d.d_buf)[ndx] = value; > - } > - > - result = 1; > -diff --git a/libelf/gelf_update_rela.c b/libelf/gelf_update_rela.c > -index 88252703976f..4caa85fb9f8e 100644 > ---- a/libelf/gelf_update_rela.c > -+++ b/libelf/gelf_update_rela.c > -@@ -36,6 +36,7 @@ > - > - #include "libelfP.h" > - > -+#define EF_MIPS_ABI 0x0000F000 > - > - int > - gelf_update_rela (Elf_Data *dst, int ndx, GElf_Rela *src) > -@@ -89,6 +90,9 @@ gelf_update_rela (Elf_Data *dst, int ndx, GElf_Rela *src) > - } > - else > - { > -+ GElf_Ehdr hdr; > -+ GElf_Rela value = *src; > -+ > - /* Check whether we have to resize the data buffer. */ > - if (INVALID_NDX (ndx, Elf64_Rela, &data_scn->d)) > - { > -@@ -96,7 +100,21 @@ gelf_update_rela (Elf_Data *dst, int ndx, GElf_Rela *src) > - goto out; > - } > - > -- ((Elf64_Rela *) data_scn->d.d_buf)[ndx] = *src; > -+ if (gelf_getehdr(scn->elf, &hdr) != NULL && > -+ hdr.e_ident[EI_DATA] == ELFDATA2LSB && > -+ hdr.e_machine == EM_MIPS && > -+ (hdr.e_flags & EF_MIPS_ABI) == 0) > -+ { > -+ /* Undo the MIPSEL N64 hack from gelf_getrel */ > -+ GElf_Xword r_info = value.r_info; > -+ value.r_info = (r_info >> 32) | > -+ ((r_info << 8) & 0x000000FF00000000) | > -+ ((r_info << 24) & 0x0000FF0000000000) | > -+ ((r_info << 40) & 0x00FF000000000000) | > -+ ((r_info << 56) & 0xFF00000000000000); > -+ } > -+ > -+ ((Elf64_Rela *) data_scn->d.d_buf)[ndx] = value; > - } > - > - result = 1; > -diff --git a/src/strip.c b/src/strip.c > -index a73009d980e6..75bd7ba60eb8 100644 > ---- a/src/strip.c > -+++ b/src/strip.c > -@@ -1062,6 +1062,23 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, > - goto fail; > - } > - > -+ /* Copy identity part of the ELF header now */ > -+ newehdr = gelf_getehdr (newelf, &newehdr_mem); > -+ if (newehdr == NULL) > -+ INTERNAL_ERROR (fname); > -+ > -+ memcpy (newehdr->e_ident, ehdr->e_ident, EI_NIDENT); > -+ newehdr->e_type = ehdr->e_type; > -+ newehdr->e_machine = ehdr->e_machine; > -+ newehdr->e_version = ehdr->e_version; > -+ > -+ if (gelf_update_ehdr (newelf, newehdr) == 0) > -+ { > -+ error (0, 0, gettext ("%s: error while creating ELF header: %s"), > -+ fname, elf_errmsg (-1)); > -+ return 1; > -+ } > -+ > - /* Copy over the old program header if needed. */ > - if (phnum > 0) > - { > diff --git a/patches/elfutils-0.176/0009-mips_cfi.patch b/patches/elfutils-0.176/0009-mips_cfi.patch > deleted file mode 100644 > index 8920f0882d69..000000000000 > --- a/patches/elfutils-0.176/0009-mips_cfi.patch > +++ /dev/null > @@ -1,125 +0,0 @@ > -From: Michael Olbrich > -Date: Mon, 4 Mar 2019 13:20:36 +0100 > -Subject: [PATCH] mips_cfi > - > -Imported from elfutils_0.176-1.debian.tar.xz > - > -Signed-off-by: Michael Olbrich > ---- > - backends/Makefile.am | 2 +- > - backends/mips_cfi.c | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++ > - backends/mips_init.c | 1 + > - 3 files changed, 82 insertions(+), 1 deletion(-) > - create mode 100644 backends/mips_cfi.c > - > -diff --git a/backends/Makefile.am b/backends/Makefile.am > -index ba84da61cd20..8949a59210c3 100644 > ---- a/backends/Makefile.am > -+++ b/backends/Makefile.am > -@@ -141,7 +141,7 @@ parisc_SRCS = parisc_init.c parisc_symbol.c parisc_regs.c parisc_retval.c > - libebl_parisc_pic_a_SOURCES = $(parisc_SRCS) > - am_libebl_parisc_pic_a_OBJECTS = $(parisc_SRCS:.c=.os) > - > --mips_SRCS = mips_init.c mips_symbol.c mips_regs.c mips_retval.c > -+mips_SRCS = mips_init.c mips_symbol.c mips_regs.c mips_retval.c mips_cfi.c > - libebl_mips_pic_a_SOURCES = $(mips_SRCS) > - am_libebl_mips_pic_a_OBJECTS = $(mips_SRCS:.c=.os) > - > -diff --git a/backends/mips_cfi.c b/backends/mips_cfi.c > -new file mode 100644 > -index 000000000000..9ffdab5beb03 > ---- /dev/null > -+++ b/backends/mips_cfi.c > -@@ -0,0 +1,80 @@ > -+/* MIPS ABI-specified defaults for DWARF CFI. > -+ Copyright (C) 2018 Kurt Roeckx, 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[] = > -+ { > -+ /* Call-saved regs. */ > -+ DW_CFA_same_value, ULEB128_7 (16), /* $16 */ > -+ DW_CFA_same_value, ULEB128_7 (17), /* $17 */ > -+ DW_CFA_same_value, ULEB128_7 (18), /* $18 */ > -+ DW_CFA_same_value, ULEB128_7 (19), /* $19 */ > -+ DW_CFA_same_value, ULEB128_7 (20), /* $20 */ > -+ DW_CFA_same_value, ULEB128_7 (21), /* $21 */ > -+ DW_CFA_same_value, ULEB128_7 (22), /* $22 */ > -+ DW_CFA_same_value, ULEB128_7 (23), /* $23 */ > -+ DW_CFA_same_value, ULEB128_7 (28), /* $28 */ > -+ DW_CFA_same_value, ULEB128_7 (29), /* $29 */ > -+ DW_CFA_same_value, ULEB128_7 (30), /* $30 */ > -+ > -+ DW_CFA_same_value, ULEB128_7 (52), /* $f20 */ > -+ DW_CFA_same_value, ULEB128_7 (53), /* $f21 */ > -+ DW_CFA_same_value, ULEB128_7 (54), /* $f22 */ > -+ DW_CFA_same_value, ULEB128_7 (55), /* $f23 */ > -+ DW_CFA_same_value, ULEB128_7 (56), /* $f24 */ > -+ DW_CFA_same_value, ULEB128_7 (57), /* $f25 */ > -+ DW_CFA_same_value, ULEB128_7 (58), /* $f26 */ > -+ DW_CFA_same_value, ULEB128_7 (59), /* $f27 */ > -+ DW_CFA_same_value, ULEB128_7 (60), /* $f28 */ > -+ DW_CFA_same_value, ULEB128_7 (61), /* $f29 */ > -+ DW_CFA_same_value, ULEB128_7 (62), /* $f30 */ > -+ DW_CFA_same_value, ULEB128_7 (63), /* $f31 */ > -+ > -+ /* The CFA is the SP. */ > -+ DW_CFA_def_cfa, 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 = 4; > -+ > -+ abi_info->return_address_register = 31; /* $31 */ > -+ > -+ return 0; > -+} > -diff --git a/backends/mips_init.c b/backends/mips_init.c > -index 8482e7fe6e96..bce5abe1d98a 100644 > ---- a/backends/mips_init.c > -+++ b/backends/mips_init.c > -@@ -50,6 +50,7 @@ mips_init (Elf *elf __attribute__ ((unused)), > - HOOK (eh, reloc_simple_type); > - HOOK (eh, return_value_location); > - HOOK (eh, register_info); > -+ HOOK (eh, abi_cfi); > - > - return MODVERSION; > - } > diff --git a/patches/elfutils-0.176/series b/patches/elfutils-0.176/series > deleted file mode 100644 > index 7736db9475ed..000000000000 > --- a/patches/elfutils-0.176/series > +++ /dev/null > @@ -1,12 +0,0 @@ > -# generated by git-ptx-patches > -#tag:base --start-number 1 > -0001-hppa_backend.patch > -0002-arm_backend.patch > -0003-mips_backend.patch > -0004-Make-readelf-w-output-debug-information-on-mips.patch > -0005-Ignore-differences-between-mips-machine-identifiers.patch > -0006-Add-support-for-mips64-abis-in-mips_retval.c.patch > -0007-Add-mips-n64-relocation-format-hack.patch > -0008-disable-Werror-as-it-tends-to-break-with-new-gcc-ver.patch > -0009-mips_cfi.patch > -# f467d91cf75ddf16b549e11a748e16ba - git-ptx-patches magic > diff --git a/patches/elfutils-0.176/0008-disable-Werror-as-it-tends-to-break-with-new-gcc-ver.patch b/patches/elfutils-0.180/0001-disable-Werror-as-it-tends-to-break-with-new-gcc-ver.patch > similarity index 51% > rename from patches/elfutils-0.176/0008-disable-Werror-as-it-tends-to-break-with-new-gcc-ver.patch > rename to patches/elfutils-0.180/0001-disable-Werror-as-it-tends-to-break-with-new-gcc-ver.patch > index 667043c89bd4..15ec6a6d8ccd 100644 > --- a/patches/elfutils-0.176/0008-disable-Werror-as-it-tends-to-break-with-new-gcc-ver.patch > +++ b/patches/elfutils-0.180/0001-disable-Werror-as-it-tends-to-break-with-new-gcc-ver.patch > @@ -1,16 +1,16 @@ > From: Helmut Grohne > -Date: Mon, 4 Mar 2019 13:20:36 +0100 > +Date: Thu, 30 Jul 2020 20:37:12 +0200 > Subject: [PATCH] disable -Werror as it tends to break with new gcc versions > > -Imported from elfutils_0.176-1.debian.tar.xz > +Patch imported from debian 0.180-1. > > -Signed-off-by: Michael Olbrich > +Signed-off-by: Robert Schwebel > --- > - config/eu.am | 1 - > - 1 file changed, 1 deletion(-) > + config/eu.am | 2 -- > + 1 file changed, 2 deletions(-) > > diff --git a/config/eu.am b/config/eu.am > -index 82acda3ab2cd..dede5c65811f 100644 > +index 6c3c444f143a..3bc0dc95b1fd 100644 > --- a/config/eu.am > +++ b/config/eu.am > @@ -73,7 +73,6 @@ AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \ > @@ -21,3 +21,11 @@ index 82acda3ab2cd..dede5c65811f 100644 > $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ > $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \ > $(if $($(*F)_no_Wpacked_not_aligned),-Wno-packed-not-aligned,) \ > +@@ -83,7 +82,6 @@ AM_CXXFLAGS = -std=c++11 -Wall -Wshadow \ > + -Wtrampolines \ > + $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \ > + $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \ > +- $(if $($(*F)_no_Werror),,-Werror) \ > + $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ > + $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \ > + $(if $($(*F)_no_Wpacked_not_aligned),-Wno-packed-not-aligned,) \ > diff --git a/patches/elfutils-0.176/autogen.sh b/patches/elfutils-0.180/autogen.sh > similarity index 100% > rename from patches/elfutils-0.176/autogen.sh > rename to patches/elfutils-0.180/autogen.sh > diff --git a/patches/elfutils-0.180/series b/patches/elfutils-0.180/series > new file mode 100644 > index 000000000000..6e83826e3150 > --- /dev/null > +++ b/patches/elfutils-0.180/series > @@ -0,0 +1,4 @@ > +# generated by git-ptx-patches > +#tag:base --start-number 1 > +0001-disable-Werror-as-it-tends-to-break-with-new-gcc-ver.patch > +# 881dc427356ca2d007dd3d3f576ea5a8 - git-ptx-patches magic > diff --git a/rules/host-libelf.make b/rules/host-libelf.make > index 7a319b9f316c..25ff97259c41 100644 > --- a/rules/host-libelf.make > +++ b/rules/host-libelf.make > @@ -28,11 +28,13 @@ HOST_LIBELF_CONF_OPT := \ > --disable-gcov \ > --disable-sanitize-undefined \ > --disable-valgrind \ > + --disable-valgrind-annotations \ > --disable-tests-rpath \ > - --enable-libebl-subdir=elfutils \ > --enable-textrelcheck \ > --enable-symbol-versioning \ > --disable-nls \ > + --disable-debuginfod \ > + --without-valgrind \ > --with-zlib \ > --without-bzlib \ > --without-lzma \ > diff --git a/rules/libelf.make b/rules/libelf.make > index 815ac1205f1c..21cbf3b32c0d 100644 > --- a/rules/libelf.make > +++ b/rules/libelf.make > @@ -15,8 +15,8 @@ PACKAGES-$(PTXCONF_LIBELF) += libelf > # > # Paths and names > # > -LIBELF_VERSION := 0.176 > -LIBELF_MD5 := 077e4f49320cad82bf17a997068b1db9 > +LIBELF_VERSION := 0.180 > +LIBELF_MD5 := 23feddb1b3859b03ffdbaf53ba6bd09b > LIBELF := elfutils-$(LIBELF_VERSION) > LIBELF_SUFFIX := tar.bz2 > LIBELF_URL := https://sourceware.org/elfutils/ftp/$(LIBELF_VERSION)/$(LIBELF).$(LIBELF_SUFFIX) > @@ -42,11 +42,13 @@ LIBELF_CONF_OPT := \ > --disable-gcov \ > --disable-sanitize-undefined \ > --disable-valgrind \ > + --disable-valgrind-annotations \ > --disable-tests-rpath \ > - --enable-libebl-subdir=elfutils \ > --enable-textrelcheck \ > --enable-symbol-versioning \ > --disable-nls \ > + --disable-debuginfod \ > + --without-valgrind \ > --with-zlib \ > --without-bzlib \ > --without-lzma \ > @@ -74,10 +76,6 @@ $(STATEDIR)/libelf.targetinstall: > > ifdef PTXCONF_LIBELF_LIBDW > @$(call install_lib, libelf, 0, 0, 0644, libdw-$(LIBELF_VERSION)) > - @$(call install_lib, libelf, 0, 0, 0644, \ > - elfutils/libebl_$(LIBELF_ARCH)-$(LIBELF_VERSION)) > - @$(call install_link, libelf, libebl_$(LIBELF_ARCH)-$(LIBELF_VERSION).so, \ > - /usr/lib/elfutils/libebl_$(LIBELF_ARCH).so) > endif > > ifdef PTXCONF_LIBELF_LIBASM _______________________________________________ ptxdist mailing list ptxdist@pengutronix.de To unsubscribe, send a mail with subject "unsubscribe" to ptxdist-request@pengutronix.de