Merge tag 'selinux-pr-20170831' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / arch / arm / boot / compressed / efi-header.S
index a17ca8d78656d1012910ffb8a37b3433720a8d44..c94a88ae834dc3b28418279e188fdbfb8ac7da2c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013-2015 Linaro Ltd
+ * Copyright (C) 2013-2017 Linaro Ltd
  * Authors: Roy Franz <roy.franz@linaro.org>
  *          Ard Biesheuvel <ard.biesheuvel@linaro.org>
  *
@@ -8,6 +8,9 @@
  * published by the Free Software Foundation.
  */
 
+#include <linux/pe.h>
+#include <linux/sizes.h>
+
                .macro  __nop
 #ifdef CONFIG_EFI_STUB
                @ This is almost but not quite a NOP, since it does clobber the
@@ -15,7 +18,7 @@
                @ PE/COFF expects the magic string "MZ" at offset 0, while the
                @ ARM/Linux boot protocol expects an executable instruction
                @ there.
-               .inst   'M' | ('Z' << 8) | (0x1310 << 16)   @ tstne r0, #0x4d000
+               .inst   MZ_MAGIC | (0x1310 << 16)       @ tstne r0, #0x4d000
 #else
  AR_CLASS(     mov     r0, r0          )
   M_CLASS(     nop.w                   )
                @ The only 2 fields of the MSDOS header that are used are this
                @ PE/COFF offset, and the "MZ" bytes at offset 0x0.
                @
-               .long   pe_header - start       @ Offset to the PE header.
+               .long   pe_header - start               @ Offset to the PE header.
 
 pe_header:
-               .ascii  "PE\0\0"
+               .long   PE_MAGIC
 
 coff_header:
-               .short  0x01c2                  @ ARM or Thumb
-               .short  2                       @ nr_sections
-               .long   0                       @ TimeDateStamp
-               .long   0                       @ PointerToSymbolTable
-               .long   1                       @ NumberOfSymbols
-               .short  section_table - optional_header
-                                               @ SizeOfOptionalHeader
-               .short  0x306                   @ Characteristics.
-                                               @ IMAGE_FILE_32BIT_MACHINE |
-                                               @ IMAGE_FILE_DEBUG_STRIPPED |
-                                               @ IMAGE_FILE_EXECUTABLE_IMAGE |
-                                               @ IMAGE_FILE_LINE_NUMS_STRIPPED
+               .short  IMAGE_FILE_MACHINE_THUMB        @ Machine
+               .short  section_count                   @ NumberOfSections
+               .long   0                               @ TimeDateStamp
+               .long   0                               @ PointerToSymbolTable
+               .long   0                               @ NumberOfSymbols
+               .short  section_table - optional_header @ SizeOfOptionalHeader
+               .short  IMAGE_FILE_32BIT_MACHINE | \
+                       IMAGE_FILE_DEBUG_STRIPPED | \
+                       IMAGE_FILE_EXECUTABLE_IMAGE | \
+                       IMAGE_FILE_LINE_NUMS_STRIPPED   @ Characteristics
+
+#define __pecoff_code_size (__pecoff_data_start - __efi_start)
 
 optional_header:
-               .short  0x10b                   @ PE32 format
-               .byte   0x02                    @ MajorLinkerVersion
-               .byte   0x14                    @ MinorLinkerVersion
-               .long   _end - __efi_start      @ SizeOfCode
-               .long   0                       @ SizeOfInitializedData
-               .long   0                       @ SizeOfUninitializedData
-               .long   efi_stub_entry - start  @ AddressOfEntryPoint
-               .long   start_offset            @ BaseOfCode
-               .long   0                       @ data
+               .short  PE_OPT_MAGIC_PE32               @ PE32 format
+               .byte   0x02                            @ MajorLinkerVersion
+               .byte   0x14                            @ MinorLinkerVersion
+               .long   __pecoff_code_size              @ SizeOfCode
+               .long   __pecoff_data_size              @ SizeOfInitializedData
+               .long   0                               @ SizeOfUninitializedData
+               .long   efi_stub_entry - start          @ AddressOfEntryPoint
+               .long   start_offset                    @ BaseOfCode
+               .long   __pecoff_data_start - start     @ BaseOfData
 
 extra_header_fields:
-               .long   0                       @ ImageBase
-               .long   0x200                   @ SectionAlignment
-               .long   0x200                   @ FileAlignment
-               .short  0                       @ MajorOperatingSystemVersion
-               .short  0                       @ MinorOperatingSystemVersion
-               .short  0                       @ MajorImageVersion
-               .short  0                       @ MinorImageVersion
-               .short  0                       @ MajorSubsystemVersion
-               .short  0                       @ MinorSubsystemVersion
-               .long   0                       @ Win32VersionValue
+               .long   0                               @ ImageBase
+               .long   SZ_4K                           @ SectionAlignment
+               .long   SZ_512                          @ FileAlignment
+               .short  0                               @ MajorOsVersion
+               .short  0                               @ MinorOsVersion
+               .short  0                               @ MajorImageVersion
+               .short  0                               @ MinorImageVersion
+               .short  0                               @ MajorSubsystemVersion
+               .short  0                               @ MinorSubsystemVersion
+               .long   0                               @ Win32VersionValue
 
