Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/drivers/firmware/efi/libstub/zboot-header.S
26483 views
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, IMAGE_NT_OPTIONAL_HDR64_MAGIC
8
#else
9
.set .Lextra_characteristics, IMAGE_FILE_32BIT_MACHINE
10
.set .Lpe_opt_magic, IMAGE_NT_OPTIONAL_HDR32_MAGIC
11
#endif
12
13
.section ".head", "a"
14
.globl __efistub_efi_zboot_header
15
__efistub_efi_zboot_header:
16
.Ldoshdr:
17
.long IMAGE_DOS_SIGNATURE
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 IMAGE_NT_SIGNATURE
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_DLLCHARACTERISTICS_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
#ifdef CONFIG_EFI_SBAT
127
.ascii ".sbat\0\0\0"
128
.long __sbat_size
129
.long _sbat - .Ldoshdr
130
.long __sbat_size
131
.long _sbat - .Ldoshdr
132
133
.long 0, 0
134
.short 0, 0
135
.long IMAGE_SCN_CNT_INITIALIZED_DATA | \
136
IMAGE_SCN_MEM_READ | \
137
IMAGE_SCN_MEM_DISCARDABLE
138
139
.pushsection ".sbat", "a", @progbits
140
.incbin CONFIG_EFI_SBAT_FILE
141
.popsection
142
#endif
143
144
.ascii ".data\0\0\0"
145
.long __data_size
146
.long _data - .Ldoshdr
147
.long __data_rawsize
148
.long _data - .Ldoshdr
149
150
.long 0, 0
151
.short 0, 0
152
.long IMAGE_SCN_CNT_INITIALIZED_DATA | \
153
IMAGE_SCN_MEM_READ | \
154
IMAGE_SCN_MEM_WRITE
155
156
.set .Lsection_count, (. - .Lsection_table) / 40
157
158
#ifdef PE_DLL_CHAR_EX
159
.Lefi_dll_characteristics_ex:
160
.long PE_DLL_CHAR_EX
161
#endif
162
#ifdef CONFIG_DEBUG_EFI
163
.Lefi_debug_entry:
164
// EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY
165
.ascii "NB10" // Signature
166
.long 0 // Unknown
167
.long 0 // Unknown2
168
.long 0 // Unknown3
169
170
.asciz ZBOOT_EFI_PATH
171
172
.set .Lefi_debug_entry_size, . - .Lefi_debug_entry
173
#endif
174
175
.p2align 12
176
.Lefi_header_end:
177
178
179