score: Add support for Sunplus S+core architecture
[linux-2.6.git] / arch / score / kernel / vmlinux.lds.S
1 /*
2  * arch/score/kernel/vmlinux.lds.S
3  *
4  * Score Processor version.
5  *
6  * Copyright (C) 2009 Sunplus Core Technology Co., Ltd.
7  *  Chen Liqin <liqin.chen@sunplusct.com>
8  *  Lennox Wu <lennox.wu@sunplusct.com>
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, see the file COPYING, or write
22  * to the Free Software Foundation, Inc.,
23  * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
24  */
25
26 #include <asm-generic/vmlinux.lds.h>
27
28 OUTPUT_ARCH(score)
29 ENTRY(_stext)
30
31 jiffies = jiffies_64;
32
33 SECTIONS
34 {
35         . = CONFIG_MEMORY_START + 0x2000;
36         /* read-only */
37         .text : {
38                 _text = .;      /* Text and read-only data */
39                 TEXT_TEXT
40                 SCHED_TEXT
41                 LOCK_TEXT
42                 KPROBES_TEXT
43                 *(.text.*)
44                 *(.fixup)
45                 . = ALIGN (4) ;
46                 _etext = .;     /* End of text section */
47         }
48
49         . = ALIGN(16);
50         RODATA
51
52         /* Exception table */
53         . = ALIGN(16);
54         __ex_table : {
55                 __start___ex_table = .;
56                 *(__ex_table)
57                 __stop___ex_table = .;
58         }
59
60         /* writeable */
61         .data ALIGN (4096): {
62                 *(.data.init_task)
63
64                 DATA_DATA
65                 CONSTRUCTORS
66         }
67
68         /* We want the small data sections together, so single-instruction offsets
69            can access them all, and initialized data all before uninitialized, so
70            we can shorten the on-disk segment size.  */
71         . = ALIGN(8);
72         .sdata : {
73                 *(.sdata)
74         }
75
76         . = ALIGN(32);
77         .data.cacheline_aligned : {
78                 *(.data.cacheline_aligned)
79         }
80         _edata =  .;                    /* End of data section */
81
82         /* will be freed after init */
83         . = ALIGN(4096);                /* Init code and data */
84         __init_begin = .;
85
86         . = ALIGN(4096);
87         .init.text : {
88                 _sinittext = .;
89                 INIT_TEXT
90                 _einittext = .;
91         }
92         .init.data : {
93                 INIT_DATA
94         }
95         . = ALIGN(16);
96         .init.setup : {
97                 __setup_start = .;
98                 *(.init.setup)
99                 __setup_end = .;
100         }
101
102         .initcall.init : {
103                 __initcall_start = .;
104                 INITCALLS
105                 __initcall_end = .;
106         }
107
108         .con_initcall.init : {
109                 __con_initcall_start = .;
110                 *(.con_initcall.init)
111                 __con_initcall_end = .;
112         }
113         SECURITY_INIT
114
115         /* .exit.text is discarded at runtime, not link time, to deal with
116          * references from .rodata
117          */
118         .exit.text : {
119                 EXIT_TEXT
120         }
121         .exit.data : {
122                 EXIT_DATA
123         }
124 #if defined(CONFIG_BLK_DEV_INITRD)
125         .init.ramfs ALIGN(4096): {
126                 __initramfs_start = .;
127                 *(.init.ramfs)
128                 __initramfs_end = .;
129                 . = ALIGN(4);
130                 LONG(0);
131         }
132 #endif
133         . = ALIGN(4096);
134         __init_end = .;
135         /* freed after init ends here */
136
137         __bss_start = .;        /* BSS */
138         .sbss  : {
139                 *(.sbss)
140                 *(.scommon)
141         }
142         .bss : {
143                 *(.bss)
144                 *(COMMON)
145         }
146         __bss_stop = .;
147         _end = .;
148 }