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