-               .long   _end - start            @ SizeOfImage
-               .long   start_offset            @ SizeOfHeaders
-               .long   0                       @ CheckSum
-               .short  0xa                     @ Subsystem (EFI application)
-               .short  0                       @ DllCharacteristics
-               .long   0                       @ SizeOfStackReserve
-               .long   0                       @ SizeOfStackCommit
-               .long   0                       @ SizeOfHeapReserve
-               .long   0                       @ SizeOfHeapCommit
-               .long   0                       @ LoaderFlags
-               .long   0x6                     @ NumberOfRvaAndSizes
+               .long   __pecoff_end - start            @ SizeOfImage
+               .long   start_offset                    @ SizeOfHeaders
+               .long   0                               @ CheckSum
+               .short  IMAGE_SUBSYSTEM_EFI_APPLICATION @ Subsystem
+               .short  0                               @ DllCharacteristics
+               .long   0                               @ SizeOfStackReserve
+               .long   0                               @ SizeOfStackCommit
+               .long   0                               @ SizeOfHeapReserve
+               .long   0                               @ SizeOfHeapCommit
+               .long   0                               @ LoaderFlags
+               .long   (section_table - .) / 8         @ NumberOfRvaAndSizes
 
-               .quad   0                       @ ExportTable
-               .quad   0                       @ ImportTable
-               .quad   0                       @ ResourceTable
-               .quad   0                       @ ExceptionTable
-               .quad   0                       @ CertificationTable
-               .quad   0                       @ BaseRelocationTable
+               .quad   0                               @ ExportTable
+               .quad   0                               @ ImportTable
+               .quad   0                               @ ResourceTable
+               .quad   0                               @ ExceptionTable
+               .quad   0                               @ CertificationTable
+               .quad   0                               @ BaseRelocationTable
 
 section_table:
-               @
-               @ The EFI application loader requires a relocation section
-               @ because EFI applications must be relocatable. This is a
-               @ dummy section as far as we are concerned.
-               @
-               .ascii  ".reloc\0\0"
-               .long   0                       @ VirtualSize
-               .long   0                       @ VirtualAddress
-               .long   0                       @ SizeOfRawData
-               .long   0                       @ PointerToRawData
-               .long   0                       @ PointerToRelocations
-               .long   0                       @ PointerToLineNumbers
-               .short  0                       @ NumberOfRelocations
-               .short  0                       @ NumberOfLineNumbers
-               .long   0x42100040              @ Characteristics
-
                .ascii  ".text\0\0\0"
-               .long   _end - __efi_start      @ VirtualSize
-               .long   __efi_start             @ VirtualAddress
-               .long   _edata - __efi_start    @ SizeOfRawData
-               .long   __efi_start             @ PointerToRawData
-               .long   0                       @ PointerToRelocations
-               .long   0                       @ PointerToLineNumbers
-               .short  0                       @ NumberOfRelocations
-               .short  0                       @ NumberOfLineNumbers
-               .long   0xe0500020              @ Characteristics
+               .long   __pecoff_code_size              @ VirtualSize
+               .long   __efi_start                     @ VirtualAddress
+               .long   __pecoff_code_size              @ SizeOfRawData
+               .long   __efi_start                     @ PointerToRawData
+               .long   0                               @ PointerToRelocations
+               .long   0                               @ PointerToLineNumbers
+               .short  0                               @ NumberOfRelocations
+               .short  0                               @ NumberOfLineNumbers
+               .long   IMAGE_SCN_CNT_CODE | \
+                       IMAGE_SCN_MEM_READ | \
+                       IMAGE_SCN_MEM_EXECUTE           @ Characteristics
+
+               .ascii  ".data\0\0\0"
+               .long   __pecoff_data_size              @ VirtualSize
+               .long   __pecoff_data_start - start     @ VirtualAddress
+               .long   __pecoff_data_rawsize           @ SizeOfRawData
+               .long   __pecoff_data_start - start     @ PointerToRawData
+               .long   0                               @ PointerToRelocations
+               .long   0                               @ PointerToLineNumbers
+               .short  0                               @ NumberOfRelocations
+               .short  0                               @ NumberOfLineNumbers
+               .long   IMAGE_SCN_CNT_INITIALIZED_DATA | \
+                       IMAGE_SCN_MEM_READ | \
+                       IMAGE_SCN_MEM_WRITE             @ Characteristics
+
+               .set    section_count, (. - section_table) / 40
 
-               .align  9
+               .align  12
 __efi_start:
 #endif
                .endm