Merge git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild-fixes
[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_CPU_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         NOTES 
69         RO_DATA(PAGE_SIZE)
70
71         . = ALIGN(THREAD_SIZE);
72         .data : C_PHYS(.data) {                 /* Data */
73                 *(.data.init_task)
74
75                 . = ALIGN(L1_CACHE_BYTES);
76                 *(.data.cacheline_aligned)
77
78                 . = ALIGN(L1_CACHE_BYTES);
79                 *(.data.read_mostly)
80
81                 . = ALIGN(PAGE_SIZE);
82                 *(.data.page_aligned)
83
84                 __nosave_begin = .;
85                 *(.data.nosave)
86                 . = ALIGN(PAGE_SIZE);
87                 __nosave_end = .;
88
89                 DATA_DATA
90                 CONSTRUCTORS
91         }
92
93         _edata = .;                     /* End of data section */
94
95         . = ALIGN(PAGE_SIZE);           /* Init code and data */
96         __init_begin = .;
97         _sinittext = .;
98         .init.text : C_PHYS(.init.text) { INIT_TEXT }
99         _einittext = .;
100         .init.data : C_PHYS(.init.data) { INIT_DATA }
101         . = ALIGN(L1_CACHE_BYTES);      /* Better if Cache Line aligned */
102         __setup_start = .;
103         .init.setup : C_PHYS(.init.setup) { *(.init.setup) }
104         __setup_end = .;
105         __initcall_start = .;
106         .initcall.init : C_PHYS(.initcall.init) {
107                 INITCALLS
108         }
109         __initcall_end = .;
110         __con_initcall_start = .;
111         .con_initcall.init : C_PHYS(.con_initcall.init) {
112                 *(.con_initcall.init)
113         }
114         __con_initcall_end = .;
115
116         SECURITY_INIT
117
118 #ifdef CONFIG_BLK_DEV_INITRD
119         . = ALIGN(PAGE_SIZE);
120         __initramfs_start = .;
121         .init.ramfs : C_PHYS(.init.ramfs) { *(.init.ramfs) }
122         __initramfs_end = .;
123 #endif
124
125         . = ALIGN(8);
126         __machvec_start = .;
127         .machvec.init : C_PHYS(.machvec.init) { *(.machvec.init) }
128         __machvec_end = .;
129
130         PERCPU(PAGE_SIZE)
131
132         /*
133          * .exit.text is discarded at runtime, not link time, to deal with
134          * references from __bug_table
135          */
136         .exit.text : C_PHYS(.exit.text) { EXIT_TEXT }
137         .exit.data : C_PHYS(.exit.data) { EXIT_DATA }
138
139         . = ALIGN(PAGE_SIZE);
140         .bss : C_PHYS(.bss) {
141                 __init_end = .;
142                 __bss_start = .;                /* BSS */
143                 *(.bss.page_aligned)
144                 *(.bss)
145                 *(COMMON)
146                 . = ALIGN(4);
147                 _ebss = .;                      /* uClinux MTD sucks */
148                 _end = . ;
149         }
150
151         /*
152          * When something in the kernel is NOT compiled as a module, the
153          * module cleanup code and data are put into these segments. Both
154          * can then be thrown away, as cleanup code is never called unless
155          * it's a module.
156          */
157         /DISCARD/ : {
158                 *(.exitcall.exit)
159         }
160
161         STABS_DEBUG
162         DWARF_DEBUG
163 }