11da177e4SLinus Torvalds#include <asm-generic/vmlinux.lds.h> 2a7dfa940SCyrill Gorcunov#include <asm/page.h> 31da177e4SLinus Torvalds 41da177e4SLinus TorvaldsOUTPUT_FORMAT(ELF_FORMAT) 51da177e4SLinus TorvaldsOUTPUT_ARCH(ELF_ARCH) 61da177e4SLinus TorvaldsENTRY(_start) 71da177e4SLinus Torvaldsjiffies = jiffies_64; 81da177e4SLinus Torvalds 91da177e4SLinus TorvaldsSECTIONS 101da177e4SLinus Torvalds{ 111da177e4SLinus Torvalds /* This must contain the right address - not quite the default ELF one.*/ 121da177e4SLinus Torvalds PROVIDE (__executable_start = START); 1323bbd586SJeff Dike /* Static binaries stick stuff here, like the sigreturn trampoline, 1423bbd586SJeff Dike * invisibly to objdump. So, just make __binary_start equal to the very 1523bbd586SJeff Dike * beginning of the executable, and if there are unmapped pages after this, 1623bbd586SJeff Dike * they are forever unusable. 1723bbd586SJeff Dike */ 1823bbd586SJeff Dike __binary_start = START; 191da177e4SLinus Torvalds 2023bbd586SJeff Dike . = START + SIZEOF_HEADERS; 211da177e4SLinus Torvalds 22d1480c56SJeff Dike _text = .; 231da177e4SLinus Torvalds _stext = .; 241da177e4SLinus Torvalds __init_begin = .; 255d150a97STim Abbott INIT_TEXT_SECTION(PAGE_SIZE) 26a7dfa940SCyrill Gorcunov . = ALIGN(PAGE_SIZE); 27d67b569fSJeff Dike 281da177e4SLinus Torvalds .text : 291da177e4SLinus Torvalds { 307664709bSSam Ravnborg TEXT_TEXT 311da177e4SLinus Torvalds SCHED_TEXT 321da177e4SLinus Torvalds LOCK_TEXT 331da177e4SLinus Torvalds *(.fixup) 341da177e4SLinus Torvalds /* .gnu.warning sections are handled specially by elf32.em. */ 351da177e4SLinus Torvalds *(.gnu.warning) 361da177e4SLinus Torvalds *(.gnu.linkonce.t*) 37c7ec16daSJeff Dike } 38d67b569fSJeff Dike 39a7dfa940SCyrill Gorcunov . = ALIGN(PAGE_SIZE); 40c7ec16daSJeff Dike .syscall_stub : { 41d67b569fSJeff Dike __syscall_stub_start = .; 42d67b569fSJeff Dike *(.__syscall_stub*) 43d67b569fSJeff Dike __syscall_stub_end = .; 441da177e4SLinus Torvalds } 451da177e4SLinus Torvalds 461da177e4SLinus Torvalds #include "asm/common.lds.S" 471da177e4SLinus Torvalds 4801ba2bdcSSam Ravnborg init.data : { INIT_DATA } 491da177e4SLinus Torvalds .data : 501da177e4SLinus Torvalds { 515d150a97STim Abbott INIT_TASK_DATA(KERNEL_STACK_SIZE) 52c14b8494SJeff Dike . = ALIGN(KERNEL_STACK_SIZE); 539d1578a3SDenys Vlasenko *(.data..init_irqstack) 54ca967258SSam Ravnborg DATA_DATA 551da177e4SLinus Torvalds *(.gnu.linkonce.d*) 561da177e4SLinus Torvalds CONSTRUCTORS 571da177e4SLinus Torvalds } 581da177e4SLinus Torvalds .data1 : { *(.data1) } 591da177e4SLinus Torvalds .ctors : 601da177e4SLinus Torvalds { 611da177e4SLinus Torvalds *(.ctors) 621da177e4SLinus Torvalds } 631da177e4SLinus Torvalds .dtors : 641da177e4SLinus Torvalds { 651da177e4SLinus Torvalds *(.dtors) 661da177e4SLinus Torvalds } 671da177e4SLinus Torvalds 681da177e4SLinus Torvalds .got : { *(.got.plt) *(.got) } 691da177e4SLinus Torvalds .dynamic : { *(.dynamic) } 70ba9950c8SJeff Dike .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } 71ba9950c8SJeff Dike .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } 721da177e4SLinus Torvalds /* We want the small data sections together, so single-instruction offsets 731da177e4SLinus Torvalds can access them all, and initialized data all before uninitialized, so 741da177e4SLinus Torvalds we can shorten the on-disk segment size. */ 751da177e4SLinus Torvalds .sdata : { *(.sdata) } 761da177e4SLinus Torvalds _edata = .; 771da177e4SLinus Torvalds PROVIDE (edata = .); 78a7dfa940SCyrill Gorcunov . = ALIGN(PAGE_SIZE); 791da177e4SLinus Torvalds __bss_start = .; 801da177e4SLinus Torvalds PROVIDE(_bss_start = .); 815d150a97STim Abbott SBSS(0) 825d150a97STim Abbott BSS(0) 831da177e4SLinus Torvalds _end = .; 841da177e4SLinus Torvalds PROVIDE (end = .); 85a7d0c210SPaolo 'Blaisorblade' Giarrusso 86a7d0c210SPaolo 'Blaisorblade' Giarrusso STABS_DEBUG 87a7d0c210SPaolo 'Blaisorblade' Giarrusso 88a7d0c210SPaolo 'Blaisorblade' Giarrusso DWARF_DEBUG 89405d967dSTejun Heo 90023bf6f1STejun Heo DISCARDS 911da177e4SLinus Torvalds} 92