diff options
-rw-r--r-- | meson.build | 13 | ||||
-rw-r--r-- | src/boot/efi/pe.c | 6 | ||||
-rwxr-xr-x | tools/elf2efi.py | 5 |
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: |