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

source code of linux/arch/loongarch/kernel/efi-header.S