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