Ralf Baechle | dbee90b | 2006-02-02 14:31:16 +0000 | [diff] [blame] | 1 | #include <asm/asm-offsets.h> |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 2 | #include <asm-generic/vmlinux.lds.h> |
3 | |||||
Ralf Baechle | 41c594a | 2006-04-05 09:45:45 +0100 | [diff] [blame] | 4 | #undef mips |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 5 | #define mips mips |
6 | OUTPUT_ARCH(mips) | ||||
7 | ENTRY(kernel_entry) | ||||
Ralf Baechle | 603bb99 | 2007-10-14 22:49:01 +0100 | [diff] [blame] | 8 | PHDRS { |
9 | text PT_LOAD FLAGS(7); /* RWX */ | ||||
10 | note PT_NOTE FLAGS(4); /* R__ */ | ||||
11 | } | ||||
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 12 | jiffies = JIFFIES; |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 13 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 14 | SECTIONS |
15 | { | ||||
16 | #ifdef CONFIG_BOOT_ELF64 | ||||
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 17 | /* Read-only sections, merged into text segment: */ |
18 | /* . = 0xc000000000000000; */ | ||||
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 19 | |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 20 | /* This is the value for an Origin kernel, taken from an IRIX kernel. */ |
21 | /* . = 0xc00000000001c000; */ | ||||
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 22 | |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 23 | /* Set the vaddr for the text segment to a value |
24 | * >= 0xa800 0000 0001 9000 if no symmon is going to configured | ||||
25 | * >= 0xa800 0000 0030 0000 otherwise | ||||
26 | */ | ||||
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 27 | |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 28 | /* . = 0xa800000000300000; */ |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 29 | . = 0xffffffff80300000; |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 30 | #endif |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 31 | . = LOADADDR; |
32 | /* read-only */ | ||||
33 | _text = .; /* Text and read-only data */ | ||||
34 | .text : { | ||||
35 | TEXT_TEXT | ||||
36 | SCHED_TEXT | ||||
37 | LOCK_TEXT | ||||
Ralf Baechle | f70fd1b | 2007-10-14 22:50:05 +0100 | [diff] [blame] | 38 | KPROBES_TEXT |
Atsushi Nemoto | 6b3766a | 2008-08-05 23:45:14 +0900 | [diff] [blame] | 39 | *(.text.*) |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 40 | *(.fixup) |
41 | *(.gnu.warning) | ||||
Ralf Baechle | 603bb99 | 2007-10-14 22:49:01 +0100 | [diff] [blame] | 42 | } :text = 0 |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 43 | _etext = .; /* End of text section */ |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 44 | |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 45 | /* Exception table */ |
46 | . = ALIGN(16); | ||||
47 | __ex_table : { | ||||
48 | __start___ex_table = .; | ||||
49 | *(__ex_table) | ||||
50 | __stop___ex_table = .; | ||||
51 | } | ||||
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 52 | |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 53 | /* Exception table for data bus errors */ |
54 | __dbe_table : { | ||||
55 | __start___dbe_table = .; | ||||
56 | *(__dbe_table) | ||||
57 | __stop___dbe_table = .; | ||||
58 | } | ||||
Ralf Baechle | 603bb99 | 2007-10-14 22:49:01 +0100 | [diff] [blame] | 59 | |
60 | NOTES :text :note | ||||
61 | .dummy : { *(.dummy) } :text | ||||
62 | |||||
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 63 | RODATA |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 64 | |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 65 | /* writeable */ |
66 | .data : { /* Data */ | ||||
Franck Bui-Huu | 16be243 | 2007-10-18 23:12:32 +0200 | [diff] [blame] | 67 | . = . + DATAOFFSET; /* for CONFIG_MAPPED_KERNEL */ |
68 | /* | ||||
69 | * This ALIGN is needed as a workaround for a bug a | ||||
70 | * gcc bug upto 4.1 which limits the maximum alignment | ||||
71 | * to at most 32kB and results in the following | ||||
72 | * warning: | ||||
73 | * | ||||
74 | * CC arch/mips/kernel/init_task.o | ||||
75 | * arch/mips/kernel/init_task.c:30: warning: alignment | ||||
76 | * of ‘init_thread_union’ is greater than maximum | ||||
77 | * object file alignment. Using 32768 | ||||
78 | */ | ||||
79 | . = ALIGN(_PAGE_SIZE); | ||||
80 | *(.data.init_task) | ||||
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 81 | |
Franck Bui-Huu | 16be243 | 2007-10-18 23:12:32 +0200 | [diff] [blame] | 82 | DATA_DATA |
83 | CONSTRUCTORS | ||||
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 84 | } |
85 | _gp = . + 0x8000; | ||||
86 | .lit8 : { | ||||
87 | *(.lit8) | ||||
88 | } | ||||
89 | .lit4 : { | ||||
90 | *(.lit4) | ||||
91 | } | ||||
92 | /* We want the small data sections together, so single-instruction offsets | ||||
93 | can access them all, and initialized data all before uninitialized, so | ||||
94 | we can shorten the on-disk segment size. */ | ||||
95 | .sdata : { | ||||
96 | *(.sdata) | ||||
97 | } | ||||
Maciej W. Rozycki | 6f6b394 | 2007-10-01 13:24:04 +0100 | [diff] [blame] | 98 | |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 99 | . = ALIGN(_PAGE_SIZE); |
100 | .data_nosave : { | ||||
101 | __nosave_begin = .; | ||||
102 | *(.data.nosave) | ||||
103 | } | ||||
104 | . = ALIGN(_PAGE_SIZE); | ||||
105 | __nosave_end = .; | ||||
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 106 | |
David Daney | 2dbac10 | 2008-10-13 16:36:13 -0700 | [diff] [blame] | 107 | . = ALIGN(1 << CONFIG_MIPS_L1_CACHE_SHIFT); |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 108 | .data.cacheline_aligned : { |
109 | *(.data.cacheline_aligned) | ||||
110 | } | ||||
111 | _edata = .; /* End of data section */ | ||||
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 112 | |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 113 | /* will be freed after init */ |
114 | . = ALIGN(_PAGE_SIZE); /* Init code and data */ | ||||
115 | __init_begin = .; | ||||
116 | .init.text : { | ||||
117 | _sinittext = .; | ||||
Sam Ravnborg | 01ba2bd | 2008-01-20 14:15:03 +0100 | [diff] [blame] | 118 | INIT_TEXT |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 119 | _einittext = .; |
120 | } | ||||
121 | .init.data : { | ||||
Sam Ravnborg | 01ba2bd | 2008-01-20 14:15:03 +0100 | [diff] [blame] | 122 | INIT_DATA |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 123 | } |
124 | . = ALIGN(16); | ||||
125 | .init.setup : { | ||||
126 | __setup_start = .; | ||||
127 | *(.init.setup) | ||||
128 | __setup_end = .; | ||||
129 | } | ||||
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 130 | |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 131 | .initcall.init : { |
132 | __initcall_start = .; | ||||
133 | INITCALLS | ||||
134 | __initcall_end = .; | ||||
135 | } | ||||
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 136 | |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 137 | .con_initcall.init : { |
138 | __con_initcall_start = .; | ||||
139 | *(.con_initcall.init) | ||||
140 | __con_initcall_end = .; | ||||
141 | } | ||||
142 | SECURITY_INIT | ||||
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 143 | |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 144 | /* .exit.text is discarded at runtime, not link time, to deal with |
145 | * references from .rodata | ||||
146 | */ | ||||
147 | .exit.text : { | ||||
Sam Ravnborg | 01ba2bd | 2008-01-20 14:15:03 +0100 | [diff] [blame] | 148 | EXIT_TEXT |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 149 | } |
150 | .exit.data : { | ||||
Sam Ravnborg | 01ba2bd | 2008-01-20 14:15:03 +0100 | [diff] [blame] | 151 | EXIT_DATA |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 152 | } |
Jean-Paul Saman | 67d3822 | 2007-02-10 01:44:44 -0800 | [diff] [blame] | 153 | #if defined(CONFIG_BLK_DEV_INITRD) |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 154 | . = ALIGN(_PAGE_SIZE); |
155 | .init.ramfs : { | ||||
156 | __initramfs_start = .; | ||||
157 | *(.init.ramfs) | ||||
158 | __initramfs_end = .; | ||||
159 | } | ||||
Jean-Paul Saman | 67d3822 | 2007-02-10 01:44:44 -0800 | [diff] [blame] | 160 | #endif |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 161 | PERCPU(_PAGE_SIZE) |
162 | . = ALIGN(_PAGE_SIZE); | ||||
163 | __init_end = .; | ||||
164 | /* freed after init ends here */ | ||||
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 165 | |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 166 | __bss_start = .; /* BSS */ |
167 | .sbss : { | ||||
168 | *(.sbss) | ||||
169 | *(.scommon) | ||||
170 | } | ||||
171 | .bss : { | ||||
172 | *(.bss) | ||||
173 | *(COMMON) | ||||
174 | } | ||||
175 | __bss_stop = .; | ||||
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 176 | |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 177 | _end = . ; |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 178 | |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 179 | /* These mark the ABI of the kernel for debuggers. */ |
180 | .mdebug.abi32 : { | ||||
181 | KEEP(*(.mdebug.abi32)) | ||||
182 | } | ||||
183 | .mdebug.abi64 : { | ||||
184 | KEEP(*(.mdebug.abi64)) | ||||
185 | } | ||||
Daniel Jacobowitz | 6c76988 | 2007-08-03 11:43:01 -0400 | [diff] [blame] | 186 | |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 187 | /* This is the MIPS specific mdebug section. */ |
188 | .mdebug : { | ||||
189 | *(.mdebug) | ||||
190 | } | ||||
Atsushi Nemoto | 78665aa | 2006-05-11 00:41:26 +0900 | [diff] [blame] | 191 | |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 192 | STABS_DEBUG |
193 | DWARF_DEBUG | ||||
Atsushi Nemoto | 04b6b3b | 2006-05-10 15:36:04 +0900 | [diff] [blame] | 194 | |
Sam Ravnborg | 0f5c906 | 2007-09-15 23:35:53 +0200 | [diff] [blame] | 195 | /* These must appear regardless of . */ |
196 | .gptab.sdata : { | ||||
197 | *(.gptab.data) | ||||
198 | *(.gptab.sdata) | ||||
199 | } | ||||
200 | .gptab.sbss : { | ||||
201 | *(.gptab.bss) | ||||
202 | *(.gptab.sbss) | ||||
203 | } | ||||
Tejun Heo | 023bf6f | 2009-07-09 11:27:40 +0900 | [diff] [blame^] | 204 | |
205 | /* Sections to be discarded */ | ||||
206 | DISCARDS | ||||
207 | /DISCARD/ : { | ||||
208 | /* ABI crap starts here */ | ||||
209 | *(.MIPS.options) | ||||
210 | *(.options) | ||||
211 | *(.pdr) | ||||
212 | *(.reginfo) | ||||
213 | } | ||||
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 214 | } |