Merge tag 'for-6.6-rc4-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave...
[platform/kernel/linux-starfive.git] / drivers / firmware / efi / libstub / zboot-header.S
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