1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * Copyright (C) 2013 - 2017 Linaro, Ltd. 4 * Copyright (C) 2013, 2014 Red Hat, Inc. 5 * Copyright (C) 2020, 2021 Loongson, Inc. 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as 9 * published by the Free Software Foundation. 10 */ 11 12#include <linux/pe.h> 13#include <linux/sizes.h> 14#include <generated/utsrelease.h> 15#include <generated/compile.h> 16 17 .macro __EFI_PE_HEADER 18 .long PE_MAGIC 19coff_header: 20 .short IMAGE_FILE_MACHINE_LOONGARCH /* Machine */ 21 .short section_count /* NumberOfSections */ 22 .long 0 /* TimeDateStamp */ 23 .long 0 /* PointerToSymbolTable */ 24 .long 0 /* NumberOfSymbols */ 25 .short section_table - optional_header /* SizeOfOptionalHeader */ 26 .short IMAGE_FILE_DEBUG_STRIPPED | \ 27 IMAGE_FILE_EXECUTABLE_IMAGE | \ 28 IMAGE_FILE_LINE_NUMS_STRIPPED /* Characteristics */ 29 30optional_header: 31 .short PE_OPT_MAGIC_PE32PLUS /* PE32+ format */ 32 .byte 0x02 /* MajorLinkerVersion */ 33 .byte 0x14 /* MinorLinkerVersion */ 34 .long _data - efi_header_end /* SizeOfCode */ 35 .long _end - _data /* SizeOfInitializedData */ 36 .long 0 /* SizeOfUninitializedData */ 37 .long efi_pe_entry - _text /* AddressOfEntryPoint */ 38 .long efi_header_end - _text /* BaseOfCode */ 39 40extra_header_fields: 41 .quad 0 /* ImageBase */ 42 .long PECOFF_SEGMENT_ALIGN /* SectionAlignment */ 43 .long PECOFF_FILE_ALIGN /* FileAlignment */ 44 .short 0 /* MajorOperatingSystemVersion */ 45 .short 0 /* MinorOperatingSystemVersion */ 46 .short LINUX_EFISTUB_MAJOR_VERSION /* MajorImageVersion */ 47 .short LINUX_EFISTUB_MINOR_VERSION /* MinorImageVersion */ 48 .short 0 /* MajorSubsystemVersion */ 49 .short 0 /* MinorSubsystemVersion */ 50 .long 0 /* Win32VersionValue */ 51 52 .long _end - _text /* SizeOfImage */ 53 54 /* Everything before the kernel image is considered part of the header */ 55 .long efi_header_end - _head /* SizeOfHeaders */ 56 .long 0 /* CheckSum */ 57 .short IMAGE_SUBSYSTEM_EFI_APPLICATION /* Subsystem */ 58 .short 0 /* DllCharacteristics */ 59 .quad 0 /* SizeOfStackReserve */ 60 .quad 0 /* SizeOfStackCommit */ 61 .quad 0 /* SizeOfHeapReserve */ 62 .quad 0 /* SizeOfHeapCommit */ 63 .long 0 /* LoaderFlags */ 64 .long (section_table - .) / 8 /* NumberOfRvaAndSizes */ 65 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 73 /* Section table */ 74section_table: 75 .ascii ".text\0\0\0" 76 .long _data - efi_header_end /* VirtualSize */ 77 .long efi_header_end - _text /* VirtualAddress */ 78 .long _data - efi_header_end /* SizeOfRawData */ 79 .long efi_header_end - _text /* PointerToRawData */ 80 81 .long 0 /* PointerToRelocations */ 82 .long 0 /* PointerToLineNumbers */ 83 .short 0 /* NumberOfRelocations */ 84 .short 0 /* NumberOfLineNumbers */ 85 .long IMAGE_SCN_CNT_CODE | \ 86 IMAGE_SCN_MEM_READ | \ 87 IMAGE_SCN_MEM_EXECUTE /* Characteristics */ 88 89 .ascii ".data\0\0\0" 90 .long _end - _data /* VirtualSize */ 91 .long _data - _text /* VirtualAddress */ 92 .long _edata - _data /* SizeOfRawData */ 93 .long _data - _text /* PointerToRawData */ 94 95 .long 0 /* PointerToRelocations */ 96 .long 0 /* PointerToLineNumbers */ 97 .short 0 /* NumberOfRelocations */ 98 .short 0 /* NumberOfLineNumbers */ 99 .long IMAGE_SCN_CNT_INITIALIZED_DATA | \ 100 IMAGE_SCN_MEM_READ | \ 101 IMAGE_SCN_MEM_WRITE /* Characteristics */ 102 103 .org 0x20e 104 .word kernel_version - 512 - _head 105 106 .set section_count, (. - section_table) / 40 107 108 .balign 0x10000 /* PECOFF_SEGMENT_ALIGN */ 109efi_header_end: 110 .endm 111 112 .section ".head.text","ax" 113_head: 114 /* "MZ", MS-DOS header */ 115 .byte 0x4d 116 .byte 0x5a 117 .org 0x3c 118 /* Offset to the PE header */ 119 .long pe_header - _head 120 121pe_header: 122 __EFI_PE_HEADER 123 124start: 125 .globl start 126 127kernel_entaddr: 128 .quad KERNEL_ENTRY 129 .globl kernel_entaddr 130 131kernel_version: 132 .ascii UTS_RELEASE " (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ") " UTS_VERSION "\0" 133