xref: /linux/arch/um/kernel/dyn.lds.S (revision 2b8232ce512105e28453f301d1510de8363bccd1)
1#include <asm-generic/vmlinux.lds.h>
2
3OUTPUT_FORMAT(ELF_FORMAT)
4OUTPUT_ARCH(ELF_ARCH)
5ENTRY(_start)
6jiffies = jiffies_64;
7
8SECTIONS
9{
10  PROVIDE (__executable_start = START);
11  . = START + SIZEOF_HEADERS;
12  .interp         : { *(.interp) }
13  /* Used in arch/um/kernel/mem.c. Any memory between START and __binary_start
14   * is remapped.*/
15  __binary_start = .;
16  . = ALIGN(4096);		/* Init code and data */
17  _text = .;
18  _stext = .;
19  __init_begin = .;
20  .init.text : {
21	_sinittext = .;
22	*(.init.text)
23	_einittext = .;
24  }
25
26  . = ALIGN(4096);
27
28  /* Read-only sections, merged into text segment: */
29  .hash           : { *(.hash) }
30  .gnu.hash       : { *(.gnu.hash) }
31  .dynsym         : { *(.dynsym) }
32  .dynstr         : { *(.dynstr) }
33  .gnu.version    : { *(.gnu.version) }
34  .gnu.version_d  : { *(.gnu.version_d) }
35  .gnu.version_r  : { *(.gnu.version_r) }
36  .rel.init       : { *(.rel.init) }
37  .rela.init      : { *(.rela.init) }
38  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
39  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
40  .rel.fini       : { *(.rel.fini) }
41  .rela.fini      : { *(.rela.fini) }
42  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
43  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
44  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
45  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
46  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
47  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
48  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
49  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
50  .rel.ctors      : { *(.rel.ctors) }
51  .rela.ctors     : { *(.rela.ctors) }
52  .rel.dtors      : { *(.rel.dtors) }
53  .rela.dtors     : { *(.rela.dtors) }
54  .rel.got        : { *(.rel.got) }
55  .rela.got       : { *(.rela.got) }
56  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
57  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
58  .rel.plt        : { *(.rel.plt) }
59  .rela.plt       : { *(.rela.plt) }
60  .init           : {
61    KEEP (*(.init))
62  } =0x90909090
63  .plt            : { *(.plt) }
64  .text           : {
65    TEXT_TEXT
66    SCHED_TEXT
67    LOCK_TEXT
68    *(.fixup)
69    *(.stub .text.* .gnu.linkonce.t.*)
70    /* .gnu.warning sections are handled specially by elf32.em.  */
71    *(.gnu.warning)
72
73    . = ALIGN(4096);
74  } =0x90909090
75  . = ALIGN(4096);
76  .syscall_stub : {
77	__syscall_stub_start = .;
78	*(.__syscall_stub*)
79	__syscall_stub_end = .;
80  }
81  .fini           : {
82    KEEP (*(.fini))
83  } =0x90909090
84
85  .kstrtab : { *(.kstrtab) }
86
87  #include "asm/common.lds.S"
88
89  init.data : { *(.init.data) }
90
91  /* Ensure the __preinit_array_start label is properly aligned.  We
92     could instead move the label definition inside the section, but
93     the linker would then create the section even if it turns out to
94     be empty, which isn't pretty.  */
95  . = ALIGN(32 / 8);
96  .preinit_array     : { *(.preinit_array) }
97  .init_array     : { *(.init_array) }
98  .fini_array     : { *(.fini_array) }
99  .data           : {
100    . = ALIGN(KERNEL_STACK_SIZE);		/* init_task */
101    *(.data.init_task)
102    . = ALIGN(KERNEL_STACK_SIZE);
103    *(.data.init_irqstack)
104    DATA_DATA
105    *(.data.* .gnu.linkonce.d.*)
106    SORT(CONSTRUCTORS)
107  }
108  .data1          : { *(.data1) }
109  .tdata	  : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
110  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
111  .eh_frame       : { KEEP (*(.eh_frame)) }
112  .gcc_except_table   : { *(.gcc_except_table) }
113  .dynamic        : { *(.dynamic) }
114  .ctors          : {
115    /* gcc uses crtbegin.o to find the start of
116       the constructors, so we make sure it is
117       first.  Because this is a wildcard, it
118       doesn't matter if the user does not
119       actually link against crtbegin.o; the
120       linker won't look for a file to match a
121       wildcard.  The wildcard also means that it
122       doesn't matter which directory crtbegin.o
123       is in.  */
124    KEEP (*crtbegin.o(.ctors))
125    /* We don't want to include the .ctor section from
126       from the crtend.o file until after the sorted ctors.
127       The .ctor section from the crtend file contains the
128       end of ctors marker and it must be last */
129    KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors))
130    KEEP (*(SORT(.ctors.*)))
131    KEEP (*(.ctors))
132  }
133  .dtors          : {
134    KEEP (*crtbegin.o(.dtors))
135    KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors))
136    KEEP (*(SORT(.dtors.*)))
137    KEEP (*(.dtors))
138  }
139  .jcr            : { KEEP (*(.jcr)) }
140  .got            : { *(.got.plt) *(.got) }
141  _edata = .;
142  PROVIDE (edata = .);
143  .bss            : {
144   __bss_start = .;
145   *(.dynbss)
146   *(.bss .bss.* .gnu.linkonce.b.*)
147   *(COMMON)
148   /* Align here to ensure that the .bss section occupies space up to
149      _end.  Align after .bss to ensure correct alignment even if the
150      .bss section disappears because there are no input sections.  */
151   . = ALIGN(32 / 8);
152  . = ALIGN(32 / 8);
153  }
154  _end = .;
155  PROVIDE (end = .);
156
157  STABS_DEBUG
158
159  DWARF_DEBUG
160}
161