xref: /linux/arch/m68k/kernel/vmlinux-nommu.lds (revision e08d703cc2ab6e47dbd10a74eb029f7dfa93d71d)
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		*(.rodata1)
81		*(.rodata.str1.1)
82
83		/* Kernel symbol table: Normal symbols */
84		. = ALIGN(4);
85		__start___ksymtab = .;
86		*(SORT(___ksymtab+*))
87		__stop___ksymtab = .;
88
89		/* Kernel symbol table: GPL-only symbols */
90		__start___ksymtab_gpl = .;
91		*(SORT(___ksymtab_gpl+*))
92		__stop___ksymtab_gpl = .;
93
94		/* Kernel symbol table: Normal unused symbols */
95		__start___ksymtab_unused = .;
96		*(SORT(___ksymtab_unused+*))
97		__stop___ksymtab_unused = .;
98
99		/* Kernel symbol table: GPL-only unused symbols */
100		__start___ksymtab_unused_gpl = .;
101		*(SORT(___ksymtab_unused_gpl+*))
102		__stop___ksymtab_unused_gpl = .;
103
104		/* Kernel symbol table: GPL-future symbols */
105		__start___ksymtab_gpl_future = .;
106		*(SORT(___ksymtab_gpl_future+*))
107		__stop___ksymtab_gpl_future = .;
108
109		/* Kernel symbol table: Normal symbols */
110		__start___kcrctab = .;
111		*(SORT(___kcrctab+*))
112		__stop___kcrctab = .;
113
114		/* Kernel symbol table: GPL-only symbols */
115		__start___kcrctab_gpl = .;
116		*(SORT(___kcrctab_gpl+*))
117		__stop___kcrctab_gpl = .;
118
119		/* Kernel symbol table: Normal unused symbols */
120		__start___kcrctab_unused = .;
121		*(SORT(___kcrctab_unused+*))
122		__stop___kcrctab_unused = .;
123
124		/* Kernel symbol table: GPL-only unused symbols */
125		__start___kcrctab_unused_gpl = .;
126		*(SORT(___kcrctab_unused_gpl+*))
127		__stop___kcrctab_unused_gpl = .;
128
129		/* Kernel symbol table: GPL-future symbols */
130		__start___kcrctab_gpl_future = .;
131		*(SORT(___kcrctab_gpl_future+*))
132		__stop___kcrctab_gpl_future = .;
133
134		/* Kernel symbol table: strings */
135		*(__ksymtab_strings)
136
137		/* Built-in module parameters */
138		. = ALIGN(4) ;
139		__start___param = .;
140		*(__param)
141		__stop___param = .;
142
143		/* Built-in module versions */
144		. = ALIGN(4) ;
145		__start___modver = .;
146		*(__modver)
147		__stop___modver = .;
148
149		. = ALIGN(4) ;
150		_etext = . ;
151	} > TEXT
152
153	.data DATA_ADDR : {
154		. = ALIGN(4);
155		_sdata = . ;
156		DATA_DATA
157		CACHELINE_ALIGNED_DATA(32)
158		PAGE_ALIGNED_DATA(PAGE_SIZE)
159		*(.data..shared_aligned)
160		INIT_TASK_DATA(THREAD_SIZE)
161		_edata = . ;
162	} > DATA
163
164	.init.text : {
165		. = ALIGN(PAGE_SIZE);
166		__init_begin = .;
167	} > INIT
168	INIT_TEXT_SECTION(PAGE_SIZE) > INIT
169	INIT_DATA_SECTION(16) > INIT
170	.init.data : {
171		. = ALIGN(PAGE_SIZE);
172		__init_end = .;
173	} > INIT
174
175	.bss : {
176		. = ALIGN(4);
177		_sbss = . ;
178		*(.bss)
179		*(COMMON)
180		. = ALIGN(4) ;
181		_ebss = . ;
182	 	_end = . ;
183	} > BSSS
184
185	DISCARDS
186}
187
188