1 /* SPDX-License-Identifier: GPL-2.0 */
3 #include <asm/vdso/vsyscall.h>
6 * Linker script for vDSO. This is an ELF shared object prelinked to
7 * its virtual address, and with only one read-only segment.
8 * This script controls its layout.
14 * User/kernel shared data is before the vDSO. This may be a little
15 * uglier than putting it after the vDSO, but it avoids issues with
16 * non-allocatable things that dangle past the end of the PT_LOAD
20 vvar_start = . - __VVAR_PAGES * PAGE_SIZE;
21 vvar_page = vvar_start;
23 vdso_rng_data = vvar_page + __VDSO_RND_DATA_OFFSET;
25 timens_page = vvar_start + PAGE_SIZE;
27 vclock_pages = vvar_start + VDSO_NR_VCLOCK_PAGES * PAGE_SIZE;
28 pvclock_page = vclock_pages + VDSO_PAGE_PVCLOCK_OFFSET * PAGE_SIZE;
29 hvclock_page = vclock_pages + VDSO_PAGE_HVCLOCK_OFFSET * PAGE_SIZE;
33 .hash : { *(.hash) } :text
34 .gnu.hash : { *(.gnu.hash) }
35 .dynsym : { *(.dynsym) }
36 .dynstr : { *(.dynstr) }
37 .gnu.version : { *(.gnu.version) }
38 .gnu.version_d : { *(.gnu.version_d) }
39 .gnu.version_r : { *(.gnu.version_r) }
41 .dynamic : { *(.dynamic) } :text :dynamic
55 * Discard .note.gnu.property sections which are unused and have
56 * different alignment requirement from vDSO note sections.
61 .note : { *(.note.*) } :text :note
63 .eh_frame_hdr : { *(.eh_frame_hdr) } :text :eh_frame_hdr
64 .eh_frame : { KEEP (*(.eh_frame)) } :text
68 * Text is well-separated from actual data: there's plenty of
69 * stuff that isn't used at runtime in between.
78 .altinstructions : { *(.altinstructions) } :text
79 .altinstr_replacement : { *(.altinstr_replacement) } :text
81 __ex_table : { *(__ex_table) } :text
91 * Very old versions of ld do not recognize this name token; use the constant.
93 #define PT_GNU_EH_FRAME 0x6474e550
96 * We must supply the ELF program headers explicitly to get just one
97 * PT_LOAD segment, and set the flags explicitly to make segments read-only.
101 text PT_LOAD FLAGS(5) FILEHDR PHDRS; /* PF_R|PF_X */
102 dynamic PT_DYNAMIC FLAGS(4); /* PF_R */
103 note PT_NOTE FLAGS(4); /* PF_R */
104 eh_frame_hdr PT_GNU_EH_FRAME;