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