11da177e4SLinus Torvalds#include <asm-generic/vmlinux.lds.h> 21da177e4SLinus Torvalds 31da177e4SLinus TorvaldsOUTPUT_FORMAT(ELF_FORMAT) 41da177e4SLinus TorvaldsOUTPUT_ARCH(ELF_ARCH) 51da177e4SLinus TorvaldsENTRY(_start) 61da177e4SLinus Torvaldsjiffies = jiffies_64; 71da177e4SLinus Torvalds 81da177e4SLinus TorvaldsSECTIONS 91da177e4SLinus Torvalds{ 101da177e4SLinus Torvalds /* This must contain the right address - not quite the default ELF one.*/ 111da177e4SLinus Torvalds PROVIDE (__executable_start = START); 1223bbd586SJeff Dike /* Static binaries stick stuff here, like the sigreturn trampoline, 1323bbd586SJeff Dike * invisibly to objdump. So, just make __binary_start equal to the very 1423bbd586SJeff Dike * beginning of the executable, and if there are unmapped pages after this, 1523bbd586SJeff Dike * they are forever unusable. 1623bbd586SJeff Dike */ 1723bbd586SJeff Dike __binary_start = START; 181da177e4SLinus Torvalds 1923bbd586SJeff Dike . = START + SIZEOF_HEADERS; 201da177e4SLinus Torvalds 2160b2737dSPaolo 'Blaisorblade' Giarrusso#ifdef MODE_TT 221c30385aSPaolo 'Blaisorblade' Giarrusso .remap_data : { UNMAP_PATH (.data .bss) } 231c30385aSPaolo 'Blaisorblade' Giarrusso .remap : { UNMAP_PATH (.text) } 241da177e4SLinus Torvalds 251da177e4SLinus Torvalds . = ALIGN(4096); /* Init code and data */ 261da177e4SLinus Torvalds#endif 271da177e4SLinus Torvalds 28d1480c56SJeff Dike _text = .; 291da177e4SLinus Torvalds _stext = .; 301da177e4SLinus Torvalds __init_begin = .; 311da177e4SLinus Torvalds .init.text : { 321da177e4SLinus Torvalds _sinittext = .; 331da177e4SLinus Torvalds *(.init.text) 341da177e4SLinus Torvalds _einittext = .; 351da177e4SLinus Torvalds } 361da177e4SLinus Torvalds . = ALIGN(4096); 37d67b569fSJeff Dike 381da177e4SLinus Torvalds .text : 391da177e4SLinus Torvalds { 407664709bSSam Ravnborg TEXT_TEXT 411da177e4SLinus Torvalds SCHED_TEXT 421da177e4SLinus Torvalds LOCK_TEXT 431da177e4SLinus Torvalds *(.fixup) 441da177e4SLinus Torvalds /* .gnu.warning sections are handled specially by elf32.em. */ 451da177e4SLinus Torvalds *(.gnu.warning) 461da177e4SLinus Torvalds *(.gnu.linkonce.t*) 47d67b569fSJeff Dike 48d67b569fSJeff Dike . = ALIGN(4096); 49d67b569fSJeff Dike __syscall_stub_start = .; 50d67b569fSJeff Dike *(.__syscall_stub*) 51d67b569fSJeff Dike __syscall_stub_end = .; 52d67b569fSJeff Dike . = ALIGN(4096); 531da177e4SLinus Torvalds } 541da177e4SLinus Torvalds 551da177e4SLinus Torvalds #include "asm/common.lds.S" 561da177e4SLinus Torvalds 571da177e4SLinus Torvalds init.data : { *(init.data) } 581da177e4SLinus Torvalds .data : 591da177e4SLinus Torvalds { 601da177e4SLinus Torvalds . = ALIGN(KERNEL_STACK_SIZE); /* init_task */ 611da177e4SLinus Torvalds *(.data.init_task) 62c14b8494SJeff Dike . = ALIGN(KERNEL_STACK_SIZE); 63c14b8494SJeff Dike *(.data.init_irqstack) 64ca967258SSam Ravnborg DATA_DATA 651da177e4SLinus Torvalds *(.gnu.linkonce.d*) 661da177e4SLinus Torvalds CONSTRUCTORS 671da177e4SLinus Torvalds } 681da177e4SLinus Torvalds .data1 : { *(.data1) } 691da177e4SLinus Torvalds .ctors : 701da177e4SLinus Torvalds { 711da177e4SLinus Torvalds *(.ctors) 721da177e4SLinus Torvalds } 731da177e4SLinus Torvalds .dtors : 741da177e4SLinus Torvalds { 751da177e4SLinus Torvalds *(.dtors) 761da177e4SLinus Torvalds } 771da177e4SLinus Torvalds 781da177e4SLinus Torvalds .got : { *(.got.plt) *(.got) } 791da177e4SLinus Torvalds .dynamic : { *(.dynamic) } 80ba9950c8SJeff Dike .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } 81ba9950c8SJeff Dike .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } 821da177e4SLinus Torvalds /* We want the small data sections together, so single-instruction offsets 831da177e4SLinus Torvalds can access them all, and initialized data all before uninitialized, so 841da177e4SLinus Torvalds we can shorten the on-disk segment size. */ 851da177e4SLinus Torvalds .sdata : { *(.sdata) } 861da177e4SLinus Torvalds _edata = .; 871da177e4SLinus Torvalds PROVIDE (edata = .); 881da177e4SLinus Torvalds . = ALIGN(0x1000); 891da177e4SLinus Torvalds .sbss : 901da177e4SLinus Torvalds { 911da177e4SLinus Torvalds __bss_start = .; 921da177e4SLinus Torvalds PROVIDE(_bss_start = .); 931da177e4SLinus Torvalds *(.sbss) 941da177e4SLinus Torvalds *(.scommon) 951da177e4SLinus Torvalds } 961da177e4SLinus Torvalds .bss : 971da177e4SLinus Torvalds { 981da177e4SLinus Torvalds *(.dynbss) 991da177e4SLinus Torvalds *(.bss) 1001da177e4SLinus Torvalds *(COMMON) 1011da177e4SLinus Torvalds } 1021da177e4SLinus Torvalds _end = .; 1031da177e4SLinus Torvalds PROVIDE (end = .); 104a7d0c210SPaolo 'Blaisorblade' Giarrusso 105a7d0c210SPaolo 'Blaisorblade' Giarrusso STABS_DEBUG 106a7d0c210SPaolo 'Blaisorblade' Giarrusso 107a7d0c210SPaolo 'Blaisorblade' Giarrusso DWARF_DEBUG 1081da177e4SLinus Torvalds} 109