xref: /linux/arch/powerpc/kernel/vmlinux.lds.S (revision 4f9786035f9e519db41375818e1d0b5f20da2f10)
1b2441318SGreg Kroah-Hartman/* SPDX-License-Identifier: GPL-2.0 */
25f69e388SBenjamin Herrenschmidt#define BSS_FIRST_SECTIONS *(.bss.prominit)
3441110a5SKees Cook#define EMITS_PT_NOTE
44e9e559aSKees Cook#define RO_EXCEPTION_TABLE_ALIGN	0
54b9880dbSMichael Ellerman#define RUNTIME_DISCARD_EXIT
65f69e388SBenjamin Herrenschmidt
7325678fdSNicholas Piggin#define SOFT_MASK_TABLE(align)						\
8325678fdSNicholas Piggin	. = ALIGN(align);						\
9325678fdSNicholas Piggin	__soft_mask_table : AT(ADDR(__soft_mask_table) - LOAD_OFFSET) {	\
10325678fdSNicholas Piggin		__start___soft_mask_table = .;				\
11325678fdSNicholas Piggin		KEEP(*(__soft_mask_table))				\
12325678fdSNicholas Piggin		__stop___soft_mask_table = .;				\
13325678fdSNicholas Piggin	}
14325678fdSNicholas Piggin
15f23699c9SNicholas Piggin#define RESTART_TABLE(align)						\
16f23699c9SNicholas Piggin	. = ALIGN(align);						\
17f23699c9SNicholas Piggin	__restart_table : AT(ADDR(__restart_table) - LOAD_OFFSET) {	\
18f23699c9SNicholas Piggin		__start___restart_table = .;				\
19f23699c9SNicholas Piggin		KEEP(*(__restart_table))				\
20f23699c9SNicholas Piggin		__stop___restart_table = .;				\
21f23699c9SNicholas Piggin	}
22f23699c9SNicholas Piggin
234846c5deSKumar Gala#include <asm/page.h>
2414cf11afSPaul Mackerras#include <asm-generic/vmlinux.lds.h>
25bd67fcf9STony Breeds#include <asm/cache.h>
2662bef288STim Abbott#include <asm/thread_info.h>
2714cf11afSPaul Mackerras
28166d97d9SChristophe Leroy#define STRICT_ALIGN_SIZE	(1 << CONFIG_DATA_SHIFT)
29d924cc3fSBalbir Singh
30331771e8SMichael Ellerman#if STRICT_ALIGN_SIZE < PAGE_SIZE
31331771e8SMichael Ellerman#error "CONFIG_DATA_SHIFT must be >= PAGE_SHIFT"
32331771e8SMichael Ellerman#endif
33331771e8SMichael Ellerman
34e19e4ab4SMichael EllermanENTRY(_stext)
35e19e4ab4SMichael Ellerman
36c69cccc9SSegher BoessenkoolPHDRS {
37af0f3e9eSKees Cook	text PT_LOAD FLAGS(7); /* RWX */
38ec556271SKees Cook	note PT_NOTE FLAGS(0);
39c69cccc9SSegher Boessenkool}
40c69cccc9SSegher Boessenkool
41cabb5587SStephen Rothwell#ifdef CONFIG_PPC64
42cabb5587SStephen RothwellOUTPUT_ARCH(powerpc:common64)
43cabb5587SStephen Rothwelljiffies = jiffies_64;
44cabb5587SStephen Rothwell#else
4514cf11afSPaul MackerrasOUTPUT_ARCH(powerpc:common)
4614cf11afSPaul Mackerrasjiffies = jiffies_64 + 4;
47cabb5587SStephen Rothwell#endif
4814cf11afSPaul MackerrasSECTIONS
4914cf11afSPaul Mackerras{
50e19e4ab4SMichael Ellerman	. = KERNELBASE;
51cabb5587SStephen Rothwell
52e8222502SBenjamin Herrenschmidt/*
53e8222502SBenjamin Herrenschmidt * Text, read only data and other permanent read-only sections
54e8222502SBenjamin Herrenschmidt */
55e8222502SBenjamin Herrenschmidt
5657f26649SNicholas Piggin	_text = .;
5757f26649SNicholas Piggin	_stext = .;
5857f26649SNicholas Piggin
5957f26649SNicholas Piggin	/*
6057f26649SNicholas Piggin	 * Head text.
6157f26649SNicholas Piggin	 * This needs to be in its own output section to avoid ld placing
6257f26649SNicholas Piggin	 * branch trampoline stubs randomly throughout the fixed sections,
6357f26649SNicholas Piggin	 * which it will do (even if the branch comes from another section)
6457f26649SNicholas Piggin	 * in order to optimize stub generation.
6557f26649SNicholas Piggin	 */
6657f26649SNicholas Piggin	.head.text : AT(ADDR(.head.text) - LOAD_OFFSET) {
6757f26649SNicholas Piggin#ifdef CONFIG_PPC64
6857f26649SNicholas Piggin		KEEP(*(.head.text.first_256B));
69e0d68273SChristophe Leroy#ifdef CONFIG_PPC_BOOK3E_64
7057f26649SNicholas Piggin#else
7157f26649SNicholas Piggin		KEEP(*(.head.text.real_vectors));
7257f26649SNicholas Piggin		*(.head.text.real_trampolines);
7357f26649SNicholas Piggin		KEEP(*(.head.text.virt_vectors));
7457f26649SNicholas Piggin		*(.head.text.virt_trampolines);
7557f26649SNicholas Piggin# if defined(CONFIG_PPC_PSERIES) || defined(CONFIG_PPC_POWERNV)
7657f26649SNicholas Piggin		KEEP(*(.head.data.fwnmi_page));
7757f26649SNicholas Piggin# endif
7857f26649SNicholas Piggin#endif
7957f26649SNicholas Piggin#else /* !CONFIG_PPC64 */
8057f26649SNicholas Piggin		HEAD_TEXT
8157f26649SNicholas Piggin#endif
82af0f3e9eSKees Cook	} :text
8357f26649SNicholas Piggin
847aa5b018SNaveen N. Rao	__head_end = .;
857aa5b018SNaveen N. Rao
86dadc4a1bSNicholas Piggin#ifdef CONFIG_PPC64
87dadc4a1bSNicholas Piggin	/*
88a652758aSJoel Stanley	 * ALIGN(0) overrides the default output section alignment because
89dadc4a1bSNicholas Piggin	 * this needs to start right after .head.text in order for fixed
90dadc4a1bSNicholas Piggin	 * section placement to work.
91dadc4a1bSNicholas Piggin	 */
92a652758aSJoel Stanley	.text ALIGN(0) : AT(ADDR(.text) - LOAD_OFFSET) {
93951eedebSNicholas Piggin#ifdef CONFIG_LD_HEAD_STUB_CATCH
944c1d9bb0SNicholas Piggin		KEEP(*(.linker_stub_catch));
95951eedebSNicholas Piggin		. = . ;
96951eedebSNicholas Piggin#endif
97951eedebSNicholas Piggin
98dadc4a1bSNicholas Piggin#else
99366234f6SKumar Gala	.text : AT(ADDR(.text) - LOAD_OFFSET) {
100748a7683SKumar Gala		ALIGN_FUNCTION();
101dadc4a1bSNicholas Piggin#endif
10213beadd9STim Abbott		/* careful! __ftr_alt_* sections need to be close to .text */
1033ce47d95SNathan Chancellor		*(.text.hot .text.hot.* TEXT_MAIN .text.fixup .text.unlikely .text.unlikely.* .fixup __ftr_alt_* .ref.text);
10467361cf8SNaveen N. Rao		*(.tramp.ftrace.text);
10565538966SThomas Gleixner		NOINSTR_TEXT
10614cf11afSPaul Mackerras		SCHED_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);
119acd35dbaSMichael Ellerman		*(.text.asan.* .text.tsan.*)
120af0f3e9eSKees Cook	} :text
121303996daSStephen Rothwell
122a0591b60SChristophe Leroy	. = ALIGN(PAGE_SIZE);
123cabb5587SStephen Rothwell	_etext = .;
12414cf11afSPaul Mackerras
125e8222502SBenjamin Herrenschmidt	/* Read-only data */
126d924cc3fSBalbir Singh	RO_DATA(PAGE_SIZE)
12714cf11afSPaul Mackerras
128b6adc6d6SNicholas Piggin#ifdef CONFIG_PPC32
129b6adc6d6SNicholas Piggin	.sdata2 : AT(ADDR(.sdata2) - LOAD_OFFSET) {
130b6adc6d6SNicholas Piggin		*(.sdata2)
131b6adc6d6SNicholas Piggin	}
132b6adc6d6SNicholas Piggin#endif
133b6adc6d6SNicholas Piggin
134b6adc6d6SNicholas Piggin	.data.rel.ro : AT(ADDR(.data.rel.ro) - LOAD_OFFSET) {
135eb761a17SNicholas Piggin		*(.data.rel.ro .data.rel.ro.*)
136b6adc6d6SNicholas Piggin	}
137b6adc6d6SNicholas Piggin
138f21ba449SNicholas Piggin	.branch_lt : AT(ADDR(.branch_lt) - LOAD_OFFSET) {
139f21ba449SNicholas Piggin		*(.branch_lt)
140f21ba449SNicholas Piggin	}
141f21ba449SNicholas Piggin
1421faa1235SNicholas Piggin#ifdef CONFIG_PPC32
1431faa1235SNicholas Piggin	.got1 : AT(ADDR(.got1) - LOAD_OFFSET) {
1441faa1235SNicholas Piggin		*(.got1)
1451faa1235SNicholas Piggin	}
1461faa1235SNicholas Piggin	.got2 : AT(ADDR(.got2) - LOAD_OFFSET) {
1471faa1235SNicholas Piggin		__got2_start = .;
1481faa1235SNicholas Piggin		*(.got2)
1491faa1235SNicholas Piggin		__got2_end = .;
1501faa1235SNicholas Piggin	}
151f21ba449SNicholas Piggin	.got : AT(ADDR(.got) - LOAD_OFFSET) {
152f21ba449SNicholas Piggin		*(.got)
153f21ba449SNicholas Piggin		*(.got.plt)
154f21ba449SNicholas Piggin	}
155f21ba449SNicholas Piggin	.plt : AT(ADDR(.plt) - LOAD_OFFSET) {
156f21ba449SNicholas Piggin		/* XXX: is .plt (and .got.plt) required? */
157f21ba449SNicholas Piggin		*(.plt)
158f21ba449SNicholas Piggin	}
159f21ba449SNicholas Piggin
1601faa1235SNicholas Piggin#else /* CONFIG_PPC32 */
1617e3a68beSNicholas Piggin#ifndef CONFIG_PPC_KERNEL_PCREL
162f21ba449SNicholas Piggin	.toc1 : AT(ADDR(.toc1) - LOAD_OFFSET) {
163f21ba449SNicholas Piggin		*(.toc1)
164f21ba449SNicholas Piggin	}
1657e3a68beSNicholas Piggin#endif
166f21ba449SNicholas Piggin
167f21ba449SNicholas Piggin	.got : AT(ADDR(.got) - LOAD_OFFSET) ALIGN(256) {
1687e3a68beSNicholas Piggin#ifdef CONFIG_PPC_KERNEL_PCREL
1697e3a68beSNicholas Piggin		*(.got)
1707e3a68beSNicholas Piggin#else
1711e9eca48SNicholas Piggin		*(.got .toc)
1727e3a68beSNicholas Piggin#endif
173f21ba449SNicholas Piggin	}
174f21ba449SNicholas Piggin
175325678fdSNicholas Piggin	SOFT_MASK_TABLE(8)
176f23699c9SNicholas Piggin	RESTART_TABLE(8)
177f23699c9SNicholas Piggin
178c787fed1SNicholas Piggin#ifdef CONFIG_PPC64_ELF_ABI_V1
1793091f5fcSChristophe Leroy	.opd : AT(ADDR(.opd) - LOAD_OFFSET) {
1803091f5fcSChristophe Leroy		__start_opd = .;
1813091f5fcSChristophe Leroy		KEEP(*(.opd))
1823091f5fcSChristophe Leroy		__end_opd = .;
1833091f5fcSChristophe Leroy	}
184c787fed1SNicholas Piggin#endif
1853091f5fcSChristophe Leroy
186aa8a5e00SMichael Ellerman	. = ALIGN(8);
187a048a07dSNicholas Piggin	__stf_entry_barrier_fixup : AT(ADDR(__stf_entry_barrier_fixup) - LOAD_OFFSET) {
188a048a07dSNicholas Piggin		__start___stf_entry_barrier_fixup = .;
189a048a07dSNicholas Piggin		*(__stf_entry_barrier_fixup)
190a048a07dSNicholas Piggin		__stop___stf_entry_barrier_fixup = .;
191a048a07dSNicholas Piggin	}
192a048a07dSNicholas Piggin
193a048a07dSNicholas Piggin	. = ALIGN(8);
1949a32a7e7SNicholas Piggin	__uaccess_flush_fixup : AT(ADDR(__uaccess_flush_fixup) - LOAD_OFFSET) {
1959a32a7e7SNicholas Piggin		__start___uaccess_flush_fixup = .;
1969a32a7e7SNicholas Piggin		*(__uaccess_flush_fixup)
1979a32a7e7SNicholas Piggin		__stop___uaccess_flush_fixup = .;
1989a32a7e7SNicholas Piggin	}
1999a32a7e7SNicholas Piggin
2009a32a7e7SNicholas Piggin	. = ALIGN(8);
201f7964378SNicholas Piggin	__entry_flush_fixup : AT(ADDR(__entry_flush_fixup) - LOAD_OFFSET) {
202f7964378SNicholas Piggin		__start___entry_flush_fixup = .;
203f7964378SNicholas Piggin		*(__entry_flush_fixup)
204f7964378SNicholas Piggin		__stop___entry_flush_fixup = .;
205f7964378SNicholas Piggin	}
206f7964378SNicholas Piggin
207f7964378SNicholas Piggin	. = ALIGN(8);
20808685be7SNicholas Piggin	__scv_entry_flush_fixup : AT(ADDR(__scv_entry_flush_fixup) - LOAD_OFFSET) {
20908685be7SNicholas Piggin		__start___scv_entry_flush_fixup = .;
21008685be7SNicholas Piggin		*(__scv_entry_flush_fixup)
21108685be7SNicholas Piggin		__stop___scv_entry_flush_fixup = .;
21208685be7SNicholas Piggin	}
21308685be7SNicholas Piggin
21408685be7SNicholas Piggin	. = ALIGN(8);
215a048a07dSNicholas Piggin	__stf_exit_barrier_fixup : AT(ADDR(__stf_exit_barrier_fixup) - LOAD_OFFSET) {
216a048a07dSNicholas Piggin		__start___stf_exit_barrier_fixup = .;
217a048a07dSNicholas Piggin		*(__stf_exit_barrier_fixup)
218a048a07dSNicholas Piggin		__stop___stf_exit_barrier_fixup = .;
219a048a07dSNicholas Piggin	}
220a048a07dSNicholas Piggin
221a048a07dSNicholas Piggin	. = ALIGN(8);
222aa8a5e00SMichael Ellerman	__rfi_flush_fixup : AT(ADDR(__rfi_flush_fixup) - LOAD_OFFSET) {
223aa8a5e00SMichael Ellerman		__start___rfi_flush_fixup = .;
224aa8a5e00SMichael Ellerman		*(__rfi_flush_fixup)
225aa8a5e00SMichael Ellerman		__stop___rfi_flush_fixup = .;
226aa8a5e00SMichael Ellerman	}
2271faa1235SNicholas Piggin#endif /* CONFIG_PPC32 */
2282eea7f06SMichal Suchanek
229179ab1cbSMichael Ellerman#ifdef CONFIG_PPC_BARRIER_NOSPEC
2302eea7f06SMichal Suchanek	. = ALIGN(8);
2312eea7f06SMichal Suchanek	__spec_barrier_fixup : AT(ADDR(__spec_barrier_fixup) - LOAD_OFFSET) {
2322eea7f06SMichal Suchanek		__start___barrier_nospec_fixup = .;
2332eea7f06SMichal Suchanek		*(__barrier_nospec_fixup)
2342eea7f06SMichal Suchanek		__stop___barrier_nospec_fixup = .;
2352eea7f06SMichal Suchanek	}
236179ab1cbSMichael Ellerman#endif /* CONFIG_PPC_BARRIER_NOSPEC */
237aa8a5e00SMichael Ellerman
2383e731858SChristophe Leroy#ifdef CONFIG_PPC_E500
23976a5eaa3SDiana Craciun	. = ALIGN(8);
24076a5eaa3SDiana Craciun	__spec_btb_flush_fixup : AT(ADDR(__spec_btb_flush_fixup) - LOAD_OFFSET) {
24176a5eaa3SDiana Craciun		__start__btb_flush_fixup = .;
24276a5eaa3SDiana Craciun		*(__btb_flush_fixup)
24376a5eaa3SDiana Craciun		__stop__btb_flush_fixup = .;
24476a5eaa3SDiana Craciun	}
24576a5eaa3SDiana Craciun#endif
24614cf11afSPaul Mackerras
247e8222502SBenjamin Herrenschmidt	/*
248b150a4d1SMichael Ellerman	 * Various code relies on __init_begin being at the strict RWX boundary.
249e8222502SBenjamin Herrenschmidt	 */
250d924cc3fSBalbir Singh	. = ALIGN(STRICT_ALIGN_SIZE);
251b150a4d1SMichael Ellerman	__srwx_boundary = .;
2527082f8e7SNicholas Piggin	__end_rodata = .;
25314cf11afSPaul Mackerras	__init_begin = .;
254b150a4d1SMichael Ellerman
255b150a4d1SMichael Ellerman/*
256b150a4d1SMichael Ellerman * Init sections discarded at runtime
257b150a4d1SMichael Ellerman */
25867361cf8SNaveen N. Rao	.init.text : AT(ADDR(.init.text) - LOAD_OFFSET) {
25967361cf8SNaveen N. Rao		_sinittext = .;
26067361cf8SNaveen N. Rao		INIT_TEXT
261*ed614465SNaveen N Rao		*(.tramp.ftrace.init);
2622225a8ddSAriel Marcovitch		/*
2632225a8ddSAriel Marcovitch		 *.init.text might be RO so we must ensure this section ends on
2642225a8ddSAriel Marcovitch		 * a page boundary.
2652225a8ddSAriel Marcovitch		 */
2662225a8ddSAriel Marcovitch		. = ALIGN(PAGE_SIZE);
26767361cf8SNaveen N. Rao		_einittext = .;
268af0f3e9eSKees Cook	} :text
269e8222502SBenjamin Herrenschmidt
27014cf11afSPaul Mackerras	/* .exit.text is discarded at runtime, not link time,
271e8222502SBenjamin Herrenschmidt	 * to deal with references from __bug_table
272e8222502SBenjamin Herrenschmidt	 */
273366234f6SKumar Gala	.exit.text : AT(ADDR(.exit.text) - LOAD_OFFSET) {
274ea73179eSNaveen N Rao		__exittext_begin = .;
27501ba2bdcSSam Ravnborg		EXIT_TEXT
276ea73179eSNaveen N Rao		__exittext_end = .;
27701ba2bdcSSam Ravnborg	}
278e8222502SBenjamin Herrenschmidt
2792225a8ddSAriel Marcovitch	. = ALIGN(PAGE_SIZE);
2802225a8ddSAriel Marcovitch
281fdcfeabaSYouling Tang	INIT_DATA_SECTION(16)
28214cf11afSPaul Mackerras
283e8222502SBenjamin Herrenschmidt	. = ALIGN(8);
284366234f6SKumar Gala	__ftr_fixup : AT(ADDR(__ftr_fixup) - LOAD_OFFSET) {
28514cf11afSPaul Mackerras		__start___ftr_fixup = .;
2864c1d9bb0SNicholas Piggin		KEEP(*(__ftr_fixup))
28714cf11afSPaul Mackerras		__stop___ftr_fixup = .;
288e8222502SBenjamin Herrenschmidt	}
2892d1b2027SKumar Gala	. = ALIGN(8);
2907c03d653SBenjamin Herrenschmidt	__mmu_ftr_fixup : AT(ADDR(__mmu_ftr_fixup) - LOAD_OFFSET) {
2917c03d653SBenjamin Herrenschmidt		__start___mmu_ftr_fixup = .;
2924c1d9bb0SNicholas Piggin		KEEP(*(__mmu_ftr_fixup))
2937c03d653SBenjamin Herrenschmidt		__stop___mmu_ftr_fixup = .;
2947c03d653SBenjamin Herrenschmidt	}
2957c03d653SBenjamin Herrenschmidt	. = ALIGN(8);
2962d1b2027SKumar Gala	__lwsync_fixup : AT(ADDR(__lwsync_fixup) - LOAD_OFFSET) {
2972d1b2027SKumar Gala		__start___lwsync_fixup = .;
2984c1d9bb0SNicholas Piggin		KEEP(*(__lwsync_fixup))
2992d1b2027SKumar Gala		__stop___lwsync_fixup = .;
3002d1b2027SKumar Gala	}
3013f639ee8SStephen Rothwell#ifdef CONFIG_PPC64
3023f639ee8SStephen Rothwell	. = ALIGN(8);
303366234f6SKumar Gala	__fw_ftr_fixup : AT(ADDR(__fw_ftr_fixup) - LOAD_OFFSET) {
3043f639ee8SStephen Rothwell		__start___fw_ftr_fixup = .;
3054c1d9bb0SNicholas Piggin		KEEP(*(__fw_ftr_fixup))
3063f639ee8SStephen Rothwell		__stop___fw_ftr_fixup = .;
3073f639ee8SStephen Rothwell	}
3083f639ee8SStephen Rothwell#endif
30962bef288STim Abbott
3100415b00dSTejun Heo	PERCPU_SECTION(L1_CACHE_BYTES)
31114cf11afSPaul Mackerras
312e8222502SBenjamin Herrenschmidt	. = ALIGN(8);
313366234f6SKumar Gala	.machine.desc : AT(ADDR(.machine.desc) - LOAD_OFFSET) {
314e8222502SBenjamin Herrenschmidt		__machine_desc_start = . ;
3154c1d9bb0SNicholas Piggin		KEEP(*(.machine.desc))
316e8222502SBenjamin Herrenschmidt		__machine_desc_end = . ;
317e8222502SBenjamin Herrenschmidt	}
3182a4b9c5aSPaul Mackerras#ifdef CONFIG_RELOCATABLE
319549e8152SPaul Mackerras	. = ALIGN(8);
3209c5f7d39SSuzuki Poulose	.dynsym : AT(ADDR(.dynsym) - LOAD_OFFSET)
3219c5f7d39SSuzuki Poulose	{
3229c5f7d39SSuzuki Poulose		__dynamic_symtab = .;
3239c5f7d39SSuzuki Poulose		*(.dynsym)
3249c5f7d39SSuzuki Poulose	}
325549e8152SPaul Mackerras	.dynstr : AT(ADDR(.dynstr) - LOAD_OFFSET) { *(.dynstr) }
326549e8152SPaul Mackerras	.dynamic : AT(ADDR(.dynamic) - LOAD_OFFSET)
327549e8152SPaul Mackerras	{
328549e8152SPaul Mackerras		__dynamic_start = .;
329549e8152SPaul Mackerras		*(.dynamic)
330549e8152SPaul Mackerras	}
331549e8152SPaul Mackerras	.hash : AT(ADDR(.hash) - LOAD_OFFSET) { *(.hash) }
332ead98360SMichael Ellerman	.gnu.hash : AT(ADDR(.gnu.hash) - LOAD_OFFSET) { *(.gnu.hash) }
333549e8152SPaul Mackerras	.interp : AT(ADDR(.interp) - LOAD_OFFSET) { *(.interp) }
334549e8152SPaul Mackerras	.rela.dyn : AT(ADDR(.rela.dyn) - LOAD_OFFSET)
335549e8152SPaul Mackerras	{
336549e8152SPaul Mackerras		__rela_dyn_start = .;
337549e8152SPaul Mackerras		*(.rela*)
338549e8152SPaul Mackerras	}
3392a4b9c5aSPaul Mackerras#endif
3404c812318SStephen Rothwell	/* .exit.data is discarded at runtime, not link time,
3414c812318SStephen Rothwell	 * to deal with references from .exit.text
3424c812318SStephen Rothwell	 */
3434c812318SStephen Rothwell	.exit.data : AT(ADDR(.exit.data) - LOAD_OFFSET) {
3444c812318SStephen Rothwell		EXIT_DATA
3454c812318SStephen Rothwell	}
346e8222502SBenjamin Herrenschmidt
347cabb5587SStephen Rothwell	/* freed after init ends here */
348cabb5587SStephen Rothwell	. = ALIGN(PAGE_SIZE);
349e8222502SBenjamin Herrenschmidt	__init_end = .;
350e8222502SBenjamin Herrenschmidt
351e8222502SBenjamin Herrenschmidt/*
352e8222502SBenjamin Herrenschmidt * And now the various read/write data
353e8222502SBenjamin Herrenschmidt */
354e8222502SBenjamin Herrenschmidt
355e8222502SBenjamin Herrenschmidt	. = ALIGN(PAGE_SIZE);
3564a288563SPaul Mackerras	_sdata = .;
357cabb5587SStephen Rothwell
358b6adc6d6SNicholas Piggin	.data : AT(ADDR(.data) - LOAD_OFFSET) {
359b6adc6d6SNicholas Piggin		DATA_DATA
360b6adc6d6SNicholas Piggin		*(.data.rel*)
361e8222502SBenjamin Herrenschmidt#ifdef CONFIG_PPC32
3624c1d9bb0SNicholas Piggin		*(SDATA_MAIN)
363e8222502SBenjamin Herrenschmidt#endif
364b6adc6d6SNicholas Piggin	}
365e8222502SBenjamin Herrenschmidt
366e8222502SBenjamin Herrenschmidt	/* The initial task and kernel stack */
36763289e7dSChristophe Leroy	INIT_TASK_DATA_SECTION(THREAD_ALIGN)
368cabb5587SStephen Rothwell
36975b13483STim Abbott	.data..page_aligned : AT(ADDR(.data..page_aligned) - LOAD_OFFSET) {
37062bef288STim Abbott		PAGE_ALIGNED_DATA(PAGE_SIZE)
371cabb5587SStephen Rothwell	}
37214cf11afSPaul Mackerras
3734af57b78STim Abbott	.data..cacheline_aligned : AT(ADDR(.data..cacheline_aligned) - LOAD_OFFSET) {
37462bef288STim Abbott		CACHELINE_ALIGNED_DATA(L1_CACHE_BYTES)
375e8222502SBenjamin Herrenschmidt	}
37614cf11afSPaul Mackerras
37754cb27a7SDenys Vlasenko	.data..read_mostly : AT(ADDR(.data..read_mostly) - LOAD_OFFSET) {
37862bef288STim Abbott		READ_MOSTLY_DATA(L1_CACHE_BYTES)
379bd67fcf9STony Breeds	}
380bd67fcf9STony Breeds
3815be2a213SSean MacLennan	. = ALIGN(PAGE_SIZE);
382366234f6SKumar Gala	.data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) {
38362bef288STim Abbott		NOSAVE_DATA
384e8222502SBenjamin Herrenschmidt	}
38514cf11afSPaul Mackerras
386b5effd38SPeter Zijlstra	BUG_TABLE
387b5effd38SPeter Zijlstra
388903444e4SMichael Ellerman	. = ALIGN(PAGE_SIZE);
389903444e4SMichael Ellerman	_edata  =  .;
390903444e4SMichael Ellerman
391e8222502SBenjamin Herrenschmidt/*
392e8222502SBenjamin Herrenschmidt * And finally the bss
393e8222502SBenjamin Herrenschmidt */
3944a288563SPaul Mackerras
39562bef288STim Abbott	BSS_SECTION(0, 0, 0)
396cabb5587SStephen Rothwell
397cabb5587SStephen Rothwell	. = ALIGN(PAGE_SIZE);
398cabb5587SStephen Rothwell	_end = . ;
399023bf6f1STejun Heo
40083a092cfSNicholas Piggin	DWARF_DEBUG
401c604abc3SKees Cook	ELF_DETAILS
40283a092cfSNicholas Piggin
403023bf6f1STejun Heo	DISCARDS
40483a092cfSNicholas Piggin	/DISCARD/ : {
40583a092cfSNicholas Piggin		*(*.EMB.apuinfo)
406be5f95c8SMichael Ellerman		*(.glink .iplt .plt)
40783a092cfSNicholas Piggin		*(.gnu.version*)
40883a092cfSNicholas Piggin		*(.gnu.attributes)
40983a092cfSNicholas Piggin		*(.eh_frame)
41007b050f9SMichael Ellerman#ifndef CONFIG_RELOCATABLE
41107b050f9SMichael Ellerman		*(.rela*)
41207b050f9SMichael Ellerman#endif
41383a092cfSNicholas Piggin	}
41414cf11afSPaul Mackerras}
415