summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--meson.build13
-rw-r--r--src/boot/efi/pe.c6
-rwxr-xr-xtools/elf2efi.py5
3 files changed, 18 insertions, 6 deletions
diff --git a/meson.build b/meson.build
index cde0c88e48..b1521e5937 100644
--- a/meson.build
+++ b/meson.build
@@ -1960,11 +1960,14 @@ python_39 = python.language_version().version_compare('>=3.9')
#####################################################################
efi_arch = {
- 'aarch64' : 'aa64',
- 'arm' : 'arm',
- 'riscv64' : 'riscv64',
- 'x86_64' : 'x64',
- 'x86' : 'ia32',
+ 'aarch64' : 'aa64',
+ 'arm' : 'arm',
+ 'loongarch32' : 'loongarch32',
+ 'loongarch64' : 'loongarch64',
+ 'riscv32' : 'riscv32',
+ 'riscv64' : 'riscv64',
+ 'x86_64' : 'x64',
+ 'x86' : 'ia32',
}.get(host_machine.cpu_family(), '')
if get_option('bootloader') != 'false' and efi_arch != ''
diff --git a/src/boot/efi/pe.c b/src/boot/efi/pe.c
index 5128eeecb5..9b1b10d4a1 100644
--- a/src/boot/efi/pe.c
+++ b/src/boot/efi/pe.c
@@ -16,8 +16,14 @@
# define TARGET_MACHINE_TYPE 0xAA64U
#elif defined(__arm__)
# define TARGET_MACHINE_TYPE 0x01C2U
+#elif defined(__riscv) && __riscv_xlen == 32
+# define TARGET_MACHINE_TYPE 0x5032U
#elif defined(__riscv) && __riscv_xlen == 64
# define TARGET_MACHINE_TYPE 0x5064U
+#elif defined(__loongarch__) && __loongarch_grlen == 32
+# define TARGET_MACHINE_TYPE 0x6232U
+#elif defined(__loongarch__) && __loongarch_grlen == 64
+# define TARGET_MACHINE_TYPE 0x6264U
#else
# error Unknown EFI arch
#endif
diff --git a/tools/elf2efi.py b/tools/elf2efi.py
index b26af1f38d..2ca9d248e7 100755
--- a/tools/elf2efi.py
+++ b/tools/elf2efi.py
@@ -336,6 +336,7 @@ def convert_elf_reloc_table(
"EM_386": ENUM_RELOC_TYPE_i386["R_386_NONE"],
"EM_AARCH64": ENUM_RELOC_TYPE_AARCH64["R_AARCH64_NONE"],
"EM_ARM": ENUM_RELOC_TYPE_ARM["R_ARM_NONE"],
+ "EM_LOONGARCH": 0,
"EM_RISCV": 0,
"EM_X86_64": ENUM_RELOC_TYPE_x64["R_X86_64_NONE"],
}[elf["e_machine"]]
@@ -344,6 +345,7 @@ def convert_elf_reloc_table(
"EM_386": ENUM_RELOC_TYPE_i386["R_386_RELATIVE"],
"EM_AARCH64": ENUM_RELOC_TYPE_AARCH64["R_AARCH64_RELATIVE"],
"EM_ARM": ENUM_RELOC_TYPE_ARM["R_ARM_RELATIVE"],
+ "EM_LOONGARCH": 3,
"EM_RISCV": 3,
"EM_X86_64": ENUM_RELOC_TYPE_x64["R_X86_64_RELATIVE"],
}[elf["e_machine"]]
@@ -465,7 +467,8 @@ def elf2efi(args: argparse.Namespace):
"EM_386": 0x014C,
"EM_AARCH64": 0xAA64,
"EM_ARM": 0x01C2,
- "EM_RISCV": 0x5064,
+ "EM_LOONGARCH": 0x6232 if elf.elfclass == 32 else 0x6264,
+ "EM_RISCV": 0x5032 if elf.elfclass == 32 else 0x5064,
"EM_X86_64": 0x8664,
}.get(elf["e_machine"])
if pe_arch is None: