efi-header.S 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
  4. */
  5. #include <linux/pe.h>
  6. #include <linux/sizes.h>
  7. .macro __EFI_PE_HEADER
  8. .long PE_MAGIC
  9. .Lcoff_header:
  10. .short IMAGE_FILE_MACHINE_LOONGARCH64 /* Machine */
  11. .short .Lsection_count /* NumberOfSections */
  12. .long 0 /* TimeDateStamp */
  13. .long 0 /* PointerToSymbolTable */
  14. .long 0 /* NumberOfSymbols */
  15. .short .Lsection_table - .Loptional_header /* SizeOfOptionalHeader */
  16. .short IMAGE_FILE_DEBUG_STRIPPED | \
  17. IMAGE_FILE_EXECUTABLE_IMAGE | \
  18. IMAGE_FILE_LINE_NUMS_STRIPPED /* Characteristics */
  19. .Loptional_header:
  20. .short PE_OPT_MAGIC_PE32PLUS /* PE32+ format */
  21. .byte 0x02 /* MajorLinkerVersion */
  22. .byte 0x14 /* MinorLinkerVersion */
  23. .long __inittext_end - .Lefi_header_end /* SizeOfCode */
  24. .long _end - __initdata_begin /* SizeOfInitializedData */
  25. .long 0 /* SizeOfUninitializedData */
  26. .long __efistub_efi_pe_entry - _head /* AddressOfEntryPoint */
  27. .long .Lefi_header_end - _head /* BaseOfCode */
  28. .Lextra_header_fields:
  29. .quad 0 /* ImageBase */
  30. .long PECOFF_SEGMENT_ALIGN /* SectionAlignment */
  31. .long PECOFF_FILE_ALIGN /* FileAlignment */
  32. .short 0 /* MajorOperatingSystemVersion */
  33. .short 0 /* MinorOperatingSystemVersion */
  34. .short LINUX_EFISTUB_MAJOR_VERSION /* MajorImageVersion */
  35. .short LINUX_EFISTUB_MINOR_VERSION /* MinorImageVersion */
  36. .short 0 /* MajorSubsystemVersion */
  37. .short 0 /* MinorSubsystemVersion */
  38. .long 0 /* Win32VersionValue */
  39. .long _end - _head /* SizeOfImage */
  40. /* Everything before the kernel image is considered part of the header */
  41. .long .Lefi_header_end - _head /* SizeOfHeaders */
  42. .long 0 /* CheckSum */
  43. .short IMAGE_SUBSYSTEM_EFI_APPLICATION /* Subsystem */
  44. .short 0 /* DllCharacteristics */
  45. .quad 0 /* SizeOfStackReserve */
  46. .quad 0 /* SizeOfStackCommit */
  47. .quad 0 /* SizeOfHeapReserve */
  48. .quad 0 /* SizeOfHeapCommit */
  49. .long 0 /* LoaderFlags */
  50. .long (.Lsection_table - .) / 8 /* NumberOfRvaAndSizes */
  51. .quad 0 /* ExportTable */
  52. .quad 0 /* ImportTable */
  53. .quad 0 /* ResourceTable */
  54. .quad 0 /* ExceptionTable */
  55. .quad 0 /* CertificationTable */
  56. .quad 0 /* BaseRelocationTable */
  57. /* Section table */
  58. .Lsection_table:
  59. .ascii ".text\0\0\0"
  60. .long __inittext_end - .Lefi_header_end /* VirtualSize */
  61. .long .Lefi_header_end - _head /* VirtualAddress */
  62. .long __inittext_end - .Lefi_header_end /* SizeOfRawData */
  63. .long .Lefi_header_end - _head /* PointerToRawData */
  64. .long 0 /* PointerToRelocations */
  65. .long 0 /* PointerToLineNumbers */
  66. .short 0 /* NumberOfRelocations */
  67. .short 0 /* NumberOfLineNumbers */
  68. .long IMAGE_SCN_CNT_CODE | \
  69. IMAGE_SCN_MEM_READ | \
  70. IMAGE_SCN_MEM_EXECUTE /* Characteristics */
  71. .ascii ".data\0\0\0"
  72. .long _end - __initdata_begin /* VirtualSize */
  73. .long __initdata_begin - _head /* VirtualAddress */
  74. .long _edata - __initdata_begin /* SizeOfRawData */
  75. .long __initdata_begin - _head /* PointerToRawData */
  76. .long 0 /* PointerToRelocations */
  77. .long 0 /* PointerToLineNumbers */
  78. .short 0 /* NumberOfRelocations */
  79. .short 0 /* NumberOfLineNumbers */
  80. .long IMAGE_SCN_CNT_INITIALIZED_DATA | \
  81. IMAGE_SCN_MEM_READ | \
  82. IMAGE_SCN_MEM_WRITE /* Characteristics */
  83. .set .Lsection_count, (. - .Lsection_table) / 40
  84. .balign 0x10000 /* PECOFF_SEGMENT_ALIGN */
  85. .Lefi_header_end:
  86. .endm