1 /* SPDX-License-Identifier: GPL-2.0-only */ !! 1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 /* 2 /* 3 * Adapted from arm64 version. !! 3 * Copyright (C) 2015 Imagination Technologies 4 * !! 4 * Author: Alex Smith <alex.smith@imgtec.com> 5 * GNU linker script for the VDSO library. << 6 * << 7 * Copyright (C) 2012 ARM Limited << 8 * << 9 * Author: Will Deacon <will.deacon@arm.com> << 10 * Heavily based on the vDSO linker scripts fo << 11 */ 5 */ 12 6 13 #include <linux/const.h> !! 7 #include <asm/sgidefs.h> 14 #include <asm/page.h> << 15 #include <asm/vdso.h> << 16 8 17 OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm !! 9 #if _MIPS_SIM == _MIPS_SIM_ABI64 18 OUTPUT_ARCH(arm) !! 10 OUTPUT_FORMAT("elf64-tradlittlemips", "elf64-tradbigmips", "elf64-tradlittlemips") >> 11 #elif _MIPS_SIM == _MIPS_SIM_NABI32 >> 12 OUTPUT_FORMAT("elf32-ntradlittlemips", "elf32-ntradbigmips", "elf32-ntradlittlemips") >> 13 #else >> 14 OUTPUT_FORMAT("elf32-tradlittlemips", "elf32-tradbigmips", "elf32-tradlittlemips") >> 15 #endif >> 16 >> 17 OUTPUT_ARCH(mips) 19 18 20 SECTIONS 19 SECTIONS 21 { 20 { 22 PROVIDE(_start = .); 21 PROVIDE(_start = .); 23 << 24 . = SIZEOF_HEADERS; 22 . = SIZEOF_HEADERS; 25 23 >> 24 /* >> 25 * In order to retain compatibility with older toolchains we provide the >> 26 * ABI flags section ourself. Newer assemblers will automatically >> 27 * generate .MIPS.abiflags sections so we discard such input sections, >> 28 * and then manually define our own section here. genvdso will patch >> 29 * this section to have the correct name/type. >> 30 */ >> 31 .mips_abiflags : { *(.mips_abiflags) } :text :abiflags >> 32 >> 33 .reginfo : { *(.reginfo) } :text :reginfo >> 34 26 .hash : { *(.hash) } 35 .hash : { *(.hash) } :text 27 .gnu.hash : { *(.gnu.hash) } 36 .gnu.hash : { *(.gnu.hash) } 28 .dynsym : { *(.dynsym) } 37 .dynsym : { *(.dynsym) } 29 .dynstr : { *(.dynstr) } 38 .dynstr : { *(.dynstr) } 30 .gnu.version : { *(.gnu.version) } 39 .gnu.version : { *(.gnu.version) } 31 .gnu.version_d : { *(.gnu.version_d) 40 .gnu.version_d : { *(.gnu.version_d) } 32 .gnu.version_r : { *(.gnu.version_r) 41 .gnu.version_r : { *(.gnu.version_r) } 33 42 34 .note : { *(.note.*) } !! 43 .note : { *(.note.*) } :text :note 35 44 >> 45 .text : { *(.text*) } :text >> 46 PROVIDE (__etext = .); >> 47 PROVIDE (_etext = .); >> 48 PROVIDE (etext = .); 36 49 37 .eh_frame_hdr : { *(.eh_frame_hdr) } !! 50 .eh_frame_hdr : { *(.eh_frame_hdr) } :text :eh_frame_hdr 38 .eh_frame : { KEEP (*(.eh_frame) 51 .eh_frame : { KEEP (*(.eh_frame)) } :text 39 52 40 .dynamic : { *(.dynamic) } !! 53 .dynamic : { *(.dynamic) } :text :dynamic 41 54 42 .rodata : { *(.rodata*) } 55 .rodata : { *(.rodata*) } :text 43 56 44 .text : { *(.text*) } !! 57 _end = .; 45 !! 58 PROVIDE(end = .); 46 .got : { *(.got) } << 47 .rel.plt : { *(.rel.plt) } << 48 59 49 /DISCARD/ : { 60 /DISCARD/ : { >> 61 *(.MIPS.abiflags) >> 62 *(.gnu.attributes) 50 *(.note.GNU-stack) 63 *(.note.GNU-stack) 51 *(.data .data.* .gnu.linkonce. 64 *(.data .data.* .gnu.linkonce.d.* .sdata*) 52 *(.bss .sbss .dynbss .dynsbss) 65 *(.bss .sbss .dynbss .dynsbss) 53 } 66 } 54 } 67 } 55 68 56 /* << 57 * We must supply the ELF program headers expl << 58 * PT_LOAD segment, and set the flags explicit << 59 */ << 60 PHDRS 69 PHDRS 61 { 70 { >> 71 /* >> 72 * Provide a PT_MIPS_ABIFLAGS header to assign the ABI flags section >> 73 * to. We can specify the header type directly here so no modification >> 74 * is needed later on. >> 75 */ >> 76 abiflags 0x70000003; >> 77 >> 78 /* >> 79 * The ABI flags header must exist directly after the PT_INTERP header, >> 80 * so we must explicitly place the PT_MIPS_REGINFO header after it to >> 81 * stop the linker putting one in at the start. >> 82 */ >> 83 reginfo 0x70000000; >> 84 62 text PT_LOAD FLAGS( 85 text PT_LOAD FLAGS(5) FILEHDR PHDRS; /* PF_R|PF_X */ 63 dynamic PT_DYNAMIC FLAGS( 86 dynamic PT_DYNAMIC FLAGS(4); /* PF_R */ 64 note PT_NOTE FLAGS( 87 note PT_NOTE FLAGS(4); /* PF_R */ 65 eh_frame_hdr PT_GNU_EH_FRAME; 88 eh_frame_hdr PT_GNU_EH_FRAME; 66 } 89 } 67 90 68 VERSION 91 VERSION 69 { 92 { 70 LINUX_2.6 { 93 LINUX_2.6 { >> 94 #ifndef CONFIG_MIPS_DISABLE_VDSO 71 global: 95 global: 72 __vdso_clock_gettime; 96 __vdso_clock_gettime; >> 97 #ifdef CONFIG_MIPS_CLOCK_VSYSCALL 73 __vdso_gettimeofday; 98 __vdso_gettimeofday; >> 99 #endif 74 __vdso_clock_getres; 100 __vdso_clock_getres; >> 101 #if _MIPS_SIM != _MIPS_SIM_ABI64 75 __vdso_clock_gettime64; 102 __vdso_clock_gettime64; >> 103 #endif >> 104 #endif 76 local: *; 105 local: *; 77 }; 106 }; 78 } 107 }
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.