Merge master.kernel.org:/pub/scm/linux/kernel/git/kyle/parisc-2.6
[linux-2.6] / arch / m68knommu / kernel / vmlinux.lds.S
1 /*
2  *      vmlinux.lds.S -- master linker script for m68knommu arch
3  *
4  *      (C) Copyright 2002-2006, Greg Ungerer <gerg@snapgear.com>
5  *
6  *      This linker script is equiped to build either ROM loaded or RAM
7  *      run kernels.
8  */
9
10 #include <linux/config.h>
11 #include <asm-generic/vmlinux.lds.h>
12
13 #if defined(CONFIG_RAMKERNEL)
14 #define RAM_START       CONFIG_KERNELBASE
15 #define RAM_LENGTH      (CONFIG_RAMBASE + CONFIG_RAMSIZE - CONFIG_KERNELBASE)
16 #define TEXT            ram
17 #define DATA            ram
18 #define INIT            ram
19 #define BSS             ram
20 #endif
21 #if defined(CONFIG_ROMKERNEL) || defined(CONFIG_HIMEMKERNEL)
22 #define RAM_START       CONFIG_RAMBASE
23 #define RAM_LENGTH      CONFIG_RAMSIZE
24 #define ROMVEC_START    CONFIG_ROMVEC
25 #define ROMVEC_LENGTH   CONFIG_ROMVECSIZE
26 #define ROM_START       CONFIG_ROMSTART
27 #define ROM_LENGTH      CONFIG_ROMSIZE
28 #define TEXT            rom
29 #define DATA            ram
30 #define INIT            ram
31 #define BSS             ram
32 #endif
33
34 #ifndef DATA_ADDR
35 #define DATA_ADDR
36 #endif
37
38
39 OUTPUT_ARCH(m68k)
40 ENTRY(_start)
41
42 MEMORY {
43         ram     : ORIGIN = RAM_START, LENGTH = RAM_LENGTH
44 #ifdef ROM_START
45         romvec  : ORIGIN = ROMVEC_START, LENGTH = ROMVEC_LENGTH
46         rom     : ORIGIN = ROM_START, LENGTH = ROM_LENGTH
47 #endif
48 }
49
50 jiffies = jiffies_64 + 4;
51
52 SECTIONS {
53
54 #ifdef ROMVEC_START
55         . = ROMVEC_START ;
56         .romvec : {
57                 __rom_start = . ;
58                 _romvec = .;
59                 *(.data.initvect)
60         } > romvec
61 #endif
62
63         .text : {
64                 _stext = . ;
65                 *(.text)
66                 SCHED_TEXT
67                 *(.text.lock)
68
69                 . = ALIGN(16);          /* Exception table              */
70                 __start___ex_table = .;
71                 *(__ex_table)
72                 __stop___ex_table = .;
73
74                 *(.rodata) *(.rodata.*)
75                 *(__vermagic)           /* Kernel version magic */
76                 *(.rodata1)
77                 *(.rodata.str1.1)
78
79                 /* Kernel symbol table: Normal symbols */
80                 . = ALIGN(4);
81                 __start___ksymtab = .;
82                 *(__ksymtab)
83                 __stop___ksymtab = .;
84
85                 /* Kernel symbol table: GPL-only symbols */
86                 __start___ksymtab_gpl = .;
87                 *(__ksymtab_gpl)
88                 __stop___ksymtab_gpl = .;
89
90                 /* Kernel symbol table: GPL-future symbols */
91                 __start___ksymtab_gpl_future = .;
92                 *(__ksymtab_gpl_future)
93                 __stop___ksymtab_gpl_future = .;
94
95                 /* Kernel symbol table: Normal symbols */
96                 __start___kcrctab = .;
97                 *(__kcrctab)
98                 __stop___kcrctab = .;
99
100                 /* Kernel symbol table: GPL-only symbols */
101                 __start___kcrctab_gpl = .;
102                 *(__kcrctab_gpl)
103                 __stop___kcrctab_gpl = .;
104
105                 /* Kernel symbol table: GPL-future symbols */
106                 __start___kcrctab_gpl_future = .;
107                 *(__kcrctab_gpl_future)
108                 __stop___kcrctab_gpl_future = .;
109
110                 /* Kernel symbol table: strings */
111                 *(__ksymtab_strings)
112
113                 /* Built-in module parameters */
114                 . = ALIGN(4) ;
115                 __start___param = .;
116                 *(__param)
117                 __stop___param = .;
118
119                 . = ALIGN(4) ;
120                 _etext = . ;
121         } > TEXT
122
123         .data DATA_ADDR : {
124                 . = ALIGN(4);
125                 _sdata = . ;
126                 *(.data)
127                 . = ALIGN(8192) ;
128                 *(.data.init_task)
129                 _edata = . ;
130         } > DATA
131
132         .init : {
133                 . = ALIGN(4096);
134                 __init_begin = .;
135                 _sinittext = .;
136                 *(.init.text)
137                 _einittext = .;
138                 *(.init.data)
139                 . = ALIGN(16);
140                 __setup_start = .;
141                 *(.init.setup)
142                 __setup_end = .;
143                 __initcall_start = .;
144                 *(.initcall1.init)
145                 *(.initcall2.init)
146                 *(.initcall3.init)
147                 *(.initcall4.init)
148                 *(.initcall5.init)
149                 *(.initcall6.init)
150                 *(.initcall7.init)
151                 __initcall_end = .;
152                 __con_initcall_start = .;
153                 *(.con_initcall.init)
154                 __con_initcall_end = .;
155                 __security_initcall_start = .;
156                 *(.security_initcall.init)
157                 __security_initcall_end = .;
158                 . = ALIGN(4);
159                 __initramfs_start = .;
160                 *(.init.ramfs)
161                 __initramfs_end = .;
162                 . = ALIGN(4096);
163                 __init_end = .;
164         } > INIT
165
166         /DISCARD/ : {
167                 *(.exit.text)
168                 *(.exit.data)
169                 *(.exitcall.exit)
170         }
171
172         .bss : {
173                 . = ALIGN(4);
174                 _sbss = . ;
175                 *(.bss)
176                 *(COMMON)
177                 . = ALIGN(4) ;
178                 _ebss = . ;
179         } > BSS
180
181 }
182