[MIPS] Fix potential latency problem due to non-atomic cpu_wait.
[linux-2.6-block.git] / arch / mips / kernel / vmlinux.lds.S
CommitLineData
dbee90b7 1#include <asm/asm-offsets.h>
1da177e4
LT
2#include <asm-generic/vmlinux.lds.h>
3
41c594ab 4#undef mips
1da177e4
LT
5#define mips mips
6OUTPUT_ARCH(mips)
7ENTRY(kernel_entry)
603bb99c
RB
8PHDRS {
9 text PT_LOAD FLAGS(7); /* RWX */
10 note PT_NOTE FLAGS(4); /* R__ */
11}
1da177e4 12jiffies = JIFFIES;
0f5c9064 13
1da177e4
LT
14SECTIONS
15{
16#ifdef CONFIG_BOOT_ELF64
0f5c9064
SR
17 /* Read-only sections, merged into text segment: */
18 /* . = 0xc000000000000000; */
1da177e4 19
0f5c9064
SR
20 /* This is the value for an Origin kernel, taken from an IRIX kernel. */
21 /* . = 0xc00000000001c000; */
1da177e4 22
0f5c9064
SR
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 */
1da177e4 27
0f5c9064
SR
28 /* . = 0xa800000000300000; */
29 . = 0xffffffff80300000;
1da177e4 30#endif
0f5c9064
SR
31 . = LOADADDR;
32 /* read-only */
33 _text = .; /* Text and read-only data */
34 .text : {
35 TEXT_TEXT
36 SCHED_TEXT
37 LOCK_TEXT
f70fd1b5 38 KPROBES_TEXT
0f5c9064
SR
39 *(.fixup)
40 *(.gnu.warning)
603bb99c 41 } :text = 0
0f5c9064
SR
42 _etext = .; /* End of text section */
43
44 /* Exception table */
45 . = ALIGN(16);
46 __ex_table : {
47 __start___ex_table = .;
48 *(__ex_table)
49 __stop___ex_table = .;
50 }
51
52 /* Exception table for data bus errors */
53 __dbe_table : {
54 __start___dbe_table = .;
55 *(__dbe_table)
56 __stop___dbe_table = .;
57 }
603bb99c
RB
58
59 NOTES :text :note
60 .dummy : { *(.dummy) } :text
61
0f5c9064
SR
62 RODATA
63
64 /* writeable */
65 .data : { /* Data */
16be2435
FBH
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)
0f5c9064 80
16be2435
FBH
81 DATA_DATA
82 CONSTRUCTORS
0f5c9064
SR
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 }
97
98 . = ALIGN(_PAGE_SIZE);
99 .data_nosave : {
100 __nosave_begin = .;
101 *(.data.nosave)
102 }
103 . = ALIGN(_PAGE_SIZE);
104 __nosave_end = .;
105
106 . = ALIGN(32);
107 .data.cacheline_aligned : {
108 *(.data.cacheline_aligned)
109 }
110 _edata = .; /* End of data section */
111
112 /* will be freed after init */
113 . = ALIGN(_PAGE_SIZE); /* Init code and data */
114 __init_begin = .;
115 .init.text : {
116 _sinittext = .;
01ba2bdc 117 INIT_TEXT
0f5c9064
SR
118 _einittext = .;
119 }
120 .init.data : {
01ba2bdc 121 INIT_DATA
0f5c9064
SR
122 }
123 . = ALIGN(16);
124 .init.setup : {
125 __setup_start = .;
126 *(.init.setup)
127 __setup_end = .;
128 }
129
130 .initcall.init : {
131 __initcall_start = .;
132 INITCALLS
133 __initcall_end = .;
134 }
135
136 .con_initcall.init : {
137 __con_initcall_start = .;
138 *(.con_initcall.init)
139 __con_initcall_end = .;
140 }
141 SECURITY_INIT
142
143 /* .exit.text is discarded at runtime, not link time, to deal with
144 * references from .rodata
145 */
146 .exit.text : {
01ba2bdc 147 EXIT_TEXT
0f5c9064
SR
148 }
149 .exit.data : {
01ba2bdc 150 EXIT_DATA
0f5c9064 151 }
67d38229 152#if defined(CONFIG_BLK_DEV_INITRD)
0f5c9064
SR
153 . = ALIGN(_PAGE_SIZE);
154 .init.ramfs : {
155 __initramfs_start = .;
156 *(.init.ramfs)
157 __initramfs_end = .;
158 }
67d38229 159#endif
0f5c9064
SR
160 PERCPU(_PAGE_SIZE)
161 . = ALIGN(_PAGE_SIZE);
162 __init_end = .;
163 /* freed after init ends here */
164
165 __bss_start = .; /* BSS */
166 .sbss : {
167 *(.sbss)
168 *(.scommon)
169 }
170 .bss : {
171 *(.bss)
172 *(COMMON)
173 }
174 __bss_stop = .;
175
176 _end = . ;
177
178 /* Sections to be discarded */
179 /DISCARD/ : {
180 *(.exitcall.exit)
181
182 /* ABI crap starts here */
183 *(.MIPS.options)
184 *(.options)
185 *(.pdr)
186 *(.reginfo)
187 }
188
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 }
196
197 /* This is the MIPS specific mdebug section. */
198 .mdebug : {
199 *(.mdebug)
200 }
201
202 STABS_DEBUG
203 DWARF_DEBUG
204
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 }
1da177e4 214}