xref: /openbmc/linux/arch/um/kernel/uml.lds.S (revision 2b5a0e42)
1b2441318SGreg Kroah-Hartman/* SPDX-License-Identifier: GPL-2.0 */
20500871fSDavid Howells#include <asm/vmlinux.lds.h>
3a7dfa940SCyrill Gorcunov#include <asm/page.h>
41da177e4SLinus Torvalds
51da177e4SLinus TorvaldsOUTPUT_FORMAT(ELF_FORMAT)
61da177e4SLinus TorvaldsOUTPUT_ARCH(ELF_ARCH)
71da177e4SLinus TorvaldsENTRY(_start)
81da177e4SLinus Torvaldsjiffies = jiffies_64;
91da177e4SLinus Torvalds
10d5027ca6SJohannes BergVERSION {
11d5027ca6SJohannes Berg  {
12d5027ca6SJohannes Berg    local: *;
13d5027ca6SJohannes Berg  };
14d5027ca6SJohannes Berg}
15d5027ca6SJohannes Berg
161da177e4SLinus TorvaldsSECTIONS
171da177e4SLinus Torvalds{
181da177e4SLinus Torvalds  /* This must contain the right address - not quite the default ELF one.*/
191da177e4SLinus Torvalds  PROVIDE (__executable_start = START);
2023bbd586SJeff Dike  /* Static binaries stick stuff here, like the sigreturn trampoline,
2123bbd586SJeff Dike   * invisibly to objdump.  So, just make __binary_start equal to the very
2223bbd586SJeff Dike   * beginning of the executable, and if there are unmapped pages after this,
2323bbd586SJeff Dike   * they are forever unusable.
2423bbd586SJeff Dike   */
2523bbd586SJeff Dike  __binary_start = START;
261da177e4SLinus Torvalds
2723bbd586SJeff Dike  . = START + SIZEOF_HEADERS;
28598f5630SDavid Gow  . = ALIGN(PAGE_SIZE);
291da177e4SLinus Torvalds
30d1480c56SJeff Dike  _text = .;
316915e04fSRichard Weinberger  INIT_TEXT_SECTION(0)
32d67b569fSJeff Dike
331da177e4SLinus Torvalds  .text      :
341da177e4SLinus Torvalds  {
35a214a8c6SJiang Liu    _stext = .;
367664709bSSam Ravnborg    TEXT_TEXT
371da177e4SLinus Torvalds    SCHED_TEXT
381da177e4SLinus Torvalds    LOCK_TEXT
39324f80ccSJohannes Berg    IRQENTRY_TEXT
40324f80ccSJohannes Berg    SOFTIRQENTRY_TEXT
411da177e4SLinus Torvalds    *(.fixup)
421da177e4SLinus Torvalds    /* .gnu.warning sections are handled specially by elf32.em.  */
431da177e4SLinus Torvalds    *(.gnu.warning)
441da177e4SLinus Torvalds    *(.gnu.linkonce.t*)
45c7ec16daSJeff Dike  }
46d67b569fSJeff Dike
47a7dfa940SCyrill Gorcunov  . = ALIGN(PAGE_SIZE);
48c7ec16daSJeff Dike  .syscall_stub : {
49d67b569fSJeff Dike	__syscall_stub_start = .;
50d67b569fSJeff Dike	*(.__syscall_stub*)
51d67b569fSJeff Dike	__syscall_stub_end = .;
521da177e4SLinus Torvalds  }
531da177e4SLinus Torvalds
54aa5fb4dbSRoland McGrath  /*
55aa5fb4dbSRoland McGrath   * These are needed even in a static link, even if they wind up being empty.
56aa5fb4dbSRoland McGrath   * Newer glibc needs these __rel{,a}_iplt_{start,end} symbols.
57aa5fb4dbSRoland McGrath   */
58aa5fb4dbSRoland McGrath  .rel.plt : {
59aa5fb4dbSRoland McGrath	*(.rel.plt)
60aa5fb4dbSRoland McGrath	PROVIDE_HIDDEN(__rel_iplt_start = .);
61aa5fb4dbSRoland McGrath	*(.rel.iplt)
62aa5fb4dbSRoland McGrath	PROVIDE_HIDDEN(__rel_iplt_end = .);
63aa5fb4dbSRoland McGrath  }
64aa5fb4dbSRoland McGrath  .rela.plt : {
65aa5fb4dbSRoland McGrath	*(.rela.plt)
66aa5fb4dbSRoland McGrath	PROVIDE_HIDDEN(__rela_iplt_start = .);
67aa5fb4dbSRoland McGrath	*(.rela.iplt)
68aa5fb4dbSRoland McGrath	PROVIDE_HIDDEN(__rela_iplt_end = .);
69aa5fb4dbSRoland McGrath  }
70aa5fb4dbSRoland McGrath
7137185b33SAl Viro  #include <asm/common.lds.S>
721da177e4SLinus Torvalds
73a214a8c6SJiang Liu  __init_begin = .;
7401ba2bdcSSam Ravnborg  init.data : { INIT_DATA }
75a214a8c6SJiang Liu  __init_end = .;
76a214a8c6SJiang Liu
771da177e4SLinus Torvalds  .data    :
781da177e4SLinus Torvalds  {
795d150a97STim Abbott    INIT_TASK_DATA(KERNEL_STACK_SIZE)
80c14b8494SJeff Dike    . = ALIGN(KERNEL_STACK_SIZE);
819d1578a3SDenys Vlasenko    *(.data..init_irqstack)
82ca967258SSam Ravnborg    DATA_DATA
831da177e4SLinus Torvalds    *(.gnu.linkonce.d*)
841da177e4SLinus Torvalds    CONSTRUCTORS
851da177e4SLinus Torvalds  }
861da177e4SLinus Torvalds  .data1   : { *(.data1) }
871da177e4SLinus Torvalds  .ctors         :
881da177e4SLinus Torvalds  {
891da177e4SLinus Torvalds    *(.ctors)
901da177e4SLinus Torvalds  }
911da177e4SLinus Torvalds  .dtors         :
921da177e4SLinus Torvalds  {
931da177e4SLinus Torvalds    *(.dtors)
941da177e4SLinus Torvalds  }
951da177e4SLinus Torvalds
961da177e4SLinus Torvalds  .got           : { *(.got.plt) *(.got) }
97*99ac1e23SDavid Gow  .eh_frame       : { KEEP (*(.eh_frame)) }
981da177e4SLinus Torvalds  .dynamic       : { *(.dynamic) }
99ba9950c8SJeff Dike  .tdata	  : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
100ba9950c8SJeff Dike  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
1011da177e4SLinus Torvalds  /* We want the small data sections together, so single-instruction offsets
1021da177e4SLinus Torvalds     can access them all, and initialized data all before uninitialized, so
1031da177e4SLinus Torvalds     we can shorten the on-disk segment size.  */
1041da177e4SLinus Torvalds  .sdata     : { *(.sdata) }
1051da177e4SLinus Torvalds  _edata  =  .;
1061da177e4SLinus Torvalds  PROVIDE (edata = .);
107a7dfa940SCyrill Gorcunov  . = ALIGN(PAGE_SIZE);
1081da177e4SLinus Torvalds  __bss_start = .;
1091da177e4SLinus Torvalds  PROVIDE(_bss_start = .);
1105d150a97STim Abbott  SBSS(0)
1115d150a97STim Abbott  BSS(0)
112a214a8c6SJiang Liu   __bss_stop = .;
1131da177e4SLinus Torvalds  _end = .;
1141da177e4SLinus Torvalds  PROVIDE (end = .);
115a7d0c210SPaolo 'Blaisorblade' Giarrusso
116a7d0c210SPaolo 'Blaisorblade' Giarrusso  STABS_DEBUG
117a7d0c210SPaolo 'Blaisorblade' Giarrusso  DWARF_DEBUG
118c604abc3SKees Cook  ELF_DETAILS
119405d967dSTejun Heo
120023bf6f1STejun Heo  DISCARDS
1211da177e4SLinus Torvalds}
122