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