diff --git a/2f275fc12127db031592752136f077f5f3f3d273.patch b/2f275fc12127db031592752136f077f5f3f3d273.patch new file mode 100644 index 0000000..9ca7e7f --- /dev/null +++ b/2f275fc12127db031592752136f077f5f3f3d273.patch @@ -0,0 +1,45 @@ +From 2f275fc12127db031592752136f077f5f3f3d273 Mon Sep 17 00:00:00 2001 +From: Andreas Schwab +Date: Tue, 9 Aug 2022 10:29:53 +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 +--- + src/ChangeLog | 5 +++++ + src/elflint.c | 5 ++++- + 2 files changed, 9 insertions(+), 1 deletion(-) + +diff --git a/src/ChangeLog b/src/ChangeLog +index 42ce66401..fbcef29e3 100644 +--- a/src/ChangeLog ++++ b/src/ChangeLog +@@ -1,3 +1,8 @@ ++2022-08-09 Andreas Schwab ++ ++ * elflint.c (check_program_header): Don't complain about p_filesz ++ > p_memsz if p_memsz is zero and p_type is PT_RISCV_ATTRIBUTES. ++ + 2022-08-01 Mark Wielaard + + * readelf.c (handle_dynamic): Pass start of buffer to memrchr. +diff --git a/src/elflint.c b/src/elflint.c +index d919936fc..b0e5415ef 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.31.1 + diff --git a/b713edb9a7f3da8e4dd28ac69a1665ed493ca504.patch b/b713edb9a7f3da8e4dd28ac69a1665ed493ca504.patch new file mode 100644 index 0000000..fa26baa --- /dev/null +++ b/b713edb9a7f3da8e4dd28ac69a1665ed493ca504.patch @@ -0,0 +1,41 @@ +From b713edb9a7f3da8e4dd28ac69a1665ed493ca504 Mon Sep 17 00:00:00 2001 +From: Andreas Schwab +Date: Wed, 10 Aug 2022 10:52:42 +0200 +Subject: [PATCH] readelf: Handle SHT_RISCV_ATTRIBUTES like SHT_GNU_ATTRIBUTES + +Signed-off-by: Andreas Schwab +--- + src/ChangeLog | 4 ++++ + src/readelf.c | 4 +++- + 2 files changed, 7 insertions(+), 1 deletion(-) + +diff --git a/src/ChangeLog b/src/ChangeLog +index fbcef29e3..88db40511 100644 +--- a/src/ChangeLog ++++ b/src/ChangeLog +@@ -1,3 +1,7 @@ ++2022-08-10 Andreas Schwab ++ ++ * readelf.c (print_attributes): Also handle SHT_RISCV_ATTRIBUTES. ++ + 2022-08-09 Andreas Schwab + + * elflint.c (check_program_header): Don't complain about p_filesz +diff --git a/src/readelf.c b/src/readelf.c +index f1f77ce81..1a10fd01e 100644 +--- a/src/readelf.c ++++ b/src/readelf.c +@@ -3672,7 +3672,9 @@ print_attributes (Ebl *ebl, const GElf_Ehdr *ehdr) + && (shdr->sh_type != SHT_ARM_ATTRIBUTES + || ehdr->e_machine != EM_ARM) + && (shdr->sh_type != SHT_CSKY_ATTRIBUTES +- || ehdr->e_machine != EM_CSKY))) ++ || ehdr->e_machine != EM_CSKY) ++ && (shdr->sh_type != SHT_RISCV_ATTRIBUTES ++ || ehdr->e_machine != EM_RISCV))) + continue; + + printf (_("\ +-- +2.31.1 + diff --git a/d703772ee51ff9171e0b4f09e1b1d7c96369f9b9.patch b/d703772ee51ff9171e0b4f09e1b1d7c96369f9b9.patch new file mode 100644 index 0000000..5d6ae9f --- /dev/null +++ b/d703772ee51ff9171e0b4f09e1b1d7c96369f9b9.patch @@ -0,0 +1,102 @@ +From d703772ee51ff9171e0b4f09e1b1d7c96369f9b9 Mon Sep 17 00:00:00 2001 +From: Andreas Schwab +Date: Tue, 9 Aug 2022 09:54:28 +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 +--- + backends/ChangeLog | 9 +++++++++ + backends/riscv_init.c | 4 ++++ + backends/riscv_symbol.c | 45 +++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 58 insertions(+) + +diff --git a/backends/ChangeLog b/backends/ChangeLog +index 495cdde4f..5b0daffe4 100644 +--- a/backends/ChangeLog ++++ b/backends/ChangeLog +@@ -1,3 +1,12 @@ ++2022-08-09 Andreas Schwab ++ ++ * riscv_init.c (riscv_init): HOOK segment_type_name, ++ section_type_name, dynamic_tag_name and dynamic_tag_check. ++ * riscv_symbol.c (riscv_segment_type_name): New function. ++ (riscv_section_type_name): Likewise. ++ (riscv_dynamic_tag_name): Likewise. ++ (riscv_dynamic_tag_check): Likewise. ++ + 2022-06-01 Ulrich Drepper + + * Makefile.am (arm_SRCS): Add arm_machineflagname.c. +diff --git a/backends/riscv_init.c b/backends/riscv_init.c +index 141e08217..f2d460822 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 c34b77020..c149b8ba2 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.31.1 + diff --git a/de209d23e5f571f03ff0efc6547a2ebbfae3828e.patch b/de209d23e5f571f03ff0efc6547a2ebbfae3828e.patch new file mode 100644 index 0000000..499e081 --- /dev/null +++ b/de209d23e5f571f03ff0efc6547a2ebbfae3828e.patch @@ -0,0 +1,248 @@ +From de209d23e5f571f03ff0efc6547a2ebbfae3828e Mon Sep 17 00:00:00 2001 +From: Andreas Schwab +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 +--- + 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/ChangeLog b/libdwelf/ChangeLog +index c9010af80..d5800751c 100644 +--- a/libdwelf/ChangeLog ++++ b/libdwelf/ChangeLog +@@ -1,3 +1,8 @@ ++2022-08-08 Andreas Schwab ++ ++ * dwelf_elf_e_machine_string.c (dwelf_elf_e_machine_string): Add ++ EM_LOONGARCH LoongArch. ++ + 2022-03-24 Mark Wielaard + + * dwelf_elf_e_machine_string.c (dwelf_elf_e_machine_string): Add +diff --git a/libdwelf/dwelf_elf_e_machine_string.c b/libdwelf/dwelf_elf_e_machine_string.c +index 051c70b5b..6d588ea8d 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/ChangeLog b/libebl/ChangeLog +index 52b9c6097..19548718d 100644 +--- a/libebl/ChangeLog ++++ b/libebl/ChangeLog +@@ -1,3 +1,8 @@ ++2022-08-08 Andreas Schwab ++ ++ * ebldynamictagname.c (ebl_dynamic_tag_name): Handle DT_RELRSZ, ++ DT_RELR, DT_RELRENT. ++ + 2022-06-01 Ulrich Drepper + + * eblopenbackend.c (default_machine_flag_name): Add original flag +diff --git a/libebl/ebldynamictagname.c b/libebl/ebldynamictagname.c +index 3f8d8ee4b..5d4a3a58a 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/ChangeLog b/libelf/ChangeLog +index 00d4ac0f1..35f49516c 100644 +--- a/libelf/ChangeLog ++++ b/libelf/ChangeLog +@@ -1,3 +1,7 @@ ++2022-08-08 Andreas Schwab ++ ++ * elf.h: Update from glibc. ++ + 2022-04-24 Mark Wielaard + + * elf_update.c (write_file): Check HAVE_MREMAP. +diff --git a/libelf/elf.h b/libelf/elf.h +index 0735f6b57..02a1b3f52 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.31.1 +