[MIPS] IP27: Fix slice logic to work for arbitrary number of slices.
[linux-2.6] / arch / mips / kernel / vmlinux.lds.S
1 #include <asm/asm-offsets.h>
2 #include <asm-generic/vmlinux.lds.h>
3
4 #undef mips
5 #define mips mips
6 OUTPUT_ARCH(mips)
7 ENTRY(kernel_entry)
8 PHDRS {
9         text PT_LOAD FLAGS(7);  /* RWX */
10         note PT_NOTE FLAGS(4);  /* R__ */
11 }
12 jiffies = JIFFIES;
13
14 SECTIONS
15 {
16 #ifdef CONFIG_BOOT_ELF64
17         /* Read-only sections, merged into text segment: */
18         /* . = 0xc000000000000000; */
19
20         /* This is the value for an Origin kernel, taken from an IRIX kernel.  */
21         /* . = 0xc00000000001c000; */
22
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          */
27
28         /* . = 0xa800000000300000; */
29         . = 0xffffffff80300000;
30 #endif
31         . = LOADADDR;
32         /* read-only */
33         _text = .;      /* Text and read-only data */
34         .text : {
35                 TEXT_TEXT
36                 SCHED_TEXT
37                 LOCK_TEXT
38                 KPROBES_TEXT
39                 *(.fixup)
40                 *(.gnu.warning)
41         } :text = 0
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         }
58
59         NOTES :text :note
60         .dummy : { *(.dummy) } :text
61
62         RODATA
63
64         /* writeable */
65         .data : {       /* Data */
66           . = . + DATAOFFSET;           /* for CONFIG_MAPPED_KERNEL */
67           /*
68            * This ALIGN is needed as a workaround for a bug a gcc bug upto 4.1 which
69            * limits the maximum alignment to at most 32kB and results in the following
70            * warning:
71            *
72            *  CC      arch/mips/kernel/init_task.o
73            * arch/mips/kernel/init_task.c:30: warning: alignment of ‘init_thread_union’
74            * is greater than maximum object file alignment.  Using 32768
75            */
76           . = ALIGN(_PAGE_SIZE);
77           *(.data.init_task)
78
79           DATA_DATA
80           CONSTRUCTORS
81         }
82         _gp = . + 0x8000;
83         .lit8 : {
84                 *(.lit8)
85         }
86         .lit4 : {
87                 *(.lit4)
88         }
89         /* We want the small data sections together, so single-instruction offsets
90            can access them all, and initialized data all before uninitialized, so
91            we can shorten the on-disk segment size.  */
92         .sdata : {
93                 *(.sdata)
94         }
95
96         . = ALIGN(_PAGE_SIZE);
97         .data_nosave : {
98                 __nosave_begin = .;
99                 *(.data.nosave)
100         }
101         . = ALIGN(_PAGE_SIZE);
102         __nosave_end = .;
103
104         . = ALIGN(32);
105         .data.cacheline_aligned : {
106                 *(.data.cacheline_aligned)
107         }
108         _edata =  .;                    /* End of data section */
109
110         /* will be freed after init */
111         . = ALIGN(_PAGE_SIZE);          /* Init code and data */
112         __init_begin = .;
113         .init.text : {
114                 _sinittext = .;
115                 *(.init.text)
116                 _einittext = .;
117         }
118         .init.data : {
119                 *(.init.data)
120         }
121         . = ALIGN(16);
122         .init.setup : {
123                 __setup_start = .;
124                 *(.init.setup)
125                 __setup_end = .;
126         }
127
128         .initcall.init : {
129                 __initcall_start = .;
130                 INITCALLS
131                 __initcall_end = .;
132         }
133
134         .con_initcall.init : {
135                 __con_initcall_start = .;
136                 *(.con_initcall.init)
137                 __con_initcall_end = .;
138         }
139         SECURITY_INIT
140
141         /* .exit.text is discarded at runtime, not link time, to deal with
142          * references from .rodata
143          */
144         .exit.text : {
145                 *(.exit.text)
146         }
147         .exit.data : {
148                 *(.exit.data)
149         }
150 #if defined(CONFIG_BLK_DEV_INITRD)
151         . = ALIGN(_PAGE_SIZE);
152         .init.ramfs : {
153                 __initramfs_start = .;
154                 *(.init.ramfs)
155                 __initramfs_end = .;
156         }
157 #endif
158         PERCPU(_PAGE_SIZE)
159         . = ALIGN(_PAGE_SIZE);
160         __init_end = .;
161         /* freed after init ends here */
162
163         __bss_start = .;        /* BSS */
164         .sbss  : {
165                 *(.sbss)
166                 *(.scommon)
167         }
168         .bss : {
169                 *(.bss)
170                 *(COMMON)
171         }
172         __bss_stop = .;
173
174         _end = . ;
175
176         /* Sections to be discarded */
177         /DISCARD/ : {
178                 *(.exitcall.exit)
179
180                 /* ABI crap starts here */
181                 *(.MIPS.options)
182                 *(.options)
183                 *(.pdr)
184                 *(.reginfo)
185         }
186
187         /* These mark the ABI of the kernel for debuggers.  */
188         .mdebug.abi32 : {
189                 KEEP(*(.mdebug.abi32))
190         }
191         .mdebug.abi64 : {
192                 KEEP(*(.mdebug.abi64))
193         }
194
195         /* This is the MIPS specific mdebug section.  */
196         .mdebug : {
197                 *(.mdebug)
198         }
199
200         STABS_DEBUG
201         DWARF_DEBUG
202
203         /* These must appear regardless of  .  */
204         .gptab.sdata : {
205                 *(.gptab.data)
206                 *(.gptab.sdata)
207         }
208         .gptab.sbss : {
209                 *(.gptab.bss)
210                 *(.gptab.sbss)
211         }
212 }