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