Loading...
Note: File does not exist in v5.4.
1/* SPDX-License-Identifier: GPL-2.0 */
2
3#include <linux/pe.h>
4
5#ifdef CONFIG_64BIT
6 .set .Lextra_characteristics, 0x0
7 .set .Lpe_opt_magic, PE_OPT_MAGIC_PE32PLUS
8#else
9 .set .Lextra_characteristics, IMAGE_FILE_32BIT_MACHINE
10 .set .Lpe_opt_magic, PE_OPT_MAGIC_PE32
11#endif
12
13 .section ".head", "a"
14 .globl __efistub_efi_zboot_header
15__efistub_efi_zboot_header:
16.Ldoshdr:
17 .long MZ_MAGIC
18 .ascii "zimg" // image type
19 .long __efistub__gzdata_start - .Ldoshdr // payload offset
20 .long __efistub__gzdata_size - ZBOOT_SIZE_LEN // payload size
21 .long 0, 0 // reserved
22 .asciz COMP_TYPE // compression type
23 .org .Ldoshdr + 0x38
24 .long LINUX_PE_MAGIC
25 .long .Lpehdr - .Ldoshdr // PE header offset
26
27.Lpehdr:
28 .long PE_MAGIC
29 .short MACHINE_TYPE
30 .short .Lsection_count
31 .long 0
32 .long 0
33 .long 0
34 .short .Lsection_table - .Loptional_header
35 .short IMAGE_FILE_DEBUG_STRIPPED | \
36 IMAGE_FILE_EXECUTABLE_IMAGE | \
37 IMAGE_FILE_LINE_NUMS_STRIPPED |\
38 .Lextra_characteristics
39
40.Loptional_header:
41 .short .Lpe_opt_magic
42 .byte 0, 0
43 .long _etext - .Lefi_header_end
44 .long __data_size
45 .long 0
46 .long __efistub_efi_zboot_entry - .Ldoshdr
47 .long .Lefi_header_end - .Ldoshdr
48
49#ifdef CONFIG_64BIT
50 .quad 0
51#else
52 .long _etext - .Ldoshdr, 0x0
53#endif
54 .long 4096
55 .long 512
56 .short 0, 0
57 .short LINUX_EFISTUB_MAJOR_VERSION // MajorImageVersion
58 .short LINUX_EFISTUB_MINOR_VERSION // MinorImageVersion
59 .short 0, 0
60 .long 0
61 .long _end - .Ldoshdr
62
63 .long .Lefi_header_end - .Ldoshdr
64 .long 0
65 .short IMAGE_SUBSYSTEM_EFI_APPLICATION
66 .short IMAGE_DLL_CHARACTERISTICS_NX_COMPAT
67#ifdef CONFIG_64BIT
68 .quad 0, 0, 0, 0
69#else
70 .long 0, 0, 0, 0
71#endif
72 .long 0
73 .long (.Lsection_table - .) / 8
74
75 .quad 0 // ExportTable
76 .quad 0 // ImportTable
77 .quad 0 // ResourceTable
78 .quad 0 // ExceptionTable
79 .quad 0 // CertificationTable
80 .quad 0 // BaseRelocationTable
81#if defined(PE_DLL_CHAR_EX) || defined(CONFIG_DEBUG_EFI)
82 .long .Lefi_debug_table - .Ldoshdr // DebugTable
83 .long .Lefi_debug_table_size
84
85 .section ".rodata", "a"
86 .p2align 2
87.Lefi_debug_table:
88 // EFI_IMAGE_DEBUG_DIRECTORY_ENTRY[]
89#ifdef PE_DLL_CHAR_EX
90 .long 0 // Characteristics
91 .long 0 // TimeDateStamp
92 .short 0 // MajorVersion
93 .short 0 // MinorVersion
94 .long IMAGE_DEBUG_TYPE_EX_DLLCHARACTERISTICS // Type
95 .long 4 // SizeOfData
96 .long 0 // RVA
97 .long .Lefi_dll_characteristics_ex - .Ldoshdr // FileOffset
98#endif
99#ifdef CONFIG_DEBUG_EFI
100 .long 0 // Characteristics
101 .long 0 // TimeDateStamp
102 .short 0 // MajorVersion
103 .short 0 // MinorVersion
104 .long IMAGE_DEBUG_TYPE_CODEVIEW // Type
105 .long .Lefi_debug_entry_size // SizeOfData
106 .long 0 // RVA
107 .long .Lefi_debug_entry - .Ldoshdr // FileOffset
108#endif
109 .set .Lefi_debug_table_size, . - .Lefi_debug_table
110 .previous
111#endif
112
113.Lsection_table:
114 .ascii ".text\0\0\0"
115 .long _etext - .Lefi_header_end
116 .long .Lefi_header_end - .Ldoshdr
117 .long _etext - .Lefi_header_end
118 .long .Lefi_header_end - .Ldoshdr
119
120 .long 0, 0
121 .short 0, 0
122 .long IMAGE_SCN_CNT_CODE | \
123 IMAGE_SCN_MEM_READ | \
124 IMAGE_SCN_MEM_EXECUTE
125
126 .ascii ".data\0\0\0"
127 .long __data_size
128 .long _etext - .Ldoshdr
129 .long __data_rawsize
130 .long _etext - .Ldoshdr
131
132 .long 0, 0
133 .short 0, 0
134 .long IMAGE_SCN_CNT_INITIALIZED_DATA | \
135 IMAGE_SCN_MEM_READ | \
136 IMAGE_SCN_MEM_WRITE
137
138 .set .Lsection_count, (. - .Lsection_table) / 40
139
140#ifdef PE_DLL_CHAR_EX
141.Lefi_dll_characteristics_ex:
142 .long PE_DLL_CHAR_EX
143#endif
144#ifdef CONFIG_DEBUG_EFI
145.Lefi_debug_entry:
146 // EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY
147 .ascii "NB10" // Signature
148 .long 0 // Unknown
149 .long 0 // Unknown2
150 .long 0 // Unknown3
151
152 .asciz ZBOOT_EFI_PATH
153
154 .set .Lefi_debug_entry_size, . - .Lefi_debug_entry
155#endif
156
157 .p2align 12
158.Lefi_header_end:
159