xref: /openbmc/linux/arch/mips/kernel/vmlinux.lds.S (revision 04b6b3b651b2147ab7e94c0d302b5cab07dfab4c)
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