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