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/ChangeLog b/libdwelf/ChangeLog
index c9010af8..d5800751 100644
--- a/libdwelf/ChangeLog
+++ b/libdwelf/ChangeLog
@@ -1,3 +1,8 @@
+2022-08-08  Andreas Schwab  <sch...@suse.de>
+
+       * dwelf_elf_e_machine_string.c (dwelf_elf_e_machine_string): Add
+       EM_LOONGARCH LoongArch.
+
 2022-03-24  Mark Wielaard  <m...@klomp.org>
 
        * 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 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/ChangeLog b/libebl/ChangeLog
index 52b9c609..19548718 100644
--- a/libebl/ChangeLog
+++ b/libebl/ChangeLog
@@ -1,3 +1,8 @@
+2022-08-08  Andreas Schwab  <sch...@suse.de>
+
+       * ebldynamictagname.c (ebl_dynamic_tag_name): Handle DT_RELRSZ,
+       DT_RELR, DT_RELRENT.
+
 2022-06-01  Ulrich Drepper  <drep...@redhat.com>
 
        * eblopenbackend.c (default_machine_flag_name): Add original flag
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/ChangeLog b/libelf/ChangeLog
index 00d4ac0f..35f49516 100644
--- a/libelf/ChangeLog
+++ b/libelf/ChangeLog
@@ -1,3 +1,7 @@
+2022-08-08  Andreas Schwab  <sch...@suse.de>
+
+       * elf.h: Update from glibc.
+
 2022-04-24  Mark Wielaard  <m...@klomp.org>
 
        * elf_update.c (write_file): Check HAVE_MREMAP.
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


-- 
Andreas Schwab, SUSE Labs, sch...@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."

Reply via email to