root/arch/arm/boot/compressed/efi-header.S

/* [<][>][^][v][top][bottom][index][help] */
   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * Copyright (C) 2013-2017 Linaro Ltd
   4  * Authors: Roy Franz <roy.franz@linaro.org>
   5  *          Ard Biesheuvel <ard.biesheuvel@linaro.org>
   6  */
   7 
   8 #include <linux/pe.h>
   9 #include <linux/sizes.h>
  10 
  11                 .macro  __nop
  12 #ifdef CONFIG_EFI_STUB
  13                 @ This is almost but not quite a NOP, since it does clobber the
  14                 @ condition flags. But it is the best we can do for EFI, since
  15                 @ PE/COFF expects the magic string "MZ" at offset 0, while the
  16                 @ ARM/Linux boot protocol expects an executable instruction
  17                 @ there.
  18                 .inst   MZ_MAGIC | (0x1310 << 16)       @ tstne r0, #0x4d000
  19 #else
  20  AR_CLASS(      mov     r0, r0          )
  21   M_CLASS(      nop.w                   )
  22 #endif
  23                 .endm
  24 
  25                 .macro  __EFI_HEADER
  26 #ifdef CONFIG_EFI_STUB
  27                 .set    start_offset, __efi_start - start
  28                 .org    start + 0x3c
  29                 @
  30                 @ The PE header can be anywhere in the file, but for
  31                 @ simplicity we keep it together with the MSDOS header
  32                 @ The offset to the PE/COFF header needs to be at offset
  33                 @ 0x3C in the MSDOS header.
  34                 @ The only 2 fields of the MSDOS header that are used are this
  35                 @ PE/COFF offset, and the "MZ" bytes at offset 0x0.
  36                 @
  37                 .long   pe_header - start               @ Offset to the PE header.
  38 
  39 pe_header:
  40                 .long   PE_MAGIC
  41 
  42 coff_header:
  43                 .short  IMAGE_FILE_MACHINE_THUMB        @ Machine
  44                 .short  section_count                   @ NumberOfSections
  45                 .long   0                               @ TimeDateStamp
  46                 .long   0                               @ PointerToSymbolTable
  47                 .long   0                               @ NumberOfSymbols
  48                 .short  section_table - optional_header @ SizeOfOptionalHeader
  49                 .short  IMAGE_FILE_32BIT_MACHINE | \
  50                         IMAGE_FILE_DEBUG_STRIPPED | \
  51                         IMAGE_FILE_EXECUTABLE_IMAGE | \
  52                         IMAGE_FILE_LINE_NUMS_STRIPPED   @ Characteristics
  53 
  54 #define __pecoff_code_size (__pecoff_data_start - __efi_start)
  55 
  56 optional_header:
  57                 .short  PE_OPT_MAGIC_PE32               @ PE32 format
  58                 .byte   0x02                            @ MajorLinkerVersion
  59                 .byte   0x14                            @ MinorLinkerVersion
  60                 .long   __pecoff_code_size              @ SizeOfCode
  61                 .long   __pecoff_data_size              @ SizeOfInitializedData
  62                 .long   0                               @ SizeOfUninitializedData
  63                 .long   efi_stub_entry - start          @ AddressOfEntryPoint
  64                 .long   start_offset                    @ BaseOfCode
  65                 .long   __pecoff_data_start - start     @ BaseOfData
  66 
  67 extra_header_fields:
  68                 .long   0                               @ ImageBase
  69                 .long   SZ_4K                           @ SectionAlignment
  70                 .long   SZ_512                          @ FileAlignment
  71                 .short  0                               @ MajorOsVersion
  72                 .short  0                               @ MinorOsVersion
  73                 .short  0                               @ MajorImageVersion
  74                 .short  0                               @ MinorImageVersion
  75                 .short  0                               @ MajorSubsystemVersion
  76                 .short  0                               @ MinorSubsystemVersion
  77                 .long   0                               @ Win32VersionValue
  78 
  79                 .long   __pecoff_end - start            @ SizeOfImage
  80                 .long   start_offset                    @ SizeOfHeaders
  81                 .long   0                               @ CheckSum
  82                 .short  IMAGE_SUBSYSTEM_EFI_APPLICATION @ Subsystem
  83                 .short  0                               @ DllCharacteristics
  84                 .long   0                               @ SizeOfStackReserve
  85                 .long   0                               @ SizeOfStackCommit
  86                 .long   0                               @ SizeOfHeapReserve
  87                 .long   0                               @ SizeOfHeapCommit
  88                 .long   0                               @ LoaderFlags
  89                 .long   (section_table - .) / 8         @ NumberOfRvaAndSizes
  90 
  91                 .quad   0                               @ ExportTable
  92                 .quad   0                               @ ImportTable
  93                 .quad   0                               @ ResourceTable
  94                 .quad   0                               @ ExceptionTable
  95                 .quad   0                               @ CertificationTable
  96                 .quad   0                               @ BaseRelocationTable
  97 
  98 section_table:
  99                 .ascii  ".text\0\0\0"
 100                 .long   __pecoff_code_size              @ VirtualSize
 101                 .long   __efi_start                     @ VirtualAddress
 102                 .long   __pecoff_code_size              @ SizeOfRawData
 103                 .long   __efi_start                     @ PointerToRawData
 104                 .long   0                               @ PointerToRelocations
 105                 .long   0                               @ PointerToLineNumbers
 106                 .short  0                               @ NumberOfRelocations
 107                 .short  0                               @ NumberOfLineNumbers
 108                 .long   IMAGE_SCN_CNT_CODE | \
 109                         IMAGE_SCN_MEM_READ | \
 110                         IMAGE_SCN_MEM_EXECUTE           @ Characteristics
 111 
 112                 .ascii  ".data\0\0\0"
 113                 .long   __pecoff_data_size              @ VirtualSize
 114                 .long   __pecoff_data_start - start     @ VirtualAddress
 115                 .long   __pecoff_data_rawsize           @ SizeOfRawData
 116                 .long   __pecoff_data_start - start     @ PointerToRawData
 117                 .long   0                               @ PointerToRelocations
 118                 .long   0                               @ PointerToLineNumbers
 119                 .short  0                               @ NumberOfRelocations
 120                 .short  0                               @ NumberOfLineNumbers
 121                 .long   IMAGE_SCN_CNT_INITIALIZED_DATA | \
 122                         IMAGE_SCN_MEM_READ | \
 123                         IMAGE_SCN_MEM_WRITE             @ Characteristics
 124 
 125                 .set    section_count, (. - section_table) / 40
 126 
 127                 .align  12
 128 __efi_start:
 129 #endif
 130                 .endm

/* [<][>][^][v][top][bottom][index][help] */