1*a1367443SRichard Henderson/* 2*a1367443SRichard Henderson * Linker script for linux i386 replacement vdso. 3*a1367443SRichard Henderson * 4*a1367443SRichard Henderson * Copyright 2023 Linaro, Ltd. 5*a1367443SRichard Henderson * 6*a1367443SRichard Henderson * SPDX-License-Identifier: GPL-2.0-or-later 7*a1367443SRichard Henderson */ 8*a1367443SRichard Henderson 9*a1367443SRichard HendersonENTRY(__kernel_vsyscall) 10*a1367443SRichard Henderson 11*a1367443SRichard HendersonVERSION { 12*a1367443SRichard Henderson LINUX_2.6 { 13*a1367443SRichard Henderson global: 14*a1367443SRichard Henderson __vdso_clock_gettime; 15*a1367443SRichard Henderson __vdso_gettimeofday; 16*a1367443SRichard Henderson __vdso_time; 17*a1367443SRichard Henderson __vdso_clock_getres; 18*a1367443SRichard Henderson __vdso_clock_gettime64; 19*a1367443SRichard Henderson __vdso_getcpu; 20*a1367443SRichard Henderson }; 21*a1367443SRichard Henderson 22*a1367443SRichard Henderson LINUX_2.5 { 23*a1367443SRichard Henderson global: 24*a1367443SRichard Henderson __kernel_vsyscall; 25*a1367443SRichard Henderson __kernel_sigreturn; 26*a1367443SRichard Henderson __kernel_rt_sigreturn; 27*a1367443SRichard Henderson local: *; 28*a1367443SRichard Henderson }; 29*a1367443SRichard Henderson} 30*a1367443SRichard Henderson 31*a1367443SRichard HendersonPHDRS { 32*a1367443SRichard Henderson phdr PT_PHDR FLAGS(4) PHDRS; 33*a1367443SRichard Henderson load PT_LOAD FLAGS(7) FILEHDR PHDRS; /* FLAGS=RWX */ 34*a1367443SRichard Henderson dynamic PT_DYNAMIC FLAGS(4); 35*a1367443SRichard Henderson eh_frame_hdr PT_GNU_EH_FRAME; 36*a1367443SRichard Henderson note PT_NOTE FLAGS(4); 37*a1367443SRichard Henderson} 38*a1367443SRichard Henderson 39*a1367443SRichard HendersonSECTIONS { 40*a1367443SRichard Henderson . = SIZEOF_HEADERS; 41*a1367443SRichard Henderson 42*a1367443SRichard Henderson /* 43*a1367443SRichard Henderson * The following, including the FILEHDRS and PHDRS, are modified 44*a1367443SRichard Henderson * when we relocate the binary. We want them to be initially 45*a1367443SRichard Henderson * writable for the relocation; we'll force them read-only after. 46*a1367443SRichard Henderson */ 47*a1367443SRichard Henderson .note : { *(.note*) } :load :note 48*a1367443SRichard Henderson .dynamic : { *(.dynamic) } :load :dynamic 49*a1367443SRichard Henderson .dynsym : { *(.dynsym) } :load 50*a1367443SRichard Henderson .data : { 51*a1367443SRichard Henderson /* 52*a1367443SRichard Henderson * There ought not be any real read-write data. 53*a1367443SRichard Henderson * But since we manipulated the segment layout, 54*a1367443SRichard Henderson * we have to put these sections somewhere. 55*a1367443SRichard Henderson */ 56*a1367443SRichard Henderson *(.data*) 57*a1367443SRichard Henderson *(.sdata*) 58*a1367443SRichard Henderson *(.got.plt) *(.got) 59*a1367443SRichard Henderson *(.gnu.linkonce.d.*) 60*a1367443SRichard Henderson *(.bss*) 61*a1367443SRichard Henderson *(.dynbss*) 62*a1367443SRichard Henderson *(.gnu.linkonce.b.*) 63*a1367443SRichard Henderson } 64*a1367443SRichard Henderson 65*a1367443SRichard Henderson .rodata : { *(.rodata*) } 66*a1367443SRichard Henderson .hash : { *(.hash) } 67*a1367443SRichard Henderson .gnu.hash : { *(.gnu.hash) } 68*a1367443SRichard Henderson .dynstr : { *(.dynstr) } 69*a1367443SRichard Henderson .gnu.version : { *(.gnu.version) } 70*a1367443SRichard Henderson .gnu.version_d : { *(.gnu.version_d) } 71*a1367443SRichard Henderson .gnu.version_r : { *(.gnu.version_r) } 72*a1367443SRichard Henderson .eh_frame_hdr : { *(.eh_frame_hdr) } :load :eh_frame_hdr 73*a1367443SRichard Henderson .eh_frame : { *(.eh_frame) } :load 74*a1367443SRichard Henderson 75*a1367443SRichard Henderson .text : { *(.text*) } :load =0x90909090 76*a1367443SRichard Henderson} 77