From 8556cc205cd9e1e984f1ac3e20c88d31ae7e43a3 Mon Sep 17 00:00:00 2001 From: Kevin Mihelich Date: Wed, 21 Jul 2021 21:37:31 -0600 Subject: [PATCH 3/3] Fix eu-strip build for newer GCC --- .../third_party/eu-strip/0001-gcc-fixes.patch | 656 ++++++++++++++++++ buildtools/third_party/eu-strip/build.sh | 3 +- 2 files changed, 658 insertions(+), 1 deletion(-) create mode 100644 buildtools/third_party/eu-strip/0001-gcc-fixes.patch diff --git a/buildtools/third_party/eu-strip/0001-gcc-fixes.patch b/buildtools/third_party/eu-strip/0001-gcc-fixes.patch new file mode 100644 index 0000000000000..14f45f2662938 --- /dev/null +++ b/buildtools/third_party/eu-strip/0001-gcc-fixes.patch @@ -0,0 +1,656 @@ +From 62350f68539357e15fe7f6e1ec35be36af63fe43 Mon Sep 17 00:00:00 2001 +From: Kevin Mihelich +Date: Thu, 17 Feb 2022 19:58:58 -0700 +Subject: [PATCH] gcc fixes + +--- + backends/Makefile.am | 8 ++--- + backends/i386_init.c | 1 - + backends/i386_syscall.c | 50 --------------------------- + backends/linux-core-note.c | 2 +- + backends/ppc64_init.c | 1 - + backends/ppc_init.c | 1 - + backends/ppc_syscall.c | 53 ----------------------------- + backends/x86_64_init.c | 1 - + backends/x86_64_syscall.c | 50 --------------------------- + libdw/dwarf_frame_register.c | 2 +- + libdw/libdw.h | 8 +++-- + libebl/Makefile.am | 2 +- + libebl/ebl-hooks.h | 4 --- + libebl/ebl_syscall_abi.c | 40 ---------------------- + libebl/eblopenbackend.c | 17 ---------- + libebl/libebl.h | 8 ----- + libelf/libelfP.h | 4 +-- + src/ar.c | 66 +++++++++++++++++++++++++----------- + src/elflint.c | 2 +- + tests/addrcfi.c | 2 +- + 20 files changed, 62 insertions(+), 260 deletions(-) + delete mode 100644 backends/i386_syscall.c + delete mode 100644 backends/ppc_syscall.c + delete mode 100644 backends/x86_64_syscall.c + delete mode 100644 libebl/ebl_syscall_abi.c + +diff --git a/backends/Makefile.am b/backends/Makefile.am +index 37dc2d20..b554894d 100644 +--- a/backends/Makefile.am ++++ b/backends/Makefile.am +@@ -48,7 +48,7 @@ libdw = ../libdw/libdw.so + libeu = ../lib/libeu.a + + i386_SRCS = i386_init.c i386_symbol.c i386_corenote.c i386_cfi.c \ +- i386_retval.c i386_regs.c i386_auxv.c i386_syscall.c \ ++ i386_retval.c i386_regs.c i386_auxv.c \ + i386_initreg.c i386_unwind.c + cpu_i386 = ../libcpu/libcpu_i386.a + libebl_i386_pic_a_SOURCES = $(i386_SRCS) +@@ -59,7 +59,7 @@ libebl_sh_pic_a_SOURCES = $(sh_SRCS) + am_libebl_sh_pic_a_OBJECTS = $(sh_SRCS:.c=.os) + + x86_64_SRCS = x86_64_init.c x86_64_symbol.c x86_64_corenote.c x86_64_cfi.c \ +- x86_64_retval.c x86_64_regs.c i386_auxv.c x86_64_syscall.c \ ++ x86_64_retval.c x86_64_regs.c i386_auxv.c \ + x86_64_initreg.c x86_64_unwind.c x32_corenote.c + cpu_x86_64 = ../libcpu/libcpu_x86_64.a + libebl_x86_64_pic_a_SOURCES = $(x86_64_SRCS) +@@ -92,13 +92,13 @@ libebl_sparc_pic_a_SOURCES = $(sparc_SRCS) + am_libebl_sparc_pic_a_OBJECTS = $(sparc_SRCS:.c=.os) + + ppc_SRCS = ppc_init.c ppc_symbol.c ppc_retval.c ppc_regs.c \ +- ppc_corenote.c ppc_auxv.c ppc_attrs.c ppc_syscall.c \ ++ ppc_corenote.c ppc_auxv.c ppc_attrs.c \ + ppc_cfi.c ppc_initreg.c + libebl_ppc_pic_a_SOURCES = $(ppc_SRCS) + am_libebl_ppc_pic_a_OBJECTS = $(ppc_SRCS:.c=.os) + + ppc64_SRCS = ppc64_init.c ppc64_symbol.c ppc64_retval.c \ +- ppc64_corenote.c ppc_regs.c ppc_auxv.c ppc_attrs.c ppc_syscall.c \ ++ ppc64_corenote.c ppc_regs.c ppc_auxv.c ppc_attrs.c \ + ppc_cfi.c ppc_initreg.c ppc64_unwind.c ppc64_resolve_sym.c + libebl_ppc64_pic_a_SOURCES = $(ppc64_SRCS) + am_libebl_ppc64_pic_a_OBJECTS = $(ppc64_SRCS:.c=.os) +diff --git a/backends/i386_init.c b/backends/i386_init.c +index fc1587a9..847a11c0 100644 +--- a/backends/i386_init.c ++++ b/backends/i386_init.c +@@ -58,7 +58,6 @@ i386_init (Elf *elf __attribute__ ((unused)), + HOOK (eh, debugscn_p); + HOOK (eh, return_value_location); + HOOK (eh, register_info); +- HOOK (eh, syscall_abi); + HOOK (eh, auxv_info); + HOOK (eh, disasm); + HOOK (eh, abi_cfi); +diff --git a/backends/i386_syscall.c b/backends/i386_syscall.c +deleted file mode 100644 +index 535dcd86..00000000 +--- a/backends/i386_syscall.c ++++ /dev/null +@@ -1,50 +0,0 @@ +-/* Linux/i386 system call ABI in DWARF register numbers. +- Copyright (C) 2008 Red Hat, Inc. +- This file is part of elfutils. +- +- This file is free software; you can redistribute it and/or modify +- it under the terms of either +- +- * the GNU Lesser General Public License as published by the Free +- Software Foundation; either version 3 of the License, or (at +- your option) any later version +- +- or +- +- * the GNU General Public License as published by the Free +- Software Foundation; either version 2 of the License, or (at +- your option) any later version +- +- or both in parallel, as here. +- +- elfutils is distributed in the hope that it will be useful, but +- WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- General Public License for more details. +- +- You should have received copies of the GNU General Public License and +- the GNU Lesser General Public License along with this program. If +- not, see . */ +- +-#ifdef HAVE_CONFIG_H +-# include +-#endif +- +-#define BACKEND i386_ +-#include "libebl_CPU.h" +- +-int +-i386_syscall_abi (Ebl *ebl __attribute__ ((unused)), +- int *sp, int *pc, int *callno, int args[6]) +-{ +- *sp = 4; /* %esp */ +- *pc = 8; /* %eip */ +- *callno = 0; /* %eax */ +- args[0] = 3; /* %ebx */ +- args[1] = 1; /* %ecx */ +- args[2] = 2; /* %edx */ +- args[3] = 6; /* %esi */ +- args[4] = 7; /* %edi */ +- args[5] = 5; /* %ebp */ +- return 0; +-} +diff --git a/backends/linux-core-note.c b/backends/linux-core-note.c +index 67638d70..08282ba4 100644 +--- a/backends/linux-core-note.c ++++ b/backends/linux-core-note.c +@@ -111,7 +111,7 @@ struct EBLHOOK(prstatus) + FIELD (INT, pr_fpvalid); + } + #ifdef ALIGN_PRSTATUS +- __attribute__ ((packed, aligned (ALIGN_PRSTATUS))) ++ attribute_packed __attribute__ ((aligned (ALIGN_PRSTATUS))) + #endif + ; + +diff --git a/backends/ppc64_init.c b/backends/ppc64_init.c +index e5670338..ec36498c 100644 +--- a/backends/ppc64_init.c ++++ b/backends/ppc64_init.c +@@ -64,7 +64,6 @@ ppc64_init (Elf *elf __attribute__ ((unused)), + HOOK (eh, bss_plt_p); + HOOK (eh, return_value_location); + HOOK (eh, register_info); +- HOOK (eh, syscall_abi); + HOOK (eh, core_note); + HOOK (eh, auxv_info); + HOOK (eh, check_object_attribute); +diff --git a/backends/ppc_init.c b/backends/ppc_init.c +index aea9f2d7..ab0a00c7 100644 +--- a/backends/ppc_init.c ++++ b/backends/ppc_init.c +@@ -60,7 +60,6 @@ ppc_init (Elf *elf __attribute__ ((unused)), + HOOK (eh, bss_plt_p); + HOOK (eh, return_value_location); + HOOK (eh, register_info); +- HOOK (eh, syscall_abi); + HOOK (eh, core_note); + HOOK (eh, auxv_info); + HOOK (eh, check_object_attribute); +diff --git a/backends/ppc_syscall.c b/backends/ppc_syscall.c +deleted file mode 100644 +index b1b9c52b..00000000 +--- a/backends/ppc_syscall.c ++++ /dev/null +@@ -1,53 +0,0 @@ +-/* Linux/PPC system call ABI in DWARF register numbers. +- Copyright (C) 2008 Red Hat, Inc. +- This file is part of elfutils. +- +- This file is free software; you can redistribute it and/or modify +- it under the terms of either +- +- * the GNU Lesser General Public License as published by the Free +- Software Foundation; either version 3 of the License, or (at +- your option) any later version +- +- or +- +- * the GNU General Public License as published by the Free +- Software Foundation; either version 2 of the License, or (at +- your option) any later version +- +- or both in parallel, as here. +- +- elfutils is distributed in the hope that it will be useful, but +- WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- General Public License for more details. +- +- You should have received copies of the GNU General Public License and +- the GNU Lesser General Public License along with this program. If +- not, see . */ +- +-#ifdef HAVE_CONFIG_H +-# include +-#endif +- +-#define BACKEND ppc_ +-#include "libebl_CPU.h" +- +-int +-ppc_syscall_abi (Ebl *ebl __attribute__ ((unused)), +- int *sp, int *pc, int *callno, int args[6]) +-{ +- *sp = 1; +- *pc = -1; +- *callno = 0; +- args[0] = 3; +- args[1] = 4; +- args[2] = 5; +- args[3] = 6; +- args[4] = 7; +- args[5] = 8; +- return 0; +-} +- +-__typeof (ppc_syscall_abi) +-ppc64_syscall_abi __attribute__ ((alias ("ppc_syscall_abi"))); +diff --git a/backends/x86_64_init.c b/backends/x86_64_init.c +index adfa4791..a3838b69 100644 +--- a/backends/x86_64_init.c ++++ b/backends/x86_64_init.c +@@ -61,7 +61,6 @@ x86_64_init (Elf *elf __attribute__ ((unused)), + HOOK (eh, core_note); + HOOK (eh, return_value_location); + HOOK (eh, register_info); +- HOOK (eh, syscall_abi); + HOOK (eh, auxv_info); + HOOK (eh, disasm); + HOOK (eh, abi_cfi); +diff --git a/backends/x86_64_syscall.c b/backends/x86_64_syscall.c +deleted file mode 100644 +index 0deb8bad..00000000 +--- a/backends/x86_64_syscall.c ++++ /dev/null +@@ -1,50 +0,0 @@ +-/* Linux/x86-64 system call ABI in DWARF register numbers. +- Copyright (C) 2008 Red Hat, Inc. +- This file is part of elfutils. +- +- This file is free software; you can redistribute it and/or modify +- it under the terms of either +- +- * the GNU Lesser General Public License as published by the Free +- Software Foundation; either version 3 of the License, or (at +- your option) any later version +- +- or +- +- * the GNU General Public License as published by the Free +- Software Foundation; either version 2 of the License, or (at +- your option) any later version +- +- or both in parallel, as here. +- +- elfutils is distributed in the hope that it will be useful, but +- WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- General Public License for more details. +- +- You should have received copies of the GNU General Public License and +- the GNU Lesser General Public License along with this program. If +- not, see . */ +- +-#ifdef HAVE_CONFIG_H +-# include +-#endif +- +-#define BACKEND x86_64_ +-#include "libebl_CPU.h" +- +-int +-x86_64_syscall_abi (Ebl *ebl __attribute__ ((unused)), +- int *sp, int *pc, int *callno, int args[6]) +-{ +- *sp = 7; /* %rsp */ +- *pc = 16; /* %rip */ +- *callno = 0; /* %rax */ +- args[0] = 5; /* %rdi */ +- args[1] = 4; /* %rsi */ +- args[2] = 1; /* %rdx */ +- args[3] = 10; /* %r10 */ +- args[4] = 8; /* %r8 */ +- args[5] = 9; /* %r9 */ +- return 0; +-} +diff --git a/libdw/dwarf_frame_register.c b/libdw/dwarf_frame_register.c +index 37e8e917..5b5b1e33 100644 +--- a/libdw/dwarf_frame_register.c ++++ b/libdw/dwarf_frame_register.c +@@ -34,7 +34,7 @@ + #include + + int +-dwarf_frame_register (Dwarf_Frame *fs, int regno, Dwarf_Op *ops_mem, ++dwarf_frame_register (Dwarf_Frame *fs, int regno, Dwarf_Op ops_mem[3], + Dwarf_Op **ops, size_t *nops) + { + /* Maybe there was a previous error. */ +diff --git a/libdw/libdw.h b/libdw/libdw.h +index 63a38ff9..75fcbd9d 100644 +--- a/libdw/libdw.h ++++ b/libdw/libdw.h +@@ -977,9 +977,11 @@ extern int dwarf_frame_cfa (Dwarf_Frame *frame, Dwarf_Op **ops, size_t *nops) + caller's REGNO is "same_value", i.e. this frame did not change it; + ask the caller frame where to find it. + +- For common simple expressions *OPS is OPS_MEM. For arbitrary DWARF +- expressions in the CFI, *OPS is an internal pointer that can be used as +- long as the Dwarf_CFI used to create FRAME remains alive. */ ++ For common simple expressions *OPS is OPS_MEM (which is a caller ++ owned array for at least 3 Dwarf_Ops). For arbitrary DWARF ++ expressions in the CFI, *OPS is an internal pointer that can be ++ used as long as the Dwarf_CFI used to create FRAME remains ++ alive. */ + extern int dwarf_frame_register (Dwarf_Frame *frame, int regno, + Dwarf_Op ops_mem[3], + Dwarf_Op **ops, size_t *nops) +diff --git a/libebl/Makefile.am b/libebl/Makefile.am +index 2491df80..b58ec11a 100644 +--- a/libebl/Makefile.am ++++ b/libebl/Makefile.am +@@ -51,7 +51,7 @@ gen_SOURCES = eblopenbackend.c eblclosebackend.c \ + ebl_check_special_symbol.c eblbsspltp.c eblretval.c \ + eblreginfo.c eblnonerelocp.c eblrelativerelocp.c \ + eblsysvhashentrysize.c eblauxvinfo.c eblcheckobjattr.c \ +- ebl_check_special_section.c ebl_syscall_abi.c eblabicfi.c \ ++ ebl_check_special_section.c eblabicfi.c \ + eblstother.c eblinitreg.c ebldwarftoregno.c eblnormalizepc.c \ + eblunwind.c eblresolvesym.c eblcheckreloctargettype.c \ + ebl_data_marker_symbol.c +diff --git a/libebl/ebl-hooks.h b/libebl/ebl-hooks.h +index f3a0e64a..5c85289d 100644 +--- a/libebl/ebl-hooks.h ++++ b/libebl/ebl-hooks.h +@@ -142,10 +142,6 @@ ssize_t EBLHOOK(register_info) (Ebl *ebl, + const char **prefix, const char **setname, + int *bits, int *type); + +-/* Return system call ABI registers. */ +-int EBLHOOK(syscall_abi) (Ebl *ebl, int *sp, int *pc, +- int *callno, int args[6]); +- + /* Disassembler function. */ + int EBLHOOK(disasm) (Ebl *ebl, const uint8_t **startp, const uint8_t *end, + GElf_Addr addr, const char *fmt, DisasmOutputCB_t outcb, +diff --git a/libebl/ebl_syscall_abi.c b/libebl/ebl_syscall_abi.c +deleted file mode 100644 +index a25369d2..00000000 +--- a/libebl/ebl_syscall_abi.c ++++ /dev/null +@@ -1,40 +0,0 @@ +-/* Return system call ABI mapped to DWARF register numbers. +- Copyright (C) 2008 Red Hat, Inc. +- This file is part of elfutils. +- +- This file is free software; you can redistribute it and/or modify +- it under the terms of 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 +- +- +-int +-ebl_syscall_abi (Ebl *ebl, int *sp, int *pc, int *callno, int *args) +-{ +- return ebl != NULL ? ebl->syscall_abi (ebl, sp, pc, callno, args) : -1; +-} +diff --git a/libebl/eblopenbackend.c b/libebl/eblopenbackend.c +index 1f814776..fbd78e8a 100644 +--- a/libebl/eblopenbackend.c ++++ b/libebl/eblopenbackend.c +@@ -196,8 +196,6 @@ static ssize_t default_register_info (Ebl *ebl, + const char **prefix, + const char **setname, + int *bits, int *type); +-static int default_syscall_abi (Ebl *ebl, int *sp, int *pc, +- int *callno, int args[6]); + static bool default_check_object_attribute (Ebl *ebl, const char *vendor, + int tag, uint64_t value, + const char **tag_name, +@@ -241,7 +239,6 @@ fill_defaults (Ebl *result) + result->bss_plt_p = default_bss_plt_p; + result->return_value_location = default_return_value_location; + result->register_info = default_register_info; +- result->syscall_abi = default_syscall_abi; + result->check_object_attribute = default_check_object_attribute; + result->check_reloc_target_type = default_check_reloc_target_type; + result->disasm = NULL; +@@ -717,20 +714,6 @@ default_register_info (Ebl *ebl __attribute__ ((unused)), + return snprintf (name, namelen, "reg%d", regno); + } + +-static int +-default_syscall_abi (Ebl *ebl __attribute__ ((unused)), +- int *sp, int *pc, int *callno, int args[6]) +-{ +- *sp = *pc = *callno = -1; +- args[0] = -1; +- args[1] = -1; +- args[2] = -1; +- args[3] = -1; +- args[4] = -1; +- args[5] = -1; +- return -1; +-} +- + static bool + default_check_object_attribute (Ebl *ebl __attribute__ ((unused)), + const char *vendor __attribute__ ((unused)), +diff --git a/libebl/libebl.h b/libebl/libebl.h +index 882bdb99..5200b934 100644 +--- a/libebl/libebl.h ++++ b/libebl/libebl.h +@@ -243,14 +243,6 @@ extern ssize_t ebl_register_info (Ebl *ebl, + const char **prefix, const char **setname, + int *bits, int *type); + +-/* Fill in the DWARF register numbers for the registers used in system calls. +- The SP and PC are what kernel reports call the user stack pointer and PC. +- The CALLNO and ARGS are the system call number and incoming arguments. +- Each of these is filled with the DWARF register number corresponding, +- or -1 if there is none. Returns zero when the information is available. */ +-extern int ebl_syscall_abi (Ebl *ebl, int *sp, int *pc, +- int *callno, int args[6]); +- + /* Supply the ABI-specified state of DWARF CFI before CIE initial programs. + + The DWARF 3.0 spec says that the default initial states of all registers +diff --git a/libelf/libelfP.h b/libelf/libelfP.h +index 7ee6625a..4007301b 100644 +--- a/libelf/libelfP.h ++++ b/libelf/libelfP.h +@@ -463,9 +463,9 @@ extern Elf_Type __libelf_data_type (Elf *elf, int sh_type) internal_function; + These functions cannot be marked internal since they are aliases + of the export elfXX_fsize functions.*/ + extern size_t __elf32_msize (Elf_Type __type, size_t __count, +- unsigned int __version); ++ unsigned int __version) __const_attribute__; + extern size_t __elf64_msize (Elf_Type __type, size_t __count, +- unsigned int __version); ++ unsigned int __version) __const_attribute__; + + + /* Create Elf descriptor from memory image. */ +diff --git a/src/ar.c b/src/ar.c +index ec32cee5..818115bd 100644 +--- a/src/ar.c ++++ b/src/ar.c +@@ -1,5 +1,5 @@ + /* Create, modify, and extract from archives. +- Copyright (C) 2005-2012, 2016 Red Hat, Inc. ++ Copyright (C) 2005-2012, 2016, 2017 Red Hat, Inc. + This file is part of elfutils. + Written by Ulrich Drepper , 2005. + +@@ -442,7 +442,7 @@ static int + do_oper_extract (int oper, const char *arfname, char **argv, int argc, + long int instance) + { +- bool found[argc]; ++ bool found[argc > 0 ? argc : 1]; + memset (found, '\0', sizeof (found)); + + size_t name_max = 0; +@@ -1056,13 +1056,11 @@ do_oper_delete (const char *arfname, char **argv, int argc, + goto nonew_unlink; + + errout: +-#ifdef DEBUG + elf_end (elf); + + arlib_fini (); + + close (fd); +-#endif + + not_found (argc, argv, found); + +@@ -1070,12 +1068,18 @@ do_oper_delete (const char *arfname, char **argv, int argc, + } + + +-static void ++/* Prints the given value in the given buffer without a trailing zero char. ++ Returns false if the given value doesn't fit in the given buffer. */ ++static bool + no0print (bool ofmt, char *buf, int bufsize, long int val) + { + char tmpbuf[bufsize + 1]; +- snprintf (tmpbuf, sizeof (tmpbuf), ofmt ? "%-*lo" : "%-*ld", bufsize, val); ++ int ret = snprintf (tmpbuf, sizeof (tmpbuf), ofmt ? "%-*lo" : "%-*ld", ++ bufsize, val); ++ if (ret >= (int) sizeof (tmpbuf)) ++ return false; + memcpy (buf, tmpbuf, bufsize); ++ return true; + } + + +@@ -1084,7 +1088,7 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc, + const char *member) + { + int status = 0; +- Elf *elf; ++ Elf *elf = NULL; + struct stat st; + int fd = open_archive (arfname, O_RDONLY, 0, &elf, &st, oper != oper_move); + +@@ -1303,13 +1307,11 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc, + + if (status != 0) + { +-#ifdef DEBUG + elf_end (elf); + + arlib_fini (); + + close (fd); +-#endif + + return status; + } +@@ -1463,14 +1465,36 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc, + memcpy (arhdr.ar_name, tmpbuf, sizeof (arhdr.ar_name)); + } + +- no0print (false, arhdr.ar_date, sizeof (arhdr.ar_date), +- all->sec); +- no0print (false, arhdr.ar_uid, sizeof (arhdr.ar_uid), all->uid); +- no0print (false, arhdr.ar_gid, sizeof (arhdr.ar_gid), all->gid); +- no0print (true, arhdr.ar_mode, sizeof (arhdr.ar_mode), +- all->mode); +- no0print (false, arhdr.ar_size, sizeof (arhdr.ar_size), +- all->size); ++ if (! no0print (false, arhdr.ar_date, sizeof (arhdr.ar_date), ++ all->sec)) ++ { ++ error (0, errno, gettext ("cannot represent ar_date")); ++ goto nonew_unlink; ++ } ++ if (! no0print (false, arhdr.ar_uid, sizeof (arhdr.ar_uid), ++ all->uid)) ++ { ++ error (0, errno, gettext ("cannot represent ar_uid")); ++ goto nonew_unlink; ++ } ++ if (! no0print (false, arhdr.ar_gid, sizeof (arhdr.ar_gid), ++ all->gid)) ++ { ++ error (0, errno, gettext ("cannot represent ar_gid")); ++ goto nonew_unlink; ++ } ++ if (! no0print (true, arhdr.ar_mode, sizeof (arhdr.ar_mode), ++ all->mode)) ++ { ++ error (0, errno, gettext ("cannot represent ar_mode")); ++ goto nonew_unlink; ++ } ++ if (! no0print (false, arhdr.ar_size, sizeof (arhdr.ar_size), ++ all->size)) ++ { ++ error (0, errno, gettext ("cannot represent ar_size")); ++ goto nonew_unlink; ++ } + memcpy (arhdr.ar_fmag, ARFMAG, sizeof (arhdr.ar_fmag)); + + if (unlikely (write_retry (newfd, &arhdr, sizeof (arhdr)) +@@ -1514,13 +1538,15 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc, + goto nonew_unlink; + + errout: +-#ifdef DEBUG ++ for (int cnt = 0; cnt < argc; ++cnt) ++ elf_end (found[cnt]->elf); ++ + elf_end (elf); + + arlib_fini (); + +- close (fd); +-#endif ++ if (fd != -1) ++ close (fd); + + return status; + } +diff --git a/src/elflint.c b/src/elflint.c +index 51e53c23..f3a85c3c 100644 +--- a/src/elflint.c ++++ b/src/elflint.c +@@ -4073,7 +4073,7 @@ section [%2zu] '%s' has type NOBITS but is read from the file in segment of prog + bad = (databits == NULL + || databits->d_size != shdr->sh_size); + for (size_t idx = 0; +- idx < databits->d_size && ! bad; ++ ! bad && idx < databits->d_size; + idx++) + bad = ((char *) databits->d_buf)[idx] != 0; + +diff --git a/tests/addrcfi.c b/tests/addrcfi.c +index 589b8513..2b7d7bd0 100644 +--- a/tests/addrcfi.c ++++ b/tests/addrcfi.c +@@ -92,7 +92,7 @@ print_register (void *arg, + + printf ("\t%s reg%u (%s%s): ", setname, regno, prefix, regname); + +- Dwarf_Op ops_mem[2]; ++ Dwarf_Op ops_mem[3]; + Dwarf_Op *ops; + size_t nops; + int result = dwarf_frame_register (stuff->frame, regno, ops_mem, &ops, &nops); +-- +2.36.1 + diff --git a/buildtools/third_party/eu-strip/build.sh b/buildtools/third_party/eu-strip/build.sh index 86f2b67f6bbd1..c073e9a15827a 100755 --- a/buildtools/third_party/eu-strip/build.sh +++ b/buildtools/third_party/eu-strip/build.sh @@ -1,7 +1,7 @@ #!/bin/sh -xe rm -rf elfutils -git clone git://sourceware.org/git/elfutils.git +git clone https://sourceware.org/git/elfutils.git cd elfutils git checkout elfutils-0.170 autoheader @@ -9,6 +9,7 @@ aclocal autoconf automake --add-missing patch -p1 < ../fix-elf-size.patch +patch -p1 < ../0001-gcc-fixes.patch mkdir build cd build ../configure --enable-maintainer-mode -- 2.40.0