1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (C) 2020 Western Digital Corporat 4 * Adapted from arch/arm64/kernel/efi-header.S 5 */ 6 7 #include <linux/pe.h> 8 #include <linux/sizes.h> 9 #include <asm/set_memory.h> 10 11 .macro __EFI_PE_HEADER 12 .long PE_MAGIC 13 coff_header: 14 #ifdef CONFIG_64BIT 15 .short IMAGE_FILE_MACHINE_RISCV64 16 #else 17 .short IMAGE_FILE_MACHINE_RISCV32 18 #endif 19 .short section_count 20 .long 0 21 .long 0 22 .long 0 23 .short section_table - optional_heade 24 .short IMAGE_FILE_DEBUG_STRIPPED | \ 25 IMAGE_FILE_EXECUTABLE_IMAGE | 26 IMAGE_FILE_LINE_NUMS_STRIPPED 27 28 optional_header: 29 #ifdef CONFIG_64BIT 30 .short PE_OPT_MAGIC_PE32PLUS 31 #else 32 .short PE_OPT_MAGIC_PE32 33 #endif 34 .byte 0x02 35 .byte 0x14 36 .long __pecoff_text_end - efi_header 37 #ifdef __clang__ 38 .long __pecoff_data_virt_size 39 #else 40 .long __pecoff_data_virt_end - __pec 41 #endif 42 .long 0 43 .long __efistub_efi_pe_entry - _star 44 .long efi_header_end - _start 45 #ifdef CONFIG_32BIT 46 .long __pecoff_text_end - _start 47 #endif 48 49 extra_header_fields: 50 .quad 0 51 .long PECOFF_SECTION_ALIGNMENT 52 .long PECOFF_FILE_ALIGNMENT 53 .short 0 54 .short 0 55 .short LINUX_EFISTUB_MAJOR_VERSION 56 .short LINUX_EFISTUB_MINOR_VERSION 57 .short 0 58 .short 0 59 .long 0 60 61 .long _end - _start 62 63 // Everything before the kernel image 64 .long efi_header_end - _start 65 .long 0 66 .short IMAGE_SUBSYSTEM_EFI_APPLICATIO 67 .short IMAGE_DLL_CHARACTERISTICS_NX_C 68 .quad 0 69 .quad 0 70 .quad 0 71 .quad 0 72 .long 0 73 .long (section_table - .) / 8 74 75 .quad 0 76 .quad 0 77 .quad 0 78 .quad 0 79 .quad 0 80 .quad 0 81 82 // Section table 83 section_table: 84 .ascii ".text\0\0\0" 85 .long __pecoff_text_end - efi_header 86 .long efi_header_end - _start 87 .long __pecoff_text_end - efi_header 88 .long efi_header_end - _start 89 90 .long 0 91 .long 0 92 .short 0 93 .short 0 94 .long IMAGE_SCN_CNT_CODE | \ 95 IMAGE_SCN_MEM_READ | \ 96 IMAGE_SCN_MEM_EXECUTE 97 98 .ascii ".data\0\0\0" 99 #ifdef __clang__ 100 .long __pecoff_data_virt_size 101 #else 102 .long __pecoff_data_virt_end - __pec 103 #endif 104 .long __pecoff_text_end - _start 105 #ifdef __clang__ 106 .long __pecoff_data_raw_size 107 #else 108 .long __pecoff_data_raw_end - __peco 109 #endif 110 .long __pecoff_text_end - _start 111 112 .long 0 113 .long 0 114 .short 0 115 .short 0 116 .long IMAGE_SCN_CNT_INITIALIZED_DATA 117 IMAGE_SCN_MEM_READ | \ 118 IMAGE_SCN_MEM_WRITE 119 120 .set section_count, (. - section_ta 121 122 .balign 0x1000 123 efi_header_end: 124 .endm
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.