Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package elfutils for openSUSE:Factory checked in at 2022-10-16 16:08:41 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/elfutils (Old) and /work/SRC/openSUSE:Factory/.elfutils.new.2275 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "elfutils" Sun Oct 16 16:08:41 2022 rev:100 rq:1010631 version:0.187 Changes: -------- --- /work/SRC/openSUSE:Factory/elfutils/elfutils.changes 2022-04-30 22:51:56.692176118 +0200 +++ /work/SRC/openSUSE:Factory/.elfutils.new.2275/elfutils.changes 2022-10-16 16:08:42.726683847 +0200 @@ -1,0 +2,10 @@ +Fri Oct 14 08:55:22 UTC 2022 - Martin Li??ka <mli...@suse.cz> + +- Add RISC-V specific patches: + * 0001-libelf-Sync-elf.h-from-glibc.patch + * 0002-backends-Handle-new-RISC-V-specific-definitions.patch + * 0003-elflint-Allow-zero-p_memsz-for-PT_RISCV_ATTRIBUTES.patch + * 0004-readelf-Handle-SHT_RISCV_ATTRIBUTES-like-SHT_GNU_ATT.patch + * 0005-backends-Add-RISC-V-object-attribute-printing.patch + +------------------------------------------------------------------- New: ---- 0001-libelf-Sync-elf.h-from-glibc.patch 0002-backends-Handle-new-RISC-V-specific-definitions.patch 0003-elflint-Allow-zero-p_memsz-for-PT_RISCV_ATTRIBUTES.patch 0004-readelf-Handle-SHT_RISCV_ATTRIBUTES-like-SHT_GNU_ATT.patch 0005-backends-Add-RISC-V-object-attribute-printing.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ elfutils.spec ++++++ --- /var/tmp/diff_new_pack.pHhXcL/_old 2022-10-16 16:08:43.666686051 +0200 +++ /var/tmp/diff_new_pack.pHhXcL/_new 2022-10-16 16:08:43.670686060 +0200 @@ -40,6 +40,12 @@ BuildRequires: xz-devel BuildRequires: zlib-devel +Patch24300: 0001-libelf-Sync-elf.h-from-glibc.patch +Patch24301: 0002-backends-Handle-new-RISC-V-specific-definitions.patch +Patch24302: 0003-elflint-Allow-zero-p_memsz-for-PT_RISCV_ATTRIBUTES.patch +Patch24303: 0004-readelf-Handle-SHT_RISCV_ATTRIBUTES-like-SHT_GNU_ATT.patch +Patch24304: 0005-backends-Add-RISC-V-object-attribute-printing.patch + %description elfutils is a collection of utilities and libraries to read, create and modify ELF binary files, find and handle DWARF debug data, ++++++ 0001-libelf-Sync-elf.h-from-glibc.patch ++++++ >From de209d23e5f571f03ff0efc6547a2ebbfae3828e Mon Sep 17 00:00:00 2001 From: Andreas Schwab <sch...@suse.de> Date: Mon, 8 Aug 2022 13:44:08 +0200 Subject: [PATCH] libelf: Sync elf.h from glibc Adds PT_RISCV_ATTRIBUTES, SHT_RISCV_ATTRIBUTES, PT_AARCH64_MEMTAG_MTE, RELR definitions, LoongArch relocations. dwelf_elf_e_machine_string was updated to handle EM_LOONGARCH, and ebl_dynamic_tag_name was updated to handle the new RELR dynamic tags. Signed-off-by: Andreas Schwab <sch...@suse.de> --- libdwelf/ChangeLog | 5 ++ libdwelf/dwelf_elf_e_machine_string.c | 2 + libebl/ChangeLog | 5 ++ libebl/ebldynamictagname.c | 2 +- libelf/ChangeLog | 4 ++ libelf/elf.h | 99 ++++++++++++++++++++++++++- 6 files changed, 113 insertions(+), 4 deletions(-) diff --git a/libdwelf/dwelf_elf_e_machine_string.c b/libdwelf/dwelf_elf_e_machine_string.c index 051c70b5..6d588ea8 100644 --- a/libdwelf/dwelf_elf_e_machine_string.c +++ b/libdwelf/dwelf_elf_e_machine_string.c @@ -398,6 +398,8 @@ dwelf_elf_e_machine_string (int machine) return "BPF"; case EM_CSKY: return "C-SKY"; + case EM_LOONGARCH: + return "LoongArch"; case EM_ALPHA: return "Alpha"; diff --git a/libebl/ebldynamictagname.c b/libebl/ebldynamictagname.c index 3f8d8ee4..5d4a3a58 100644 --- a/libebl/ebldynamictagname.c +++ b/libebl/ebldynamictagname.c @@ -54,7 +54,7 @@ ebl_dynamic_tag_name (Ebl *ebl, int64_t tag, char *buf, size_t len) "RELENT", "PLTREL", "DEBUG", "TEXTREL", "JMPREL", "BIND_NOW", "INIT_ARRAY", "FINI_ARRAY", "INIT_ARRAYSZ", "FINI_ARRAYSZ", "RUNPATH", "FLAGS", "ENCODING", "PREINIT_ARRAY", - "PREINIT_ARRAYSZ", "SYMTAB_SHNDX" + "PREINIT_ARRAYSZ", "SYMTAB_SHNDX", "RELRSZ", "RELR", "RELRENT" }; eu_static_assert (sizeof (stdtags) / sizeof (const char *) == DT_NUM); diff --git a/libelf/elf.h b/libelf/elf.h index 0735f6b5..02a1b3f5 100644 --- a/libelf/elf.h +++ b/libelf/elf.h @@ -358,8 +358,9 @@ typedef struct #define EM_BPF 247 /* Linux BPF -- in-kernel virtual machine */ #define EM_CSKY 252 /* C-SKY */ +#define EM_LOONGARCH 258 /* LoongArch */ -#define EM_NUM 253 +#define EM_NUM 259 /* Old spellings/synonyms. */ @@ -443,7 +444,8 @@ typedef struct #define SHT_PREINIT_ARRAY 16 /* Array of pre-constructors */ #define SHT_GROUP 17 /* Section group */ #define SHT_SYMTAB_SHNDX 18 /* Extended section indices */ -#define SHT_NUM 19 /* Number of defined types. */ +#define SHT_RELR 19 /* RELR relative relocations */ +#define SHT_NUM 20 /* Number of defined types. */ #define SHT_LOOS 0x60000000 /* Start OS-specific. */ #define SHT_GNU_ATTRIBUTES 0x6ffffff5 /* Object attributes. */ #define SHT_GNU_HASH 0x6ffffff6 /* GNU-style hash table. */ @@ -662,6 +664,11 @@ typedef struct Elf64_Sxword r_addend; /* Addend */ } Elf64_Rela; +/* RELR relocation table entry */ + +typedef Elf32_Word Elf32_Relr; +typedef Elf64_Xword Elf64_Relr; + /* How to extract and insert information held in the r_info field. */ #define ELF32_R_SYM(val) ((val) >> 8) @@ -887,7 +894,10 @@ typedef struct #define DT_PREINIT_ARRAY 32 /* Array with addresses of preinit fct*/ #define DT_PREINIT_ARRAYSZ 33 /* size in bytes of DT_PREINIT_ARRAY */ #define DT_SYMTAB_SHNDX 34 /* Address of SYMTAB_SHNDX section */ -#define DT_NUM 35 /* Number used */ +#define DT_RELRSZ 35 /* Total size of RELR relative relocations */ +#define DT_RELR 36 /* Address of RELR relative relocations */ +#define DT_RELRENT 37 /* Size of one RELR relative relocaction */ +#define DT_NUM 38 /* Number used */ #define DT_LOOS 0x6000000d /* Start of OS-specific */ #define DT_HIOS 0x6ffff000 /* End of OS-specific */ #define DT_LOPROC 0x70000000 /* Start of processor-specific */ @@ -2893,6 +2903,9 @@ enum #define R_AARCH64_TLSDESC 1031 /* TLS Descriptor. */ #define R_AARCH64_IRELATIVE 1032 /* STT_GNU_IFUNC relocation. */ +/* MTE memory tag segment type. */ +#define PT_AARCH64_MEMTAG_MTE (PT_LOPROC + 2) + /* AArch64 specific values for the Dyn d_tag field. */ #define DT_AARCH64_BTI_PLT (DT_LOPROC + 1) #define DT_AARCH64_PAC_PLT (DT_LOPROC + 3) @@ -3918,6 +3931,8 @@ enum #define EF_RISCV_FLOAT_ABI_SINGLE 0x0002 #define EF_RISCV_FLOAT_ABI_DOUBLE 0x0004 #define EF_RISCV_FLOAT_ABI_QUAD 0x0006 +#define EF_RISCV_RVE 0x0008 +#define EF_RISCV_TSO 0x0010 /* RISC-V relocations. */ #define R_RISCV_NONE 0 @@ -3978,6 +3993,19 @@ enum #define R_RISCV_NUM 59 +/* RISC-V specific values for the st_other field. */ +#define STO_RISCV_VARIANT_CC 0x80 /* Function uses variant calling + convention */ + +/* RISC-V specific values for the sh_type field. */ +#define SHT_RISCV_ATTRIBUTES (SHT_LOPROC + 3) + +/* RISC-V specific values for the p_type field. */ +#define PT_RISCV_ATTRIBUTES (PT_LOPROC + 3) + +/* RISC-V specific values for the d_tag field. */ +#define DT_RISCV_VARIANT_CC (DT_LOPROC + 1) + /* BPF specific declarations. */ #define R_BPF_NONE 0 /* No reloc */ @@ -4056,6 +4084,71 @@ enum #define R_NDS32_TLS_TPOFF 102 #define R_NDS32_TLS_DESC 119 +/* LoongArch ELF Flags */ +#define EF_LARCH_ABI 0x07 +#define EF_LARCH_ABI_LP64D 0x03 + +/* LoongArch specific dynamic relocations */ +#define R_LARCH_NONE 0 +#define R_LARCH_32 1 +#define R_LARCH_64 2 +#define R_LARCH_RELATIVE 3 +#define R_LARCH_COPY 4 +#define R_LARCH_JUMP_SLOT 5 +#define R_LARCH_TLS_DTPMOD32 6 +#define R_LARCH_TLS_DTPMOD64 7 +#define R_LARCH_TLS_DTPREL32 8 +#define R_LARCH_TLS_DTPREL64 9 +#define R_LARCH_TLS_TPREL32 10 +#define R_LARCH_TLS_TPREL64 11 +#define R_LARCH_IRELATIVE 12 + +/* Reserved for future relocs that the dynamic linker must understand. */ + +/* used by the static linker for relocating .text. */ +#define R_LARCH_MARK_LA 20 +#define R_LARCH_MARK_PCREL 21 +#define R_LARCH_SOP_PUSH_PCREL 22 +#define R_LARCH_SOP_PUSH_ABSOLUTE 23 +#define R_LARCH_SOP_PUSH_DUP 24 +#define R_LARCH_SOP_PUSH_GPREL 25 +#define R_LARCH_SOP_PUSH_TLS_TPREL 26 +#define R_LARCH_SOP_PUSH_TLS_GOT 27 +#define R_LARCH_SOP_PUSH_TLS_GD 28 +#define R_LARCH_SOP_PUSH_PLT_PCREL 29 +#define R_LARCH_SOP_ASSERT 30 +#define R_LARCH_SOP_NOT 31 +#define R_LARCH_SOP_SUB 32 +#define R_LARCH_SOP_SL 33 +#define R_LARCH_SOP_SR 34 +#define R_LARCH_SOP_ADD 35 +#define R_LARCH_SOP_AND 36 +#define R_LARCH_SOP_IF_ELSE 37 +#define R_LARCH_SOP_POP_32_S_10_5 38 +#define R_LARCH_SOP_POP_32_U_10_12 39 +#define R_LARCH_SOP_POP_32_S_10_12 40 +#define R_LARCH_SOP_POP_32_S_10_16 41 +#define R_LARCH_SOP_POP_32_S_10_16_S2 42 +#define R_LARCH_SOP_POP_32_S_5_20 43 +#define R_LARCH_SOP_POP_32_S_0_5_10_16_S2 44 +#define R_LARCH_SOP_POP_32_S_0_10_10_16_S2 45 +#define R_LARCH_SOP_POP_32_U 46 + +/* used by the static linker for relocating non .text. */ +#define R_LARCH_ADD8 47 +#define R_LARCH_ADD16 48 +#define R_LARCH_ADD24 49 +#define R_LARCH_ADD32 50 +#define R_LARCH_ADD64 51 +#define R_LARCH_SUB8 52 +#define R_LARCH_SUB16 53 +#define R_LARCH_SUB24 54 +#define R_LARCH_SUB32 55 +#define R_LARCH_SUB64 56 +#define R_LARCH_GNU_VTINHERIT 57 +#define R_LARCH_GNU_VTENTRY 58 + + /* ARCompact/ARCv2 specific relocs. */ #define R_ARC_NONE 0x0 #define R_ARC_8 0x1 -- 2.37.1 ++++++ 0002-backends-Handle-new-RISC-V-specific-definitions.patch ++++++ >From adc0b8434a4bcef2baa515a252e4675dfbc264b7 Mon Sep 17 00:00:00 2001 From: Andreas Schwab <sch...@suse.de> Date: Mon, 8 Aug 2022 11:07:19 +0200 Subject: [PATCH] backends: Handle new RISC-V specific definitions Handle PT_RISCV_ATTRIBUTES, SHT_RISCV_ATTRIBUTES, DT_RISCV_VARIANT_CC. Signed-off-by: Andreas Schwab <sch...@suse.de> --- backends/riscv_init.c | 4 ++++ backends/riscv_symbol.c | 45 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/backends/riscv_init.c b/backends/riscv_init.c index 141e0821..f2d46082 100644 --- a/backends/riscv_init.c +++ b/backends/riscv_init.c @@ -65,6 +65,10 @@ riscv_init (Elf *elf, HOOK (eh, check_special_symbol); HOOK (eh, machine_flag_check); HOOK (eh, set_initial_registers_tid); + HOOK (eh, segment_type_name); + HOOK (eh, section_type_name); + HOOK (eh, dynamic_tag_name); + HOOK (eh, dynamic_tag_check); if (eh->class == ELFCLASS64) eh->core_note = riscv64_core_note; else diff --git a/backends/riscv_symbol.c b/backends/riscv_symbol.c index c34b7702..c149b8ba 100644 --- a/backends/riscv_symbol.c +++ b/backends/riscv_symbol.c @@ -119,3 +119,48 @@ riscv_check_special_symbol (Elf *elf, const GElf_Sym *sym, return false; } + +const char * +riscv_segment_type_name (int segment, char *buf __attribute__ ((unused)), + size_t len __attribute__ ((unused))) +{ + switch (segment) + { + case PT_RISCV_ATTRIBUTES: + return "RISCV_ATTRIBUTES"; + } + return NULL; +} + +/* Return symbolic representation of section type. */ +const char * +riscv_section_type_name (int type, + char *buf __attribute__ ((unused)), + size_t len __attribute__ ((unused))) +{ + switch (type) + { + case SHT_RISCV_ATTRIBUTES: + return "RISCV_ATTRIBUTES"; + } + + return NULL; +} + +const char * +riscv_dynamic_tag_name (int64_t tag, char *buf __attribute__ ((unused)), + size_t len __attribute__ ((unused))) +{ + switch (tag) + { + case DT_RISCV_VARIANT_CC: + return "RISCV_VARIANT_CC"; + } + return NULL; +} + +bool +riscv_dynamic_tag_check (int64_t tag) +{ + return tag == DT_RISCV_VARIANT_CC; +} -- 2.37.1 ++++++ 0003-elflint-Allow-zero-p_memsz-for-PT_RISCV_ATTRIBUTES.patch ++++++ >From 1a7a4774f1e60d10e956fbc7d376f4e7222e2abb Mon Sep 17 00:00:00 2001 From: Andreas Schwab <sch...@suse.de> Date: Mon, 8 Aug 2022 13:13:16 +0200 Subject: [PATCH] elflint: Allow zero p_memsz for PT_RISCV_ATTRIBUTES The RISCV_ATTRIBUTES segment is not meant to be loaded. Signed-off-by: Andreas Schwab <sch...@suse.de> --- src/ChangeLog | 5 +++++ src/elflint.c | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/elflint.c b/src/elflint.c index d919936f..b0e5415e 100644 --- a/src/elflint.c +++ b/src/elflint.c @@ -4731,7 +4731,10 @@ section [%2zu] '%s' must not be executable\n"), } if (phdr->p_filesz > phdr->p_memsz - && (phdr->p_memsz != 0 || phdr->p_type != PT_NOTE)) + && (phdr->p_memsz != 0 + || (phdr->p_type != PT_NOTE + && !(ehdr->e_machine == EM_RISCV + && phdr->p_type == PT_RISCV_ATTRIBUTES)))) ERROR (_("\ program header entry %d: file size greater than memory size\n"), cnt); -- 2.37.1 ++++++ 0004-readelf-Handle-SHT_RISCV_ATTRIBUTES-like-SHT_GNU_ATT.patch ++++++ >From e447ecbbffb1d3f9d776b94392e76e37a1b5fd19 Mon Sep 17 00:00:00 2001 From: Andreas Schwab <sch...@suse.de> Date: Mon, 8 Aug 2022 11:11:04 +0200 Subject: [PATCH] readelf: Handle SHT_RISCV_ATTRIBUTES like SHT_GNU_ATTRIBUTES Signed-off-by: Andreas Schwab <sch...@suse.de> --- src/readelf.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/readelf.c b/src/readelf.c index f1f77ce8..e8317f98 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -3671,6 +3671,8 @@ print_attributes (Ebl *ebl, const GElf_Ehdr *ehdr) if (shdr == NULL || (shdr->sh_type != SHT_GNU_ATTRIBUTES && (shdr->sh_type != SHT_ARM_ATTRIBUTES || ehdr->e_machine != EM_ARM) + && (shdr->sh_type != SHT_RISCV_ATTRIBUTES + || ehdr->e_machine != EM_RISCV) && (shdr->sh_type != SHT_CSKY_ATTRIBUTES || ehdr->e_machine != EM_CSKY))) continue; -- 2.37.1 ++++++ 0005-backends-Add-RISC-V-object-attribute-printing.patch ++++++ >From 04b83727c0a48e8d6f4c7e633886439cc1e8a7b3 Mon Sep 17 00:00:00 2001 From: Andreas Schwab <sch...@suse.de> Date: Mon, 8 Aug 2022 13:35:20 +0200 Subject: [PATCH] backends: Add RISC-V object attribute printing Signed-off-by: Andreas Schwab <sch...@suse.de> --- backends/ChangeLog | 6 ++++ backends/Makefile.am | 3 +- backends/riscv_attrs.c | 80 ++++++++++++++++++++++++++++++++++++++++++ backends/riscv_init.c | 2 ++ 4 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 backends/riscv_attrs.c diff --git a/backends/Makefile.am b/backends/Makefile.am index 9566377f..1863f66a 100644 --- a/backends/Makefile.am +++ b/backends/Makefile.am @@ -91,7 +91,8 @@ m68k_corenote_no_Wpacked_not_aligned = yes bpf_SRCS = bpf_init.c bpf_regs.c bpf_symbol.c riscv_SRCS = riscv_init.c riscv_symbol.c riscv_cfi.c riscv_regs.c \ - riscv_initreg.c riscv_corenote.c riscv64_corenote.c riscv_retval.c + riscv_initreg.c riscv_corenote.c riscv64_corenote.c \ + riscv_retval.c riscv_attrs.c csky_SRCS = csky_attrs.c csky_init.c csky_symbol.c csky_cfi.c \ csky_regs.c csky_initreg.c csky_corenote.c diff --git a/backends/riscv_attrs.c b/backends/riscv_attrs.c new file mode 100644 index 00000000..d74aac5c --- /dev/null +++ b/backends/riscv_attrs.c @@ -0,0 +1,80 @@ +/* RISC-V ABI-specified defaults for DWARF CFI. + 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 <http://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <string.h> +#include <dwarf.h> + +#define BACKEND riscv_ +#include "libebl_CPU.h" + +#define KNOWN_VALUES(...) do \ + { \ + static const char *table[] = { __VA_ARGS__ }; \ + if (value < sizeof table / sizeof table[0]) \ + *value_name = table[value]; \ + } while (0) + +bool +riscv_check_object_attribute (Ebl *ebl __attribute__ ((unused)), + const char *vendor, int tag, uint64_t value, + const char **tag_name, const char **value_name) +{ + if (!strcmp (vendor, "riscv")) + switch (tag) + { + case 4: + *tag_name = "RISCV_stack_align"; + return true; + + case 5: + *tag_name = "RISCV_arch"; + return true; + + case 6: + *tag_name = "RISCV_unaligned_access"; + KNOWN_VALUES ("No unaligned access", "Unaligned access"); + return true; + + case 8: + *tag_name = "RISCV_priv_spec"; + return true; + + case 10: + *tag_name = "RISCV_priv_spec_minor"; + return true; + + case 12: + *tag_name = "RISCV_priv_spec_revision"; + return true; + } + + return false; +} diff --git a/backends/riscv_init.c b/backends/riscv_init.c index f2d46082..e5e9e33e 100644 --- a/backends/riscv_init.c +++ b/backends/riscv_init.c @@ -69,6 +69,8 @@ riscv_init (Elf *elf, HOOK (eh, section_type_name); HOOK (eh, dynamic_tag_name); HOOK (eh, dynamic_tag_check); + HOOK (eh, check_object_attribute); + HOOK (eh, set_initial_registers_tid); if (eh->class == ELFCLASS64) eh->core_note = riscv64_core_note; else -- 2.37.1