xref: /linux/arch/powerpc/kernel/vmlinux.lds.S (revision 3ce47d95b7346dcafd9bed3556a8d072cb2b8571)
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)
9441110a5SKees Cook#define EMITS_PT_NOTE
104e9e559aSKees Cook#define RO_EXCEPTION_TABLE_ALIGN	0
115f69e388SBenjamin Herrenschmidt
124846c5deSKumar Gala#include <asm/page.h>
1314cf11afSPaul Mackerras#include <asm-generic/vmlinux.lds.h>
14bd67fcf9STony Breeds#include <asm/cache.h>
1562bef288STim Abbott#include <asm/thread_info.h>
1614cf11afSPaul Mackerras
17166d97d9SChristophe Leroy#define STRICT_ALIGN_SIZE	(1 << CONFIG_DATA_SHIFT)
18d924cc3fSBalbir Singh
19e19e4ab4SMichael EllermanENTRY(_stext)
20e19e4ab4SMichael Ellerman
21c69cccc9SSegher BoessenkoolPHDRS {
22af0f3e9eSKees Cook	text PT_LOAD FLAGS(7); /* RWX */
23ec556271SKees Cook	note PT_NOTE FLAGS(0);
24c69cccc9SSegher Boessenkool}
25c69cccc9SSegher Boessenkool
26cabb5587SStephen Rothwell#ifdef CONFIG_PPC64
27cabb5587SStephen RothwellOUTPUT_ARCH(powerpc:common64)
28cabb5587SStephen Rothwelljiffies = jiffies_64;
29cabb5587SStephen Rothwell#else
3014cf11afSPaul MackerrasOUTPUT_ARCH(powerpc:common)
3114cf11afSPaul Mackerrasjiffies = jiffies_64 + 4;
32cabb5587SStephen Rothwell#endif
3314cf11afSPaul MackerrasSECTIONS
3414cf11afSPaul Mackerras{
35e19e4ab4SMichael Ellerman	. = KERNELBASE;
36cabb5587SStephen Rothwell
37e8222502SBenjamin Herrenschmidt/*
38e8222502SBenjamin Herrenschmidt * Text, read only data and other permanent read-only sections
39e8222502SBenjamin Herrenschmidt */
40e8222502SBenjamin Herrenschmidt
4157f26649SNicholas Piggin	_text = .;
4257f26649SNicholas Piggin	_stext = .;
4357f26649SNicholas Piggin
4457f26649SNicholas Piggin	/*
4557f26649SNicholas Piggin	 * Head text.
4657f26649SNicholas Piggin	 * This needs to be in its own output section to avoid ld placing
4757f26649SNicholas Piggin	 * branch trampoline stubs randomly throughout the fixed sections,
4857f26649SNicholas Piggin	 * which it will do (even if the branch comes from another section)
4957f26649SNicholas Piggin	 * in order to optimize stub generation.
5057f26649SNicholas Piggin	 */
5157f26649SNicholas Piggin	.head.text : AT(ADDR(.head.text) - LOAD_OFFSET) {
5257f26649SNicholas Piggin#ifdef CONFIG_PPC64
5357f26649SNicholas Piggin		KEEP(*(.head.text.first_256B));
5457f26649SNicholas Piggin#ifdef CONFIG_PPC_BOOK3E
5557f26649SNicholas Piggin#else
5657f26649SNicholas Piggin		KEEP(*(.head.text.real_vectors));
5757f26649SNicholas Piggin		*(.head.text.real_trampolines);
5857f26649SNicholas Piggin		KEEP(*(.head.text.virt_vectors));
5957f26649SNicholas Piggin		*(.head.text.virt_trampolines);
6057f26649SNicholas Piggin# if defined(CONFIG_PPC_PSERIES) || defined(CONFIG_PPC_POWERNV)
6157f26649SNicholas Piggin		KEEP(*(.head.data.fwnmi_page));
6257f26649SNicholas Piggin# endif
6357f26649SNicholas Piggin#endif
6457f26649SNicholas Piggin#else /* !CONFIG_PPC64 */
6557f26649SNicholas Piggin		HEAD_TEXT
6657f26649SNicholas Piggin#endif
67af0f3e9eSKees Cook	} :text
6857f26649SNicholas Piggin
697aa5b018SNaveen N. Rao	__head_end = .;
707aa5b018SNaveen N. Rao
71dadc4a1bSNicholas Piggin#ifdef CONFIG_PPC64
72dadc4a1bSNicholas Piggin	/*
73a652758aSJoel Stanley	 * ALIGN(0) overrides the default output section alignment because
74dadc4a1bSNicholas Piggin	 * this needs to start right after .head.text in order for fixed
75dadc4a1bSNicholas Piggin	 * section placement to work.
76dadc4a1bSNicholas Piggin	 */
77a652758aSJoel Stanley	.text ALIGN(0) : AT(ADDR(.text) - LOAD_OFFSET) {
78951eedebSNicholas Piggin#ifdef CONFIG_LD_HEAD_STUB_CATCH
794c1d9bb0SNicholas Piggin		KEEP(*(.linker_stub_catch));
80951eedebSNicholas Piggin		. = . ;
81951eedebSNicholas Piggin#endif
82951eedebSNicholas Piggin
83dadc4a1bSNicholas Piggin#else
84366234f6SKumar Gala	.text : AT(ADDR(.text) - LOAD_OFFSET) {
85748a7683SKumar Gala		ALIGN_FUNCTION();
86dadc4a1bSNicholas Piggin#endif
8713beadd9STim Abbott		/* careful! __ftr_alt_* sections need to be close to .text */
883ce47d95SNathan Chancellor		*(.text.hot .text.hot.* TEXT_MAIN .text.fixup .text.unlikely .text.unlikely.* .fixup __ftr_alt_* .ref.text);
8967361cf8SNaveen N. Rao#ifdef CONFIG_PPC64
9067361cf8SNaveen N. Rao		*(.tramp.ftrace.text);
9167361cf8SNaveen N. Rao#endif
9265538966SThomas Gleixner		NOINSTR_TEXT
9314cf11afSPaul Mackerras		SCHED_TEXT
946727ad9eSChris Metcalf		CPUIDLE_TEXT
9514cf11afSPaul Mackerras		LOCK_TEXT
96cabb5587SStephen Rothwell		KPROBES_TEXT
976794c782SSteven Rostedt		IRQENTRY_TEXT
98be7635e7SAlexander Potapenko		SOFTIRQENTRY_TEXT
99e8c68825SNicholas Piggin		/*
100e8c68825SNicholas Piggin		 * -Os builds call FP save/restore functions. The powerpc64
101e8c68825SNicholas Piggin		 * linker generates those on demand in the .sfpr section.
102e8c68825SNicholas Piggin		 * .sfpr gets placed at the beginning of a group of input
103e8c68825SNicholas Piggin		 * sections, which can break start-of-text offset if it is
104e8c68825SNicholas Piggin		 * included with the main text sections, so put it by itself.
105e8c68825SNicholas Piggin		 */
106e8c68825SNicholas Piggin		*(.sfpr);
1077de3b27bSMichael Ellerman		MEM_KEEP(init.text)
1087de3b27bSMichael Ellerman		MEM_KEEP(exit.text)
109e8222502SBenjamin Herrenschmidt
110cabb5587SStephen Rothwell#ifdef CONFIG_PPC32
11114cf11afSPaul Mackerras		*(.got1)
11214cf11afSPaul Mackerras		__got2_start = .;
11314cf11afSPaul Mackerras		*(.got2)
11414cf11afSPaul Mackerras		__got2_end = .;
115e8222502SBenjamin Herrenschmidt#endif /* CONFIG_PPC32 */
116e8222502SBenjamin Herrenschmidt
117af0f3e9eSKees Cook	} :text
118303996daSStephen Rothwell
119a0591b60SChristophe Leroy	. = ALIGN(PAGE_SIZE);
120cabb5587SStephen Rothwell	_etext = .;
121e8222502SBenjamin Herrenschmidt	PROVIDE32 (etext = .);
12214cf11afSPaul Mackerras
123e8222502SBenjamin Herrenschmidt	/* Read-only data */
124d924cc3fSBalbir Singh	RO_DATA(PAGE_SIZE)
12514cf11afSPaul Mackerras
126aa8a5e00SMichael Ellerman#ifdef CONFIG_PPC64
127aa8a5e00SMichael Ellerman	. = ALIGN(8);
128a048a07dSNicholas Piggin	__stf_entry_barrier_fixup : AT(ADDR(__stf_entry_barrier_fixup) - LOAD_OFFSET) {
129a048a07dSNicholas Piggin		__start___stf_entry_barrier_fixup = .;
130a048a07dSNicholas Piggin		*(__stf_entry_barrier_fixup)
131a048a07dSNicholas Piggin		__stop___stf_entry_barrier_fixup = .;
132a048a07dSNicholas Piggin	}
133a048a07dSNicholas Piggin
134a048a07dSNicholas Piggin	. = ALIGN(8);
1359a32a7e7SNicholas Piggin	__uaccess_flush_fixup : AT(ADDR(__uaccess_flush_fixup) - LOAD_OFFSET) {
1369a32a7e7SNicholas Piggin		__start___uaccess_flush_fixup = .;
1379a32a7e7SNicholas Piggin		*(__uaccess_flush_fixup)
1389a32a7e7SNicholas Piggin		__stop___uaccess_flush_fixup = .;
1399a32a7e7SNicholas Piggin	}
1409a32a7e7SNicholas Piggin
1419a32a7e7SNicholas Piggin	. = ALIGN(8);
142f7964378SNicholas Piggin	__entry_flush_fixup : AT(ADDR(__entry_flush_fixup) - LOAD_OFFSET) {
143f7964378SNicholas Piggin		__start___entry_flush_fixup = .;
144f7964378SNicholas Piggin		*(__entry_flush_fixup)
145f7964378SNicholas Piggin		__stop___entry_flush_fixup = .;
146f7964378SNicholas Piggin	}
147f7964378SNicholas Piggin
148f7964378SNicholas Piggin	. = ALIGN(8);
149a048a07dSNicholas Piggin	__stf_exit_barrier_fixup : AT(ADDR(__stf_exit_barrier_fixup) - LOAD_OFFSET) {
150a048a07dSNicholas Piggin		__start___stf_exit_barrier_fixup = .;
151a048a07dSNicholas Piggin		*(__stf_exit_barrier_fixup)
152a048a07dSNicholas Piggin		__stop___stf_exit_barrier_fixup = .;
153a048a07dSNicholas Piggin	}
154a048a07dSNicholas Piggin
155a048a07dSNicholas Piggin	. = ALIGN(8);
156aa8a5e00SMichael Ellerman	__rfi_flush_fixup : AT(ADDR(__rfi_flush_fixup) - LOAD_OFFSET) {
157aa8a5e00SMichael Ellerman		__start___rfi_flush_fixup = .;
158aa8a5e00SMichael Ellerman		*(__rfi_flush_fixup)
159aa8a5e00SMichael Ellerman		__stop___rfi_flush_fixup = .;
160aa8a5e00SMichael Ellerman	}
161179ab1cbSMichael Ellerman#endif /* CONFIG_PPC64 */
1622eea7f06SMichal Suchanek
163179ab1cbSMichael Ellerman#ifdef CONFIG_PPC_BARRIER_NOSPEC
1642eea7f06SMichal Suchanek	. = ALIGN(8);
1652eea7f06SMichal Suchanek	__spec_barrier_fixup : AT(ADDR(__spec_barrier_fixup) - LOAD_OFFSET) {
1662eea7f06SMichal Suchanek		__start___barrier_nospec_fixup = .;
1672eea7f06SMichal Suchanek		*(__barrier_nospec_fixup)
1682eea7f06SMichal Suchanek		__stop___barrier_nospec_fixup = .;
1692eea7f06SMichal Suchanek	}
170179ab1cbSMichael Ellerman#endif /* CONFIG_PPC_BARRIER_NOSPEC */
171aa8a5e00SMichael Ellerman
17276a5eaa3SDiana Craciun#ifdef CONFIG_PPC_FSL_BOOK3E
17376a5eaa3SDiana Craciun	. = ALIGN(8);
17476a5eaa3SDiana Craciun	__spec_btb_flush_fixup : AT(ADDR(__spec_btb_flush_fixup) - LOAD_OFFSET) {
17576a5eaa3SDiana Craciun		__start__btb_flush_fixup = .;
17676a5eaa3SDiana Craciun		*(__btb_flush_fixup)
17776a5eaa3SDiana Craciun		__stop__btb_flush_fixup = .;
17876a5eaa3SDiana Craciun	}
17976a5eaa3SDiana Craciun#endif
18014cf11afSPaul Mackerras
181e8222502SBenjamin Herrenschmidt/*
182e8222502SBenjamin Herrenschmidt * Init sections discarded at runtime
183e8222502SBenjamin Herrenschmidt */
184d924cc3fSBalbir Singh	. = ALIGN(STRICT_ALIGN_SIZE);
18514cf11afSPaul Mackerras	__init_begin = .;
18667361cf8SNaveen N. Rao	. = ALIGN(PAGE_SIZE);
18767361cf8SNaveen N. Rao	.init.text : AT(ADDR(.init.text) - LOAD_OFFSET) {
18867361cf8SNaveen N. Rao		_sinittext = .;
18967361cf8SNaveen N. Rao		INIT_TEXT
19067361cf8SNaveen N. Rao		_einittext = .;
19167361cf8SNaveen N. Rao#ifdef CONFIG_PPC64
19267361cf8SNaveen N. Rao		*(.tramp.ftrace.init);
19367361cf8SNaveen N. Rao#endif
194af0f3e9eSKees Cook	} :text
195e8222502SBenjamin Herrenschmidt
19614cf11afSPaul Mackerras	/* .exit.text is discarded at runtime, not link time,
197e8222502SBenjamin Herrenschmidt	 * to deal with references from __bug_table
198e8222502SBenjamin Herrenschmidt	 */
199366234f6SKumar Gala	.exit.text : AT(ADDR(.exit.text) - LOAD_OFFSET) {
20001ba2bdcSSam Ravnborg		EXIT_TEXT
20101ba2bdcSSam Ravnborg	}
202e8222502SBenjamin Herrenschmidt
203fdcfeabaSYouling Tang	INIT_DATA_SECTION(16)
20414cf11afSPaul Mackerras
205e8222502SBenjamin Herrenschmidt	. = ALIGN(8);
206366234f6SKumar Gala	__ftr_fixup : AT(ADDR(__ftr_fixup) - LOAD_OFFSET) {
20714cf11afSPaul Mackerras		__start___ftr_fixup = .;
2084c1d9bb0SNicholas Piggin		KEEP(*(__ftr_fixup))
20914cf11afSPaul Mackerras		__stop___ftr_fixup = .;
210e8222502SBenjamin Herrenschmidt	}
2112d1b2027SKumar Gala	. = ALIGN(8);
2127c03d653SBenjamin Herrenschmidt	__mmu_ftr_fixup : AT(ADDR(__mmu_ftr_fixup) - LOAD_OFFSET) {
2137c03d653SBenjamin Herrenschmidt		__start___mmu_ftr_fixup = .;
2144c1d9bb0SNicholas Piggin		KEEP(*(__mmu_ftr_fixup))
2157c03d653SBenjamin Herrenschmidt		__stop___mmu_ftr_fixup = .;
2167c03d653SBenjamin Herrenschmidt	}
2177c03d653SBenjamin Herrenschmidt	. = ALIGN(8);
2182d1b2027SKumar Gala	__lwsync_fixup : AT(ADDR(__lwsync_fixup) - LOAD_OFFSET) {
2192d1b2027SKumar Gala		__start___lwsync_fixup = .;
2204c1d9bb0SNicholas Piggin		KEEP(*(__lwsync_fixup))
2212d1b2027SKumar Gala		__stop___lwsync_fixup = .;
2222d1b2027SKumar Gala	}
2233f639ee8SStephen Rothwell#ifdef CONFIG_PPC64
2243f639ee8SStephen Rothwell	. = ALIGN(8);
225366234f6SKumar Gala	__fw_ftr_fixup : AT(ADDR(__fw_ftr_fixup) - LOAD_OFFSET) {
2263f639ee8SStephen Rothwell		__start___fw_ftr_fixup = .;
2274c1d9bb0SNicholas Piggin		KEEP(*(__fw_ftr_fixup))
2283f639ee8SStephen Rothwell		__stop___fw_ftr_fixup = .;
2293f639ee8SStephen Rothwell	}
2303f639ee8SStephen Rothwell#endif
23162bef288STim Abbott
2320415b00dSTejun Heo	PERCPU_SECTION(L1_CACHE_BYTES)
23314cf11afSPaul Mackerras
234e8222502SBenjamin Herrenschmidt	. = ALIGN(8);
235366234f6SKumar Gala	.machine.desc : AT(ADDR(.machine.desc) - LOAD_OFFSET) {
236e8222502SBenjamin Herrenschmidt		__machine_desc_start = . ;
2374c1d9bb0SNicholas Piggin		KEEP(*(.machine.desc))
238e8222502SBenjamin Herrenschmidt		__machine_desc_end = . ;
239e8222502SBenjamin Herrenschmidt	}
2402a4b9c5aSPaul Mackerras#ifdef CONFIG_RELOCATABLE
241549e8152SPaul Mackerras	. = ALIGN(8);
2429c5f7d39SSuzuki Poulose	.dynsym : AT(ADDR(.dynsym) - LOAD_OFFSET)
2439c5f7d39SSuzuki Poulose	{
24427d11496SKevin Hao#ifdef CONFIG_PPC32
2459c5f7d39SSuzuki Poulose		__dynamic_symtab = .;
2469c5f7d39SSuzuki Poulose#endif
2479c5f7d39SSuzuki Poulose		*(.dynsym)
2489c5f7d39SSuzuki Poulose	}
249549e8152SPaul Mackerras	.dynstr : AT(ADDR(.dynstr) - LOAD_OFFSET) { *(.dynstr) }
250549e8152SPaul Mackerras	.dynamic : AT(ADDR(.dynamic) - LOAD_OFFSET)
251549e8152SPaul Mackerras	{
252549e8152SPaul Mackerras		__dynamic_start = .;
253549e8152SPaul Mackerras		*(.dynamic)
254549e8152SPaul Mackerras	}
255549e8152SPaul Mackerras	.hash : AT(ADDR(.hash) - LOAD_OFFSET) { *(.hash) }
256ead98360SMichael Ellerman	.gnu.hash : AT(ADDR(.gnu.hash) - LOAD_OFFSET) { *(.gnu.hash) }
257549e8152SPaul Mackerras	.interp : AT(ADDR(.interp) - LOAD_OFFSET) { *(.interp) }
258549e8152SPaul Mackerras	.rela.dyn : AT(ADDR(.rela.dyn) - LOAD_OFFSET)
259549e8152SPaul Mackerras	{
260549e8152SPaul Mackerras		__rela_dyn_start = .;
261549e8152SPaul Mackerras		*(.rela*)
262549e8152SPaul Mackerras	}
2632a4b9c5aSPaul Mackerras#endif
2644c812318SStephen Rothwell	/* .exit.data is discarded at runtime, not link time,
2654c812318SStephen Rothwell	 * to deal with references from .exit.text
2664c812318SStephen Rothwell	 */
2674c812318SStephen Rothwell	.exit.data : AT(ADDR(.exit.data) - LOAD_OFFSET) {
2684c812318SStephen Rothwell		EXIT_DATA
2694c812318SStephen Rothwell	}
270e8222502SBenjamin Herrenschmidt
271cabb5587SStephen Rothwell	/* freed after init ends here */
272cabb5587SStephen Rothwell	. = ALIGN(PAGE_SIZE);
273e8222502SBenjamin Herrenschmidt	__init_end = .;
274e8222502SBenjamin Herrenschmidt
275e8222502SBenjamin Herrenschmidt/*
276e8222502SBenjamin Herrenschmidt * And now the various read/write data
277e8222502SBenjamin Herrenschmidt */
278e8222502SBenjamin Herrenschmidt
279e8222502SBenjamin Herrenschmidt	. = ALIGN(PAGE_SIZE);
2804a288563SPaul Mackerras	_sdata = .;
281cabb5587SStephen Rothwell
282e8222502SBenjamin Herrenschmidt#ifdef CONFIG_PPC32
283366234f6SKumar Gala	.data : AT(ADDR(.data) - LOAD_OFFSET) {
284ca967258SSam Ravnborg		DATA_DATA
285beba24acSMathieu Malaterre#ifdef CONFIG_UBSAN
286beba24acSMathieu Malaterre		*(.data..Lubsan_data*)
287beba24acSMathieu Malaterre		*(.data..Lubsan_type*)
288beba24acSMathieu Malaterre#endif
289a1072607SNicholas Piggin		*(.data.rel*)
2904c1d9bb0SNicholas Piggin		*(SDATA_MAIN)
29183a092cfSNicholas Piggin		*(.sdata2)
292e8222502SBenjamin Herrenschmidt		*(.got.plt) *(.got)
29383a092cfSNicholas Piggin		*(.plt)
29498ecc676SJoel Stanley		*(.branch_lt)
295cabb5587SStephen Rothwell	}
296e8222502SBenjamin Herrenschmidt#else
297366234f6SKumar Gala	.data : AT(ADDR(.data) - LOAD_OFFSET) {
2983ae0aa9fSMathieu Desnoyers		DATA_DATA
299d0a3ac54SKees Cook#ifdef CONFIG_UBSAN
300d0a3ac54SKees Cook		*(.data..Lubsan_data*)
301d0a3ac54SKees Cook		*(.data..Lubsan_type*)
302d0a3ac54SKees Cook#endif
3033ae0aa9fSMathieu Desnoyers		*(.data.rel*)
3043ae0aa9fSMathieu Desnoyers		*(.toc1)
305cabb5587SStephen Rothwell		*(.branch_lt)
306cabb5587SStephen Rothwell	}
307cabb5587SStephen Rothwell
308366234f6SKumar Gala	.opd : AT(ADDR(.opd) - LOAD_OFFSET) {
3095633e85bSSergey Senozhatsky		__start_opd = .;
3104c1d9bb0SNicholas Piggin		KEEP(*(.opd))
3115633e85bSSergey Senozhatsky		__end_opd = .;
312cabb5587SStephen Rothwell	}
313cabb5587SStephen Rothwell
3145e95235cSAnton Blanchard	. = ALIGN(256);
315366234f6SKumar Gala	.got : AT(ADDR(.got) - LOAD_OFFSET) {
316cabb5587SStephen Rothwell		__toc_start = .;
3175ac47f7aSAnton Blanchard#ifndef CONFIG_RELOCATABLE
3185ac47f7aSAnton Blanchard		__prom_init_toc_start = .;
3195ac47f7aSAnton Blanchard		arch/powerpc/kernel/prom_init.o*(.toc .got)
3205ac47f7aSAnton Blanchard		__prom_init_toc_end = .;
3215ac47f7aSAnton Blanchard#endif
322cabb5587SStephen Rothwell		*(.got)
323cabb5587SStephen Rothwell		*(.toc)
324e8222502SBenjamin Herrenschmidt	}
325e8222502SBenjamin Herrenschmidt#endif
326e8222502SBenjamin Herrenschmidt
327e8222502SBenjamin Herrenschmidt	/* The initial task and kernel stack */
32863289e7dSChristophe Leroy	INIT_TASK_DATA_SECTION(THREAD_ALIGN)
329cabb5587SStephen Rothwell
33075b13483STim Abbott	.data..page_aligned : AT(ADDR(.data..page_aligned) - LOAD_OFFSET) {
33162bef288STim Abbott		PAGE_ALIGNED_DATA(PAGE_SIZE)
332cabb5587SStephen Rothwell	}
33314cf11afSPaul Mackerras
3344af57b78STim Abbott	.data..cacheline_aligned : AT(ADDR(.data..cacheline_aligned) - LOAD_OFFSET) {
33562bef288STim Abbott		CACHELINE_ALIGNED_DATA(L1_CACHE_BYTES)
336e8222502SBenjamin Herrenschmidt	}
33714cf11afSPaul Mackerras
33854cb27a7SDenys Vlasenko	.data..read_mostly : AT(ADDR(.data..read_mostly) - LOAD_OFFSET) {
33962bef288STim Abbott		READ_MOSTLY_DATA(L1_CACHE_BYTES)
340bd67fcf9STony Breeds	}
341bd67fcf9STony Breeds
3425be2a213SSean MacLennan	. = ALIGN(PAGE_SIZE);
343366234f6SKumar Gala	.data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) {
34462bef288STim Abbott		NOSAVE_DATA
345e8222502SBenjamin Herrenschmidt	}
34614cf11afSPaul Mackerras
347b5effd38SPeter Zijlstra	BUG_TABLE
348b5effd38SPeter Zijlstra
349903444e4SMichael Ellerman	. = ALIGN(PAGE_SIZE);
350903444e4SMichael Ellerman	_edata  =  .;
351903444e4SMichael Ellerman	PROVIDE32 (edata = .);
352903444e4SMichael Ellerman
353e8222502SBenjamin Herrenschmidt/*
354e8222502SBenjamin Herrenschmidt * And finally the bss
355e8222502SBenjamin Herrenschmidt */
3564a288563SPaul Mackerras
35762bef288STim Abbott	BSS_SECTION(0, 0, 0)
358cabb5587SStephen Rothwell
359cabb5587SStephen Rothwell	. = ALIGN(PAGE_SIZE);
360cabb5587SStephen Rothwell	_end = . ;
361e8222502SBenjamin Herrenschmidt	PROVIDE32 (end = .);
362023bf6f1STejun Heo
36383a092cfSNicholas Piggin	STABS_DEBUG
36483a092cfSNicholas Piggin	DWARF_DEBUG
365c604abc3SKees Cook	ELF_DETAILS
36683a092cfSNicholas Piggin
367023bf6f1STejun Heo	DISCARDS
36883a092cfSNicholas Piggin	/DISCARD/ : {
36983a092cfSNicholas Piggin		*(*.EMB.apuinfo)
37083a092cfSNicholas Piggin		*(.glink .iplt .plt .rela* .comment)
37183a092cfSNicholas Piggin		*(.gnu.version*)
37283a092cfSNicholas Piggin		*(.gnu.attributes)
37383a092cfSNicholas Piggin		*(.eh_frame)
37483a092cfSNicholas Piggin	}
37514cf11afSPaul Mackerras}
376