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