xref: /linux/arch/loongarch/kernel/efi-header.S (revision 9551a26f17d9445eed497bd7c639d48dfc3c0af4)
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