11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm-generic/vmlinux.lds.h>
2a7dfa9403bf3b03899d5ef5d10b0c5c3f74b0682Cyrill Gorcunov#include <asm/page.h>
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsOUTPUT_FORMAT(ELF_FORMAT)
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsOUTPUT_ARCH(ELF_ARCH)
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsENTRY(_start)
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsjiffies = jiffies_64;
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsSECTIONS
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  PROVIDE (__executable_start = START);
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  . = START + SIZEOF_HEADERS;
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .interp         : { *(.interp) }
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  __binary_start = .;
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  . = ALIGN(4096);		/* Init code and data */
16d1480c56feb2a894fd47fb399999a5b320c3e103Jeff Dike  _text = .;
175d150a97f9391f5bcd7ba0d59d7a11c3de3cea80Tim Abbott  INIT_TEXT_SECTION(PAGE_SIZE)
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
19a7dfa9403bf3b03899d5ef5d10b0c5c3f74b0682Cyrill Gorcunov  . = ALIGN(PAGE_SIZE);
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  /* Read-only sections, merged into text segment: */
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .hash           : { *(.hash) }
230b0bf7a3ccb6f0b38ead71980e79f875046047b7Roland McGrath  .gnu.hash       : { *(.gnu.hash) }
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .dynsym         : { *(.dynsym) }
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .dynstr         : { *(.dynstr) }
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .gnu.version    : { *(.gnu.version) }
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .gnu.version_d  : { *(.gnu.version_d) }
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .gnu.version_r  : { *(.gnu.version_r) }
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .rel.init       : { *(.rel.init) }
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .rela.init      : { *(.rela.init) }
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .rel.fini       : { *(.rel.fini) }
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .rela.fini      : { *(.rela.fini) }
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .rel.ctors      : { *(.rel.ctors) }
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .rela.ctors     : { *(.rela.ctors) }
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .rel.dtors      : { *(.rel.dtors) }
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .rela.dtors     : { *(.rela.dtors) }
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .rel.got        : { *(.rel.got) }
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .rela.got       : { *(.rela.got) }
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
51aa5fb4dbfd121296ca97c68cf90043a7ea97579dRoland McGrath  .rel.plt : {
52aa5fb4dbfd121296ca97c68cf90043a7ea97579dRoland McGrath	*(.rel.plt)
53aa5fb4dbfd121296ca97c68cf90043a7ea97579dRoland McGrath	PROVIDE_HIDDEN(__rel_iplt_start = .);
54aa5fb4dbfd121296ca97c68cf90043a7ea97579dRoland McGrath	*(.rel.iplt)
55aa5fb4dbfd121296ca97c68cf90043a7ea97579dRoland McGrath	PROVIDE_HIDDEN(__rel_iplt_end = .);
56aa5fb4dbfd121296ca97c68cf90043a7ea97579dRoland McGrath  }
57aa5fb4dbfd121296ca97c68cf90043a7ea97579dRoland McGrath  .rela.plt : {
58aa5fb4dbfd121296ca97c68cf90043a7ea97579dRoland McGrath	*(.rela.plt)
59aa5fb4dbfd121296ca97c68cf90043a7ea97579dRoland McGrath	PROVIDE_HIDDEN(__rela_iplt_start = .);
60aa5fb4dbfd121296ca97c68cf90043a7ea97579dRoland McGrath	*(.rela.iplt)
61aa5fb4dbfd121296ca97c68cf90043a7ea97579dRoland McGrath	PROVIDE_HIDDEN(__rela_iplt_end = .);
62aa5fb4dbfd121296ca97c68cf90043a7ea97579dRoland McGrath  }
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .init           : {
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    KEEP (*(.init))
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  } =0x90909090
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .plt            : { *(.plt) }
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .text           : {
68a214a8c68bcdef2fb0803425f7fe36fe41030d3fJiang Liu    _stext = .;
697664709b44a13e2e0b545e2dd8e7b8797a1748dcSam Ravnborg    TEXT_TEXT
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    SCHED_TEXT
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    LOCK_TEXT
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    *(.fixup)
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    *(.stub .text.* .gnu.linkonce.t.*)
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    /* .gnu.warning sections are handled specially by elf32.em.  */
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    *(.gnu.warning)
76d67b569f5f620c0fb95d5212642746b7ba9d29e4Jeff Dike
77a7dfa9403bf3b03899d5ef5d10b0c5c3f74b0682Cyrill Gorcunov    . = ALIGN(PAGE_SIZE);
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  } =0x90909090
79a7dfa9403bf3b03899d5ef5d10b0c5c3f74b0682Cyrill Gorcunov  . = ALIGN(PAGE_SIZE);
80c7ec16da5adc1c1b341b2a83bde7add17dcf811aJeff Dike  .syscall_stub : {
81c7ec16da5adc1c1b341b2a83bde7add17dcf811aJeff Dike	__syscall_stub_start = .;
82c7ec16da5adc1c1b341b2a83bde7add17dcf811aJeff Dike	*(.__syscall_stub*)
83c7ec16da5adc1c1b341b2a83bde7add17dcf811aJeff Dike	__syscall_stub_end = .;
84c7ec16da5adc1c1b341b2a83bde7add17dcf811aJeff Dike  }
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .fini           : {
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    KEEP (*(.fini))
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  } =0x90909090
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .kstrtab : { *(.kstrtab) }
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
9137185b33240870719b6b5913a46e6a441f1ae96fAl Viro  #include <asm/common.lds.S>
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
93a214a8c68bcdef2fb0803425f7fe36fe41030d3fJiang Liu  __init_begin = .;
9401ba2bdc6b639764745ff678caf3fb9e5bcd745aSam Ravnborg  init.data : { INIT_DATA }
95a214a8c68bcdef2fb0803425f7fe36fe41030d3fJiang Liu  __init_end = .;
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  /* Ensure the __preinit_array_start label is properly aligned.  We
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds     could instead move the label definition inside the section, but
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds     the linker would then create the section even if it turns out to
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds     be empty, which isn't pretty.  */
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  . = ALIGN(32 / 8);
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .preinit_array     : { *(.preinit_array) }
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .init_array     : { *(.init_array) }
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .fini_array     : { *(.fini_array) }
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .data           : {
1065d150a97f9391f5bcd7ba0d59d7a11c3de3cea80Tim Abbott    INIT_TASK_DATA(KERNEL_STACK_SIZE)
107c14b84949e127560084c7c56b365931c71c60768Jeff Dike    . = ALIGN(KERNEL_STACK_SIZE);
1089d1578a3ba7fe9d3eecf86615ee427789792c2d6Denys Vlasenko    *(.data..init_irqstack)
109ca967258b69eb65dcb07bbab90fdf964c6d2ec45Sam Ravnborg    DATA_DATA
110ca967258b69eb65dcb07bbab90fdf964c6d2ec45Sam Ravnborg    *(.data.* .gnu.linkonce.d.*)
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    SORT(CONSTRUCTORS)
1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  }
1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .data1          : { *(.data1) }
1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .tdata	  : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .eh_frame       : { KEEP (*(.eh_frame)) }
1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .gcc_except_table   : { *(.gcc_except_table) }
1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .dynamic        : { *(.dynamic) }
1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .ctors          : {
1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    /* gcc uses crtbegin.o to find the start of
1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds       the constructors, so we make sure it is
1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds       first.  Because this is a wildcard, it
1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds       doesn't matter if the user does not
1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds       actually link against crtbegin.o; the
1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds       linker won't look for a file to match a
1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds       wildcard.  The wildcard also means that it
1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds       doesn't matter which directory crtbegin.o
1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds       is in.  */
1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    KEEP (*crtbegin.o(.ctors))
1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    /* We don't want to include the .ctor section from
1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds       from the crtend.o file until after the sorted ctors.
1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds       The .ctor section from the crtend file contains the
1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds       end of ctors marker and it must be last */
1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors))
1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    KEEP (*(SORT(.ctors.*)))
1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    KEEP (*(.ctors))
1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  }
1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .dtors          : {
1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    KEEP (*crtbegin.o(.dtors))
1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors))
1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    KEEP (*(SORT(.dtors.*)))
1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    KEEP (*(.dtors))
1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  }
1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .jcr            : { KEEP (*(.jcr)) }
1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .got            : { *(.got.plt) *(.got) }
1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  _edata = .;
1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  PROVIDE (edata = .);
1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  .bss            : {
149c7ec16da5adc1c1b341b2a83bde7add17dcf811aJeff Dike   __bss_start = .;
1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   *(.dynbss)
1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   *(.bss .bss.* .gnu.linkonce.b.*)
1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   *(COMMON)
1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   /* Align here to ensure that the .bss section occupies space up to
1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds      _end.  Align after .bss to ensure correct alignment even if the
1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds      .bss section disappears because there are no input sections.  */
1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   . = ALIGN(32 / 8);
1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  . = ALIGN(32 / 8);
1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  }
159a214a8c68bcdef2fb0803425f7fe36fe41030d3fJiang Liu   __bss_stop = .;
1601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  _end = .;
1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  PROVIDE (end = .);
162a7d0c210337246fa9c25b73cf76dfdbb159f642bPaolo 'Blaisorblade' Giarrusso
163a7d0c210337246fa9c25b73cf76dfdbb159f642bPaolo 'Blaisorblade' Giarrusso  STABS_DEBUG
164a7d0c210337246fa9c25b73cf76dfdbb159f642bPaolo 'Blaisorblade' Giarrusso
165a7d0c210337246fa9c25b73cf76dfdbb159f642bPaolo 'Blaisorblade' Giarrusso  DWARF_DEBUG
166405d967dc70002991f8fc35c20e0d3cbc7614f63Tejun Heo
167023bf6f1b8bf58dc4da7f0dc1cf4787b0d5297c1Tejun Heo  DISCARDS
1681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
169