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