Merge git://git.infradead.org/~dedekind/ubi-2.6
[linux-2.6] / arch / sh / kernel / vmlinux_64.lds.S
1 /*
2  * ld script to make SH64 Linux kernel
3  *
4  * Copyright (C) 2000, 2001  Paolo Alberelli
5  *
6  * benedict.gaster@superh.com:   2nd May 2002
7  *    Add definition of empty_zero_page to be the first page of kernel image.
8  *
9  * benedict.gaster@superh.com:   3rd May 2002
10  *    Added support for ramdisk, removing statically linked romfs at the
11  *    same time.
12  *
13  * lethal@linux-sh.org:          9th May 2003
14  *    Kill off GLOBAL_NAME() usage and other CDC-isms.
15  *
16  * lethal@linux-sh.org:         19th May 2003
17  *    Remove support for ancient toolchains.
18  *
19  * This file is subject to the terms and conditions of the GNU General Public
20  * License.  See the file "COPYING" in the main directory of this archive
21  * for more details.
22  */
23 #include <asm/page.h>
24 #include <asm/cache.h>
25 #include <asm/thread_info.h>
26
27 #define LOAD_OFFSET     CONFIG_PAGE_OFFSET
28 #include <asm-generic/vmlinux.lds.h>
29
30 OUTPUT_ARCH(sh:sh5)
31
32 #define C_PHYS(x) AT (ADDR(x) - LOAD_OFFSET)
33
34 ENTRY(__start)
35 SECTIONS
36 {
37         . = CONFIG_PAGE_OFFSET + CONFIG_MEMORY_START + PAGE_SIZE;
38         _text = .;                      /* Text and read-only data */
39
40         .empty_zero_page : C_PHYS(.empty_zero_page) {
41                 *(.empty_zero_page)
42         } = 0
43
44         .text : C_PHYS(.text) {
45                 *(.text.head)
46                 TEXT_TEXT
47                 *(.text64)
48                 *(.text..SHmedia32)
49                 SCHED_TEXT
50                 LOCK_TEXT
51                 KPROBES_TEXT
52                 *(.fixup)
53                 *(.gnu.warning)
54 #ifdef CONFIG_LITTLE_ENDIAN
55         } = 0x6ff0fff0
56 #else
57         } = 0xf0fff06f
58 #endif
59
60         /* We likely want __ex_table to be Cache Line aligned */
61         . = ALIGN(L1_CACHE_BYTES);              /* Exception table */
62         __start___ex_table = .;
63         __ex_table : C_PHYS(__ex_table) { *(__ex_table) }
64         __stop___ex_table = .;
65
66         _etext = .;                     /* End of text section */
67
68         BUG_TABLE
69         NOTES 
70         RO_DATA(PAGE_SIZE)
71
72         . = ALIGN(THREAD_SIZE);
73         .data : C_PHYS(.data) {                 /* Data */
74                 *(.data.init_task)
75
76                 . = ALIGN(L1_CACHE_BYTES);
77                 *(.data.cacheline_aligned)
78
79                 . = ALIGN(L1_CACHE_BYTES);
80                 *(.data.read_mostly)
81
82                 . = ALIGN(PAGE_SIZE);
83                 *(.data.page_aligned)
84
85                 __nosave_begin = .;
86                 *(.data.nosave)
87                 . = ALIGN(PAGE_SIZE);
88                 __nosave_end = .;
89
90                 DATA_DATA
91                 CONSTRUCTORS
92         }
93
94         _edata = .;                     /* End of data section */
95
96         . = ALIGN(PAGE_SIZE);           /* Init code and data */
97         __init_begin = .;
98         _sinittext = .;
99         .init.text : C_PHYS(.init.text) { INIT_TEXT }
100         _einittext = .;
101         .init.data : C_PHYS(.init.data) { INIT_DATA }
102         . = ALIGN(L1_CACHE_BYTES);      /* Better if Cache Line aligned */
103         __setup_start = .;
104         .init.setup : C_PHYS(.init.setup) { *(.init.setup) }
105         __setup_end = .;
106         __initcall_start = .;
107         .initcall.init : C_PHYS(.initcall.init) {
108                 INITCALLS
109         }
110         __initcall_end = .;
111         __con_initcall_start = .;
112         .con_initcall.init : C_PHYS(.con_initcall.init) {
113                 *(.con_initcall.init)
114         }
115         __con_initcall_end = .;
116
117         SECURITY_INIT
118
119 #ifdef CONFIG_BLK_DEV_INITRD
120         . = ALIGN(PAGE_SIZE);
121         __initramfs_start = .;
122         .init.ramfs : C_PHYS(.init.ramfs) { *(.init.ramfs) }
123         __initramfs_end = .;
124 #endif
125
126         . = ALIGN(8);
127         __machvec_start = .;
128         .machvec.init : C_PHYS(.machvec.init) { *(.machvec.init) }
129         __machvec_end = .;
130
131         PERCPU(PAGE_SIZE)
132
133         /*
134          * .exit.text is discarded at runtime, not link time, to deal with
135          * references from __bug_table
136          */
137         .exit.text : C_PHYS(.exit.text) { EXIT_TEXT }
138         .exit.data : C_PHYS(.exit.data) { EXIT_DATA }
139
140         . = ALIGN(PAGE_SIZE);
141         .bss : C_PHYS(.bss) {
142                 __init_end = .;
143                 __bss_start = .;                /* BSS */
144                 *(.bss.page_aligned)
145                 *(.bss)
146                 *(COMMON)
147                 . = ALIGN(4);
148                 _ebss = .;                      /* uClinux MTD sucks */
149                 _end = . ;
150         }
151
152         /*
153          * When something in the kernel is NOT compiled as a module, the
154          * module cleanup code and data are put into these segments. Both
155          * can then be thrown away, as cleanup code is never called unless
156          * it's a module.
157          */
158         /DISCARD/ : {
159                 *(.exitcall.exit)
160         }
161
162         STABS_DEBUG
163         DWARF_DEBUG
164 }