Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * ld script to make ARM Linux kernel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  * taken from the i386 version by Russell King
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) #include <asm/hyp_image.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) #ifdef CONFIG_KVM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) #define HYPERVISOR_EXTABLE					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) 	. = ALIGN(SZ_8);					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) 	__start___kvm_ex_table = .;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) 	*(__kvm_ex_table)					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 	__stop___kvm_ex_table = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) #define HYPERVISOR_DATA_SECTIONS				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 	HYP_SECTION_NAME(.rodata) : {				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) 		. = ALIGN(PAGE_SIZE);				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 		__hyp_rodata_start = .;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 		*(HYP_SECTION_NAME(.data..ro_after_init))	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 		*(HYP_SECTION_NAME(.rodata))			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 		. = ALIGN(PAGE_SIZE);				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 		__hyp_rodata_end = .;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) #define HYPERVISOR_PERCPU_SECTION				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 	. = ALIGN(PAGE_SIZE);					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 	HYP_SECTION_NAME(.data..percpu) : {			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 		*(HYP_SECTION_NAME(.data..percpu))		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) #define HYPERVISOR_RELOC_SECTION				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 	.hyp.reloc : ALIGN(4) {					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 		__hyp_reloc_begin = .;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 		*(.hyp.reloc)					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 		__hyp_reloc_end = .;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) #define BSS_FIRST_SECTIONS					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 	__hyp_bss_start = .;					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 	*(HYP_SECTION_NAME(.bss))				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 	. = ALIGN(PAGE_SIZE);					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 	__hyp_bss_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46)  * We require that __hyp_bss_start and __bss_start are aligned, and enforce it
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47)  * with an assertion. But the BSS_SECTION macro places an empty .sbss section
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48)  * between them, which can in some cases cause the linker to misalign them. To
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49)  * work around the issue, force a page alignment for __bss_start.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) #define SBSS_ALIGN			PAGE_SIZE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) #else /* CONFIG_KVM */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) #define HYPERVISOR_EXTABLE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) #define HYPERVISOR_DATA_SECTIONS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) #define HYPERVISOR_PERCPU_SECTION
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) #define HYPERVISOR_RELOC_SECTION
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) #define SBSS_ALIGN			0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) #define RO_EXCEPTION_TABLE_ALIGN	8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) #define RUNTIME_DISCARD_EXIT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) #include <asm-generic/vmlinux.lds.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) #include <asm/cache.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) #include <asm/kernel-pgtable.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) #include <asm/memory.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) #include <asm/page.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) #include "image.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) OUTPUT_ARCH(aarch64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) ENTRY(_text)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) jiffies = jiffies_64;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) #define HYPERVISOR_TEXT					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 	. = ALIGN(PAGE_SIZE);				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	__hyp_idmap_text_start = .;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	*(.hyp.idmap.text)				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	__hyp_idmap_text_end = .;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	__hyp_text_start = .;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	*(.hyp.text)					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	HYPERVISOR_EXTABLE				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 	. = ALIGN(PAGE_SIZE);				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	__hyp_text_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) #define IDMAP_TEXT					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	. = ALIGN(SZ_4K);				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	__idmap_text_start = .;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 	*(.idmap.text)					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 	__idmap_text_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) #ifdef CONFIG_HIBERNATION
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) #define HIBERNATE_TEXT					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	. = ALIGN(SZ_4K);				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	__hibernate_exit_text_start = .;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	*(.hibernate_exit.text)				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 	__hibernate_exit_text_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #define HIBERNATE_TEXT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) #ifdef CONFIG_UNMAP_KERNEL_AT_EL0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) #define TRAMP_TEXT					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	. = ALIGN(PAGE_SIZE);				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	__entry_tramp_text_start = .;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	*(.entry.tramp.text)				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 	. = ALIGN(PAGE_SIZE);				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	__entry_tramp_text_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) #define TRAMP_TEXT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115)  * The size of the PE/COFF section that covers the kernel image, which
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116)  * runs from _stext to _edata, must be a round multiple of the PE/COFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117)  * FileAlignment, which we set to its minimum value of 0x200. '_stext'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118)  * itself is 4 KB aligned, so padding out _edata to a 0x200 aligned
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119)  * boundary should be sufficient.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) PECOFF_FILE_ALIGNMENT = 0x200;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) #ifdef CONFIG_EFI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) #define PECOFF_EDATA_PADDING	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	.pecoff_edata_padding : { BYTE(0); . = ALIGN(PECOFF_FILE_ALIGNMENT); }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) #define PECOFF_EDATA_PADDING
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) SECTIONS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 	 * XXX: The linker does not define how output sections are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 	 * assigned to input sections when there are multiple statements
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 	 * matching the same input section name.  There is no documented
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 	 * order of matching.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 	DISCARDS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 	/DISCARD/ : {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 		*(.interp .dynamic)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 		*(.dynsym .dynstr .hash .gnu.hash)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 	. = KIMAGE_VADDR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 	.head.text : {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 		_text = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 		HEAD_TEXT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 	.text : {			/* Real text segment		*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 		_stext = .;		/* Text and read-only data	*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 			IRQENTRY_TEXT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 			SOFTIRQENTRY_TEXT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 			ENTRY_TEXT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 			TEXT_TEXT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 			SCHED_TEXT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 			CPUIDLE_TEXT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 			LOCK_TEXT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 			KPROBES_TEXT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 			HYPERVISOR_TEXT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 			IDMAP_TEXT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 			HIBERNATE_TEXT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 			TRAMP_TEXT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 			*(.fixup)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 			*(.gnu.warning)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 		. = ALIGN(16);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 		*(.got)			/* Global offset table		*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 	 * Make sure that the .got.plt is either completely empty or it
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 	 * contains only the lazy dispatch entries.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 	.got.plt : { *(.got.plt) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 	ASSERT(SIZEOF(.got.plt) == 0 || SIZEOF(.got.plt) == 0x18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 	       "Unexpected GOT/PLT entries detected!")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 	. = ALIGN(SEGMENT_ALIGN);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 	_etext = .;			/* End of text section */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 	/* everything from this point to __init_begin will be marked RO NX */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 	RO_DATA(PAGE_SIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 	HYPERVISOR_DATA_SECTIONS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 	idmap_pg_dir = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 	. += IDMAP_DIR_SIZE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 	idmap_pg_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) #ifdef CONFIG_UNMAP_KERNEL_AT_EL0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 	tramp_pg_dir = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 	. += PAGE_SIZE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 	reserved_pg_dir = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 	. += PAGE_SIZE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 	swapper_pg_dir = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 	. += PAGE_SIZE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 	. = ALIGN(SEGMENT_ALIGN);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 	__init_begin = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 	__inittext_begin = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 	INIT_TEXT_SECTION(8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) 	__exittext_begin = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 	.exit.text : {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 		EXIT_TEXT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 	__exittext_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 	. = ALIGN(4);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 	.altinstructions : {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 		__alt_instructions = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 		*(.altinstructions)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 		__alt_instructions_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 	. = ALIGN(SEGMENT_ALIGN);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 	__inittext_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) 	__initdata_begin = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 	.init.data : {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 		INIT_DATA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 		INIT_SETUP(16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 		INIT_CALLS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) 		CON_INITCALL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 		INIT_RAM_FS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 		*(.init.altinstructions .init.rodata.* .init.bss)	/* from the EFI stub */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) 	.exit.data : {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) 		EXIT_DATA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) 	PERCPU_SECTION(L1_CACHE_BYTES)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) 	HYPERVISOR_PERCPU_SECTION
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) 	HYPERVISOR_RELOC_SECTION
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) 	.rela.dyn : ALIGN(8) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) 		*(.rela .rela*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) 	__rela_offset	= ABSOLUTE(ADDR(.rela.dyn) - KIMAGE_VADDR);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) 	__rela_size	= SIZEOF(.rela.dyn);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) #ifdef CONFIG_RELR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) 	.relr.dyn : ALIGN(8) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) 		*(.relr.dyn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) 	__relr_offset	= ABSOLUTE(ADDR(.relr.dyn) - KIMAGE_VADDR);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) 	__relr_size	= SIZEOF(.relr.dyn);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) 	. = ALIGN(SEGMENT_ALIGN);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) 	__initdata_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) 	__init_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) 	_data = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) 	_sdata = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) 	RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_ALIGN)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) 	 * Data written with the MMU off but read with the MMU on requires
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 	 * cache lines to be invalidated, discarding up to a Cache Writeback
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) 	 * Granule (CWG) of data from the cache. Keep the section that
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) 	 * requires this type of maintenance to be in its own Cache Writeback
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) 	 * Granule (CWG) area so the cache maintenance operations don't
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) 	 * interfere with adjacent data.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) 	.mmuoff.data.write : ALIGN(SZ_2K) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) 		__mmuoff_data_start = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) 		*(.mmuoff.data.write)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) 	. = ALIGN(SZ_2K);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) 	.mmuoff.data.read : {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) 		*(.mmuoff.data.read)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) 		__mmuoff_data_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) 	PECOFF_EDATA_PADDING
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) 	__pecoff_data_rawsize = ABSOLUTE(. - __initdata_begin);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) 	_edata = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) 	BSS_SECTION(SBSS_ALIGN, 0, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) 	. = ALIGN(PAGE_SIZE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) 	init_pg_dir = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) 	. += INIT_DIR_SIZE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) 	init_pg_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) 	. = ALIGN(SEGMENT_ALIGN);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) 	__pecoff_data_size = ABSOLUTE(. - __initdata_begin);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) 	_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) 	STABS_DEBUG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) 	DWARF_DEBUG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) 	ELF_DETAILS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) 	HEAD_SYMBOLS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) 	 * Sections that should stay zero sized, which is safer to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) 	 * explicitly check instead of blindly discarding.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) 	.plt : {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) 		*(.plt) *(.plt.*) *(.iplt) *(.igot .igot.plt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) 	ASSERT(SIZEOF(.plt) == 0, "Unexpected run-time procedure linkages detected!")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) 	.data.rel.ro : { *(.data.rel.ro) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) 	ASSERT(SIZEOF(.data.rel.ro) == 0, "Unexpected RELRO detected!")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) #include "image-vars.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320)  * The HYP init code and ID map text can't be longer than a page each. The
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321)  * former is page-aligned, but the latter may not be with 16K or 64K pages, so
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322)  * it should also not cross a page boundary.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) ASSERT(__hyp_idmap_text_end - __hyp_idmap_text_start <= PAGE_SIZE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) 	"HYP init code too big")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) ASSERT(__idmap_text_end - (__idmap_text_start & ~(SZ_4K - 1)) <= SZ_4K,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) 	"ID map text too big or misaligned")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) #ifdef CONFIG_HIBERNATION
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) ASSERT(__hibernate_exit_text_end - (__hibernate_exit_text_start & ~(SZ_4K - 1))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) 	<= SZ_4K, "Hibernate exit text too big or misaligned")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) #ifdef CONFIG_UNMAP_KERNEL_AT_EL0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) ASSERT((__entry_tramp_text_end - __entry_tramp_text_start) <= 3*PAGE_SIZE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) 	"Entry trampoline text too big")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) #ifdef CONFIG_KVM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) ASSERT(__hyp_bss_start == __bss_start, "HYP and Host BSS are misaligned")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340)  * If padding is applied before .head.text, virt<->phys conversions will fail.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) ASSERT(_text == KIMAGE_VADDR, "HEAD is misaligned")