xref: /linux/arch/s390/kernel/vmlinux.lds.S (revision de2fe5e07d58424bc286fff3fd3c1b0bf933cd58)
1/* ld script to make s390 Linux kernel
2 * Written by Martin Schwidefsky (schwidefsky@de.ibm.com)
3 */
4
5#include <asm-generic/vmlinux.lds.h>
6#include <linux/config.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 = .;			/* Text and read-only data */
24  .text : {
25	*(.text)
26	SCHED_TEXT
27	LOCK_TEXT
28	*(.fixup)
29	*(.gnu.warning)
30	} = 0x0700
31
32  _etext = .;			/* End of text section */
33
34  . = ALIGN(16);		/* Exception table */
35  __start___ex_table = .;
36  __ex_table : { *(__ex_table) }
37  __stop___ex_table = .;
38
39  RODATA
40
41#ifdef CONFIG_SHARED_KERNEL
42  . = ALIGN(1048576);		/* VM shared segments are 1MB aligned */
43
44  _eshared = .;			/* End of shareable data */
45#endif
46
47  .data : {			/* Data */
48	*(.data)
49	CONSTRUCTORS
50	}
51
52  . = ALIGN(4096);
53  __nosave_begin = .;
54  .data_nosave : { *(.data.nosave) }
55  . = ALIGN(4096);
56  __nosave_end = .;
57
58  . = ALIGN(4096);
59  .data.page_aligned : { *(.data.idt) }
60
61  . = ALIGN(32);
62  .data.cacheline_aligned : { *(.data.cacheline_aligned) }
63
64  _edata = .;			/* End of data section */
65
66  . = ALIGN(8192);		/* init_task */
67  .data.init_task : { *(.data.init_task) }
68
69  /* will be freed after init */
70  . = ALIGN(4096);		/* Init code and data */
71  __init_begin = .;
72  .init.text : {
73	_sinittext = .;
74	*(.init.text)
75	_einittext = .;
76  }
77  .init.data : { *(.init.data) }
78  . = ALIGN(256);
79  __setup_start = .;
80  .init.setup : { *(.init.setup) }
81  __setup_end = .;
82  __initcall_start = .;
83  .initcall.init : {
84	*(.initcall1.init)
85	*(.initcall2.init)
86	*(.initcall3.init)
87	*(.initcall4.init)
88	*(.initcall5.init)
89	*(.initcall6.init)
90	*(.initcall7.init)
91  }
92  __initcall_end = .;
93  __con_initcall_start = .;
94  .con_initcall.init : { *(.con_initcall.init) }
95  __con_initcall_end = .;
96  SECURITY_INIT
97  . = ALIGN(256);
98  __initramfs_start = .;
99  .init.ramfs : { *(.init.initramfs) }
100  . = ALIGN(2);
101  __initramfs_end = .;
102  . = ALIGN(256);
103  __per_cpu_start = .;
104  .data.percpu  : { *(.data.percpu) }
105  __per_cpu_end = .;
106  . = ALIGN(4096);
107  __init_end = .;
108  /* freed after init ends here */
109
110  __bss_start = .;		/* BSS */
111  .bss : { *(.bss) }
112  . = ALIGN(2);
113  __bss_stop = .;
114
115  _end = . ;
116
117  /* Sections to be discarded */
118  /DISCARD/ : {
119	*(.exitcall.exit)
120	}
121
122  /* Stabs debugging sections.  */
123  .stab 0 : { *(.stab) }
124  .stabstr 0 : { *(.stabstr) }
125  .stab.excl 0 : { *(.stab.excl) }
126  .stab.exclstr 0 : { *(.stab.exclstr) }
127  .stab.index 0 : { *(.stab.index) }
128  .stab.indexstr 0 : { *(.stab.indexstr) }
129  .comment 0 : { *(.comment) }
130}
131