1b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky/*
2b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky * This is the infamous ld script for the 32 bits vdso
3b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky * library
4b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky */
5b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky#include <asm/vdso.h>
6b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky
7b020632e40c3ed5e8c0c066d022672907e8401cfMartin SchwidefskyOUTPUT_FORMAT("elf32-s390", "elf32-s390", "elf32-s390")
8b020632e40c3ed5e8c0c066d022672907e8401cfMartin SchwidefskyOUTPUT_ARCH(s390:31-bit)
9b020632e40c3ed5e8c0c066d022672907e8401cfMartin SchwidefskyENTRY(_start)
10b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky
11b020632e40c3ed5e8c0c066d022672907e8401cfMartin SchwidefskySECTIONS
12b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky{
13b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	. = VDSO32_LBASE + SIZEOF_HEADERS;
14b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky
15b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.hash		: { *(.hash) }			:text
16b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.gnu.hash	: { *(.gnu.hash) }
17b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.dynsym		: { *(.dynsym) }
18b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.dynstr		: { *(.dynstr) }
19b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.gnu.version	: { *(.gnu.version) }
20b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.gnu.version_d	: { *(.gnu.version_d) }
21b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.gnu.version_r	: { *(.gnu.version_r) }
22b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky
23b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.note		: { *(.note.*) }		:text	:note
24b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky
25b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	. = ALIGN(16);
26b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.text		: {
27b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky		*(.text .stub .text.* .gnu.linkonce.t.*)
28b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	} :text
29b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	PROVIDE(__etext = .);
30b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	PROVIDE(_etext = .);
31b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	PROVIDE(etext = .);
32b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky
33b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	/*
34b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	 * Other stuff is appended to the text segment:
35b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	 */
36b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.rodata		: { *(.rodata .rodata.* .gnu.linkonce.r.*) }
37b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.rodata1	: { *(.rodata1) }
38b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky
39b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.dynamic	: { *(.dynamic) }		:text	:dynamic
40b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky
41b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.eh_frame_hdr	: { *(.eh_frame_hdr) }		:text	:eh_frame_hdr
42b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.eh_frame	: { KEEP (*(.eh_frame)) }	:text
43b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.gcc_except_table : { *(.gcc_except_table .gcc_except_table.*) }
44b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky
45b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.rela.dyn ALIGN(8) : { *(.rela.dyn) }
46b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.got ALIGN(8)	: { *(.got .toc) }
47b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky
48b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	_end = .;
49b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	PROVIDE(end = .);
50b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky
51b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	/*
52b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	 * Stabs debugging sections are here too.
53b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	 */
54b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.stab	       0 : { *(.stab) }
55b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.stabstr       0 : { *(.stabstr) }
56b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.stab.excl     0 : { *(.stab.excl) }
57b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.stab.exclstr  0 : { *(.stab.exclstr) }
58b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.stab.index    0 : { *(.stab.index) }
59b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.stab.indexstr 0 : { *(.stab.indexstr) }
60b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.comment       0 : { *(.comment) }
61b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky
62b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	/*
63b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	 * DWARF debug sections.
64b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	 * Symbols in the DWARF debugging sections are relative to the
65b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	 * beginning of the section so we begin them at 0.
66b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	 */
67b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	/* DWARF 1 */
68b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.debug		0 : { *(.debug) }
69b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.line		0 : { *(.line) }
70b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	/* GNU DWARF 1 extensions */
71b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.debug_srcinfo	0 : { *(.debug_srcinfo) }
72b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.debug_sfnames	0 : { *(.debug_sfnames) }
73b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	/* DWARF 1.1 and DWARF 2 */
74b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.debug_aranges	0 : { *(.debug_aranges) }
75b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.debug_pubnames 0 : { *(.debug_pubnames) }
76b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	/* DWARF 2 */
77b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.debug_info	0 : { *(.debug_info .gnu.linkonce.wi.*) }
78b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.debug_abbrev	0 : { *(.debug_abbrev) }
79b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.debug_line	0 : { *(.debug_line) }
80b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.debug_frame	0 : { *(.debug_frame) }
81b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.debug_str	0 : { *(.debug_str) }
82b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.debug_loc	0 : { *(.debug_loc) }
83b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.debug_macinfo	0 : { *(.debug_macinfo) }
84b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	/* SGI/MIPS DWARF 2 extensions */
85b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.debug_weaknames 0 : { *(.debug_weaknames) }
86b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.debug_funcnames 0 : { *(.debug_funcnames) }
87b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.debug_typenames 0 : { *(.debug_typenames) }
88b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.debug_varnames  0 : { *(.debug_varnames) }
89b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	/* DWARF 3 */
90b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.debug_pubtypes 0 : { *(.debug_pubtypes) }
91b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.debug_ranges	0 : { *(.debug_ranges) }
92b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	.gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
93b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky
94b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	. = ALIGN(4096);
95b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	PROVIDE(_vdso_data = .);
96b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky
97b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	/DISCARD/	: {
98b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky		*(.note.GNU-stack)
99b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky		*(.branch_lt)
100b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky		*(.data .data.* .gnu.linkonce.d.* .sdata*)
101b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky		*(.bss .sbss .dynbss .dynsbss)
102b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	}
103b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky}
104b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky
105b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky/*
106b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky * Very old versions of ld do not recognize this name token; use the constant.
107b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky */
108b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky#define PT_GNU_EH_FRAME	0x6474e550
109b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky
110b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky/*
111b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky * We must supply the ELF program headers explicitly to get just one
112b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky * PT_LOAD segment, and set the flags explicitly to make segments read-only.
113b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky */
114b020632e40c3ed5e8c0c066d022672907e8401cfMartin SchwidefskyPHDRS
115b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky{
116b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	text		PT_LOAD FILEHDR PHDRS FLAGS(5);	/* PF_R|PF_X */
117b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	dynamic		PT_DYNAMIC FLAGS(4);		/* PF_R */
118b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	note		PT_NOTE FLAGS(4);		/* PF_R */
119b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	eh_frame_hdr	PT_GNU_EH_FRAME;
120b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky}
121b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky
122b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky/*
123b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky * This controls what symbols we export from the DSO.
124b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky */
125b020632e40c3ed5e8c0c066d022672907e8401cfMartin SchwidefskyVERSION
126b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky{
127b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	VDSO_VERSION_STRING {
128b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	global:
129b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky		/*
130b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky		 * Has to be there for the kernel to find
131b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky		 */
132b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky		__kernel_gettimeofday;
133b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky		__kernel_clock_gettime;
134b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky		__kernel_clock_getres;
135b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky
136b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	local: *;
137b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky	};
138b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky}
139