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 | |