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