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