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