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 equipped to build either ROM loaded or RAM
7 *	run kernels.
8 */
9
10#include <asm-generic/vmlinux.lds.h>
11#include <asm/page.h>
12#include <asm/thread_info.h>
13
14#if defined(CONFIG_RAMKERNEL)
15#define	RAM_START	CONFIG_KERNELBASE
16#define	RAM_LENGTH	(CONFIG_RAMBASE + CONFIG_RAMSIZE - CONFIG_KERNELBASE)
17#define	TEXT		ram
18#define	DATA		ram
19#define	INIT		ram
20#define	BSSS		ram
21#endif
22#if defined(CONFIG_ROMKERNEL) || defined(CONFIG_HIMEMKERNEL)
23#define	RAM_START	CONFIG_RAMBASE
24#define	RAM_LENGTH	CONFIG_RAMSIZE
25#define	ROMVEC_START	CONFIG_ROMVEC
26#define	ROMVEC_LENGTH	CONFIG_ROMVECSIZE
27#define	ROM_START	CONFIG_ROMSTART
28#define	ROM_LENGTH	CONFIG_ROMSIZE
29#define	TEXT		rom
30#define	DATA		ram
31#define	INIT		ram
32#define	BSSS		ram
33#endif
34
35#ifndef DATA_ADDR
36#define	DATA_ADDR
37#endif
38
39
40OUTPUT_ARCH(m68k)
41ENTRY(_start)
42
43MEMORY {
44	ram	: ORIGIN = RAM_START, LENGTH = RAM_LENGTH
45#ifdef ROM_START
46	romvec	: ORIGIN = ROMVEC_START, LENGTH = ROMVEC_LENGTH
47	rom	: ORIGIN = ROM_START, LENGTH = ROM_LENGTH
48#endif
49}
50
51jiffies = jiffies_64 + 4;
52
53SECTIONS {
54
55#ifdef ROMVEC_START
56	. = ROMVEC_START ;
57	.romvec : {
58		__rom_start = . ;
59		_romvec = .;
60		*(.data..initvect)
61	} > romvec
62#endif
63
64	.text : {
65		_text = .;
66		_stext = . ;
67		HEAD_TEXT
68		TEXT_TEXT
69		SCHED_TEXT
70		LOCK_TEXT
71		*(.text..lock)
72		*(.fixup)
73
74		. = ALIGN(16);          /* Exception table              */
75		__start___ex_table = .;
76		*(__ex_table)
77		__stop___ex_table = .;
78
79		*(.rodata) *(.rodata.*)
80		*(__vermagic)		/* Kernel version magic */
81		*(.rodata1)
82		*(.rodata.str1.1)
83
84		/* Kernel symbol table: Normal symbols */
85		. = ALIGN(4);
86		__start___ksymtab = .;
87		*(SORT(___ksymtab+*))
88		__stop___ksymtab = .;
89
90		/* Kernel symbol table: GPL-only symbols */
91		__start___ksymtab_gpl = .;
92		*(SORT(___ksymtab_gpl+*))
93		__stop___ksymtab_gpl = .;
94
95		/* Kernel symbol table: Normal unused symbols */
96		__start___ksymtab_unused = .;
97		*(SORT(___ksymtab_unused+*))
98		__stop___ksymtab_unused = .;
99
100		/* Kernel symbol table: GPL-only unused symbols */
101		__start___ksymtab_unused_gpl = .;
102		*(SORT(___ksymtab_unused_gpl+*))
103		__stop___ksymtab_unused_gpl = .;
104
105		/* Kernel symbol table: GPL-future symbols */
106		__start___ksymtab_gpl_future = .;
107		*(SORT(___ksymtab_gpl_future+*))
108		__stop___ksymtab_gpl_future = .;
109
110		/* Kernel symbol table: Normal symbols */
111		__start___kcrctab = .;
112		*(SORT(___kcrctab+*))
113		__stop___kcrctab = .;
114
115		/* Kernel symbol table: GPL-only symbols */
116		__start___kcrctab_gpl = .;
117		*(SORT(___kcrctab_gpl+*))
118		__stop___kcrctab_gpl = .;
119
120		/* Kernel symbol table: Normal unused symbols */
121		__start___kcrctab_unused = .;
122		*(SORT(___kcrctab_unused+*))
123		__stop___kcrctab_unused = .;
124
125		/* Kernel symbol table: GPL-only unused symbols */
126		__start___kcrctab_unused_gpl = .;
127		*(SORT(___kcrctab_unused_gpl+*))
128		__stop___kcrctab_unused_gpl = .;
129
130		/* Kernel symbol table: GPL-future symbols */
131		__start___kcrctab_gpl_future = .;
132		*(SORT(___kcrctab_gpl_future+*))
133		__stop___kcrctab_gpl_future = .;
134
135		/* Kernel symbol table: strings */
136		*(__ksymtab_strings)
137
138		/* Built-in module parameters */
139		. = ALIGN(4) ;
140		__start___param = .;
141		*(__param)
142		__stop___param = .;
143
144		/* Built-in module versions */
145		. = ALIGN(4) ;
146		__start___modver = .;
147		*(__modver)
148		__stop___modver = .;
149
150		. = ALIGN(4) ;
151		_etext = . ;
152	} > TEXT
153
154	.data DATA_ADDR : {
155		. = ALIGN(4);
156		_sdata = . ;
157		DATA_DATA
158		CACHELINE_ALIGNED_DATA(32)
159		PAGE_ALIGNED_DATA(PAGE_SIZE)
160		*(.data..shared_aligned)
161		INIT_TASK_DATA(THREAD_SIZE)
162		_edata = . ;
163	} > DATA
164
165	.m68k_fixup : {
166		__start_fixup = .;
167		*(.m68k_fixup)
168		__stop_fixup = .;
169	} > DATA
170	NOTES > DATA
171
172	.init.text : {
173		. = ALIGN(PAGE_SIZE);
174		__init_begin = .;
175	} > INIT
176	INIT_TEXT_SECTION(PAGE_SIZE) > INIT
177	INIT_DATA_SECTION(16) > INIT
178	.init.data : {
179		. = ALIGN(PAGE_SIZE);
180		__init_end = .;
181	} > INIT
182
183	.bss : {
184		. = ALIGN(4);
185		_sbss = . ;
186		*(.bss)
187		*(COMMON)
188		. = ALIGN(4) ;
189		_ebss = . ;
190	 	_end = . ;
191	} > BSSS
192
193	DISCARDS
194}
195
196