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