xref: /linux/arch/arm64/kernel/vdso32/vdso.lds.S (revision 4f9786035f9e519db41375818e1d0b5f20da2f10)
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