xref: /linux/arch/powerpc/kernel/vmlinux.lds.S (revision 748a768384e05c021ea6be221b80c62a83d7b520)
1c51e3a41SPaul Mackerras#ifdef CONFIG_PPC64
2cabb5587SStephen Rothwell#include <asm/page.h>
3e8222502SBenjamin Herrenschmidt#define PROVIDE32(x)	PROVIDE(__unused__##x)
4c51e3a41SPaul Mackerras#else
5c51e3a41SPaul Mackerras#define PAGE_SIZE	4096
6c51e3a41SPaul Mackerras#define KERNELBASE	CONFIG_KERNEL_START
7e8222502SBenjamin Herrenschmidt#define PROVIDE32(x)	PROVIDE(x)
8c51e3a41SPaul Mackerras#endif
914cf11afSPaul Mackerras#include <asm-generic/vmlinux.lds.h>
10bd67fcf9STony Breeds#include <asm/cache.h>
1114cf11afSPaul Mackerras
12e19e4ab4SMichael EllermanENTRY(_stext)
13e19e4ab4SMichael Ellerman
14cabb5587SStephen Rothwell#ifdef CONFIG_PPC64
15cabb5587SStephen RothwellOUTPUT_ARCH(powerpc:common64)
16cabb5587SStephen Rothwelljiffies = jiffies_64;
17cabb5587SStephen Rothwell#else
1814cf11afSPaul MackerrasOUTPUT_ARCH(powerpc:common)
1914cf11afSPaul Mackerrasjiffies = jiffies_64 + 4;
20cabb5587SStephen Rothwell#endif
2114cf11afSPaul MackerrasSECTIONS
2214cf11afSPaul Mackerras{
23cabb5587SStephen Rothwell	/* Sections to be discarded. */
24cabb5587SStephen Rothwell	/DISCARD/ : {
25cabb5587SStephen Rothwell	*(.exitcall.exit)
26cabb5587SStephen Rothwell	*(.exit.data)
27cabb5587SStephen Rothwell	}
28cabb5587SStephen Rothwell
29e19e4ab4SMichael Ellerman	. = KERNELBASE;
30cabb5587SStephen Rothwell
31e8222502SBenjamin Herrenschmidt/*
32e8222502SBenjamin Herrenschmidt * Text, read only data and other permanent read-only sections
33e8222502SBenjamin Herrenschmidt */
34e8222502SBenjamin Herrenschmidt
35e8222502SBenjamin Herrenschmidt	/* Text and gots */
36cabb5587SStephen Rothwell	.text : {
37*748a7683SKumar Gala		ALIGN_FUNCTION();
38*748a7683SKumar Gala		*(.text.head)
39fd593d12SEric W. Biederman		_text = .;
407664709bSSam Ravnborg		TEXT_TEXT
4114cf11afSPaul Mackerras		SCHED_TEXT
4214cf11afSPaul Mackerras		LOCK_TEXT
43cabb5587SStephen Rothwell		KPROBES_TEXT
4414cf11afSPaul Mackerras		*(.fixup)
45e8222502SBenjamin Herrenschmidt
46cabb5587SStephen Rothwell#ifdef CONFIG_PPC32
4714cf11afSPaul Mackerras		*(.got1)
4814cf11afSPaul Mackerras		__got2_start = .;
4914cf11afSPaul Mackerras		*(.got2)
5014cf11afSPaul Mackerras		__got2_end = .;
51e8222502SBenjamin Herrenschmidt#endif /* CONFIG_PPC32 */
52e8222502SBenjamin Herrenschmidt
53cabb5587SStephen Rothwell		. = ALIGN(PAGE_SIZE);
54cabb5587SStephen Rothwell		_etext = .;
55e8222502SBenjamin Herrenschmidt		PROVIDE32 (etext = .);
5614cf11afSPaul Mackerras	}
5714cf11afSPaul Mackerras
58e8222502SBenjamin Herrenschmidt	/* Read-only data */
5914cf11afSPaul Mackerras	RODATA
6014cf11afSPaul Mackerras
61e8222502SBenjamin Herrenschmidt	/* Exception & bug tables */
6214cf11afSPaul Mackerras	__ex_table : {
6314cf11afSPaul Mackerras		__start___ex_table = .;
6414cf11afSPaul Mackerras		*(__ex_table)
6514cf11afSPaul Mackerras		__stop___ex_table = .;
6614cf11afSPaul Mackerras	}
6714cf11afSPaul Mackerras
688fb775eeSRoland McGrath	NOTES
698fb775eeSRoland McGrath
7073c9ceabSJeremy Fitzhardinge	BUG_TABLE
7114cf11afSPaul Mackerras
72e8222502SBenjamin Herrenschmidt/*
73e8222502SBenjamin Herrenschmidt * Init sections discarded at runtime
74e8222502SBenjamin Herrenschmidt */
75cabb5587SStephen Rothwell	. = ALIGN(PAGE_SIZE);
7614cf11afSPaul Mackerras	__init_begin = .;
77e8222502SBenjamin Herrenschmidt
7814cf11afSPaul Mackerras	.init.text : {
7914cf11afSPaul Mackerras		_sinittext = .;
8014cf11afSPaul Mackerras		*(.init.text)
8114cf11afSPaul Mackerras		_einittext = .;
8214cf11afSPaul Mackerras	}
83e8222502SBenjamin Herrenschmidt
8414cf11afSPaul Mackerras	/* .exit.text is discarded at runtime, not link time,
85e8222502SBenjamin Herrenschmidt	 * to deal with references from __bug_table
86e8222502SBenjamin Herrenschmidt	 */
8714cf11afSPaul Mackerras	.exit.text : { *(.exit.text) }
88e8222502SBenjamin Herrenschmidt
8914cf11afSPaul Mackerras	.init.data : {
9014cf11afSPaul Mackerras		*(.init.data);
9114cf11afSPaul Mackerras		__vtop_table_begin = .;
9214cf11afSPaul Mackerras		*(.vtop_fixup);
9314cf11afSPaul Mackerras		__vtop_table_end = .;
9414cf11afSPaul Mackerras		__ptov_table_begin = .;
9514cf11afSPaul Mackerras		*(.ptov_fixup);
9614cf11afSPaul Mackerras		__ptov_table_end = .;
97c4e3ea25SStephen Rothwell#ifdef CONFIG_PPC_ISERIES
98c4e3ea25SStephen Rothwell		__dt_strings_start = .;
99c4e3ea25SStephen Rothwell		*(.dt_strings);
100c4e3ea25SStephen Rothwell		__dt_strings_end = .;
101c4e3ea25SStephen Rothwell#endif
10214cf11afSPaul Mackerras	}
103cabb5587SStephen Rothwell
10414cf11afSPaul Mackerras	. = ALIGN(16);
105cabb5587SStephen Rothwell	.init.setup : {
106cabb5587SStephen Rothwell		__setup_start = .;
107cabb5587SStephen Rothwell		*(.init.setup)
10814cf11afSPaul Mackerras		__setup_end = .;
109cabb5587SStephen Rothwell	}
110cabb5587SStephen Rothwell
11114cf11afSPaul Mackerras	.initcall.init : {
112cabb5587SStephen Rothwell		__initcall_start = .;
11361ce1efeSAndrew Morton		INITCALLS
114cabb5587SStephen Rothwell		__initcall_end = .;
11514cf11afSPaul Mackerras		}
11614cf11afSPaul Mackerras
117cabb5587SStephen Rothwell	.con_initcall.init : {
118cabb5587SStephen Rothwell		__con_initcall_start = .;
119cabb5587SStephen Rothwell		*(.con_initcall.init)
12014cf11afSPaul Mackerras		__con_initcall_end = .;
121cabb5587SStephen Rothwell	}
12214cf11afSPaul Mackerras
12314cf11afSPaul Mackerras	SECURITY_INIT
12414cf11afSPaul Mackerras
125e8222502SBenjamin Herrenschmidt	. = ALIGN(8);
126e8222502SBenjamin Herrenschmidt	__ftr_fixup : {
12714cf11afSPaul Mackerras		__start___ftr_fixup = .;
128e8222502SBenjamin Herrenschmidt		*(__ftr_fixup)
12914cf11afSPaul Mackerras		__stop___ftr_fixup = .;
130e8222502SBenjamin Herrenschmidt	}
1313f639ee8SStephen Rothwell#ifdef CONFIG_PPC64
1323f639ee8SStephen Rothwell	. = ALIGN(8);
1333f639ee8SStephen Rothwell	__fw_ftr_fixup : {
1343f639ee8SStephen Rothwell		__start___fw_ftr_fixup = .;
1353f639ee8SStephen Rothwell		*(__fw_ftr_fixup)
1363f639ee8SStephen Rothwell		__stop___fw_ftr_fixup = .;
1373f639ee8SStephen Rothwell	}
1383f639ee8SStephen Rothwell#endif
13967d38229SJean-Paul Saman#ifdef CONFIG_BLK_DEV_INITRD
140cabb5587SStephen Rothwell	. = ALIGN(PAGE_SIZE);
141cabb5587SStephen Rothwell	.init.ramfs : {
142cabb5587SStephen Rothwell		__initramfs_start = .;
143cabb5587SStephen Rothwell		*(.init.ramfs)
144cabb5587SStephen Rothwell		__initramfs_end = .;
145cabb5587SStephen Rothwell	}
14667d38229SJean-Paul Saman#endif
147b6e3590fSJeremy Fitzhardinge	. = ALIGN(PAGE_SIZE);
148cabb5587SStephen Rothwell	.data.percpu : {
149cabb5587SStephen Rothwell		__per_cpu_start = .;
150cabb5587SStephen Rothwell		*(.data.percpu)
1515fb7dc37SFenghua Yu		*(.data.percpu.shared_aligned)
15214cf11afSPaul Mackerras		__per_cpu_end = .;
153cabb5587SStephen Rothwell	}
15414cf11afSPaul Mackerras
155e8222502SBenjamin Herrenschmidt	. = ALIGN(8);
156e8222502SBenjamin Herrenschmidt	.machine.desc : {
157e8222502SBenjamin Herrenschmidt		__machine_desc_start = . ;
158e8222502SBenjamin Herrenschmidt		*(.machine.desc)
159e8222502SBenjamin Herrenschmidt		__machine_desc_end = . ;
160e8222502SBenjamin Herrenschmidt	}
161e8222502SBenjamin Herrenschmidt
162cabb5587SStephen Rothwell	/* freed after init ends here */
163cabb5587SStephen Rothwell	. = ALIGN(PAGE_SIZE);
164e8222502SBenjamin Herrenschmidt	__init_end = .;
165e8222502SBenjamin Herrenschmidt
166e8222502SBenjamin Herrenschmidt/*
167e8222502SBenjamin Herrenschmidt * And now the various read/write data
168e8222502SBenjamin Herrenschmidt */
169e8222502SBenjamin Herrenschmidt
170e8222502SBenjamin Herrenschmidt	. = ALIGN(PAGE_SIZE);
1714a288563SPaul Mackerras	_sdata = .;
172cabb5587SStephen Rothwell
173e8222502SBenjamin Herrenschmidt#ifdef CONFIG_PPC32
174e8222502SBenjamin Herrenschmidt	.data    :
175e8222502SBenjamin Herrenschmidt	{
176ca967258SSam Ravnborg		DATA_DATA
177e8222502SBenjamin Herrenschmidt		*(.sdata)
178e8222502SBenjamin Herrenschmidt		*(.got.plt) *(.got)
179cabb5587SStephen Rothwell	}
180e8222502SBenjamin Herrenschmidt#else
181cabb5587SStephen Rothwell	.data : {
1823ae0aa9fSMathieu Desnoyers		DATA_DATA
1833ae0aa9fSMathieu Desnoyers		*(.data.rel*)
1843ae0aa9fSMathieu Desnoyers		*(.toc1)
185cabb5587SStephen Rothwell		*(.branch_lt)
186cabb5587SStephen Rothwell	}
187cabb5587SStephen Rothwell
188cabb5587SStephen Rothwell	.opd : {
189cabb5587SStephen Rothwell		*(.opd)
190cabb5587SStephen Rothwell	}
191cabb5587SStephen Rothwell
192cabb5587SStephen Rothwell	.got : {
193cabb5587SStephen Rothwell		__toc_start = .;
194cabb5587SStephen Rothwell		*(.got)
195cabb5587SStephen Rothwell		*(.toc)
196e8222502SBenjamin Herrenschmidt	}
197e8222502SBenjamin Herrenschmidt#endif
198e8222502SBenjamin Herrenschmidt
199cabb5587SStephen Rothwell	. = ALIGN(PAGE_SIZE);
200cabb5587SStephen Rothwell	_edata  =  .;
201e8222502SBenjamin Herrenschmidt	PROVIDE32 (edata = .);
202e8222502SBenjamin Herrenschmidt
203e8222502SBenjamin Herrenschmidt	/* The initial task and kernel stack */
204e8222502SBenjamin Herrenschmidt#ifdef CONFIG_PPC32
205e8222502SBenjamin Herrenschmidt	. = ALIGN(8192);
206e8222502SBenjamin Herrenschmidt#else
207e8222502SBenjamin Herrenschmidt	. = ALIGN(16384);
208e8222502SBenjamin Herrenschmidt#endif
209e8222502SBenjamin Herrenschmidt	.data.init_task : {
210e8222502SBenjamin Herrenschmidt		*(.data.init_task)
211cabb5587SStephen Rothwell	}
212cabb5587SStephen Rothwell
213cabb5587SStephen Rothwell	. = ALIGN(PAGE_SIZE);
214e8222502SBenjamin Herrenschmidt	.data.page_aligned : {
215e8222502SBenjamin Herrenschmidt		*(.data.page_aligned)
216cabb5587SStephen Rothwell	}
21714cf11afSPaul Mackerras
218e8222502SBenjamin Herrenschmidt	.data.cacheline_aligned : {
219e8222502SBenjamin Herrenschmidt		*(.data.cacheline_aligned)
220e8222502SBenjamin Herrenschmidt	}
22114cf11afSPaul Mackerras
222bd67fcf9STony Breeds	. = ALIGN(L1_CACHE_BYTES);
223bd67fcf9STony Breeds	.data.read_mostly : {
224bd67fcf9STony Breeds		*(.data.read_mostly)
225bd67fcf9STony Breeds	}
226bd67fcf9STony Breeds
227e8222502SBenjamin Herrenschmidt	. = ALIGN(PAGE_SIZE);
228e8222502SBenjamin Herrenschmidt	__data_nosave : {
229e8222502SBenjamin Herrenschmidt		__nosave_begin = .;
230e8222502SBenjamin Herrenschmidt		*(.data.nosave)
231e8222502SBenjamin Herrenschmidt		. = ALIGN(PAGE_SIZE);
232e8222502SBenjamin Herrenschmidt		__nosave_end = .;
233e8222502SBenjamin Herrenschmidt	}
23414cf11afSPaul Mackerras
235e8222502SBenjamin Herrenschmidt/*
236e8222502SBenjamin Herrenschmidt * And finally the bss
237e8222502SBenjamin Herrenschmidt */
2384a288563SPaul Mackerras
239cabb5587SStephen Rothwell	.bss : {
240cabb5587SStephen Rothwell		__bss_start = .;
24114cf11afSPaul Mackerras		*(.sbss) *(.scommon)
24214cf11afSPaul Mackerras		*(.dynbss)
24314cf11afSPaul Mackerras		*(.bss)
24414cf11afSPaul Mackerras		*(COMMON)
24514cf11afSPaul Mackerras		__bss_stop = .;
24614cf11afSPaul Mackerras	}
247cabb5587SStephen Rothwell
248cabb5587SStephen Rothwell	. = ALIGN(PAGE_SIZE);
249cabb5587SStephen Rothwell	_end = . ;
250e8222502SBenjamin Herrenschmidt	PROVIDE32 (end = .);
25114cf11afSPaul Mackerras}
252