xref: /openbmc/linux/arch/um/kernel/uml.lds.S (revision ca967258)
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