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.OBJECTS=.text>
126					<STATIC.OBJECT=.text:t>
127					<END.STATIC.OBJECTS>
128					<FOREACH.STATIC.LIBRARIES=.text>
129					<STATIC.LIBRARY=.text:t>
130					<END.STATIC.LIBRARIES>
131					. = ALIGN(4);
132					* (.exception)
133					. = ALIGN(4);
134	SDK_STATIC_ETABLE_START		=.;
135					EXCEPTION
136	SDK_STATIC_ETABLE_END		=.;
137					. = ALIGN(4);
138					<FOREACH.STATIC.OBJECTS=.init>
139					<STATIC.OBJECT=.init:t>
140					<END.STATIC.OBJECTS>
141					<FOREACH.STATIC.LIBRARIES=.init>
142					<STATIC.LIBRARY=.init:t>
143					<END.STATIC.LIBRARIES>
144					. = ALIGN(4);
145					<FOREACH.STATIC.OBJECTS=.rodata>
146					<STATIC.OBJECT=.rodata:t>
147					<END.STATIC.OBJECTS>
148					<FOREACH.STATIC.LIBRARIES=.rodata>
149					<STATIC.LIBRARY=.rodata:t>
150					<END.STATIC.LIBRARIES>
151					. = ALIGN(4);
152
153	SDK_STATIC_SINIT_START		=.;
154					#:::::::::: ctor
155					<FOREACH.STATIC.OBJECTS=.ctor>
156					<STATIC.OBJECT=.ctor:t>
157					<END.STATIC.OBJECTS>
158					<FOREACH.STATIC.LIBRARIES=.ctor>
159					<STATIC.LIBRARY=.ctor:t>
160					<END.STATIC.LIBRARIES>
161					WRITEW	0;
162					#:::::::::: ctor
163	SDK_STATIC_SINIT_END		=.;
164
165					#:::::::::: text/rodata
166					. = ALIGN(4);
167	SDK_STATIC_TEXT_END		=.;
168
169	#
170	#  DATA BLOCK: READ WRITE
171	#
172	SDK_STATIC_DATA_START		=.;
173					#:::::::::: Data
174					<FOREACH.STATIC.OBJECTS=.wram>
175					<STATIC.OBJECT=.wram:t>
176					<END.STATIC.OBJECTS>
177					<FOREACH.STATIC.LIBRARIES=.wram>
178					<STATIC.LIBRARY=.wram:t>
179					<END.STATIC.LIBRARIES>
180					. = ALIGN(4);
181					<FOREACH.STATIC.OBJECTS=.main>
182					<STATIC.OBJECT=.main:t>
183					<END.STATIC.OBJECTS>
184					<FOREACH.STATIC.LIBRARIES=.main>
185					<STATIC.LIBRARY=.main:t>
186					<END.STATIC.LIBRARIES>
187					. = ALIGN(4);
188					<FOREACH.STATIC.OBJECTS=.sdata>
189					<STATIC.OBJECT=.sdata:t>
190					<END.STATIC.OBJECTS>
191					<FOREACH.STATIC.LIBRARIES=.sdata>
192					<STATIC.LIBRARY=.sdata:t>
193					<END.STATIC.LIBRARIES>
194					. = ALIGN(4);
195					<FOREACH.STATIC.OBJECTS=.data>
196					<STATIC.OBJECT=.data:t>
197					<END.STATIC.OBJECTS>
198					<FOREACH.STATIC.LIBRARIES=.data>
199					<STATIC.LIBRARY=.data:t>
200					<END.STATIC.LIBRARIES>
201					. = ALIGN(4);
202					#:::::::::: Data
203					. = ALIGN(4);
204	SDK_STATIC_DATA_END		=.;
205	SDK_STATIC_END			=.;
206
207	SDK_STATIC_TEXT_SIZE		= SDK_STATIC_TEXT_END - SDK_STATIC_TEXT_START;
208	SDK_STATIC_DATA_SIZE		= SDK_STATIC_DATA_END - SDK_STATIC_DATA_START;
209	SDK_STATIC_SIZE			= SDK_STATIC_END      - SDK_STATIC_START;
210	__sinit__			= SDK_STATIC_SINIT_START;	# For static initializer
211	__exception_table_start__	= SDK_STATIC_ETABLE_START;	# For exception table
212	__exception_table_end__		= SDK_STATIC_ETABLE_END;	# For exception table
213	} > <STATIC.NAME>
214
215	.<STATIC.NAME>.bss:
216	{
217	ALIGNALL(4);			. = ALIGN(4);
218					<IF.NITRO_LCFSPEC.GE.2>
219					<FOREACH.STATIC.SEARCHSYMBOLS>
220					SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
221					<END.STATIC.SEARCHSYMBOLS>
222					<ENDIF>
223	#
224	#  BSS BLOCK
225	#
226	SDK_STATIC_BSS_START		=.;
227					#:::::::::: bss
228					<FOREACH.STATIC.OBJECTS=.sbss>
229					<STATIC.OBJECT=.sbss:t>
230					<END.STATIC.OBJECTS>
231					<FOREACH.STATIC.LIBRARIES=.sbss>
232					<STATIC.LIBRARY=.sbss:t>
233					<END.STATIC.LIBRARIES>
234					. = ALIGN(4);
235					<FOREACH.STATIC.OBJECTS=.bss>
236					<STATIC.OBJECT=.bss:t>
237					<END.STATIC.OBJECTS>
238					<FOREACH.STATIC.LIBRARIES=.bss>
239					<STATIC.LIBRARY=.bss:t>
240					<END.STATIC.LIBRARIES>
241					. = ALIGN(4);
242					#:::::::::: bss
243					. = ALIGN(4);
244	SDK_STATIC_BSS_END		= .;
245	SDK_STATIC_BSS_SIZE		= SDK_STATIC_BSS_END - SDK_STATIC_BSS_START;
246
247	} >> <STATIC.NAME>
248
249
250	############################ AUTOLOADS ##############################
251	SDK_AUTOLOAD.MAIN.START			= 0x027e0000;
252	SDK_AUTOLOAD.MAIN.END			= SDK_AUTOLOAD.MAIN.START;
253	SDK_AUTOLOAD.MAIN.BSS_END		= SDK_AUTOLOAD.MAIN.START;
254	SDK_AUTOLOAD.MAIN.SIZE			= 0;
255	SDK_AUTOLOAD.MAIN.BSS_SIZE		= 0;
256	SDK_AUTOLOAD.WRAM.START			= 0x037f8000;
257	SDK_AUTOLOAD.WRAM.END			= SDK_AUTOLOAD.WRAM.START;
258	SDK_AUTOLOAD.WRAM.BSS_END		= SDK_AUTOLOAD.WRAM.START;
259	SDK_AUTOLOAD.WRAM.SIZE			= 0;
260	SDK_AUTOLOAD.WRAM.BSS_SIZE		= 0;
261	SDK_AUTOLOAD_START			= SDK_STATIC_END;
262	SDK_AUTOLOAD_SIZE			= 0;
263	SDK_AUTOLOAD_NUMBER			= <NUMBER.AUTOLOADS>;
264
265<FOREACH.AUTOLOADS>
266	.<AUTOLOAD.NAME>:
267	{
268	ALIGNALL(4);				. = ALIGN(4);
269						<IF.NITRO_LCFSPEC.GE.2>
270						<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
271						SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
272						<END.AUTOLOAD.SEARCHSYMBOLS>
273						<ENDIF>
274	#
275	#   TEXT BLOCK: READ ONLY
276	#
277	SDK_AUTOLOAD_<AUTOLOAD.NAME>_ID		=<AUTOLOAD.ID>;
278	SDK_AUTOLOAD.<AUTOLOAD.NAME>.ID		=<AUTOLOAD.ID>;
279	SDK_AUTOLOAD.<AUTOLOAD.NAME>.START	=.;
280	SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START	=.;
281						#:::::::::: text/rodata
282						<FOREACH.AUTOLOAD.OBJECTS=.text>
283						<AUTOLOAD.OBJECT=.text:t>
284						<END.AUTOLOAD.OBJECTS>
285						<FOREACH.AUTOLOAD.LIBRARIES=.text>
286						<AUTOLOAD.LIBRARY=.text:t>
287						<END.AUTOLOAD.LIBRARIES>
288						. = ALIGN(4);
289						<FOREACH.AUTOLOAD.OBJECTS=.rodata>
290						<AUTOLOAD.OBJECT=.rodata:t>
291						<END.AUTOLOAD.OBJECTS>
292						<FOREACH.AUTOLOAD.LIBRARIES=.rodata>
293						<AUTOLOAD.LIBRARY=.rodata:t>
294						<END.AUTOLOAD.LIBRARIES>
295						. = ALIGN(4);
296						#:::::::::: text/rodata
297	SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END	=.;
298
299	#
300	#  DATA BLOCK: READ WRITE BLOCK
301	#
302	SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START	=.;
303						#:::::::::: Data
304						<FOREACH.AUTOLOAD.OBJECTS=.wram>
305						<AUTOLOAD.OBJECT=.wram:t>
306						<END.AUTOLOAD.OBJECTS>
307						<FOREACH.AUTOLOAD.LIBRARIES=.wram>
308						<AUTOLOAD.LIBRARY=.wram:t>
309						<END.AUTOLOAD.LIBRARIES>
310						. = ALIGN(4);
311						<FOREACH.AUTOLOAD.OBJECTS=.main>
312						<AUTOLOAD.OBJECT=.main:t>
313						<END.AUTOLOAD.OBJECTS>
314						<FOREACH.AUTOLOAD.LIBRARIES=.main>
315						<AUTOLOAD.LIBRARY=.main:t>
316						<END.AUTOLOAD.LIBRARIES>
317						. = ALIGN(4);
318						<FOREACH.AUTOLOAD.OBJECTS=.sdata>
319						<AUTOLOAD.OBJECT=.sdata:t>
320						<END.AUTOLOAD.OBJECTS>
321						<FOREACH.AUTOLOAD.LIBRARIES=.sdata>
322						<AUTOLOAD.LIBRARY=.sdata:t>
323						<END.AUTOLOAD.LIBRARIES>
324						. = ALIGN(4);
325						<FOREACH.AUTOLOAD.OBJECTS=.data>
326						<AUTOLOAD.OBJECT=.data:t>
327						<END.AUTOLOAD.OBJECTS>
328						<FOREACH.AUTOLOAD.LIBRARIES=.data>
329						<AUTOLOAD.LIBRARY=.data:t>
330						<END.AUTOLOAD.LIBRARIES>
331						. = ALIGN(4);
332						#:::::::::: Data
333	SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END	=.;
334	SDK_AUTOLOAD.<AUTOLOAD.NAME>.END	=.;
335
336	SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_SIZE	= SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START;
337	SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_SIZE	= SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START;
338	SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE	= SDK_AUTOLOAD.<AUTOLOAD.NAME>.END      - SDK_AUTOLOAD.<AUTOLOAD.NAME>.START;
339	SDK_AUTOLOAD_SIZE			= SDK_AUTOLOAD_SIZE + SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
340
341	} > <AUTOLOAD.NAME>
342
343	.<AUTOLOAD.NAME>.bss:
344	{
345	ALIGNALL(4);				. = ALIGN(4);
346						<IF.NITRO_LCFSPEC.GE.2>
347						<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
348						SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
349						<END.AUTOLOAD.SEARCHSYMBOLS>
350						<ENDIF>
351	#
352	#  BSS BLOCK
353	#
354	SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START	= .;
355						#:::::::::: bss
356						<FOREACH.AUTOLOAD.OBJECTS=.sbss>
357						<AUTOLOAD.OBJECT=.sbss:t>
358						<END.AUTOLOAD.OBJECTS>
359						<FOREACH.AUTOLOAD.LIBRARIES=.sbss>
360						<AUTOLOAD.LIBRARY=.sbss:t>
361						<END.AUTOLOAD.LIBRARIES>
362						. = ALIGN(4);
363						<FOREACH.AUTOLOAD.OBJECTS=.bss>
364						<AUTOLOAD.OBJECT=.bss:t>
365						<END.AUTOLOAD.OBJECTS>
366						<FOREACH.AUTOLOAD.LIBRARIES=.bss>
367						<AUTOLOAD.LIBRARY=.bss:t>
368						<END.AUTOLOAD.LIBRARIES>
369						. = ALIGN(4);
370						<FOREACH.AUTOLOAD.OBJECTS=.wram>
371						<AUTOLOAD.OBJECT=.wram.bss:t>
372						<END.AUTOLOAD.OBJECTS>
373						<FOREACH.AUTOLOAD.LIBRARIES=.wram>
374						<AUTOLOAD.LIBRARY=.wram.bss:t>
375						<END.AUTOLOAD.LIBRARIES>
376						. = ALIGN(4);
377						<FOREACH.AUTOLOAD.OBJECTS=.main>
378						<AUTOLOAD.OBJECT=.main.bss:t>
379						<END.AUTOLOAD.OBJECTS>
380						<FOREACH.AUTOLOAD.LIBRARIES=.main>
381						<AUTOLOAD.LIBRARY=.main.bss:t>
382						<END.AUTOLOAD.LIBRARIES>
383						. = ALIGN(4);
384						#:::::::::: bss
385						. = ALIGN(4);
386	SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END	= .;
387
388	SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE	= SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START;
389
390	} >> <AUTOLOAD.NAME>
391
392<END.AUTOLOADS>
393
394	SDK_AUTOLOAD_MAIN_START			= SDK_AUTOLOAD.MAIN.START;
395	SDK_AUTOLOAD_MAIN_END			= SDK_AUTOLOAD.MAIN.END;
396	SDK_AUTOLOAD_MAIN_BSS_END		= SDK_AUTOLOAD.MAIN.BSS_END;
397	SDK_AUTOLOAD_MAIN_SIZE			= SDK_AUTOLOAD.MAIN.SIZE;
398	SDK_AUTOLOAD_MAIN_BSS_SIZE		= SDK_AUTOLOAD.MAIN.BSS_SIZE;
399	SDK_AUTOLOAD_WRAM_START			= SDK_AUTOLOAD.WRAM.START;
400	SDK_AUTOLOAD_WRAM_END			= SDK_AUTOLOAD.WRAM.END;
401	SDK_AUTOLOAD_WRAM_BSS_END		= SDK_AUTOLOAD.WRAM.BSS_END;
402	SDK_AUTOLOAD_WRAM_SIZE			= SDK_AUTOLOAD.WRAM.SIZE;
403	SDK_AUTOLOAD_WRAM_BSS_SIZE		= SDK_AUTOLOAD.WRAM.BSS_SIZE;
404
405	############################ AUTOLOAD_INFO ##########################
406	.binary.AUTOLOAD_INFO:
407	{
408<FOREACH.AUTOLOADS>
409		WRITEW ADDR(.<AUTOLOAD.NAME>);
410		WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
411		WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE;
412<END.AUTOLOADS>
413	} > binary.AUTOLOAD_INFO
414
415	SDK_AUTOLOAD_LIST			= SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE;
416	SDK_AUTOLOAD_LIST_END			= SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO);
417	SDK_AUTOLOAD_SIZE			= SDK_AUTOLOAD_SIZE  + SIZEOF(.binary.AUTOLOAD_INFO);
418
419	############################ OVERLAYS ###############################
420	SDK_OVERLAY_NUMBER 			= <NUMBER.OVERLAYS>;
421
422<FOREACH.OVERLAYS>
423	.<OVERLAY.NAME>:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
424	{
425	ALIGNALL(4);				. = ALIGN(4);
426						<IF.NITRO_LCFSPEC.GE.2>
427						<FOREACH.OVERLAY.SEARCHSYMBOLS>
428						SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
429						<END.OVERLAY.SEARCHSYMBOLS>
430						<ENDIF>
431	#
432	#   TEXT BLOCK: READ ONLY
433	#
434	SDK_OVERLAY_<OVERLAY.NAME>_ID		=<OVERLAY.ID>;	### SEGMENT <OVERLAY.NAME> OVERLAY ID
435	SDK_OVERLAY.<OVERLAY.NAME>.ID		=<OVERLAY.ID>;
436	SDK_OVERLAY.<OVERLAY.NAME>.START	=.;
437	SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START	=.;
438						#:::::::::: text/rodata
439						<FOREACH.OVERLAY.OBJECTS=.text>
440						<OVERLAY.OBJECT=.text:t>
441						<END.OVERLAY.OBJECTS>
442						<FOREACH.OVERLAY.LIBRARIES=.text>
443						<OVERLAY.LIBRARY=.text:t>
444						<END.OVERLAY.LIBRARIES>
445						. = ALIGN(4);
446						<FOREACH.OVERLAY.OBJECTS=.rodata>
447						<OVERLAY.OBJECT=.rodata:t>
448						<END.OVERLAY.OBJECTS>
449						<FOREACH.OVERLAY.LIBRARIES=.rodata>
450						<OVERLAY.LIBRARY=.rodata:t>
451						<END.OVERLAY.LIBRARIES>
452						. = ALIGN(4);
453						<FOREACH.OVERLAY.OBJECTS=.init>
454						<OVERLAY.OBJECT=.init:t>
455						<END.OVERLAY.OBJECTS>
456						<FOREACH.OVERLAY.LIBRARIES=.init>
457						<OVERLAY.LIBRARY=.init:t>
458						<END.OVERLAY.LIBRARIES>
459						. = ALIGN(4);
460	SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START	=.;
461						#:::::::::: ctor
462						<FOREACH.OVERLAY.OBJECTS=.ctor>
463						<OVERLAY.OBJECT=.ctor:t>
464						<END.OVERLAY.OBJECTS>
465						<FOREACH.OVERLAY.LIBRARIES=.ctor>
466						<OVERLAY.LIBRARY=.ctor:t>
467						<END.OVERLAY.LIBRARIES>
468						WRITEW	0;
469						#:::::::::: ctor
470	SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END	=.;
471
472						#:::::::::: text/rodata
473						. = ALIGN(4);
474	SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END	=.;
475
476	#
477	#  DATA BLOCK: READ WRITE
478	#
479	SDK_OVERLAY.<OVERLAY.NAME>.DATA_START	=.;
480						#:::::::::: Data
481						<FOREACH.OVERLAY.OBJECTS=.sdata>
482						<OVERLAY.OBJECT=.sdata:t>
483						<END.OVERLAY.OBJECTS>
484						<FOREACH.OVERLAY.LIBRARIES=.sdata>
485						<OVERLAY.LIBRARY=.sdata:t>
486						<END.OVERLAY.LIBRARIES>
487						. = ALIGN(4);
488						<FOREACH.OVERLAY.OBJECTS=.data>
489						<OVERLAY.OBJECT=.data:t>
490						<END.OVERLAY.OBJECTS>
491						<FOREACH.OVERLAY.LIBRARIES=.data>
492						<OVERLAY.LIBRARY=.data:t>
493						<END.OVERLAY.LIBRARIES>
494						. = ALIGN(4);
495						#:::::::::: Data
496						. = ALIGN(4);
497	SDK_OVERLAY.<OVERLAY.NAME>.DATA_END	=.;
498	SDK_OVERLAY.<OVERLAY.NAME>.END		=.;
499
500	SDK_OVERLAY.<OVERLAY.NAME>.TEXT_SIZE	= SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END - SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START;
501	SDK_OVERLAY.<OVERLAY.NAME>.DATA_SIZE	= SDK_OVERLAY.<OVERLAY.NAME>.DATA_END - SDK_OVERLAY.<OVERLAY.NAME>.DATA_START;
502	SDK_OVERLAY.<OVERLAY.NAME>.SIZE		= SDK_OVERLAY.<OVERLAY.NAME>.END      - SDK_OVERLAY.<OVERLAY.NAME>.START;
503
504	} > <OVERLAY.NAME>
505
506	.<OVERLAY.NAME>.bss:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
507	{
508	ALIGNALL(4);				. = ALIGN(4);
509						<IF.NITRO_LCFSPEC.GE.2>
510						<FOREACH.OVERLAY.SEARCHSYMBOLS>
511						SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
512						<END.OVERLAY.SEARCHSYMBOLS>
513						<ENDIF>
514	#
515	#  BSS BLOCK
516	#
517	SDK_OVERLAY.<OVERLAY.NAME>.BSS_START	= .;
518						#:::::::::: bss
519						<FOREACH.OVERLAY.OBJECTS=.bss>
520						<OVERLAY.OBJECT=.bss:t>
521						<END.OVERLAY.OBJECTS>
522						<FOREACH.OVERLAY.LIBRARIES=.bss>
523						<OVERLAY.LIBRARY=.bss:t>
524						<END.OVERLAY.LIBRARIES>
525						. = ALIGN(4);
526						<FOREACH.OVERLAY.OBJECTS=.sbss>
527						<OVERLAY.OBJECT=.sbss:t>
528						<END.OVERLAY.OBJECTS>
529						<FOREACH.OVERLAY.LIBRARIES=.sbss>
530						<OVERLAY.LIBRARY=.sbss:t>
531						<END.OVERLAY.LIBRARIES>
532						. = ALIGN(4);
533						#:::::::::: bss
534						. = ALIGN(4);
535	SDK_OVERLAY.<OVERLAY.NAME>.BSS_END	= .;
536
537	SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE	= SDK_OVERLAY.<OVERLAY.NAME>.BSS_END - SDK_OVERLAY.<OVERLAY.NAME>.BSS_START;
538
539	} >> <OVERLAY.NAME>
540
541<END.OVERLAYS>
542
543
544	############################ ARENA ##################################
545	.arena.MAIN:
546	{
547						. = ALIGN(4);
548		SDK_SECTION_ARENA_START		=.;
549	} > arena.MAIN
550
551
552	############################ OVERLAYDEFS ############################
553	.<PROPERTY.OVERLAYDEFS>:
554	{
555		###  <STATIC.NAME> module information
556		WRITEW ADDR(.<STATIC.NAME>);			# Load address
557		WRITEW _start;					# Entry address
558		WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE;	# Size of module
559		WRITEW _start_AutoloadDoneCallback;		# Callback autoload done
560
561		###  overlay filename
562		<FOREACH.OVERLAYS>
563		WRITES ("<OVERLAY.NAME><PROPERTY.SUFFIX>");	# Overlay <OVERLAY.ID>
564		<END.OVERLAYS>
565
566	} > <PROPERTY.OVERLAYDEFS>
567
568
569	############################ OVERLAYTABLE ###########################
570	.<PROPERTY.OVERLAYTABLE>:
571	{
572		<FOREACH.OVERLAYS>
573		#	 Overlay <OVERLAY.ID>
574		WRITEW <OVERLAY.ID>;				# Overlay ID
575		WRITEW ADDR(.<OVERLAY.NAME>);			# Load address
576		WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SIZE;		# Size of module
577		WRITEW SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE;	# Size of bss
578		WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START;	# Start address of static init
579		WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END;	# End address of static init
580		WRITEW <OVERLAY.ID>;				# ROM file ID
581		WRITEW 0;					# Reserved
582
583		<END.OVERLAYS>
584
585	} > <PROPERTY.OVERLAYTABLE>
586
587
588	############################ OTHERS #################################
589	SDK_WRAM_ARENA_LO    = SDK_AUTOLOAD.WRAM.BSS_END;
590	SDK_SUBPRIV_ARENA_LO = SDK_AUTOLOAD.MAIN.BSS_END;
591	SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>;	# Allocated in WRAM
592	SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>;		# Allocated in WRAM
593
594	# Work RAM size checker => check AUTOLOAD_WRAM
595	SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1;
596	.check.WORKRAM:
597	{
598#		. = . + SDK_AUTOLOAD.WRAM.BSS_END - 0x037f8000 + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
599		. = . + SDK_AUTOLOAD.WRAM.BSS_END - 0x037f8000;
600		. = ALIGN(32);
601		. = . + 0x2100;
602		. = . + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
603	} > check.WORKRAM
604
605	.check.MAIN:
606	{
607		. = SDK_SUBPRIV_ARENA_LO;
608	} > check.MAIN
609}
610