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