100 lines
3.4 KiB
ArmAsm
100 lines
3.4 KiB
ArmAsm
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Copyright (C) 2020-2022 Loongson Technology Corporation Limited
|
|
*/
|
|
|
|
#include <linux/pe.h>
|
|
#include <linux/sizes.h>
|
|
|
|
.macro __EFI_PE_HEADER
|
|
.long PE_MAGIC
|
|
.Lcoff_header:
|
|
.short IMAGE_FILE_MACHINE_LOONGARCH64 /* Machine */
|
|
.short .Lsection_count /* NumberOfSections */
|
|
.long 0 /* TimeDateStamp */
|
|
.long 0 /* PointerToSymbolTable */
|
|
.long 0 /* NumberOfSymbols */
|
|
.short .Lsection_table - .Loptional_header /* SizeOfOptionalHeader */
|
|
.short IMAGE_FILE_DEBUG_STRIPPED | \
|
|
IMAGE_FILE_EXECUTABLE_IMAGE | \
|
|
IMAGE_FILE_LINE_NUMS_STRIPPED /* Characteristics */
|
|
|
|
.Loptional_header:
|
|
.short PE_OPT_MAGIC_PE32PLUS /* PE32+ format */
|
|
.byte 0x02 /* MajorLinkerVersion */
|
|
.byte 0x14 /* MinorLinkerVersion */
|
|
.long __inittext_end - .Lefi_header_end /* SizeOfCode */
|
|
.long _kernel_vsize /* SizeOfInitializedData */
|
|
.long 0 /* SizeOfUninitializedData */
|
|
.long __efistub_efi_pe_entry - _head /* AddressOfEntryPoint */
|
|
.long .Lefi_header_end - _head /* BaseOfCode */
|
|
|
|
.Lextra_header_fields:
|
|
.quad 0 /* ImageBase */
|
|
.long PECOFF_SEGMENT_ALIGN /* SectionAlignment */
|
|
.long PECOFF_FILE_ALIGN /* FileAlignment */
|
|
.short 0 /* MajorOperatingSystemVersion */
|
|
.short 0 /* MinorOperatingSystemVersion */
|
|
.short LINUX_EFISTUB_MAJOR_VERSION /* MajorImageVersion */
|
|
.short LINUX_EFISTUB_MINOR_VERSION /* MinorImageVersion */
|
|
.short 0 /* MajorSubsystemVersion */
|
|
.short 0 /* MinorSubsystemVersion */
|
|
.long 0 /* Win32VersionValue */
|
|
|
|
.long _end - _head /* SizeOfImage */
|
|
|
|
/* Everything before the kernel image is considered part of the header */
|
|
.long .Lefi_header_end - _head /* SizeOfHeaders */
|
|
.long 0 /* CheckSum */
|
|
.short IMAGE_SUBSYSTEM_EFI_APPLICATION /* Subsystem */
|
|
.short 0 /* DllCharacteristics */
|
|
.quad 0 /* SizeOfStackReserve */
|
|
.quad 0 /* SizeOfStackCommit */
|
|
.quad 0 /* SizeOfHeapReserve */
|
|
.quad 0 /* SizeOfHeapCommit */
|
|
.long 0 /* LoaderFlags */
|
|
.long (.Lsection_table - .) / 8 /* NumberOfRvaAndSizes */
|
|
|
|
.quad 0 /* ExportTable */
|
|
.quad 0 /* ImportTable */
|
|
.quad 0 /* ResourceTable */
|
|
.quad 0 /* ExceptionTable */
|
|
.quad 0 /* CertificationTable */
|
|
.quad 0 /* BaseRelocationTable */
|
|
|
|
/* Section table */
|
|
.Lsection_table:
|
|
.ascii ".text\0\0\0"
|
|
.long __inittext_end - .Lefi_header_end /* VirtualSize */
|
|
.long .Lefi_header_end - _head /* VirtualAddress */
|
|
.long __inittext_end - .Lefi_header_end /* SizeOfRawData */
|
|
.long .Lefi_header_end - _head /* 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 _kernel_vsize /* VirtualSize */
|
|
.long __initdata_begin - _head /* VirtualAddress */
|
|
.long _kernel_rsize /* SizeOfRawData */
|
|
.long __initdata_begin - _head /* 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 .Lsection_count, (. - .Lsection_table) / 40
|
|
|
|
.balign 0x10000 /* PECOFF_SEGMENT_ALIGN */
|
|
.Lefi_header_end:
|
|
.endm
|