blob: 0afb9e31d2a008a79f1b5a4d2ff70d8dc798a458 [file] [log] [blame]
Paul Mackerrasc51e3a42005-11-05 10:36:59 +11001#ifdef CONFIG_PPC64
Stephen Rothwellcabb5582005-09-30 16:16:52 +10002#include <asm/page.h>
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +11003#define PROVIDE32(x) PROVIDE(__unused__##x)
Paul Mackerrasc51e3a42005-11-05 10:36:59 +11004#else
5#define PAGE_SIZE 4096
6#define KERNELBASE CONFIG_KERNEL_START
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +11007#define PROVIDE32(x) PROVIDE(x)
Paul Mackerrasc51e3a42005-11-05 10:36:59 +11008#endif
Paul Mackerras14cf11a2005-09-26 16:04:21 +10009#include <asm-generic/vmlinux.lds.h>
Tony Breedsbd67fcf2007-07-04 14:04:31 +100010#include <asm/cache.h>
Paul Mackerras14cf11a2005-09-26 16:04:21 +100011
Michael Ellermane19e4ab2005-11-03 16:03:06 +110012ENTRY(_stext)
13
Stephen Rothwellcabb5582005-09-30 16:16:52 +100014#ifdef CONFIG_PPC64
15OUTPUT_ARCH(powerpc:common64)
16jiffies = jiffies_64;
17#else
Paul Mackerras14cf11a2005-09-26 16:04:21 +100018OUTPUT_ARCH(powerpc:common)
19jiffies = jiffies_64 + 4;
Stephen Rothwellcabb5582005-09-30 16:16:52 +100020#endif
Paul Mackerras14cf11a2005-09-26 16:04:21 +100021SECTIONS
22{
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +110023 /* Sections to be discarded. */
24 /DISCARD/ : {
25 *(.exitcall.exit)
Sam Ravnborg01ba2bd2008-01-20 14:15:03 +010026 EXIT_DATA
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +110027 }
Stephen Rothwellcabb5582005-09-30 16:16:52 +100028
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +110029 . = KERNELBASE;
Stephen Rothwellcabb5582005-09-30 16:16:52 +100030
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +110031/*
32 * Text, read only data and other permanent read-only sections
33 */
34
35 /* Text and gots */
36 .text : {
Kumar Gala748a7682007-09-13 15:42:35 -050037 ALIGN_FUNCTION();
38 *(.text.head)
Eric W. Biedermanfd593d12006-12-07 02:14:04 +010039 _text = .;
Stephen Rothwelle95c9182007-11-04 13:28:39 +110040 *(.text .fixup .text.init.refok .exit.text.refok)
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +110041 SCHED_TEXT
42 LOCK_TEXT
43 KPROBES_TEXT
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +110044
Stephen Rothwellcabb5582005-09-30 16:16:52 +100045#ifdef CONFIG_PPC32
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +110046 *(.got1)
47 __got2_start = .;
48 *(.got2)
49 __got2_end = .;
50#endif /* CONFIG_PPC32 */
Paul Mackerras14cf11a2005-09-26 16:04:21 +100051
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +110052 . = ALIGN(PAGE_SIZE);
53 _etext = .;
54 PROVIDE32 (etext = .);
55 }
Paul Mackerras14cf11a2005-09-26 16:04:21 +100056
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +110057 /* Read-only data */
58 RODATA
Paul Mackerras14cf11a2005-09-26 16:04:21 +100059
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +110060 /* Exception & bug tables */
Paul Mackerras14cf11a2005-09-26 16:04:21 +100061 __ex_table : {
62 __start___ex_table = .;
63 *(__ex_table)
64 __stop___ex_table = .;
65 }
66
Roland McGrath8fb775e2007-07-19 01:48:38 -070067 NOTES
68
Jeremy Fitzhardinge73c9cea2006-12-08 03:30:41 -080069 BUG_TABLE
Paul Mackerras14cf11a2005-09-26 16:04:21 +100070
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +110071/*
72 * Init sections discarded at runtime
73 */
74 . = ALIGN(PAGE_SIZE);
75 __init_begin = .;
76
77 .init.text : {
78 _sinittext = .;
Sam Ravnborg01ba2bd2008-01-20 14:15:03 +010079 INIT_TEXT
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +110080 _einittext = .;
81 }
82
83 /* .exit.text is discarded at runtime, not link time,
84 * to deal with references from __bug_table
85 */
Sam Ravnborg01ba2bd2008-01-20 14:15:03 +010086 .exit.text : {
87 EXIT_TEXT
88 }
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +110089
90 .init.data : {
Sam Ravnborg01ba2bd2008-01-20 14:15:03 +010091 INIT_DATA
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +110092 __vtop_table_begin = .;
93 *(.vtop_fixup);
94 __vtop_table_end = .;
95 __ptov_table_begin = .;
96 *(.ptov_fixup);
97 __ptov_table_end = .;
Stephen Rothwellc4e3ea22006-05-19 17:04:48 +100098#ifdef CONFIG_PPC_ISERIES
99 __dt_strings_start = .;
100 *(.dt_strings);
101 __dt_strings_end = .;
102#endif
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +1100103 }
104
105 . = ALIGN(16);
106 .init.setup : {
107 __setup_start = .;
108 *(.init.setup)
109 __setup_end = .;
110 }
111
112 .initcall.init : {
113 __initcall_start = .;
Andrew Morton61ce1ef2006-10-27 11:41:44 -0700114 INITCALLS
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +1100115 __initcall_end = .;
116 }
117
118 .con_initcall.init : {
119 __con_initcall_start = .;
120 *(.con_initcall.init)
121 __con_initcall_end = .;
122 }
123
124 SECURITY_INIT
125
126 . = ALIGN(8);
Stephen Rothwellcabb5582005-09-30 16:16:52 +1000127 __ftr_fixup : {
128 __start___ftr_fixup = .;
129 *(__ftr_fixup)
130 __stop___ftr_fixup = .;
131 }
Stephen Rothwell3f639ee2006-09-25 18:19:00 +1000132#ifdef CONFIG_PPC64
133 . = ALIGN(8);
134 __fw_ftr_fixup : {
135 __start___fw_ftr_fixup = .;
136 *(__fw_ftr_fixup)
137 __stop___fw_ftr_fixup = .;
138 }
139#endif
Jean-Paul Saman67d38222007-02-10 01:44:44 -0800140#ifdef CONFIG_BLK_DEV_INITRD
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +1100141 . = ALIGN(PAGE_SIZE);
142 .init.ramfs : {
143 __initramfs_start = .;
144 *(.init.ramfs)
145 __initramfs_end = .;
146 }
Jean-Paul Saman67d38222007-02-10 01:44:44 -0800147#endif
Jeremy Fitzhardingeb6e35902007-05-02 19:27:12 +0200148 . = ALIGN(PAGE_SIZE);
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +1100149 .data.percpu : {
150 __per_cpu_start = .;
151 *(.data.percpu)
Fenghua Yu5fb7dc32007-07-19 01:48:12 -0700152 *(.data.percpu.shared_aligned)
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +1100153 __per_cpu_end = .;
154 }
155
156 . = ALIGN(8);
157 .machine.desc : {
158 __machine_desc_start = . ;
159 *(.machine.desc)
160 __machine_desc_end = . ;
161 }
162
163 /* freed after init ends here */
164 . = ALIGN(PAGE_SIZE);
165 __init_end = .;
166
167/*
168 * And now the various read/write data
169 */
170
171 . = ALIGN(PAGE_SIZE);
172 _sdata = .;
Paul Mackerras14cf11a2005-09-26 16:04:21 +1000173
Stephen Rothwellcabb5582005-09-30 16:16:52 +1000174#ifdef CONFIG_PPC32
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +1100175 .data :
176 {
Sam Ravnborgca967252007-05-17 13:38:44 +0200177 DATA_DATA
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +1100178 *(.sdata)
179 *(.got.plt) *(.got)
180 }
Stephen Rothwellcabb5582005-09-30 16:16:52 +1000181#else
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +1100182 .data : {
Mathieu Desnoyers3ae0aa92007-06-16 22:29:04 -0400183 DATA_DATA
184 *(.data.rel*)
185 *(.toc1)
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +1100186 *(.branch_lt)
187 }
Paul Mackerras14cf11a2005-09-26 16:04:21 +1000188
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +1100189 .opd : {
190 *(.opd)
191 }
Paul Mackerras14cf11a2005-09-26 16:04:21 +1000192
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +1100193 .got : {
194 __toc_start = .;
195 *(.got)
196 *(.toc)
197 }
Stephen Rothwellcabb5582005-09-30 16:16:52 +1000198#endif
Paul Mackerras4a288562005-10-10 22:38:46 +1000199
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +1100200 . = ALIGN(PAGE_SIZE);
201 _edata = .;
202 PROVIDE32 (edata = .);
Stephen Rothwellcabb5582005-09-30 16:16:52 +1000203
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +1100204 /* The initial task and kernel stack */
Stephen Rothwellcabb5582005-09-30 16:16:52 +1000205#ifdef CONFIG_PPC32
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +1100206 . = ALIGN(8192);
207#else
208 . = ALIGN(16384);
Stephen Rothwellcabb5582005-09-30 16:16:52 +1000209#endif
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +1100210 .data.init_task : {
211 *(.data.init_task)
212 }
213
214 . = ALIGN(PAGE_SIZE);
215 .data.page_aligned : {
216 *(.data.page_aligned)
217 }
218
219 .data.cacheline_aligned : {
220 *(.data.cacheline_aligned)
221 }
222
Tony Breedsbd67fcf2007-07-04 14:04:31 +1000223 . = ALIGN(L1_CACHE_BYTES);
224 .data.read_mostly : {
225 *(.data.read_mostly)
226 }
227
Benjamin Herrenschmidte8222502006-03-28 23:15:54 +1100228 . = ALIGN(PAGE_SIZE);
229 __data_nosave : {
230 __nosave_begin = .;
231 *(.data.nosave)
232 . = ALIGN(PAGE_SIZE);
233 __nosave_end = .;
234 }
235
236/*
237 * And finally the bss
238 */
239
240 .bss : {
241 __bss_start = .;
242 *(.sbss) *(.scommon)
243 *(.dynbss)
244 *(.bss)
245 *(COMMON)
246 __bss_stop = .;
247 }
248
249 . = ALIGN(PAGE_SIZE);
250 _end = . ;
251 PROVIDE32 (end = .);
Paul Mackerras14cf11a2005-09-26 16:04:21 +1000252}