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) #include <asm/vdso.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * Linker script for vDSO.  This is an ELF shared object prelinked to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  * its virtual address, and with only one read-only segment.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7)  * This script controls its layout.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) SECTIONS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) 	 * User/kernel shared data is before the vDSO.  This may be a little
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 	 * uglier than putting it after the vDSO, but it avoids issues with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) 	 * non-allocatable things that dangle past the end of the PT_LOAD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) 	 * segment.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 	vvar_start = . - 4 * PAGE_SIZE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 	vvar_page  = vvar_start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 	/* Place all vvars at the offsets in asm/vvar.h. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) #define EMIT_VVAR(name, offset) vvar_ ## name = vvar_page + offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) #include <asm/vvar.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) #undef EMIT_VVAR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 	pvclock_page = vvar_start + PAGE_SIZE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 	hvclock_page = vvar_start + 2 * PAGE_SIZE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 	timens_page  = vvar_start + 3 * PAGE_SIZE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) #undef _ASM_X86_VVAR_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 	/* Place all vvars in timens too at the offsets in asm/vvar.h. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) #define EMIT_VVAR(name, offset) timens_ ## name = timens_page + offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) #include <asm/vvar.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) #undef EMIT_VVAR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 	. = SIZEOF_HEADERS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 	.hash		: { *(.hash) }			:text
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 	.gnu.hash	: { *(.gnu.hash) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 	.dynsym		: { *(.dynsym) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 	.dynstr		: { *(.dynstr) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 	.gnu.version	: { *(.gnu.version) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 	.gnu.version_d	: { *(.gnu.version_d) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 	.gnu.version_r	: { *(.gnu.version_r) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 	.dynamic	: { *(.dynamic) }		:text	:dynamic
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 	.rodata		: {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 		*(.rodata*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 		*(.data*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 		*(.sdata*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 		*(.got.plt) *(.got)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 		*(.gnu.linkonce.d.*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 		*(.bss*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 		*(.dynbss*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 		*(.gnu.linkonce.b.*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 	}						:text
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	 * Discard .note.gnu.property sections which are unused and have
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	 * different alignment requirement from vDSO note sections.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 	/DISCARD/ : {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 		*(.note.gnu.property)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	.note		: { *(.note.*) }		:text	:note
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	.eh_frame_hdr	: { *(.eh_frame_hdr) }		:text	:eh_frame_hdr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	.eh_frame	: { KEEP (*(.eh_frame)) }	:text
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 	 * Text is well-separated from actual data: there's plenty of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	 * stuff that isn't used at runtime in between.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	.text		: { *(.text*) }			:text	=0x90909090,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	.altinstructions	: { *(.altinstructions) }	:text
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	.altinstr_replacement	: { *(.altinstr_replacement) }	:text
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	/DISCARD/ : {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 		*(.discard)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 		*(.discard.*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 		*(__bug_table)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91)  * Very old versions of ld do not recognize this name token; use the constant.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) #define PT_GNU_EH_FRAME	0x6474e550
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96)  * We must supply the ELF program headers explicitly to get just one
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97)  * PT_LOAD segment, and set the flags explicitly to make segments read-only.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) PHDRS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	text		PT_LOAD		FLAGS(5) FILEHDR PHDRS; /* PF_R|PF_X */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	dynamic		PT_DYNAMIC	FLAGS(4);		/* PF_R */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	note		PT_NOTE		FLAGS(4);		/* PF_R */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	eh_frame_hdr	PT_GNU_EH_FRAME;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) }