• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
9VERSION {
10  {
11    local: *;
12  };
13}
14
15SECTIONS
16{
17  PROVIDE (__executable_start = START);
18  . = START + SIZEOF_HEADERS;
19  .interp         : { *(.interp) }
20  __binary_start = .;
21  . = ALIGN(4096);		/* Init code and data */
22  _text = .;
23  INIT_TEXT_SECTION(PAGE_SIZE)
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 : {
58	*(.rel.plt)
59	PROVIDE_HIDDEN(__rel_iplt_start = .);
60	*(.rel.iplt)
61	PROVIDE_HIDDEN(__rel_iplt_end = .);
62  }
63  .rela.plt : {
64	*(.rela.plt)
65	PROVIDE_HIDDEN(__rela_iplt_start = .);
66	*(.rela.iplt)
67	PROVIDE_HIDDEN(__rela_iplt_end = .);
68  }
69  .init           : {
70    KEEP (*(.init))
71  } =0x90909090
72  .plt            : { *(.plt) }
73  .text           : {
74    _stext = .;
75    TEXT_TEXT
76    SCHED_TEXT
77    LOCK_TEXT
78    *(.fixup)
79    *(.stub .text.* .gnu.linkonce.t.*)
80    /* .gnu.warning sections are handled specially by elf32.em.  */
81    *(.gnu.warning)
82
83    . = ALIGN(PAGE_SIZE);
84  } =0x90909090
85  . = ALIGN(PAGE_SIZE);
86  .syscall_stub : {
87	__syscall_stub_start = .;
88	*(.__syscall_stub*)
89	__syscall_stub_end = .;
90  }
91  .fini           : {
92    KEEP (*(.fini))
93  } =0x90909090
94
95  .kstrtab : { *(.kstrtab) }
96
97  #include <asm/common.lds.S>
98
99  __init_begin = .;
100  init.data : { INIT_DATA }
101  __init_end = .;
102
103  /* Ensure the __preinit_array_start label is properly aligned.  We
104     could instead move the label definition inside the section, but
105     the linker would then create the section even if it turns out to
106     be empty, which isn't pretty.  */
107  . = ALIGN(32 / 8);
108  .preinit_array     : { *(.preinit_array) }
109  .init_array     : { *(.init_array) }
110  .fini_array     : { *(.fini_array) }
111  .data           : {
112    INIT_TASK_DATA(KERNEL_STACK_SIZE)
113    . = ALIGN(KERNEL_STACK_SIZE);
114    *(.data..init_irqstack)
115    DATA_DATA
116    *(.data.* .gnu.linkonce.d.*)
117    SORT(CONSTRUCTORS)
118  }
119  .data1          : { *(.data1) }
120  .tdata	  : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
121  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
122  .eh_frame       : { KEEP (*(.eh_frame)) }
123  .gcc_except_table   : { *(.gcc_except_table) }
124  .dynamic        : { *(.dynamic) }
125  .ctors          : {
126    /* gcc uses crtbegin.o to find the start of
127       the constructors, so we make sure it is
128       first.  Because this is a wildcard, it
129       doesn't matter if the user does not
130       actually link against crtbegin.o; the
131       linker won't look for a file to match a
132       wildcard.  The wildcard also means that it
133       doesn't matter which directory crtbegin.o
134       is in.  */
135    KEEP (*crtbegin.o(.ctors))
136    /* We don't want to include the .ctor section from
137       from the crtend.o file until after the sorted ctors.
138       The .ctor section from the crtend file contains the
139       end of ctors marker and it must be last */
140    KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors))
141    KEEP (*(SORT(.ctors.*)))
142    KEEP (*(.ctors))
143  }
144  .dtors          : {
145    KEEP (*crtbegin.o(.dtors))
146    KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors))
147    KEEP (*(SORT(.dtors.*)))
148    KEEP (*(.dtors))
149  }
150  .jcr            : { KEEP (*(.jcr)) }
151  .got            : { *(.got.plt) *(.got) }
152  _edata = .;
153  PROVIDE (edata = .);
154  .bss            : {
155   __bss_start = .;
156   *(.dynbss)
157   *(.bss .bss.* .gnu.linkonce.b.*)
158   *(COMMON)
159   /* Align here to ensure that the .bss section occupies space up to
160      _end.  Align after .bss to ensure correct alignment even if the
161      .bss section disappears because there are no input sections.  */
162   . = ALIGN(32 / 8);
163  . = ALIGN(32 / 8);
164  }
165   __bss_stop = .;
166  _end = .;
167  PROVIDE (end = .);
168
169  STABS_DEBUG
170
171  DWARF_DEBUG
172
173  DISCARDS
174}
175