GNU Linux-libre 4.9.306-gnu1
[releases.git] / arch / arm / vdso / vdso.lds.S
1 /*
2  * Adapted from arm64 version.
3  *
4  * GNU linker script for the VDSO library.
5  *
6  * Copyright (C) 2012 ARM Limited
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19  *
20  * Author: Will Deacon <will.deacon@arm.com>
21  * Heavily based on the vDSO linker scripts for other archs.
22  */
23
24 #include <linux/const.h>
25 #include <asm/page.h>
26 #include <asm/vdso.h>
27
28 OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
29 OUTPUT_ARCH(arm)
30
31 SECTIONS
32 {
33         PROVIDE(_start = .);
34
35         . = SIZEOF_HEADERS;
36
37         .hash           : { *(.hash) }                  :text
38         .gnu.hash       : { *(.gnu.hash) }
39         .dynsym         : { *(.dynsym) }
40         .dynstr         : { *(.dynstr) }
41         .gnu.version    : { *(.gnu.version) }
42         .gnu.version_d  : { *(.gnu.version_d) }
43         .gnu.version_r  : { *(.gnu.version_r) }
44
45         .note           : { *(.note.*) }                :text   :note
46
47
48         .eh_frame_hdr   : { *(.eh_frame_hdr) }          :text   :eh_frame_hdr
49         .eh_frame       : { KEEP (*(.eh_frame)) }       :text
50
51         .dynamic        : { *(.dynamic) }               :text   :dynamic
52
53         .rodata         : { *(.rodata*) }               :text
54
55         .text           : { *(.text*) }                 :text   =0xe7f001f2
56
57         .got            : { *(.got) }
58         .rel.plt        : { *(.rel.plt) }
59
60         /DISCARD/       : {
61                 *(.note.GNU-stack)
62                 *(.data .data.* .gnu.linkonce.d.* .sdata*)
63                 *(.bss .sbss .dynbss .dynsbss)
64         }
65 }
66
67 /*
68  * We must supply the ELF program headers explicitly to get just one
69  * PT_LOAD segment, and set the flags explicitly to make segments read-only.
70  */
71 PHDRS
72 {
73         text            PT_LOAD         FLAGS(5) FILEHDR PHDRS; /* PF_R|PF_X */
74         dynamic         PT_DYNAMIC      FLAGS(4);               /* PF_R */
75         note            PT_NOTE         FLAGS(4);               /* PF_R */
76         eh_frame_hdr    PT_GNU_EH_FRAME;
77 }
78
79 VERSION
80 {
81         LINUX_2.6 {
82         global:
83                 __vdso_clock_gettime;
84                 __vdso_gettimeofday;
85         local: *;
86         };
87 }