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