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