1a7f71a2cSVincenzo Frascino/* SPDX-License-Identifier: GPL-2.0 */ 2a7f71a2cSVincenzo Frascino/* 3a7f71a2cSVincenzo Frascino * Adapted from arm64 version. 4a7f71a2cSVincenzo Frascino * 5a7f71a2cSVincenzo Frascino * GNU linker script for the VDSO library. 6a7f71a2cSVincenzo Frascino * Heavily based on the vDSO linker scripts for other archs. 7a7f71a2cSVincenzo Frascino * 8a7f71a2cSVincenzo Frascino * Copyright (C) 2012-2018 ARM Limited 9a7f71a2cSVincenzo Frascino */ 10a7f71a2cSVincenzo Frascino 11a7f71a2cSVincenzo Frascino#include <linux/const.h> 12a7f71a2cSVincenzo Frascino#include <asm/page.h> 13a7f71a2cSVincenzo Frascino#include <asm/vdso.h> 14eeec7223SJoey Gouly#include <asm-generic/vmlinux.lds.h> 15*0b3bc335SThomas Weißschuh#include <vdso/datapage.h> 16a7f71a2cSVincenzo Frascino 17a7f71a2cSVincenzo FrascinoOUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm") 18a7f71a2cSVincenzo FrascinoOUTPUT_ARCH(arm) 19a7f71a2cSVincenzo Frascino 20a7f71a2cSVincenzo FrascinoSECTIONS 21a7f71a2cSVincenzo Frascino{ 22*0b3bc335SThomas Weißschuh VDSO_VVAR_SYMS 23*0b3bc335SThomas Weißschuh 240973fed6SThomas Weißschuh . = SIZEOF_HEADERS; 25a7f71a2cSVincenzo Frascino 26a7f71a2cSVincenzo Frascino .hash : { *(.hash) } :text 27a7f71a2cSVincenzo Frascino .gnu.hash : { *(.gnu.hash) } 28a7f71a2cSVincenzo Frascino .dynsym : { *(.dynsym) } 29a7f71a2cSVincenzo Frascino .dynstr : { *(.dynstr) } 30a7f71a2cSVincenzo Frascino .gnu.version : { *(.gnu.version) } 31a7f71a2cSVincenzo Frascino .gnu.version_d : { *(.gnu.version_d) } 32a7f71a2cSVincenzo Frascino .gnu.version_r : { *(.gnu.version_r) } 33a7f71a2cSVincenzo Frascino 34a7f71a2cSVincenzo Frascino .note : { *(.note.*) } :text :note 35a7f71a2cSVincenzo Frascino 36a7f71a2cSVincenzo Frascino .dynamic : { *(.dynamic) } :text :dynamic 37a7f71a2cSVincenzo Frascino 384274929cSJoey Gouly .rodata : { 394274929cSJoey Gouly *(.rodata*) 404274929cSJoey Gouly *(.got) 414274929cSJoey Gouly *(.got.plt) 424274929cSJoey Gouly *(.plt) 434274929cSJoey Gouly *(.rel.iplt) 444274929cSJoey Gouly *(.iplt) 454274929cSJoey Gouly *(.igot.plt) 464274929cSJoey Gouly } :text 47a7f71a2cSVincenzo Frascino 48eeec7223SJoey Gouly .text : { 49eeec7223SJoey Gouly *(.text*) 50eeec7223SJoey Gouly *(.glue_7) 51eeec7223SJoey Gouly *(.glue_7t) 52eeec7223SJoey Gouly *(.vfp11_veneer) 53eeec7223SJoey Gouly *(.v4_bx) 54eeec7223SJoey Gouly } :text =0xe7f001f2 55eeec7223SJoey Gouly 564274929cSJoey Gouly .rel.dyn : { *(.rel*) } 57eeec7223SJoey Gouly 585c4fb608SJoey Gouly .ARM.exidx : { *(.ARM.exidx*) } 599e07352eSNathan Chancellor DWARF_DEBUG 60859716b4SNathan Chancellor ELF_DETAILS 61eeec7223SJoey Gouly .ARM.attributes 0 : { *(.ARM.attributes) } 62a7f71a2cSVincenzo Frascino 63a7f71a2cSVincenzo Frascino /DISCARD/ : { 64a7f71a2cSVincenzo Frascino *(.note.GNU-stack) 65a7f71a2cSVincenzo Frascino *(.data .data.* .gnu.linkonce.d.* .sdata*) 66a7f71a2cSVincenzo Frascino *(.bss .sbss .dynbss .dynsbss) 67a7f71a2cSVincenzo Frascino } 68a7f71a2cSVincenzo Frascino} 69a7f71a2cSVincenzo Frascino 70a7f71a2cSVincenzo Frascino/* 71a7f71a2cSVincenzo Frascino * We must supply the ELF program headers explicitly to get just one 72a7f71a2cSVincenzo Frascino * PT_LOAD segment, and set the flags explicitly to make segments read-only. 73a7f71a2cSVincenzo Frascino */ 74a7f71a2cSVincenzo FrascinoPHDRS 75a7f71a2cSVincenzo Frascino{ 76a7f71a2cSVincenzo Frascino text PT_LOAD FLAGS(5) FILEHDR PHDRS; /* PF_R|PF_X */ 77a7f71a2cSVincenzo Frascino dynamic PT_DYNAMIC FLAGS(4); /* PF_R */ 78a7f71a2cSVincenzo Frascino note PT_NOTE FLAGS(4); /* PF_R */ 79a7f71a2cSVincenzo Frascino} 80a7f71a2cSVincenzo Frascino 81a7f71a2cSVincenzo FrascinoVERSION 82a7f71a2cSVincenzo Frascino{ 83a7f71a2cSVincenzo Frascino LINUX_2.6 { 84a7f71a2cSVincenzo Frascino global: 85a7f71a2cSVincenzo Frascino __vdso_clock_gettime; 86a7f71a2cSVincenzo Frascino __vdso_gettimeofday; 87a7f71a2cSVincenzo Frascino __vdso_clock_getres; 88a7f71a2cSVincenzo Frascino __vdso_clock_gettime64; 89a7f71a2cSVincenzo Frascino local: *; 90a7f71a2cSVincenzo Frascino }; 91a7f71a2cSVincenzo Frascino} 92