1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Adapted from arm64 version.
4 *
5 * GNU linker script for the VDSO library.
6 * Heavily based on the vDSO linker scripts for other archs.
7 *
8 * Copyright (C) 2012-2018 ARM Limited
9 */
10
11#include <linux/const.h>
12#include <asm/page.h>
13#include <asm/vdso.h>
14
15OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
16OUTPUT_ARCH(arm)
17
18SECTIONS
19{
20	PROVIDE_HIDDEN(_vdso_data = . - PAGE_SIZE);
21	. = VDSO_LBASE + SIZEOF_HEADERS;
22
23	.hash		: { *(.hash) }			:text
24	.gnu.hash	: { *(.gnu.hash) }
25	.dynsym		: { *(.dynsym) }
26	.dynstr		: { *(.dynstr) }
27	.gnu.version	: { *(.gnu.version) }
28	.gnu.version_d	: { *(.gnu.version_d) }
29	.gnu.version_r	: { *(.gnu.version_r) }
30
31	.note		: { *(.note.*) }		:text	:note
32
33	.dynamic	: { *(.dynamic) }		:text	:dynamic
34
35	.rodata		: { *(.rodata*) }		:text
36
37	.text		: { *(.text*) }			:text	=0xe7f001f2
38
39	.got		: { *(.got) }
40	.rel.plt	: { *(.rel.plt) }
41
42	/DISCARD/	: {
43		*(.note.GNU-stack)
44		*(.data .data.* .gnu.linkonce.d.* .sdata*)
45		*(.bss .sbss .dynbss .dynsbss)
46	}
47}
48
49/*
50 * We must supply the ELF program headers explicitly to get just one
51 * PT_LOAD segment, and set the flags explicitly to make segments read-only.
52 */
53PHDRS
54{
55	text		PT_LOAD		FLAGS(5) FILEHDR PHDRS; /* PF_R|PF_X */
56	dynamic		PT_DYNAMIC	FLAGS(4);		/* PF_R */
57	note		PT_NOTE		FLAGS(4);		/* PF_R */
58}
59
60VERSION
61{
62	LINUX_2.6 {
63	global:
64		__vdso_clock_gettime;
65		__vdso_gettimeofday;
66		__vdso_clock_getres;
67		__kernel_sigreturn_arm;
68		__kernel_sigreturn_thumb;
69		__kernel_rt_sigreturn_arm;
70		__kernel_rt_sigreturn_thumb;
71		__vdso_clock_gettime64;
72	local: *;
73	};
74}
75
76/*
77 * Make the sigreturn code visible to the kernel.
78 */
79VDSO_compat_sigreturn_arm	= __kernel_sigreturn_arm;
80VDSO_compat_sigreturn_thumb	= __kernel_sigreturn_thumb;
81VDSO_compat_rt_sigreturn_arm	= __kernel_rt_sigreturn_arm;
82VDSO_compat_rt_sigreturn_thumb	= __kernel_rt_sigreturn_thumb;
83