zboot-header.S 3.2 KB

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