]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
elf: Add LoongArch definitions
authorXiaotian Wu <wuxiaotian@loongson.cn>
Thu, 27 Apr 2023 07:43:01 +0000 (15:43 +0800)
committerDaniel Kiper <daniel.kiper@oracle.com>
Wed, 17 May 2023 10:47:04 +0000 (12:47 +0200)
Add ELF e_machine ID [1] and relocations types [2] for LoongArch to
the current in-repo definitions.

[1] https://loongson.github.io/LoongArch-Documentation/LoongArch-ELF-ABI-EN.html#_e_machine_identifies_the_machine
[2] https://loongson.github.io/LoongArch-Documentation/LoongArch-ELF-ABI-EN.html#_relocations

Signed-off-by: Zhou Yang <zhouyang@loongson.cn>
Signed-off-by: Xiaotian Wu <wuxiaotian@loongson.cn>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
include/grub/elf.h

index e6f073bc90331cd4474aa38f2ce8223f8242ba19..c36d7dab21aaf4b127249b8e11a9354d7f8a9f0f 100644 (file)
@@ -252,6 +252,7 @@ typedef struct
 #define EM_NUM         95
 #define EM_AARCH64     183             /* ARM 64-bit architecture */
 #define EM_RISCV       243             /* RISC-V */
+#define EM_LOONGARCH   258             /* LoongArch */
 
 /* If it is necessary to assign new unofficial EM_* values, please
    pick large random numbers (0x8523, 0xa7f2, etc.) to minimize the
@@ -2536,6 +2537,28 @@ typedef Elf32_Addr Elf32_Conflict;
 #define R_RISCV_SET32           56
 #define R_RISCV_32_PCREL        57
 
+/* LoongArch relocations */
+#define R_LARCH_NONE                         0
+#define R_LARCH_64                           2
+#define R_LARCH_MARK_LA                              20
+#define R_LARCH_SOP_PUSH_PCREL               22
+#define R_LARCH_SOP_PUSH_ABSOLUTE            23
+#define R_LARCH_SOP_PUSH_PLT_PCREL           29
+#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
+
 extern grub_err_t grub_elf32_get_shnum (Elf32_Ehdr *e, Elf32_Shnum *shnum);
 extern grub_err_t grub_elf32_get_shstrndx (Elf32_Ehdr *e, Elf32_Word *shstrndx);
 extern grub_err_t grub_elf32_get_phnum (Elf32_Ehdr *e, Elf32_Word *phnum);