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