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
73		. = ALIGN(16);          /* Exception table              */
74		__start___ex_table = .;
75		*(__ex_table)
76		__stop___ex_table = .;
77
78		*(.rodata) *(.rodata.*)
79		*(__vermagic)		/* Kernel version magic */
80		*(__markers_strings)
81		*(.rodata1)
82		*(.rodata.str1.1)
83
84		/* Kernel symbol table: Normal symbols */
85		. = ALIGN(4);
86		__start___ksymtab = .;
87		*(__ksymtab)
88		__stop___ksymtab = .;
89
90		/* Kernel symbol table: GPL-only symbols */
91		__start___ksymtab_gpl = .;
92		*(__ksymtab_gpl)
93		__stop___ksymtab_gpl = .;
94
95		/* Kernel symbol table: Normal unused symbols */
96		__start___ksymtab_unused = .;
97		*(__ksymtab_unused)
98		__stop___ksymtab_unused = .;
99
100		/* Kernel symbol table: GPL-only unused symbols */
101		__start___ksymtab_unused_gpl = .;
102		*(__ksymtab_unused_gpl)
103		__stop___ksymtab_unused_gpl = .;
104
105		/* Kernel symbol table: GPL-future symbols */
106		__start___ksymtab_gpl_future = .;
107		*(__ksymtab_gpl_future)
108		__stop___ksymtab_gpl_future = .;
109
110		/* Kernel symbol table: Normal symbols */
111		__start___kcrctab = .;
112		*(__kcrctab)
113		__stop___kcrctab = .;
114
115		/* Kernel symbol table: GPL-only symbols */
116		__start___kcrctab_gpl = .;
117		*(__kcrctab_gpl)
118		__stop___kcrctab_gpl = .;
119
120		/* Kernel symbol table: Normal unused symbols */
121		__start___kcrctab_unused = .;
122		*(__kcrctab_unused)
123		__stop___kcrctab_unused = .;
124
125		/* Kernel symbol table: GPL-only unused symbols */
126		__start___kcrctab_unused_gpl = .;
127		*(__kcrctab_unused_gpl)
128		__stop___kcrctab_unused_gpl = .;
129
130		/* Kernel symbol table: GPL-future symbols */
131		__start___kcrctab_gpl_future = .;
132		*(__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	.init.text : {
166		. = ALIGN(PAGE_SIZE);
167		__init_begin = .;
168	} > INIT
169	INIT_TEXT_SECTION(PAGE_SIZE) > INIT
170	INIT_DATA_SECTION(16) > INIT
171	.init.data : {
172		. = ALIGN(PAGE_SIZE);
173		__init_end = .;
174	} > INIT
175
176	.bss : {
177		. = ALIGN(4);
178		_sbss = . ;
179		*(.bss)
180		*(COMMON)
181		. = ALIGN(4) ;
182		_ebss = . ;
183	 	_end = . ;
184	} > BSSS
185
186	DISCARDS
187}
188
189