11da177e4SLinus Torvalds#include <linux/config.h> 2dbee90b7SRalf Baechle#include <asm/asm-offsets.h> 31da177e4SLinus Torvalds#include <asm-generic/vmlinux.lds.h> 41da177e4SLinus Torvalds 541c594abSRalf Baechle#undef mips 61da177e4SLinus Torvalds#define mips mips 71da177e4SLinus TorvaldsOUTPUT_ARCH(mips) 81da177e4SLinus TorvaldsENTRY(kernel_entry) 91da177e4SLinus Torvaldsjiffies = JIFFIES; 101da177e4SLinus TorvaldsSECTIONS 111da177e4SLinus Torvalds{ 121da177e4SLinus Torvalds#ifdef CONFIG_BOOT_ELF64 131da177e4SLinus Torvalds /* Read-only sections, merged into text segment: */ 141da177e4SLinus Torvalds /* . = 0xc000000000000000; */ 151da177e4SLinus Torvalds 161da177e4SLinus Torvalds /* This is the value for an Origin kernel, taken from an IRIX kernel. */ 171da177e4SLinus Torvalds /* . = 0xc00000000001c000; */ 181da177e4SLinus Torvalds 191da177e4SLinus Torvalds /* Set the vaddr for the text segment to a value 201da177e4SLinus Torvalds >= 0xa800 0000 0001 9000 if no symmon is going to configured 211da177e4SLinus Torvalds >= 0xa800 0000 0030 0000 otherwise */ 221da177e4SLinus Torvalds 231da177e4SLinus Torvalds /* . = 0xa800000000300000; */ 241da177e4SLinus Torvalds /* . = 0xa800000000300000; */ 251da177e4SLinus Torvalds . = 0xffffffff80300000; 261da177e4SLinus Torvalds#endif 271da177e4SLinus Torvalds . = LOADADDR; 281da177e4SLinus Torvalds /* read-only */ 291da177e4SLinus Torvalds _text = .; /* Text and read-only data */ 301da177e4SLinus Torvalds .text : { 311da177e4SLinus Torvalds *(.text) 321da177e4SLinus Torvalds SCHED_TEXT 331da177e4SLinus Torvalds LOCK_TEXT 341da177e4SLinus Torvalds *(.fixup) 351da177e4SLinus Torvalds *(.gnu.warning) 361da177e4SLinus Torvalds } =0 371da177e4SLinus Torvalds 381da177e4SLinus Torvalds _etext = .; /* End of text section */ 391da177e4SLinus Torvalds 401da177e4SLinus Torvalds . = ALIGN(16); /* Exception table */ 411da177e4SLinus Torvalds __start___ex_table = .; 421da177e4SLinus Torvalds __ex_table : { *(__ex_table) } 431da177e4SLinus Torvalds __stop___ex_table = .; 441da177e4SLinus Torvalds 451da177e4SLinus Torvalds __start___dbe_table = .; /* Exception table for data bus errors */ 461da177e4SLinus Torvalds __dbe_table : { *(__dbe_table) } 471da177e4SLinus Torvalds __stop___dbe_table = .; 481da177e4SLinus Torvalds 491da177e4SLinus Torvalds RODATA 501da177e4SLinus Torvalds 511da177e4SLinus Torvalds /* writeable */ 521da177e4SLinus Torvalds .data : { /* Data */ 531da177e4SLinus Torvalds . = . + DATAOFFSET; /* for CONFIG_MAPPED_KERNEL */ 541da177e4SLinus Torvalds *(.data.init_task) 551da177e4SLinus Torvalds 561da177e4SLinus Torvalds *(.data) 571da177e4SLinus Torvalds 581da177e4SLinus Torvalds CONSTRUCTORS 591da177e4SLinus Torvalds } 601da177e4SLinus Torvalds _gp = . + 0x8000; 611da177e4SLinus Torvalds .lit8 : { *(.lit8) } 621da177e4SLinus Torvalds .lit4 : { *(.lit4) } 631da177e4SLinus Torvalds /* We want the small data sections together, so single-instruction offsets 641da177e4SLinus Torvalds can access them all, and initialized data all before uninitialized, so 651da177e4SLinus Torvalds we can shorten the on-disk segment size. */ 661da177e4SLinus Torvalds .sdata : { *(.sdata) } 671da177e4SLinus Torvalds 68dbee90b7SRalf Baechle . = ALIGN(_PAGE_SIZE); 691da177e4SLinus Torvalds __nosave_begin = .; 701da177e4SLinus Torvalds .data_nosave : { *(.data.nosave) } 71dbee90b7SRalf Baechle . = ALIGN(_PAGE_SIZE); 721da177e4SLinus Torvalds __nosave_end = .; 731da177e4SLinus Torvalds 741da177e4SLinus Torvalds . = ALIGN(32); 751da177e4SLinus Torvalds .data.cacheline_aligned : { *(.data.cacheline_aligned) } 761da177e4SLinus Torvalds 771da177e4SLinus Torvalds _edata = .; /* End of data section */ 781da177e4SLinus Torvalds 791da177e4SLinus Torvalds /* will be freed after init */ 80dbee90b7SRalf Baechle . = ALIGN(_PAGE_SIZE); /* Init code and data */ 811da177e4SLinus Torvalds __init_begin = .; 821da177e4SLinus Torvalds .init.text : { 831da177e4SLinus Torvalds _sinittext = .; 841da177e4SLinus Torvalds *(.init.text) 851da177e4SLinus Torvalds _einittext = .; 861da177e4SLinus Torvalds } 871da177e4SLinus Torvalds .init.data : { *(.init.data) } 881da177e4SLinus Torvalds . = ALIGN(16); 891da177e4SLinus Torvalds __setup_start = .; 901da177e4SLinus Torvalds .init.setup : { *(.init.setup) } 911da177e4SLinus Torvalds __setup_end = .; 921da177e4SLinus Torvalds 931da177e4SLinus Torvalds __initcall_start = .; 941da177e4SLinus Torvalds .initcall.init : { 951da177e4SLinus Torvalds *(.initcall1.init) 961da177e4SLinus Torvalds *(.initcall2.init) 971da177e4SLinus Torvalds *(.initcall3.init) 981da177e4SLinus Torvalds *(.initcall4.init) 991da177e4SLinus Torvalds *(.initcall5.init) 1001da177e4SLinus Torvalds *(.initcall6.init) 1011da177e4SLinus Torvalds *(.initcall7.init) 1021da177e4SLinus Torvalds } 1031da177e4SLinus Torvalds __initcall_end = .; 1041da177e4SLinus Torvalds 1051da177e4SLinus Torvalds __con_initcall_start = .; 1061da177e4SLinus Torvalds .con_initcall.init : { *(.con_initcall.init) } 1071da177e4SLinus Torvalds __con_initcall_end = .; 1081da177e4SLinus Torvalds SECURITY_INIT 109bb7d83f7SRalf Baechle /* .exit.text is discarded at runtime, not link time, to deal with 110bb7d83f7SRalf Baechle references from .rodata */ 111bb7d83f7SRalf Baechle .exit.text : { *(.exit.text) } 112dbee90b7SRalf Baechle . = ALIGN(_PAGE_SIZE); 1131da177e4SLinus Torvalds __initramfs_start = .; 1141da177e4SLinus Torvalds .init.ramfs : { *(.init.ramfs) } 1151da177e4SLinus Torvalds __initramfs_end = .; 1161da177e4SLinus Torvalds . = ALIGN(32); 1171da177e4SLinus Torvalds __per_cpu_start = .; 1181da177e4SLinus Torvalds .data.percpu : { *(.data.percpu) } 1191da177e4SLinus Torvalds __per_cpu_end = .; 120dbee90b7SRalf Baechle . = ALIGN(_PAGE_SIZE); 1211da177e4SLinus Torvalds __init_end = .; 1221da177e4SLinus Torvalds /* freed after init ends here */ 1231da177e4SLinus Torvalds 1241da177e4SLinus Torvalds __bss_start = .; /* BSS */ 1251da177e4SLinus Torvalds .sbss : { 1261da177e4SLinus Torvalds *(.sbss) 1271da177e4SLinus Torvalds *(.scommon) 1281da177e4SLinus Torvalds } 1291da177e4SLinus Torvalds .bss : { 1301da177e4SLinus Torvalds *(.bss) 1311da177e4SLinus Torvalds *(COMMON) 1321da177e4SLinus Torvalds } 1331da177e4SLinus Torvalds __bss_stop = .; 1341da177e4SLinus Torvalds 1351da177e4SLinus Torvalds _end = . ; 1361da177e4SLinus Torvalds 1371da177e4SLinus Torvalds /* Sections to be discarded */ 1381da177e4SLinus Torvalds /DISCARD/ : { 1391da177e4SLinus Torvalds *(.exit.data) 1401da177e4SLinus Torvalds *(.exitcall.exit) 1411da177e4SLinus Torvalds 1421da177e4SLinus Torvalds /* ABI crap starts here */ 1431da177e4SLinus Torvalds *(.comment) 1441da177e4SLinus Torvalds *(.MIPS.options) 1451da177e4SLinus Torvalds *(.note) 1461da177e4SLinus Torvalds *(.options) 1471da177e4SLinus Torvalds *(.pdr) 1481da177e4SLinus Torvalds *(.reginfo) 1491da177e4SLinus Torvalds *(.mdebug*) 1501da177e4SLinus Torvalds } 1511da177e4SLinus Torvalds 1521da177e4SLinus Torvalds /* This is the MIPS specific mdebug section. */ 1531da177e4SLinus Torvalds .mdebug : { *(.mdebug) } 1541da177e4SLinus Torvalds /* These are needed for ELF backends which have not yet been 1551da177e4SLinus Torvalds converted to the new style linker. */ 1561da177e4SLinus Torvalds .stab 0 : { *(.stab) } 1571da177e4SLinus Torvalds .stabstr 0 : { *(.stabstr) } 158*04b6b3b6SAtsushi Nemoto 159*04b6b3b6SAtsushi Nemoto DWARF_DEBUG 160*04b6b3b6SAtsushi Nemoto 1611da177e4SLinus Torvalds /* These must appear regardless of . */ 1621da177e4SLinus Torvalds .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) } 1631da177e4SLinus Torvalds .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) } 1641da177e4SLinus Torvalds .comment : { *(.comment) } 1651da177e4SLinus Torvalds .note : { *(.note) } 1661da177e4SLinus Torvalds} 167