xref: /linux/arch/powerpc/kernel/vmlinux.lds.S (revision 858259cf7d1c443c836a2022b78cb281f0a9b95e)
1#include <linux/config.h>
2#ifdef CONFIG_PPC64
3#include <asm/page.h>
4#else
5#define PAGE_SIZE	4096
6#define KERNELBASE	CONFIG_KERNEL_START
7#endif
8#include <asm-generic/vmlinux.lds.h>
9
10ENTRY(_stext)
11
12#ifdef CONFIG_PPC64
13OUTPUT_ARCH(powerpc:common64)
14jiffies = jiffies_64;
15#else
16OUTPUT_ARCH(powerpc:common)
17jiffies = jiffies_64 + 4;
18#endif
19SECTIONS
20{
21  /* Sections to be discarded. */
22  /DISCARD/ : {
23    *(.exitcall.exit)
24    *(.exit.data)
25  }
26
27  . = KERNELBASE;
28
29  /* Read-only sections, merged into text segment: */
30  .text : {
31    *(.text .text.*)
32    SCHED_TEXT
33    LOCK_TEXT
34    KPROBES_TEXT
35    *(.fixup)
36#ifdef CONFIG_PPC32
37    *(.got1)
38    __got2_start = .;
39    *(.got2)
40    __got2_end = .;
41#else
42    . = ALIGN(PAGE_SIZE);
43    _etext = .;
44#endif
45  }
46#ifdef CONFIG_PPC32
47  _etext = .;
48  PROVIDE (etext = .);
49
50  RODATA
51  .fini      : { *(.fini)    } =0
52  .ctors     : { *(.ctors)   }
53  .dtors     : { *(.dtors)   }
54
55  .fixup   : { *(.fixup) }
56#endif
57
58	__ex_table : {
59		__start___ex_table = .;
60		*(__ex_table)
61		__stop___ex_table = .;
62	}
63
64	__bug_table : {
65		__start___bug_table = .;
66		*(__bug_table)
67		__stop___bug_table = .;
68	}
69
70#ifdef CONFIG_PPC64
71	__ftr_fixup : {
72		__start___ftr_fixup = .;
73		*(__ftr_fixup)
74		__stop___ftr_fixup = .;
75	}
76
77  RODATA
78#endif
79
80#ifdef CONFIG_PPC32
81  /* Read-write section, merged into data segment: */
82  . = ALIGN(PAGE_SIZE);
83  _sdata = .;
84  .data    :
85  {
86    *(.data)
87    *(.data1)
88    *(.sdata)
89    *(.sdata2)
90    *(.got.plt) *(.got)
91    *(.dynamic)
92    CONSTRUCTORS
93  }
94
95  . = ALIGN(PAGE_SIZE);
96  __nosave_begin = .;
97  .data_nosave : { *(.data.nosave) }
98  . = ALIGN(PAGE_SIZE);
99  __nosave_end = .;
100
101  . = ALIGN(32);
102  .data.cacheline_aligned : { *(.data.cacheline_aligned) }
103
104  _edata  =  .;
105  PROVIDE (edata = .);
106
107  . = ALIGN(8192);
108  .data.init_task : { *(.data.init_task) }
109#endif
110
111  /* will be freed after init */
112  . = ALIGN(PAGE_SIZE);
113  __init_begin = .;
114  .init.text : {
115	_sinittext = .;
116	*(.init.text)
117	_einittext = .;
118  }
119#ifdef CONFIG_PPC32
120  /* .exit.text is discarded at runtime, not link time,
121     to deal with references from __bug_table */
122  .exit.text : { *(.exit.text) }
123#endif
124  .init.data : {
125    *(.init.data);
126    __vtop_table_begin = .;
127    *(.vtop_fixup);
128    __vtop_table_end = .;
129    __ptov_table_begin = .;
130    *(.ptov_fixup);
131    __ptov_table_end = .;
132  }
133
134  . = ALIGN(16);
135  .init.setup : {
136    __setup_start = .;
137    *(.init.setup)
138    __setup_end = .;
139  }
140
141  .initcall.init : {
142	__initcall_start = .;
143	*(.initcall1.init)
144	*(.initcall2.init)
145	*(.initcall3.init)
146	*(.initcall4.init)
147	*(.initcall5.init)
148	*(.initcall6.init)
149	*(.initcall7.init)
150	__initcall_end = .;
151  }
152
153  .con_initcall.init : {
154    __con_initcall_start = .;
155    *(.con_initcall.init)
156    __con_initcall_end = .;
157  }
158
159  SECURITY_INIT
160
161#ifdef CONFIG_PPC32
162  __start___ftr_fixup = .;
163  __ftr_fixup : { *(__ftr_fixup) }
164  __stop___ftr_fixup = .;
165#else
166  . = ALIGN(PAGE_SIZE);
167  .init.ramfs : {
168    __initramfs_start = .;
169    *(.init.ramfs)
170    __initramfs_end = .;
171  }
172#endif
173
174#ifdef CONFIG_PPC32
175  . = ALIGN(32);
176#endif
177  .data.percpu : {
178    __per_cpu_start = .;
179    *(.data.percpu)
180    __per_cpu_end = .;
181  }
182
183 . = ALIGN(PAGE_SIZE);
184#ifdef CONFIG_PPC64
185 . = ALIGN(16384);
186 __init_end = .;
187 /* freed after init ends here */
188
189 /* Read/write sections */
190 . = ALIGN(PAGE_SIZE);
191 . = ALIGN(16384);
192 _sdata = .;
193 /* The initial task and kernel stack */
194 .data.init_task : {
195      *(.data.init_task)
196      }
197
198 . = ALIGN(PAGE_SIZE);
199 .data.page_aligned : {
200      *(.data.page_aligned)
201      }
202
203 .data.cacheline_aligned : {
204      *(.data.cacheline_aligned)
205      }
206
207 .data : {
208      *(.data .data.rel* .toc1)
209      *(.branch_lt)
210      }
211
212 .opd : {
213      *(.opd)
214      }
215
216 .got : {
217      __toc_start = .;
218      *(.got)
219      *(.toc)
220      . = ALIGN(PAGE_SIZE);
221      _edata = .;
222      }
223
224  . = ALIGN(PAGE_SIZE);
225#else
226  __initramfs_start = .;
227  .init.ramfs : {
228    *(.init.ramfs)
229  }
230  __initramfs_end = .;
231
232  . = ALIGN(4096);
233  __init_end = .;
234
235  . = ALIGN(4096);
236  _sextratext = .;
237  _eextratext = .;
238
239  __bss_start = .;
240#endif
241
242  .bss : {
243    __bss_start = .;
244   *(.sbss) *(.scommon)
245   *(.dynbss)
246   *(.bss)
247   *(COMMON)
248  __bss_stop = .;
249  }
250
251#ifdef CONFIG_PPC64
252  . = ALIGN(PAGE_SIZE);
253#endif
254  _end = . ;
255#ifdef CONFIG_PPC32
256  PROVIDE (end = .);
257#endif
258}
259