1#---------------------------------------------------------------------------
2#  Project:  NitroSDK - tools - makelcf
3#  File:     ARM7-TS.lcf.template
4#
5#  Copyright 2003-2008 Nintendo. All rights reserved.
6#
7#  These coded instructions, statements, and computer programs contain
8#  proprietary information of Nintendo of America Inc. and/or Nintendo
9#  Company Ltd., and are protected by Federal copyright law.  They may
10#  not be disclosed to third parties or copied or duplicated in any form,
11#  in whole or in part, without the prior written consent of Nintendo.
12#
13#  $Log: ARM7-TS.lcf.template,v $
14#  Revision 1.24  2006/05/10 03:19:47  yasu
15#  Added support for the CodeWarrior 2.x overlay expansion
16#
17#  Revision 1.23  2006/04/07 04:45:14  kitase_hirotake
18#  Added .wram.bss
19#
20#  Revision 1.22  2006/03/30 00:43:20  yasu
21#  Updated copyright year
22#
23#  Revision 1.21  2006/03/29 13:19:14  yasu
24#  NUMBER_OVERLAYS revised to NUMBER.OVERLAYS
25#
26#  Revision 1.20  2005/09/02 04:14:22  yasu
27#  Old symbols were redefined so they can be used even under SDK2.2
28#
29#  Revision 1.19  2005/08/31 09:34:57  yasu
30#  Corrected a problem where code would not function normally when using section names such as section_BSS
31#
32#  Revision 1.18  2005/06/20 12:29:20  yasu
33#  Changed Surffix to Suffix
34#
35#  Revision 1.17  2005/06/14 09:03:42  yada
36#  Fix specific to negative value of SDK_STACKSIZE
37#
38#  Revision 1.16  2005/04/14 00:04:17  terui
39#  Updated copyright.
40#
41#  Revision 1.15  2005/04/13 12:52:50  terui
42#  Changed SDK_AUTOLOAD.MAIN.START 0x027c0000 to 0x027e0000
43#
44#  Revision 1.14  2004/09/08 01:27:18  yasu
45#  Added * (.wram) on static segment
46#
47#  Revision 1.13  2004/08/18 01:50:40  yasu
48#  Support for SDK_SUBPRIV_ARENA_LO
49#
50#  Revision 1.12  2004/08/02 10:38:53  yasu
51#  Added autoload-done callback address in overlaydefs
52#
53#  Revision 1.11  2004/07/26 00:08:27  yasu
54#  Fixed label of exception table
55#
56#  Revision 1.10  2004/07/24 05:42:25  yasu
57#  Set default values for SDK_AUTOGEN_xTCM_START
58#
59#  Revision 1.9  2004/07/23 11:32:14  yasu
60#  Defined labels for __exception_table_start__ and _end__
61#
62#  Revision 1.8  2004/07/12 12:24:12  yasu
63#  Fixed checking WRAM
64#
65#  Revision 1.7  2004/07/10 04:10:26  yasu
66#  Added support for command 'Library'
67#
68#  Revision 1.6  2004/07/02 08:13:02  yasu
69#  Added support for OBJECT()
70#
71#  Revision 1.5  2004/07/01 12:54:38  yasu
72#  Added support for ITCM/DTCM/WRAM autoload
73#
74#  Revision 1.4  2004/07/01 10:41:46  yasu
75#  Added support for autoload
76#
77#  Revision 1.3  2004/05/28 02:11:15  yasu
78#  Set WRAM arena region correctly
79#
80#  Revision 1.2  2004/04/26 12:17:49  yasu
81#  Added KEEP_SECTIONS
82#
83#  Revision 1.1  2004/04/06 01:59:54  yasu
84#  Newly added
85#
86#  $NoKeywords: $
87#---------------------------------------------------------------------------
88MEMORY
89{
90	<STATIC.NAME>           (RWX) : ORIGIN = <STATIC.ADDRESS>,   LENGTH = 0x0 >  <STATIC.NAME><PROPERTY.SUFFIX>
91	<FOREACH.AUTOLOADS>
92	<AUTOLOAD.NAME>         (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.SUFFIX>
93	<END.AUTOLOADS>
94	binary.AUTOLOAD_INFO		(RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.SUFFIX>
95
96	<PROPERTY.OVERLAYDEFS>	(RW)  : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>
97	<PROPERTY.OVERLAYTABLE>	(RW)  : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>
98	<FOREACH.OVERLAYS>
99	<OVERLAY.NAME>          (RWXO): ORIGIN = <OVERLAY.ADDRESS>, LENGTH = 0x0 > <OVERLAY.NAME><PROPERTY.SUFFIX>
100	<END.OVERLAYS>
101	arena.MAIN                 (RW)  : ORIGIN = AFTER(<STATIC.NAME><FOREACH.OVERLAYS>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
102	check.WORKRAM		(RWX) : ORIGIN = 0x037f8000, LENGTH = 0x18000 > workram.check
103	check.MAIN			(RWX) : ORIGIN = 0x027e0000, LENGTH = 0x1c000 > main.check
104}
105
106SECTIONS
107{
108	############################ STATIC #################################
109	.<STATIC.NAME>:
110	{
111	ALIGNALL(4);			. = ALIGN(4);	# Fit to cache line
112					<IF.NITRO_LCFSPEC.GE.2>
113					<FOREACH.STATIC.SEARCHSYMBOLS>
114					SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
115					<END.STATIC.SEARCHSYMBOLS>
116					<ENDIF>
117	#
118	#  TEXT BLOCK: READ ONLY
119	#
120	SDK_STATIC_START		=.;
121	SDK_STATIC_TEXT_START		=.;
122					#:::::::::: text/rodata
123					OBJECT(_start,*)
124					crt0.o (.text)
125					<FOREACH.STATIC.FORCES>
126					FORCE_OBJECT<STATIC.FORCE>
127					<END.STATIC.FORCES>
128					<FOREACH.STATIC.OBJECTS=.text>
129					<STATIC.OBJECT=.text:t>
130					<END.STATIC.OBJECTS>
131					<FOREACH.STATIC.LIBRARIES=.text>
132					<STATIC.LIBRARY=.text:t>
133					<END.STATIC.LIBRARIES>
134					. = ALIGN(4);
135					* (.exception)
136					. = ALIGN(4);
137	SDK_STATIC_ETABLE_START		=.;
138					EXCEPTION
139	SDK_STATIC_ETABLE_END		=.;
140					. = ALIGN(4);
141					<FOREACH.STATIC.OBJECTS=.init>
142					<STATIC.OBJECT=.init:t>
143					<END.STATIC.OBJECTS>
144					<FOREACH.STATIC.LIBRARIES=.init>
145					<STATIC.LIBRARY=.init:t>
146					<END.STATIC.LIBRARIES>
147					. = ALIGN(4);
148					<FOREACH.STATIC.OBJECTS=.rodata>
149					<STATIC.OBJECT=.rodata:t>
150					<END.STATIC.OBJECTS>
151					<FOREACH.STATIC.LIBRARIES=.rodata>
152					<STATIC.LIBRARY=.rodata:t>
153					<END.STATIC.LIBRARIES>
154					. = ALIGN(4);
155
156	SDK_STATIC_SINIT_START		=.;
157					#:::::::::: ctor
158					<FOREACH.STATIC.OBJECTS=.ctor>
159					<STATIC.OBJECT=.ctor:t>
160					<END.STATIC.OBJECTS>
161					<FOREACH.STATIC.LIBRARIES=.ctor>
162					<STATIC.LIBRARY=.ctor:t>
163					<END.STATIC.LIBRARIES>
164					WRITEW	0;
165					#:::::::::: ctor
166	SDK_STATIC_SINIT_END		=.;
167
168					#:::::::::: text/rodata
169					. = ALIGN(4);
170	SDK_STATIC_TEXT_END		=.;
171
172	#
173	#  DATA BLOCK: READ WRITE
174	#
175	SDK_STATIC_DATA_START		=.;
176					#:::::::::: data
177					<FOREACH.STATIC.OBJECTS=.wram>
178					<STATIC.OBJECT=.wram:t>
179					<END.STATIC.OBJECTS>
180					<FOREACH.STATIC.LIBRARIES=.wram>
181					<STATIC.LIBRARY=.wram:t>
182					<END.STATIC.LIBRARIES>
183					. = ALIGN(4);
184					<FOREACH.STATIC.OBJECTS=.main>
185					<STATIC.OBJECT=.main:t>
186					<END.STATIC.OBJECTS>
187					<FOREACH.STATIC.LIBRARIES=.main>
188					<STATIC.LIBRARY=.main:t>
189					<END.STATIC.LIBRARIES>
190					. = ALIGN(4);
191					<FOREACH.STATIC.OBJECTS=.sdata>
192					<STATIC.OBJECT=.sdata:t>
193					<END.STATIC.OBJECTS>
194					<FOREACH.STATIC.LIBRARIES=.sdata>
195					<STATIC.LIBRARY=.sdata:t>
196					<END.STATIC.LIBRARIES>
197					. = ALIGN(4);
198					<FOREACH.STATIC.OBJECTS=.data>
199					<STATIC.OBJECT=.data:t>
200					<END.STATIC.OBJECTS>
201					<FOREACH.STATIC.LIBRARIES=.data>
202					<STATIC.LIBRARY=.data:t>
203					<END.STATIC.LIBRARIES>
204					. = ALIGN(4);
205					#:::::::::: data
206					. = ALIGN(4);
207	SDK_STATIC_DATA_END		=.;
208	SDK_STATIC_END			=.;
209
210	SDK_STATIC_TEXT_SIZE		= SDK_STATIC_TEXT_END - SDK_STATIC_TEXT_START;
211	SDK_STATIC_DATA_SIZE		= SDK_STATIC_DATA_END - SDK_STATIC_DATA_START;
212	SDK_STATIC_SIZE			= SDK_STATIC_END      - SDK_STATIC_START;
213	__sinit__			= SDK_STATIC_SINIT_START;	# for static initializer
214	__exception_table_start__	= SDK_STATIC_ETABLE_START;	# for exception table
215	__exception_table_end__		= SDK_STATIC_ETABLE_END;	# for exception table
216	} > <STATIC.NAME>
217
218	.<STATIC.NAME>.bss:
219	{
220	ALIGNALL(4);			. = ALIGN(4);
221					<IF.NITRO_LCFSPEC.GE.2>
222					<FOREACH.STATIC.SEARCHSYMBOLS>
223					SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
224					<END.STATIC.SEARCHSYMBOLS>
225					<ENDIF>
226	#
227	#  BSS BLOCK
228	#
229	SDK_STATIC_BSS_START		=.;
230					#:::::::::: bss
231					<FOREACH.STATIC.OBJECTS=.sbss>
232					<STATIC.OBJECT=.sbss:t>
233					<END.STATIC.OBJECTS>
234					<FOREACH.STATIC.LIBRARIES=.sbss>
235					<STATIC.LIBRARY=.sbss:t>
236					<END.STATIC.LIBRARIES>
237					. = ALIGN(4);
238					<FOREACH.STATIC.OBJECTS=.bss>
239					<STATIC.OBJECT=.bss:t>
240					<END.STATIC.OBJECTS>
241					<FOREACH.STATIC.LIBRARIES=.bss>
242					<STATIC.LIBRARY=.bss:t>
243					<END.STATIC.LIBRARIES>
244					. = ALIGN(4);
245					#:::::::::: bss
246					. = ALIGN(4);
247	SDK_STATIC_BSS_END		= .;
248	SDK_STATIC_BSS_SIZE		= SDK_STATIC_BSS_END - SDK_STATIC_BSS_START;
249
250	} >> <STATIC.NAME>
251
252
253	############################ AUTOLOADS ##############################
254	SDK_AUTOLOAD.MAIN.START			= 0x027e0000;
255	SDK_AUTOLOAD.MAIN.END			= SDK_AUTOLOAD.MAIN.START;
256	SDK_AUTOLOAD.MAIN.BSS_END		= SDK_AUTOLOAD.MAIN.START;
257	SDK_AUTOLOAD.MAIN.SIZE			= 0;
258	SDK_AUTOLOAD.MAIN.BSS_SIZE		= 0;
259	SDK_AUTOLOAD.WRAM.START			= 0x037f8000;
260	SDK_AUTOLOAD.WRAM.END			= SDK_AUTOLOAD.WRAM.START;
261	SDK_AUTOLOAD.WRAM.BSS_END		= SDK_AUTOLOAD.WRAM.START;
262	SDK_AUTOLOAD.WRAM.SIZE			= 0;
263	SDK_AUTOLOAD.WRAM.BSS_SIZE		= 0;
264	SDK_AUTOLOAD_START			= SDK_STATIC_END;
265	SDK_AUTOLOAD_SIZE			= 0;
266	SDK_AUTOLOAD_NUMBER			= <NUMBER.AUTOLOADS>;
267
268<FOREACH.AUTOLOADS>
269	.<AUTOLOAD.NAME>:
270	{
271	ALIGNALL(4);				. = ALIGN(4);
272						<IF.NITRO_LCFSPEC.GE.2>
273						<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
274						SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
275						<END.AUTOLOAD.SEARCHSYMBOLS>
276						<ENDIF>
277	#
278	#   TEXT BLOCK: READ ONLY
279	#
280	SDK_AUTOLOAD_<AUTOLOAD.NAME>_ID		=<AUTOLOAD.ID>;
281	SDK_AUTOLOAD.<AUTOLOAD.NAME>.ID		=<AUTOLOAD.ID>;
282	SDK_AUTOLOAD.<AUTOLOAD.NAME>.START	=.;
283	SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START	=.;
284						#:::::::::: text/rodata
285						<FOREACH.AUTOLOAD.FORCES>
286						FORCE_OBJECT<AUTOLOAD.FORCE>
287						<END.AUTOLOAD.FORCES>
288						<FOREACH.AUTOLOAD.OBJECTS=.text>
289						<AUTOLOAD.OBJECT=.text:t>
290						<END.AUTOLOAD.OBJECTS>
291						<FOREACH.AUTOLOAD.LIBRARIES=.text>
292						<AUTOLOAD.LIBRARY=.text:t>
293						<END.AUTOLOAD.LIBRARIES>
294						. = ALIGN(4);
295						<FOREACH.AUTOLOAD.OBJECTS=.rodata>
296						<AUTOLOAD.OBJECT=.rodata:t>
297						<END.AUTOLOAD.OBJECTS>
298						<FOREACH.AUTOLOAD.LIBRARIES=.rodata>
299						<AUTOLOAD.LIBRARY=.rodata:t>
300						<END.AUTOLOAD.LIBRARIES>
301						. = ALIGN(4);
302						#:::::::::: text/rodata
303	SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END	=.;
304
305	#
306	#  DATA BLOCK: READ WRITE BLOCK
307	#
308	SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START	=.;
309						#:::::::::: data
310						<FOREACH.AUTOLOAD.OBJECTS=.wram>
311						<AUTOLOAD.OBJECT=.wram:t>
312						<END.AUTOLOAD.OBJECTS>
313						<FOREACH.AUTOLOAD.LIBRARIES=.wram>
314						<AUTOLOAD.LIBRARY=.wram:t>
315						<END.AUTOLOAD.LIBRARIES>
316						. = ALIGN(4);
317						<FOREACH.AUTOLOAD.OBJECTS=.main>
318						<AUTOLOAD.OBJECT=.main:t>
319						<END.AUTOLOAD.OBJECTS>
320						<FOREACH.AUTOLOAD.LIBRARIES=.main>
321						<AUTOLOAD.LIBRARY=.main:t>
322						<END.AUTOLOAD.LIBRARIES>
323						. = ALIGN(4);
324						<FOREACH.AUTOLOAD.OBJECTS=.sdata>
325						<AUTOLOAD.OBJECT=.sdata:t>
326						<END.AUTOLOAD.OBJECTS>
327						<FOREACH.AUTOLOAD.LIBRARIES=.sdata>
328						<AUTOLOAD.LIBRARY=.sdata:t>
329						<END.AUTOLOAD.LIBRARIES>
330						. = ALIGN(4);
331						<FOREACH.AUTOLOAD.OBJECTS=.data>
332						<AUTOLOAD.OBJECT=.data:t>
333						<END.AUTOLOAD.OBJECTS>
334						<FOREACH.AUTOLOAD.LIBRARIES=.data>
335						<AUTOLOAD.LIBRARY=.data:t>
336						<END.AUTOLOAD.LIBRARIES>
337						. = ALIGN(4);
338						#:::::::::: data
339	SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END	=.;
340	SDK_AUTOLOAD.<AUTOLOAD.NAME>.END	=.;
341
342	SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_SIZE	= SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START;
343	SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_SIZE	= SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START;
344	SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE	= SDK_AUTOLOAD.<AUTOLOAD.NAME>.END      - SDK_AUTOLOAD.<AUTOLOAD.NAME>.START;
345	SDK_AUTOLOAD_SIZE			= SDK_AUTOLOAD_SIZE + SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
346
347	} > <AUTOLOAD.NAME>
348
349	.<AUTOLOAD.NAME>.bss:
350	{
351	ALIGNALL(4);				. = ALIGN(4);
352						<IF.NITRO_LCFSPEC.GE.2>
353						<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
354						SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
355						<END.AUTOLOAD.SEARCHSYMBOLS>
356						<ENDIF>
357	#
358	#  BSS BLOCK
359	#
360	SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START	= .;
361						#:::::::::: bss
362						<FOREACH.AUTOLOAD.OBJECTS=.sbss>
363						<AUTOLOAD.OBJECT=.sbss:t>
364						<END.AUTOLOAD.OBJECTS>
365						<FOREACH.AUTOLOAD.LIBRARIES=.sbss>
366						<AUTOLOAD.LIBRARY=.sbss:t>
367						<END.AUTOLOAD.LIBRARIES>
368						. = ALIGN(4);
369						<FOREACH.AUTOLOAD.OBJECTS=.bss>
370						<AUTOLOAD.OBJECT=.bss:t>
371						<END.AUTOLOAD.OBJECTS>
372						<FOREACH.AUTOLOAD.LIBRARIES=.bss>
373						<AUTOLOAD.LIBRARY=.bss:t>
374						<END.AUTOLOAD.LIBRARIES>
375						. = ALIGN(4);
376						<FOREACH.AUTOLOAD.OBJECTS=.wram>
377						<AUTOLOAD.OBJECT=.wram.bss:t>
378						<END.AUTOLOAD.OBJECTS>
379						<FOREACH.AUTOLOAD.LIBRARIES=.wram>
380						<AUTOLOAD.LIBRARY=.wram.bss:t>
381						<END.AUTOLOAD.LIBRARIES>
382						. = ALIGN(4);
383						<FOREACH.AUTOLOAD.OBJECTS=.main>
384						<AUTOLOAD.OBJECT=.main.bss:t>
385						<END.AUTOLOAD.OBJECTS>
386						<FOREACH.AUTOLOAD.LIBRARIES=.main>
387						<AUTOLOAD.LIBRARY=.main.bss:t>
388						<END.AUTOLOAD.LIBRARIES>
389						. = ALIGN(4);
390						#:::::::::: bss
391						. = ALIGN(4);
392	SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END	= .;
393
394	SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE	= SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START;
395
396	} >> <AUTOLOAD.NAME>
397
398<END.AUTOLOADS>
399
400	SDK_AUTOLOAD_MAIN_START			= SDK_AUTOLOAD.MAIN.START;
401	SDK_AUTOLOAD_MAIN_END			= SDK_AUTOLOAD.MAIN.END;
402	SDK_AUTOLOAD_MAIN_BSS_END		= SDK_AUTOLOAD.MAIN.BSS_END;
403	SDK_AUTOLOAD_MAIN_SIZE			= SDK_AUTOLOAD.MAIN.SIZE;
404	SDK_AUTOLOAD_MAIN_BSS_SIZE		= SDK_AUTOLOAD.MAIN.BSS_SIZE;
405	SDK_AUTOLOAD_WRAM_START			= SDK_AUTOLOAD.WRAM.START;
406	SDK_AUTOLOAD_WRAM_END			= SDK_AUTOLOAD.WRAM.END;
407	SDK_AUTOLOAD_WRAM_BSS_END		= SDK_AUTOLOAD.WRAM.BSS_END;
408	SDK_AUTOLOAD_WRAM_SIZE			= SDK_AUTOLOAD.WRAM.SIZE;
409	SDK_AUTOLOAD_WRAM_BSS_SIZE		= SDK_AUTOLOAD.WRAM.BSS_SIZE;
410
411	############################ AUTOLOAD_INFO ##########################
412	.binary.AUTOLOAD_INFO:
413	{
414<FOREACH.AUTOLOADS>
415		WRITEW ADDR(.<AUTOLOAD.NAME>);
416		WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
417		WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE;
418<END.AUTOLOADS>
419	} > binary.AUTOLOAD_INFO
420
421	SDK_AUTOLOAD_LIST			= SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE;
422	SDK_AUTOLOAD_LIST_END			= SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO);
423	SDK_AUTOLOAD_SIZE			= SDK_AUTOLOAD_SIZE  + SIZEOF(.binary.AUTOLOAD_INFO);
424
425	############################ OVERLAYS ###############################
426	SDK_OVERLAY_NUMBER 			= <NUMBER.OVERLAYS>;
427
428<FOREACH.OVERLAYS>
429	.<OVERLAY.NAME>:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
430	{
431	ALIGNALL(4);				. = ALIGN(4);
432						<IF.NITRO_LCFSPEC.GE.2>
433						<FOREACH.OVERLAY.SEARCHSYMBOLS>
434						SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
435						<END.OVERLAY.SEARCHSYMBOLS>
436						<ENDIF>
437	#
438	#   TEXT BLOCK: READ ONLY
439	#
440	SDK_OVERLAY_<OVERLAY.NAME>_ID		=<OVERLAY.ID>;	### SEGMENT <OVERLAY.NAME> OVERLAY ID
441	SDK_OVERLAY.<OVERLAY.NAME>.ID		=<OVERLAY.ID>;
442	SDK_OVERLAY.<OVERLAY.NAME>.START	=.;
443	SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START	=.;
444						#:::::::::: text/rodata
445						<FOREACH.OVERLAY.FORCES>
446						FORCE_OBJECT<OVERLAY.FORCE>
447						<END.OVERLAY.FORCES>
448						<FOREACH.OVERLAY.OBJECTS=.text>
449						<OVERLAY.OBJECT=.text:t>
450						<END.OVERLAY.OBJECTS>
451						<FOREACH.OVERLAY.LIBRARIES=.text>
452						<OVERLAY.LIBRARY=.text:t>
453						<END.OVERLAY.LIBRARIES>
454						. = ALIGN(4);
455						<FOREACH.OVERLAY.OBJECTS=.rodata>
456						<OVERLAY.OBJECT=.rodata:t>
457						<END.OVERLAY.OBJECTS>
458						<FOREACH.OVERLAY.LIBRARIES=.rodata>
459						<OVERLAY.LIBRARY=.rodata:t>
460						<END.OVERLAY.LIBRARIES>
461						. = ALIGN(4);
462						<FOREACH.OVERLAY.OBJECTS=.init>
463						<OVERLAY.OBJECT=.init:t>
464						<END.OVERLAY.OBJECTS>
465						<FOREACH.OVERLAY.LIBRARIES=.init>
466						<OVERLAY.LIBRARY=.init:t>
467						<END.OVERLAY.LIBRARIES>
468						. = ALIGN(4);
469	SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START	=.;
470						#:::::::::: ctor
471						<FOREACH.OVERLAY.OBJECTS=.ctor>
472						<OVERLAY.OBJECT=.ctor:t>
473						<END.OVERLAY.OBJECTS>
474						<FOREACH.OVERLAY.LIBRARIES=.ctor>
475						<OVERLAY.LIBRARY=.ctor:t>
476						<END.OVERLAY.LIBRARIES>
477						WRITEW	0;
478						#:::::::::: ctor
479	SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END	=.;
480
481						#:::::::::: text/rodata
482						. = ALIGN(4);
483	SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END	=.;
484
485	#
486	#  DATA BLOCK: READ WRITE
487	#
488	SDK_OVERLAY.<OVERLAY.NAME>.DATA_START	=.;
489						#:::::::::: data
490						<FOREACH.OVERLAY.OBJECTS=.sdata>
491						<OVERLAY.OBJECT=.sdata:t>
492						<END.OVERLAY.OBJECTS>
493						<FOREACH.OVERLAY.LIBRARIES=.sdata>
494						<OVERLAY.LIBRARY=.sdata:t>
495						<END.OVERLAY.LIBRARIES>
496						. = ALIGN(4);
497						<FOREACH.OVERLAY.OBJECTS=.data>
498						<OVERLAY.OBJECT=.data:t>
499						<END.OVERLAY.OBJECTS>
500						<FOREACH.OVERLAY.LIBRARIES=.data>
501						<OVERLAY.LIBRARY=.data:t>
502						<END.OVERLAY.LIBRARIES>
503						. = ALIGN(4);
504						#:::::::::: data
505						. = ALIGN(4);
506	SDK_OVERLAY.<OVERLAY.NAME>.DATA_END	=.;
507	SDK_OVERLAY.<OVERLAY.NAME>.END		=.;
508
509	SDK_OVERLAY.<OVERLAY.NAME>.TEXT_SIZE	= SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END - SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START;
510	SDK_OVERLAY.<OVERLAY.NAME>.DATA_SIZE	= SDK_OVERLAY.<OVERLAY.NAME>.DATA_END - SDK_OVERLAY.<OVERLAY.NAME>.DATA_START;
511	SDK_OVERLAY.<OVERLAY.NAME>.SIZE		= SDK_OVERLAY.<OVERLAY.NAME>.END      - SDK_OVERLAY.<OVERLAY.NAME>.START;
512
513	} > <OVERLAY.NAME>
514
515	.<OVERLAY.NAME>.bss:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
516	{
517	ALIGNALL(4);				. = ALIGN(4);
518						<IF.NITRO_LCFSPEC.GE.2>
519						<FOREACH.OVERLAY.SEARCHSYMBOLS>
520						SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
521						<END.OVERLAY.SEARCHSYMBOLS>
522						<ENDIF>
523	#
524	#  BSS BLOCK
525	#
526	SDK_OVERLAY.<OVERLAY.NAME>.BSS_START	= .;
527						#:::::::::: bss
528						<FOREACH.OVERLAY.OBJECTS=.bss>
529						<OVERLAY.OBJECT=.bss:t>
530						<END.OVERLAY.OBJECTS>
531						<FOREACH.OVERLAY.LIBRARIES=.bss>
532						<OVERLAY.LIBRARY=.bss:t>
533						<END.OVERLAY.LIBRARIES>
534						. = ALIGN(4);
535						<FOREACH.OVERLAY.OBJECTS=.sbss>
536						<OVERLAY.OBJECT=.sbss:t>
537						<END.OVERLAY.OBJECTS>
538						<FOREACH.OVERLAY.LIBRARIES=.sbss>
539						<OVERLAY.LIBRARY=.sbss:t>
540						<END.OVERLAY.LIBRARIES>
541						. = ALIGN(4);
542						#:::::::::: bss
543						. = ALIGN(4);
544	SDK_OVERLAY.<OVERLAY.NAME>.BSS_END	= .;
545
546	SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE	= SDK_OVERLAY.<OVERLAY.NAME>.BSS_END - SDK_OVERLAY.<OVERLAY.NAME>.BSS_START;
547
548	} >> <OVERLAY.NAME>
549
550<END.OVERLAYS>
551
552
553	############################ ARENA ##################################
554	.arena.MAIN:
555	{
556						. = ALIGN(4);
557		SDK_SECTION_ARENA_START		=.;
558	} > arena.MAIN
559
560
561	############################ OVERLAYDEFS ############################
562	.<PROPERTY.OVERLAYDEFS>:
563	{
564		###  <STATIC.NAME> module information
565		WRITEW ADDR(.<STATIC.NAME>);			# load address
566		WRITEW _start;					# entry address
567		WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE;	# size of module
568		WRITEW _start_AutoloadDoneCallback;		# callback autoload done
569
570		###  overlay filename
571		<FOREACH.OVERLAYS>
572		WRITES ("<OVERLAY.NAME><PROPERTY.SUFFIX>");	# Overlay <OVERLAY.ID>
573		<END.OVERLAYS>
574
575	} > <PROPERTY.OVERLAYDEFS>
576
577
578	############################ OVERLAYTABLE ###########################
579	.<PROPERTY.OVERLAYTABLE>:
580	{
581		<FOREACH.OVERLAYS>
582		#	 Overlay <OVERLAY.ID>
583		WRITEW <OVERLAY.ID>;				# overlay ID
584		WRITEW ADDR(.<OVERLAY.NAME>);			# load address
585		WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SIZE;		# size of module
586		WRITEW SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE;	# size of bss
587		WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START;	# start address of static init
588		WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END;	# end address of static init
589		WRITEW <OVERLAY.ID>;				# ROM file ID
590		WRITEW 0;					# Reserved
591
592		<END.OVERLAYS>
593
594	} > <PROPERTY.OVERLAYTABLE>
595
596
597	############################ OTHERS #################################
598	SDK_WRAM_ARENA_LO    = SDK_AUTOLOAD.WRAM.BSS_END;
599	SDK_SUBPRIV_ARENA_LO = SDK_AUTOLOAD.MAIN.BSS_END;
600	SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>;	# allocated in WRAM
601	SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>;		# allocated in WRAM
602
603	# work ram size checker => check AUTOLOAD_WRAM
604	SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1;
605	.check.WORKRAM:
606	{
607#		. = . + SDK_AUTOLOAD.WRAM.BSS_END - 0x037f8000 + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
608		. = . + SDK_AUTOLOAD.WRAM.BSS_END - 0x037f8000;
609		. = ALIGN(32);
610		. = . + 0x2100;
611		. = . + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
612	} > check.WORKRAM
613
614	.check.MAIN:
615	{
616		. = SDK_SUBPRIV_ARENA_LO;
617	} > check.MAIN
618}
619