blob: 41850906116ea4a1579c2001709f61e921a00a4e [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001#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 */
Jeff Diked1480c52006-10-30 22:07:13 -080017 _text = .;
Linus Torvalds1da177e2005-04-16 15:20:36 -070018 _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) }
Roland McGrath0b0bf7a2006-07-30 03:04:06 -070030 .gnu.hash : { *(.gnu.hash) }
Linus Torvalds1da177e2005-04-16 15:20:36 -070031 .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 : {
Sam Ravnborg76647092007-05-13 00:31:33 +020065 TEXT_TEXT
Linus Torvalds1da177e2005-04-16 15:20:36 -070066 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)
Jeff Diked67b5692005-07-07 17:56:49 -070072
73 . = ALIGN(4096);
Linus Torvalds1da177e2005-04-16 15:20:36 -070074 } =0x90909090
Jeff Dikec7ec16d2007-08-30 23:56:17 -070075 . = ALIGN(4096);
76 .syscall_stub : {
77 __syscall_stub_start = .;
78 *(.__syscall_stub*)
79 __syscall_stub_end = .;
80 }
Linus Torvalds1da177e2005-04-16 15:20:36 -070081 .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)
Jeff Dikec14b8492007-05-10 22:22:34 -0700102 . = ALIGN(KERNEL_STACK_SIZE);
103 *(.data.init_irqstack)
Sam Ravnborgca967252007-05-17 13:38:44 +0200104 DATA_DATA
105 *(.data.* .gnu.linkonce.d.*)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700106 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 = .);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700143 .bss : {
Jeff Dikec7ec16d2007-08-30 23:56:17 -0700144 __bss_start = .;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700145 *(.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 = .);
Paolo 'Blaisorblade' Giarrussoa7d0c212005-09-10 19:44:54 +0200156
157 STABS_DEBUG
158
159 DWARF_DEBUG
Linus Torvalds1da177e2005-04-16 15:20:36 -0700160}