1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * Copyright (C) 2020-2022 Loongson Technology Corporation Limited 4 */ 5 6#include <linux/pe.h> 7#include <linux/sizes.h> 8 9 .macro __EFI_PE_HEADER 10 .long IMAGE_NT_SIGNATURE 11.Lcoff_header: 12#ifdef CONFIG_32BIT 13 .short IMAGE_FILE_MACHINE_LOONGARCH32 /* Machine */ 14#else 15 .short IMAGE_FILE_MACHINE_LOONGARCH64 /* Machine */ 16#endif 17 .short .Lsection_count /* NumberOfSections */ 18 .long 0 /* TimeDateStamp */ 19 .long 0 /* PointerToSymbolTable */ 20 .long 0 /* NumberOfSymbols */ 21 .short .Lsection_table - .Loptional_header /* SizeOfOptionalHeader */ 22 .short IMAGE_FILE_DEBUG_STRIPPED | \ 23 IMAGE_FILE_EXECUTABLE_IMAGE | \ 24 IMAGE_FILE_LINE_NUMS_STRIPPED /* Characteristics */ 25 26.Loptional_header: 27 .short IMAGE_NT_OPTIONAL_HDR64_MAGIC /* PE32+ format */ 28 .byte 0x02 /* MajorLinkerVersion */ 29 .byte 0x14 /* MinorLinkerVersion */ 30 .long __inittext_end - .Lefi_header_end /* SizeOfCode */ 31 .long _kernel_vsize /* SizeOfInitializedData */ 32 .long 0 /* SizeOfUninitializedData */ 33 .long __efistub_efi_pe_entry - _head /* AddressOfEntryPoint */ 34 .long .Lefi_header_end - _head /* BaseOfCode */ 35 36.Lextra_header_fields: 37 .quad 0 /* ImageBase */ 38 .long PECOFF_SEGMENT_ALIGN /* SectionAlignment */ 39 .long PECOFF_FILE_ALIGN /* FileAlignment */ 40 .short 0 /* MajorOperatingSystemVersion */ 41 .short 0 /* MinorOperatingSystemVersion */ 42 .short LINUX_EFISTUB_MAJOR_VERSION /* MajorImageVersion */ 43 .short LINUX_EFISTUB_MINOR_VERSION /* MinorImageVersion */ 44 .short 0 /* MajorSubsystemVersion */ 45 .short 0 /* MinorSubsystemVersion */ 46 .long 0 /* Win32VersionValue */ 47 48 .long _end - _head /* SizeOfImage */ 49 50 /* Everything before the kernel image is considered part of the header */ 51 .long .Lefi_header_end - _head /* SizeOfHeaders */ 52 .long 0 /* CheckSum */ 53 .short IMAGE_SUBSYSTEM_EFI_APPLICATION /* Subsystem */ 54 .short 0 /* DllCharacteristics */ 55 .quad 0 /* SizeOfStackReserve */ 56 .quad 0 /* SizeOfStackCommit */ 57 .quad 0 /* SizeOfHeapReserve */ 58 .quad 0 /* SizeOfHeapCommit */ 59 .long 0 /* LoaderFlags */ 60 .long (.Lsection_table - .) / 8 /* NumberOfRvaAndSizes */ 61 62 .quad 0 /* ExportTable */ 63 .quad 0 /* ImportTable */ 64 .quad 0 /* ResourceTable */ 65 .quad 0 /* ExceptionTable */ 66 .quad 0 /* CertificationTable */ 67 .quad 0 /* BaseRelocationTable */ 68 69 /* Section table */ 70.Lsection_table: 71 .ascii ".text\0\0\0" 72 .long __inittext_end - .Lefi_header_end /* VirtualSize */ 73 .long .Lefi_header_end - _head /* VirtualAddress */ 74 .long __inittext_end - .Lefi_header_end /* SizeOfRawData */ 75 .long .Lefi_header_end - _head /* PointerToRawData */ 76 77 .long 0 /* PointerToRelocations */ 78 .long 0 /* PointerToLineNumbers */ 79 .short 0 /* NumberOfRelocations */ 80 .short 0 /* NumberOfLineNumbers */ 81 .long IMAGE_SCN_CNT_CODE | \ 82 IMAGE_SCN_MEM_READ | \ 83 IMAGE_SCN_MEM_EXECUTE /* Characteristics */ 84 85 .ascii ".data\0\0\0" 86 .long _kernel_vsize /* VirtualSize */ 87 .long __initdata_begin - _head /* VirtualAddress */ 88 .long _kernel_rsize /* SizeOfRawData */ 89 .long __initdata_begin - _head /* PointerToRawData */ 90 91 .long 0 /* PointerToRelocations */ 92 .long 0 /* PointerToLineNumbers */ 93 .short 0 /* NumberOfRelocations */ 94 .short 0 /* NumberOfLineNumbers */ 95 .long IMAGE_SCN_CNT_INITIALIZED_DATA | \ 96 IMAGE_SCN_MEM_READ | \ 97 IMAGE_SCN_MEM_WRITE /* Characteristics */ 98 99 .set .Lsection_count, (. - .Lsection_table) / 40 100 101 .balign 0x10000 /* PECOFF_SEGMENT_ALIGN */ 102.Lefi_header_end: 103 .endm 104