f9063f0adf
- 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 OBS-URL: https://build.opensuse.org/request/show/1010630 OBS-URL: https://build.opensuse.org/package/show/Base:System/elfutils?expand=0&rev=186
211 lines
7.2 KiB
Diff
211 lines
7.2 KiB
Diff
From de209d23e5f571f03ff0efc6547a2ebbfae3828e Mon Sep 17 00:00:00 2001
|
|
From: Andreas Schwab <schwab@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 <schwab@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
|
|
|