GNU Linux-libre 5.4.274-gnu1
[releases.git] / arch / arm64 / kernel / vdso32 / vdso.lds.S
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
15 OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
16 OUTPUT_ARCH(arm)
17
18 SECTIONS
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  */
53 PHDRS
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
60 VERSION
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  */
79 VDSO_compat_sigreturn_arm       = __kernel_sigreturn_arm;
80 VDSO_compat_sigreturn_thumb     = __kernel_sigreturn_thumb;
81 VDSO_compat_rt_sigreturn_arm    = __kernel_rt_sigreturn_arm;
82 VDSO_compat_rt_sigreturn_thumb  = __kernel_rt_sigreturn_thumb;