xref: /linux/arch/powerpc/kernel/vmlinux.lds.S (revision ec556271bbb33809b73cdb238f8cb357345908e8)
1b2441318SGreg Kroah-Hartman/* SPDX-License-Identifier: GPL-2.0 */
2c51e3a41SPaul Mackerras#ifdef CONFIG_PPC64
3e8222502SBenjamin Herrenschmidt#define PROVIDE32(x)	PROVIDE(__unused__##x)
4c51e3a41SPaul Mackerras#else
5e8222502SBenjamin Herrenschmidt#define PROVIDE32(x)	PROVIDE(x)
6c51e3a41SPaul Mackerras#endif
75f69e388SBenjamin Herrenschmidt
85f69e388SBenjamin Herrenschmidt#define BSS_FIRST_SECTIONS *(.bss.prominit)
95f69e388SBenjamin Herrenschmidt
104846c5deSKumar Gala#include <asm/page.h>
1114cf11afSPaul Mackerras#include <asm-generic/vmlinux.lds.h>
12bd67fcf9STony Breeds#include <asm/cache.h>
1362bef288STim Abbott#include <asm/thread_info.h>
1414cf11afSPaul Mackerras
15166d97d9SChristophe Leroy#define STRICT_ALIGN_SIZE	(1 << CONFIG_DATA_SHIFT)
16166d97d9SChristophe Leroy#define ETEXT_ALIGN_SIZE	(1 << CONFIG_ETEXT_SHIFT)
17d924cc3fSBalbir Singh
18e19e4ab4SMichael EllermanENTRY(_stext)
19e19e4ab4SMichael Ellerman
20c69cccc9SSegher BoessenkoolPHDRS {
21c69cccc9SSegher Boessenkool	kernel PT_LOAD FLAGS(7); /* RWX */
22*ec556271SKees Cook	note PT_NOTE FLAGS(0);
23c69cccc9SSegher Boessenkool	dummy PT_NOTE FLAGS(0);
24c69cccc9SSegher Boessenkool
25c69cccc9SSegher Boessenkool	/* binutils < 2.18 has a bug that makes it misbehave when taking an
26c69cccc9SSegher Boessenkool	   ELF file with all segments at load address 0 as input.  This
27c69cccc9SSegher Boessenkool	   happens when running "strip" on vmlinux, because of the AT() magic
28c69cccc9SSegher Boessenkool	   in this linker script.  People using GCC >= 4.2 won't run into
29c69cccc9SSegher Boessenkool	   this problem, because the "build-id" support will put some data
30c69cccc9SSegher Boessenkool	   into the "notes" segment (at a non-zero load address).
31c69cccc9SSegher Boessenkool
32c69cccc9SSegher Boessenkool	   To work around this, we force some data into both the "dummy"
33c69cccc9SSegher Boessenkool	   segment and the kernel segment, so the dummy segment will get a
34c69cccc9SSegher Boessenkool	   non-zero load address.  It's not enough to always create the
35c69cccc9SSegher Boessenkool	   "notes" segment, since if nothing gets assigned to it, its load
36c69cccc9SSegher Boessenkool	   address will be zero.  */
37c69cccc9SSegher Boessenkool}
38c69cccc9SSegher Boessenkool
39cabb5587SStephen Rothwell#ifdef CONFIG_PPC64
40cabb5587SStephen RothwellOUTPUT_ARCH(powerpc:common64)
41cabb5587SStephen Rothwelljiffies = jiffies_64;
42cabb5587SStephen Rothwell#else
4314cf11afSPaul MackerrasOUTPUT_ARCH(powerpc:common)
4414cf11afSPaul Mackerrasjiffies = jiffies_64 + 4;
45cabb5587SStephen Rothwell#endif
4614cf11afSPaul MackerrasSECTIONS
4714cf11afSPaul Mackerras{
48e19e4ab4SMichael Ellerman	. = KERNELBASE;
49cabb5587SStephen Rothwell
50e8222502SBenjamin Herrenschmidt/*
51e8222502SBenjamin Herrenschmidt * Text, read only data and other permanent read-only sections
52e8222502SBenjamin Herrenschmidt */
53e8222502SBenjamin Herrenschmidt
5457f26649SNicholas Piggin	_text = .;
5557f26649SNicholas Piggin	_stext = .;
5657f26649SNicholas Piggin
5757f26649SNicholas Piggin	/*
5857f26649SNicholas Piggin	 * Head text.
5957f26649SNicholas Piggin	 * This needs to be in its own output section to avoid ld placing
6057f26649SNicholas Piggin	 * branch trampoline stubs randomly throughout the fixed sections,
6157f26649SNicholas Piggin	 * which it will do (even if the branch comes from another section)
6257f26649SNicholas Piggin	 * in order to optimize stub generation.
6357f26649SNicholas Piggin	 */
6457f26649SNicholas Piggin	.head.text : AT(ADDR(.head.text) - LOAD_OFFSET) {
6557f26649SNicholas Piggin#ifdef CONFIG_PPC64
6657f26649SNicholas Piggin		KEEP(*(.head.text.first_256B));
6757f26649SNicholas Piggin#ifdef CONFIG_PPC_BOOK3E
6857f26649SNicholas Piggin#else
6957f26649SNicholas Piggin		KEEP(*(.head.text.real_vectors));
7057f26649SNicholas Piggin		*(.head.text.real_trampolines);
7157f26649SNicholas Piggin		KEEP(*(.head.text.virt_vectors));
7257f26649SNicholas Piggin		*(.head.text.virt_trampolines);
7357f26649SNicholas Piggin# if defined(CONFIG_PPC_PSERIES) || defined(CONFIG_PPC_POWERNV)
7457f26649SNicholas Piggin		KEEP(*(.head.data.fwnmi_page));
7557f26649SNicholas Piggin# endif
7657f26649SNicholas Piggin#endif
7757f26649SNicholas Piggin#else /* !CONFIG_PPC64 */
7857f26649SNicholas Piggin		HEAD_TEXT
7957f26649SNicholas Piggin#endif
8057f26649SNicholas Piggin	} :kernel
8157f26649SNicholas Piggin
827aa5b018SNaveen N. Rao	__head_end = .;
837aa5b018SNaveen N. Rao
84dadc4a1bSNicholas Piggin#ifdef CONFIG_PPC64
85dadc4a1bSNicholas Piggin	/*
86a652758aSJoel Stanley	 * ALIGN(0) overrides the default output section alignment because
87dadc4a1bSNicholas Piggin	 * this needs to start right after .head.text in order for fixed
88dadc4a1bSNicholas Piggin	 * section placement to work.
89dadc4a1bSNicholas Piggin	 */
90a652758aSJoel Stanley	.text ALIGN(0) : AT(ADDR(.text) - LOAD_OFFSET) {
91951eedebSNicholas Piggin#ifdef CONFIG_LD_HEAD_STUB_CATCH
924c1d9bb0SNicholas Piggin		KEEP(*(.linker_stub_catch));
93951eedebSNicholas Piggin		. = . ;
94951eedebSNicholas Piggin#endif
95951eedebSNicholas Piggin
96dadc4a1bSNicholas Piggin#else
97366234f6SKumar Gala	.text : AT(ADDR(.text) - LOAD_OFFSET) {
98748a7683SKumar Gala		ALIGN_FUNCTION();
99dadc4a1bSNicholas Piggin#endif
10013beadd9STim Abbott		/* careful! __ftr_alt_* sections need to be close to .text */
1014c1d9bb0SNicholas Piggin		*(.text.hot TEXT_MAIN .text.fixup .text.unlikely .fixup __ftr_alt_* .ref.text);
10267361cf8SNaveen N. Rao#ifdef CONFIG_PPC64
10367361cf8SNaveen N. Rao		*(.tramp.ftrace.text);
10467361cf8SNaveen N. Rao#endif
10514cf11afSPaul Mackerras		SCHED_TEXT
1066727ad9eSChris Metcalf		CPUIDLE_TEXT
10714cf11afSPaul Mackerras		LOCK_TEXT
108cabb5587SStephen Rothwell		KPROBES_TEXT
1096794c782SSteven Rostedt		IRQENTRY_TEXT
110be7635e7SAlexander Potapenko		SOFTIRQENTRY_TEXT
111e8c68825SNicholas Piggin		/*
112e8c68825SNicholas Piggin		 * -Os builds call FP save/restore functions. The powerpc64
113e8c68825SNicholas Piggin		 * linker generates those on demand in the .sfpr section.
114e8c68825SNicholas Piggin		 * .sfpr gets placed at the beginning of a group of input
115e8c68825SNicholas Piggin		 * sections, which can break start-of-text offset if it is
116e8c68825SNicholas Piggin		 * included with the main text sections, so put it by itself.
117e8c68825SNicholas Piggin		 */
118e8c68825SNicholas Piggin		*(.sfpr);
1197de3b27bSMichael Ellerman		MEM_KEEP(init.text)
1207de3b27bSMichael Ellerman		MEM_KEEP(exit.text)
121e8222502SBenjamin Herrenschmidt
122cabb5587SStephen Rothwell#ifdef CONFIG_PPC32
12314cf11afSPaul Mackerras		*(.got1)
12414cf11afSPaul Mackerras		__got2_start = .;
12514cf11afSPaul Mackerras		*(.got2)
12614cf11afSPaul Mackerras		__got2_end = .;
127e8222502SBenjamin Herrenschmidt#endif /* CONFIG_PPC32 */
128e8222502SBenjamin Herrenschmidt
129303996daSStephen Rothwell	} :kernel
130303996daSStephen Rothwell
131166d97d9SChristophe Leroy	. = ALIGN(ETEXT_ALIGN_SIZE);
132cabb5587SStephen Rothwell	_etext = .;
133e8222502SBenjamin Herrenschmidt	PROVIDE32 (etext = .);
13414cf11afSPaul Mackerras
135e8222502SBenjamin Herrenschmidt	/* Read-only data */
136d924cc3fSBalbir Singh	RO_DATA(PAGE_SIZE)
13714cf11afSPaul Mackerras
138aa8a5e00SMichael Ellerman#ifdef CONFIG_PPC64
139aa8a5e00SMichael Ellerman	. = ALIGN(8);
140a048a07dSNicholas Piggin	__stf_entry_barrier_fixup : AT(ADDR(__stf_entry_barrier_fixup) - LOAD_OFFSET) {
141a048a07dSNicholas Piggin		__start___stf_entry_barrier_fixup = .;
142a048a07dSNicholas Piggin		*(__stf_entry_barrier_fixup)
143a048a07dSNicholas Piggin		__stop___stf_entry_barrier_fixup = .;
144a048a07dSNicholas Piggin	}
145a048a07dSNicholas Piggin
146a048a07dSNicholas Piggin	. = ALIGN(8);
147a048a07dSNicholas Piggin	__stf_exit_barrier_fixup : AT(ADDR(__stf_exit_barrier_fixup) - LOAD_OFFSET) {
148a048a07dSNicholas Piggin		__start___stf_exit_barrier_fixup = .;
149a048a07dSNicholas Piggin		*(__stf_exit_barrier_fixup)
150a048a07dSNicholas Piggin		__stop___stf_exit_barrier_fixup = .;
151a048a07dSNicholas Piggin	}
152a048a07dSNicholas Piggin
153a048a07dSNicholas Piggin	. = ALIGN(8);
154aa8a5e00SMichael Ellerman	__rfi_flush_fixup : AT(ADDR(__rfi_flush_fixup) - LOAD_OFFSET) {
155aa8a5e00SMichael Ellerman		__start___rfi_flush_fixup = .;
156aa8a5e00SMichael Ellerman		*(__rfi_flush_fixup)
157aa8a5e00SMichael Ellerman		__stop___rfi_flush_fixup = .;
158aa8a5e00SMichael Ellerman	}
159179ab1cbSMichael Ellerman#endif /* CONFIG_PPC64 */
1602eea7f06SMichal Suchanek
161179ab1cbSMichael Ellerman#ifdef CONFIG_PPC_BARRIER_NOSPEC
1622eea7f06SMichal Suchanek	. = ALIGN(8);
1632eea7f06SMichal Suchanek	__spec_barrier_fixup : AT(ADDR(__spec_barrier_fixup) - LOAD_OFFSET) {
1642eea7f06SMichal Suchanek		__start___barrier_nospec_fixup = .;
1652eea7f06SMichal Suchanek		*(__barrier_nospec_fixup)
1662eea7f06SMichal Suchanek		__stop___barrier_nospec_fixup = .;
1672eea7f06SMichal Suchanek	}
168179ab1cbSMichael Ellerman#endif /* CONFIG_PPC_BARRIER_NOSPEC */
169aa8a5e00SMichael Ellerman
17076a5eaa3SDiana Craciun#ifdef CONFIG_PPC_FSL_BOOK3E
17176a5eaa3SDiana Craciun	. = ALIGN(8);
17276a5eaa3SDiana Craciun	__spec_btb_flush_fixup : AT(ADDR(__spec_btb_flush_fixup) - LOAD_OFFSET) {
17376a5eaa3SDiana Craciun		__start__btb_flush_fixup = .;
17476a5eaa3SDiana Craciun		*(__btb_flush_fixup)
17576a5eaa3SDiana Craciun		__stop__btb_flush_fixup = .;
17676a5eaa3SDiana Craciun	}
17776a5eaa3SDiana Craciun#endif
17862bef288STim Abbott	EXCEPTION_TABLE(0)
17914cf11afSPaul Mackerras
180*ec556271SKees Cook	NOTES :kernel :note
181c69cccc9SSegher Boessenkool
182c69cccc9SSegher Boessenkool	/* The dummy segment contents for the bug workaround mentioned above
183c69cccc9SSegher Boessenkool	   near PHDRS.  */
18480c60bf9SSegher Boessenkool	.dummy : AT(ADDR(.dummy) - LOAD_OFFSET) {
185e16459c6SMilton Miller		LONG(0)
186e16459c6SMilton Miller		LONG(0)
187e16459c6SMilton Miller		LONG(0)
188c69cccc9SSegher Boessenkool	} :kernel :dummy
1898fb775eeSRoland McGrath
190e8222502SBenjamin Herrenschmidt/*
191e8222502SBenjamin Herrenschmidt * Init sections discarded at runtime
192e8222502SBenjamin Herrenschmidt */
193d924cc3fSBalbir Singh	. = ALIGN(STRICT_ALIGN_SIZE);
19414cf11afSPaul Mackerras	__init_begin = .;
19567361cf8SNaveen N. Rao	. = ALIGN(PAGE_SIZE);
19667361cf8SNaveen N. Rao	.init.text : AT(ADDR(.init.text) - LOAD_OFFSET) {
19767361cf8SNaveen N. Rao		_sinittext = .;
19867361cf8SNaveen N. Rao		INIT_TEXT
19967361cf8SNaveen N. Rao		_einittext = .;
20067361cf8SNaveen N. Rao#ifdef CONFIG_PPC64
20167361cf8SNaveen N. Rao		*(.tramp.ftrace.init);
20267361cf8SNaveen N. Rao#endif
20367361cf8SNaveen N. Rao	} :kernel
204e8222502SBenjamin Herrenschmidt
20514cf11afSPaul Mackerras	/* .exit.text is discarded at runtime, not link time,
206e8222502SBenjamin Herrenschmidt	 * to deal with references from __bug_table
207e8222502SBenjamin Herrenschmidt	 */
208366234f6SKumar Gala	.exit.text : AT(ADDR(.exit.text) - LOAD_OFFSET) {
20901ba2bdcSSam Ravnborg		EXIT_TEXT
21001ba2bdcSSam Ravnborg	}
211e8222502SBenjamin Herrenschmidt
212366234f6SKumar Gala	.init.data : AT(ADDR(.init.data) - LOAD_OFFSET) {
21301ba2bdcSSam Ravnborg		INIT_DATA
21414cf11afSPaul Mackerras	}
215cabb5587SStephen Rothwell
216366234f6SKumar Gala	.init.setup : AT(ADDR(.init.setup) - LOAD_OFFSET) {
21762bef288STim Abbott		INIT_SETUP(16)
218cabb5587SStephen Rothwell	}
219cabb5587SStephen Rothwell
220366234f6SKumar Gala	.initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) {
22162bef288STim Abbott		INIT_CALLS
22214cf11afSPaul Mackerras	}
22314cf11afSPaul Mackerras
224366234f6SKumar Gala	.con_initcall.init : AT(ADDR(.con_initcall.init) - LOAD_OFFSET) {
22562bef288STim Abbott		CON_INITCALL
226cabb5587SStephen Rothwell	}
22714cf11afSPaul Mackerras
228e8222502SBenjamin Herrenschmidt	. = ALIGN(8);
229366234f6SKumar Gala	__ftr_fixup : AT(ADDR(__ftr_fixup) - LOAD_OFFSET) {
23014cf11afSPaul Mackerras		__start___ftr_fixup = .;
2314c1d9bb0SNicholas Piggin		KEEP(*(__ftr_fixup))
23214cf11afSPaul Mackerras		__stop___ftr_fixup = .;
233e8222502SBenjamin Herrenschmidt	}
2342d1b2027SKumar Gala	. = ALIGN(8);
2357c03d653SBenjamin Herrenschmidt	__mmu_ftr_fixup : AT(ADDR(__mmu_ftr_fixup) - LOAD_OFFSET) {
2367c03d653SBenjamin Herrenschmidt		__start___mmu_ftr_fixup = .;
2374c1d9bb0SNicholas Piggin		KEEP(*(__mmu_ftr_fixup))
2387c03d653SBenjamin Herrenschmidt		__stop___mmu_ftr_fixup = .;
2397c03d653SBenjamin Herrenschmidt	}
2407c03d653SBenjamin Herrenschmidt	. = ALIGN(8);
2412d1b2027SKumar Gala	__lwsync_fixup : AT(ADDR(__lwsync_fixup) - LOAD_OFFSET) {
2422d1b2027SKumar Gala		__start___lwsync_fixup = .;
2434c1d9bb0SNicholas Piggin		KEEP(*(__lwsync_fixup))
2442d1b2027SKumar Gala		__stop___lwsync_fixup = .;
2452d1b2027SKumar Gala	}
2463f639ee8SStephen Rothwell#ifdef CONFIG_PPC64
2473f639ee8SStephen Rothwell	. = ALIGN(8);
248366234f6SKumar Gala	__fw_ftr_fixup : AT(ADDR(__fw_ftr_fixup) - LOAD_OFFSET) {
2493f639ee8SStephen Rothwell		__start___fw_ftr_fixup = .;
2504c1d9bb0SNicholas Piggin		KEEP(*(__fw_ftr_fixup))
2513f639ee8SStephen Rothwell		__stop___fw_ftr_fixup = .;
2523f639ee8SStephen Rothwell	}
2533f639ee8SStephen Rothwell#endif
254366234f6SKumar Gala	.init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) {
25562bef288STim Abbott		INIT_RAM_FS
256cabb5587SStephen Rothwell	}
25762bef288STim Abbott
2580415b00dSTejun Heo	PERCPU_SECTION(L1_CACHE_BYTES)
25914cf11afSPaul Mackerras
260e8222502SBenjamin Herrenschmidt	. = ALIGN(8);
261366234f6SKumar Gala	.machine.desc : AT(ADDR(.machine.desc) - LOAD_OFFSET) {
262e8222502SBenjamin Herrenschmidt		__machine_desc_start = . ;
2634c1d9bb0SNicholas Piggin		KEEP(*(.machine.desc))
264e8222502SBenjamin Herrenschmidt		__machine_desc_end = . ;
265e8222502SBenjamin Herrenschmidt	}
2662a4b9c5aSPaul Mackerras#ifdef CONFIG_RELOCATABLE
267549e8152SPaul Mackerras	. = ALIGN(8);
2689c5f7d39SSuzuki Poulose	.dynsym : AT(ADDR(.dynsym) - LOAD_OFFSET)
2699c5f7d39SSuzuki Poulose	{
27027d11496SKevin Hao#ifdef CONFIG_PPC32
2719c5f7d39SSuzuki Poulose		__dynamic_symtab = .;
2729c5f7d39SSuzuki Poulose#endif
2739c5f7d39SSuzuki Poulose		*(.dynsym)
2749c5f7d39SSuzuki Poulose	}
275549e8152SPaul Mackerras	.dynstr : AT(ADDR(.dynstr) - LOAD_OFFSET) { *(.dynstr) }
276549e8152SPaul Mackerras	.dynamic : AT(ADDR(.dynamic) - LOAD_OFFSET)
277549e8152SPaul Mackerras	{
278549e8152SPaul Mackerras		__dynamic_start = .;
279549e8152SPaul Mackerras		*(.dynamic)
280549e8152SPaul Mackerras	}
281549e8152SPaul Mackerras	.hash : AT(ADDR(.hash) - LOAD_OFFSET) { *(.hash) }
282549e8152SPaul Mackerras	.interp : AT(ADDR(.interp) - LOAD_OFFSET) { *(.interp) }
283549e8152SPaul Mackerras	.rela.dyn : AT(ADDR(.rela.dyn) - LOAD_OFFSET)
284549e8152SPaul Mackerras	{
285549e8152SPaul Mackerras		__rela_dyn_start = .;
286549e8152SPaul Mackerras		*(.rela*)
287549e8152SPaul Mackerras	}
2882a4b9c5aSPaul Mackerras#endif
2894c812318SStephen Rothwell	/* .exit.data is discarded at runtime, not link time,
2904c812318SStephen Rothwell	 * to deal with references from .exit.text
2914c812318SStephen Rothwell	 */
2924c812318SStephen Rothwell	.exit.data : AT(ADDR(.exit.data) - LOAD_OFFSET) {
2934c812318SStephen Rothwell		EXIT_DATA
2944c812318SStephen Rothwell	}
295e8222502SBenjamin Herrenschmidt
296cabb5587SStephen Rothwell	/* freed after init ends here */
297cabb5587SStephen Rothwell	. = ALIGN(PAGE_SIZE);
298e8222502SBenjamin Herrenschmidt	__init_end = .;
299e8222502SBenjamin Herrenschmidt
300e8222502SBenjamin Herrenschmidt/*
301e8222502SBenjamin Herrenschmidt * And now the various read/write data
302e8222502SBenjamin Herrenschmidt */
303e8222502SBenjamin Herrenschmidt
304e8222502SBenjamin Herrenschmidt	. = ALIGN(PAGE_SIZE);
3054a288563SPaul Mackerras	_sdata = .;
306cabb5587SStephen Rothwell
307e8222502SBenjamin Herrenschmidt#ifdef CONFIG_PPC32
308366234f6SKumar Gala	.data : AT(ADDR(.data) - LOAD_OFFSET) {
309ca967258SSam Ravnborg		DATA_DATA
310beba24acSMathieu Malaterre#ifdef CONFIG_UBSAN
311beba24acSMathieu Malaterre		*(.data..Lubsan_data*)
312beba24acSMathieu Malaterre		*(.data..Lubsan_type*)
313beba24acSMathieu Malaterre#endif
314a1072607SNicholas Piggin		*(.data.rel*)
3154c1d9bb0SNicholas Piggin		*(SDATA_MAIN)
31683a092cfSNicholas Piggin		*(.sdata2)
317e8222502SBenjamin Herrenschmidt		*(.got.plt) *(.got)
31883a092cfSNicholas Piggin		*(.plt)
31998ecc676SJoel Stanley		*(.branch_lt)
320cabb5587SStephen Rothwell	}
321e8222502SBenjamin Herrenschmidt#else
322366234f6SKumar Gala	.data : AT(ADDR(.data) - LOAD_OFFSET) {
3233ae0aa9fSMathieu Desnoyers		DATA_DATA
3243ae0aa9fSMathieu Desnoyers		*(.data.rel*)
3253ae0aa9fSMathieu Desnoyers		*(.toc1)
326cabb5587SStephen Rothwell		*(.branch_lt)
327cabb5587SStephen Rothwell	}
328cabb5587SStephen Rothwell
329366234f6SKumar Gala	.opd : AT(ADDR(.opd) - LOAD_OFFSET) {
3305633e85bSSergey Senozhatsky		__start_opd = .;
3314c1d9bb0SNicholas Piggin		KEEP(*(.opd))
3325633e85bSSergey Senozhatsky		__end_opd = .;
333cabb5587SStephen Rothwell	}
334cabb5587SStephen Rothwell
3355e95235cSAnton Blanchard	. = ALIGN(256);
336366234f6SKumar Gala	.got : AT(ADDR(.got) - LOAD_OFFSET) {
337cabb5587SStephen Rothwell		__toc_start = .;
3385ac47f7aSAnton Blanchard#ifndef CONFIG_RELOCATABLE
3395ac47f7aSAnton Blanchard		__prom_init_toc_start = .;
3405ac47f7aSAnton Blanchard		arch/powerpc/kernel/prom_init.o*(.toc .got)
3415ac47f7aSAnton Blanchard		__prom_init_toc_end = .;
3425ac47f7aSAnton Blanchard#endif
343cabb5587SStephen Rothwell		*(.got)
344cabb5587SStephen Rothwell		*(.toc)
345e8222502SBenjamin Herrenschmidt	}
346e8222502SBenjamin Herrenschmidt#endif
347e8222502SBenjamin Herrenschmidt
348e8222502SBenjamin Herrenschmidt	/* The initial task and kernel stack */
3492af7687fSTim Abbott	INIT_TASK_DATA_SECTION(THREAD_SIZE)
350cabb5587SStephen Rothwell
35175b13483STim Abbott	.data..page_aligned : AT(ADDR(.data..page_aligned) - LOAD_OFFSET) {
35262bef288STim Abbott		PAGE_ALIGNED_DATA(PAGE_SIZE)
353cabb5587SStephen Rothwell	}
35414cf11afSPaul Mackerras
3554af57b78STim Abbott	.data..cacheline_aligned : AT(ADDR(.data..cacheline_aligned) - LOAD_OFFSET) {
35662bef288STim Abbott		CACHELINE_ALIGNED_DATA(L1_CACHE_BYTES)
357e8222502SBenjamin Herrenschmidt	}
35814cf11afSPaul Mackerras
35954cb27a7SDenys Vlasenko	.data..read_mostly : AT(ADDR(.data..read_mostly) - LOAD_OFFSET) {
36062bef288STim Abbott		READ_MOSTLY_DATA(L1_CACHE_BYTES)
361bd67fcf9STony Breeds	}
362bd67fcf9STony Breeds
3635be2a213SSean MacLennan	. = ALIGN(PAGE_SIZE);
364366234f6SKumar Gala	.data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) {
36562bef288STim Abbott		NOSAVE_DATA
366e8222502SBenjamin Herrenschmidt	}
36714cf11afSPaul Mackerras
368b5effd38SPeter Zijlstra	BUG_TABLE
369b5effd38SPeter Zijlstra
370903444e4SMichael Ellerman	. = ALIGN(PAGE_SIZE);
371903444e4SMichael Ellerman	_edata  =  .;
372903444e4SMichael Ellerman	PROVIDE32 (edata = .);
373903444e4SMichael Ellerman
374e8222502SBenjamin Herrenschmidt/*
375e8222502SBenjamin Herrenschmidt * And finally the bss
376e8222502SBenjamin Herrenschmidt */
3774a288563SPaul Mackerras
37862bef288STim Abbott	BSS_SECTION(0, 0, 0)
379cabb5587SStephen Rothwell
380cabb5587SStephen Rothwell	. = ALIGN(PAGE_SIZE);
381cabb5587SStephen Rothwell	_end = . ;
382e8222502SBenjamin Herrenschmidt	PROVIDE32 (end = .);
383023bf6f1STejun Heo
38483a092cfSNicholas Piggin	STABS_DEBUG
38583a092cfSNicholas Piggin
38683a092cfSNicholas Piggin	DWARF_DEBUG
38783a092cfSNicholas Piggin
388023bf6f1STejun Heo	DISCARDS
38983a092cfSNicholas Piggin	/DISCARD/ : {
39083a092cfSNicholas Piggin		*(*.EMB.apuinfo)
39183a092cfSNicholas Piggin		*(.glink .iplt .plt .rela* .comment)
39283a092cfSNicholas Piggin		*(.gnu.version*)
39383a092cfSNicholas Piggin		*(.gnu.attributes)
39483a092cfSNicholas Piggin		*(.eh_frame)
39583a092cfSNicholas Piggin	}
39614cf11afSPaul Mackerras}
397