xref: /linux/arch/s390/kernel/vmlinux.lds.S (revision 2b8232ce512105e28453f301d1510de8363bccd1)
1/* ld script to make s390 Linux kernel
2 * Written by Martin Schwidefsky (schwidefsky@de.ibm.com)
3 */
4
5#include <asm/page.h>
6#include <asm-generic/vmlinux.lds.h>
7
8#ifndef CONFIG_64BIT
9OUTPUT_FORMAT("elf32-s390", "elf32-s390", "elf32-s390")
10OUTPUT_ARCH(s390)
11ENTRY(_start)
12jiffies = jiffies_64 + 4;
13#else
14OUTPUT_FORMAT("elf64-s390", "elf64-s390", "elf64-s390")
15OUTPUT_ARCH(s390:64-bit)
16ENTRY(_start)
17jiffies = jiffies_64;
18#endif
19
20SECTIONS
21{
22	. = 0x00000000;
23	.text : {
24	_text = .;		/* Text and read-only data */
25		*(.text.head)
26	TEXT_TEXT
27		SCHED_TEXT
28		LOCK_TEXT
29		KPROBES_TEXT
30		*(.fixup)
31		*(.gnu.warning)
32	} = 0x0700
33
34	_etext = .;		/* End of text section */
35
36	RODATA
37
38#ifdef CONFIG_SHARED_KERNEL
39	. = ALIGN(0x100000);	/* VM shared segments are 1MB aligned */
40#endif
41
42	. = ALIGN(PAGE_SIZE);
43	_eshared = .;		/* End of shareable data */
44
45	. = ALIGN(16);		/* Exception table */
46	__ex_table : {
47		__start___ex_table = .;
48		*(__ex_table)
49		__stop___ex_table = .;
50	}
51
52	NOTES
53	BUG_TABLE
54
55	.data : {		/* Data */
56		DATA_DATA
57		CONSTRUCTORS
58	}
59
60	. = ALIGN(PAGE_SIZE);
61	.data_nosave : {
62	__nosave_begin = .;
63		*(.data.nosave)
64	}
65	. = ALIGN(PAGE_SIZE);
66	__nosave_end = .;
67
68	. = ALIGN(PAGE_SIZE);
69	.data.page_aligned : {
70		*(.data.idt)
71	}
72
73	. = ALIGN(0x100);
74	.data.cacheline_aligned : {
75		*(.data.cacheline_aligned)
76	}
77
78	. = ALIGN(0x100);
79	.data.read_mostly : {
80		*(.data.read_mostly)
81	}
82	_edata = .;		/* End of data section */
83
84	. = ALIGN(2 * PAGE_SIZE);	/* init_task */
85	.data.init_task : {
86		*(.data.init_task)
87	}
88
89	/* will be freed after init */
90	. = ALIGN(PAGE_SIZE);	/* Init code and data */
91	__init_begin = .;
92	.init.text : {
93		_sinittext = .;
94		*(.init.text)
95		_einittext = .;
96	}
97	/*
98	 * .exit.text is discarded at runtime, not link time,
99	 * to deal with references from __bug_table
100	*/
101	.exit.text : {
102		*(.exit.text)
103	}
104
105	.init.data : {
106		*(.init.data)
107	}
108	. = ALIGN(0x100);
109	.init.setup : {
110		__setup_start = .;
111		*(.init.setup)
112		__setup_end = .;
113	}
114	.initcall.init : {
115		__initcall_start = .;
116		INITCALLS
117		__initcall_end = .;
118	}
119
120	.con_initcall.init : {
121		__con_initcall_start = .;
122		*(.con_initcall.init)
123		__con_initcall_end = .;
124	}
125	SECURITY_INIT
126
127#ifdef CONFIG_BLK_DEV_INITRD
128	. = ALIGN(0x100);
129	.init.ramfs : {
130		__initramfs_start = .;
131		*(.init.ramfs)
132		. = ALIGN(2);
133		__initramfs_end = .;
134	}
135#endif
136
137	PERCPU(PAGE_SIZE)
138	. = ALIGN(PAGE_SIZE);
139	__init_end = .;		/* freed after init ends here */
140
141	/* BSS */
142	.bss : {
143		__bss_start = .;
144		*(.bss)
145		. = ALIGN(2);
146		__bss_stop = .;
147	}
148
149	_end = . ;
150
151	/* Sections to be discarded */
152	/DISCARD/ : {
153		*(.exit.data)
154		*(.exitcall.exit)
155	}
156
157	/* Debugging sections.	*/
158	STABS_DEBUG
159	DWARF_DEBUG
160}
161