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 <asm-generic/vmlinux.lds.h>
11
12#if defined(CONFIG_RAMKERNEL)
13#define	RAM_START	CONFIG_KERNELBASE
14#define	RAM_LENGTH	(CONFIG_RAMBASE + CONFIG_RAMSIZE - CONFIG_KERNELBASE)
15#define	TEXT		ram
16#define	DATA		ram
17#define	INIT		ram
18#define	BSS		ram
19#endif
20#if defined(CONFIG_ROMKERNEL) || defined(CONFIG_HIMEMKERNEL)
21#define	RAM_START	CONFIG_RAMBASE
22#define	RAM_LENGTH	CONFIG_RAMSIZE
23#define	ROMVEC_START	CONFIG_ROMVEC
24#define	ROMVEC_LENGTH	CONFIG_ROMVECSIZE
25#define	ROM_START	CONFIG_ROMSTART
26#define	ROM_LENGTH	CONFIG_ROMSIZE
27#define	TEXT		rom
28#define	DATA		ram
29#define	INIT		ram
30#define	BSS		ram
31#endif
32
33#ifndef DATA_ADDR
34#define	DATA_ADDR
35#endif
36
37
38OUTPUT_ARCH(m68k)
39ENTRY(_start)
40
41MEMORY {
42	ram	: ORIGIN = RAM_START, LENGTH = RAM_LENGTH
43#ifdef ROM_START
44	romvec	: ORIGIN = ROMVEC_START, LENGTH = ROMVEC_LENGTH
45	rom	: ORIGIN = ROM_START, LENGTH = ROM_LENGTH
46#endif
47}
48
49jiffies = jiffies_64 + 4;
50
51SECTIONS {
52
53#ifdef ROMVEC_START
54	. = ROMVEC_START ;
55	.romvec : {
56		__rom_start = . ;
57		_romvec = .;
58		*(.data.initvect)
59	} > romvec
60#endif
61
62	.text : {
63		_text = .;
64		_stext = . ;
65		TEXT_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: Normal unused symbols */
91		__start___ksymtab_unused = .;
92		*(__ksymtab_unused)
93		__stop___ksymtab_unused = .;
94
95		/* Kernel symbol table: GPL-only unused symbols */
96		__start___ksymtab_unused_gpl = .;
97		*(__ksymtab_unused_gpl)
98		__stop___ksymtab_unused_gpl = .;
99
100		/* Kernel symbol table: GPL-future symbols */
101		__start___ksymtab_gpl_future = .;
102		*(__ksymtab_gpl_future)
103		__stop___ksymtab_gpl_future = .;
104
105		/* Kernel symbol table: Normal symbols */
106		__start___kcrctab = .;
107		*(__kcrctab)
108		__stop___kcrctab = .;
109
110		/* Kernel symbol table: GPL-only symbols */
111		__start___kcrctab_gpl = .;
112		*(__kcrctab_gpl)
113		__stop___kcrctab_gpl = .;
114
115		/* Kernel symbol table: GPL-future symbols */
116		__start___kcrctab_gpl_future = .;
117		*(__kcrctab_gpl_future)
118		__stop___kcrctab_gpl_future = .;
119
120		/* Kernel symbol table: strings */
121		*(__ksymtab_strings)
122
123		/* Built-in module parameters */
124		. = ALIGN(4) ;
125		__start___param = .;
126		*(__param)
127		__stop___param = .;
128
129		. = ALIGN(4) ;
130		_etext = . ;
131	} > TEXT
132
133	.data DATA_ADDR : {
134		. = ALIGN(4);
135		_sdata = . ;
136		DATA_DATA
137		. = ALIGN(8192) ;
138		*(.data.init_task)
139		_edata = . ;
140	} > DATA
141
142	.init : {
143		. = ALIGN(4096);
144		__init_begin = .;
145		_sinittext = .;
146		*(.init.text)
147		_einittext = .;
148		*(.init.data)
149		. = ALIGN(16);
150		__setup_start = .;
151		*(.init.setup)
152		__setup_end = .;
153		__initcall_start = .;
154		INITCALLS
155		__initcall_end = .;
156		__con_initcall_start = .;
157		*(.con_initcall.init)
158		__con_initcall_end = .;
159		__security_initcall_start = .;
160		*(.security_initcall.init)
161		__security_initcall_end = .;
162#ifdef CONFIG_BLK_DEV_INITRD
163		. = ALIGN(4);
164		__initramfs_start = .;
165		*(.init.ramfs)
166		__initramfs_end = .;
167#endif
168		. = ALIGN(4096);
169		__init_end = .;
170	} > INIT
171
172	/DISCARD/ : {
173		*(.exit.text)
174		*(.exit.data)
175		*(.exitcall.exit)
176	}
177
178	.bss : {
179		. = ALIGN(4);
180		_sbss = . ;
181		*(.bss)
182		*(COMMON)
183		. = ALIGN(4) ;
184		_ebss = . ;
185	} > BSS
186
187}
188