1/* 2 * Linker script for linux x86-64 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 clock_gettime; 13 __vdso_clock_gettime; 14 gettimeofday; 15 __vdso_gettimeofday; 16 getcpu; 17 __vdso_getcpu; 18 time; 19 __vdso_time; 20 clock_getres; 21 __vdso_clock_getres; 22 23 local: *; 24 }; 25} 26 27 28PHDRS { 29 phdr PT_PHDR FLAGS(4) PHDRS; 30 load PT_LOAD FLAGS(7) FILEHDR PHDRS; /* FLAGS=RWX */ 31 dynamic PT_DYNAMIC FLAGS(4); 32 eh_frame_hdr PT_GNU_EH_FRAME; 33 note PT_NOTE FLAGS(4); 34} 35 36SECTIONS { 37 . = SIZEOF_HEADERS; 38 39 /* 40 * The following, including the FILEHDRS and PHDRS, are modified 41 * when we relocate the binary. We want them to be initially 42 * writable for the relocation; we'll force them read-only after. 43 */ 44 .note : { *(.note*) } :load :note 45 .dynamic : { *(.dynamic) } :load :dynamic 46 .dynsym : { *(.dynsym) } :load 47 .data : { 48 /* 49 * There ought not be any real read-write data. 50 * But since we manipulated the segment layout, 51 * we have to put these sections somewhere. 52 */ 53 *(.data*) 54 *(.sdata*) 55 *(.got.plt) *(.got) 56 *(.gnu.linkonce.d.*) 57 *(.bss*) 58 *(.dynbss*) 59 *(.gnu.linkonce.b.*) 60 } 61 62 .rodata : { *(.rodata*) } 63 .hash : { *(.hash) } 64 .gnu.hash : { *(.gnu.hash) } 65 .dynstr : { *(.dynstr) } 66 .gnu.version : { *(.gnu.version) } 67 .gnu.version_d : { *(.gnu.version_d) } 68 .gnu.version_r : { *(.gnu.version_r) } 69 .eh_frame_hdr : { *(.eh_frame_hdr) } :load :eh_frame_hdr 70 .eh_frame : { *(.eh_frame) } :load 71 72 .text : { *(.text*) } :load =0x90909090 73} 74