1#---------------------------------------------------------------------------
2#  Project:  NitroSDK - tools - makelcf
3#  File:     ARM9-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: ARM9-TS.lcf.template,v $
14#  Revision 1.37  2006/07/20 07:29:12  kitase_hirotake
15#  Added the description explaining the version section
16#
17#  Revision 1.36  2006/07/18 11:11:01  yasu
18#  There is an error in the way check.xTCM gets the OVERLAY region size in the TCM region overflow check. Because it is not currently clear how to accurately calculate this, the addition of the OVERLAY region was cut out.
19#
20#
21#
22#  Revision 1.35  2006/05/10 03:19:47  yasu
23#  Added support for the CodeWarrior 2.x overlay expansion
24#
25#  Revision 1.34  2006/04/06 09:02:36  kitase_hirotake
26#  Support for .itcm.bss and .dtcm.bss
27#
28#  Revision 1.33  2006/03/30 23:59:22  yasu
29#  Updated copyright year
30#
31#  Revision 1.32  2006/03/29 13:14:22  yasu
32#  Support for overlays in CWVER 2.x
33#
34#  Revision 1.31  2005/11/24 01:16:47  yada
35#  Changed start address of mainEX arena from 0x2400000 to 0x23e0000
36#
37#  Revision 1.30  2005/09/02 04:14:22  yasu
38#  Old symbols were redefined so they can be used even under SDK2.2
39#
40#  Revision 1.29  2005/08/31 09:34:57  yasu
41#  Corrected a problem where code would not function normally when using section names such as section_BSS
42#
43#  Revision 1.28  2005/08/26 11:22:16  yasu
44#  Overlay support for ITCM/DTCM
45#
46#  Revision 1.27  2005/06/20 12:29:20  yasu
47#  Changed Surffix to Suffix
48#
49#  Revision 1.26  2005/06/14 09:03:42  yada
50#  Fixed around minus value of SDK_STACKSIZE.
51#
52#  Revision 1.25  2005/04/13 12:51:00  terui
53#  Changed SDK_AUTOLOAD.DTCM.START 0x027c0000 to 0x027e0000
54#
55#  Revision 1.24  2005/03/30 00:02:14  yosizaki
56#  Fixed copyright header
57#
58#  Revision 1.23  2005/03/25 12:54:59  yasu
59#  Added the .version section
60#
61#  Revision 1.22  2004/10/03 02:00:56  yasu
62#  Output component file list for compstatic tool
63#
64#  Revision 1.21  2004/09/27 21:21:40 PM  yasu
65#  Added support for .sinit
66#
67#  Revision 1.20  2004/09/09 11:49:20  yasu
68#  Added support for compstatic in default
69#
70#  Revision 1.19  2004/09/06 06:40:00  yasu
71#  Added labels for digest
72#
73#  Revision 1.18  2004/08/20 06:19:59  yasu
74#  DTCM moves to 0x027c0000 at default
75#
76#  Revision 1.17  2004/08/02 10:38:53  yasu
77#  Added autoload-done callback address in overlaydefs
78#
79#  Revision 1.16  2004/07/26 02:22:32  yasu
80#  Changed DTCM address to 0x023c0000
81#
82#  Revision 1.15  2004/07/26 00:08:27  yasu
83#  Fixed label of exception table
84#
85#  Revision 1.14  2004/07/24 05:42:25  yasu
86#  Set default values for SDK_AUTOGEN_xTCM_START
87#
88#  Revision 1.13  2004/07/23 11:32:14  yasu
89#  Defined labels for __exception_table_start__ and _end__
90#
91#  Revision 1.12  2004/07/12 12:21:08  yasu
92#  Checked size of ITCM/DTCM
93#
94#  Revision 1.11  2004/07/10 04:10:26  yasu
95#  Added support for command 'Library'
96#
97#  Revision 1.10  2004/07/02 08:13:02  yasu
98#  Added support for OBJECT( )
99#
100#  Revision 1.9	 2004/07/01 12:54:38  yasu
101#  Added support for ITCM/DTCM/WRAM autoload
102#
103#  Revision 1.8	 2004/07/01 10:41:46  yasu
104#  Added support for autoload
105#
106#  Revision 1.7	 2004/06/02 07:35:37  yasu
107#  Set libsyscall.a in FORCE_ACTIVE
108#  Put NitroMain at the top of ROM image
109#
110#  Revision 1.6	 2004/06/02 04:56:28  yasu
111#  Revised to match the new ROM map of TS
112#
113#  Revision 1.5	 2004/06/01 06:12:00  miya
114#  Added padding at top of ROM image.
115#
116#  Revision 1.4	 2004/04/26 12:16:48  yasu
117#  Added KEEP_SECTIONS
118#
119#  Revision 1.3	 2004/04/20 07:41:32  yasu
120#  Set STATICINIT instead of .ctor temporarily
121#
122#  Revision 1.2	 2004/04/14 07:16:42  yasu
123#  Added ALIGN(32) for convenience to handle cache line
124#
125#  Revision 1.1	 2004/04/06 01:59:54  yasu
126#  Newly added
127#
128#  $NoKeywords: $
129#---------------------------------------------------------------------------
130MEMORY
131{
132	<STATIC.NAME>		(RWX) : ORIGIN = <STATIC.ADDRESS>,   LENGTH = 0x0 >  <STATIC.NAME><PROPERTY.SUFFIX>
133	<FOREACH.AUTOLOADS>
134	<AUTOLOAD.NAME>		(RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.SUFFIX>
135	<END.AUTOLOADS>
136	binary.AUTOLOAD_INFO		(RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.SUFFIX>
137	binary.STATIC_FOOTER		(RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.SUFFIX>
138
139	<PROPERTY.OVERLAYDEFS>	(RW)  : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>
140	<PROPERTY.OVERLAYTABLE>	(RW)  : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>
141	<FOREACH.OVERLAYS>
142	<OVERLAY.NAME>		(RWXO): ORIGIN = <OVERLAY.ADDRESS>, LENGTH = 0x0 > <OVERLAY.NAME><PROPERTY.SUFFIX>
143	<END.OVERLAYS>
144	dummy.MAIN_EX		(RW)  : ORIGIN = 0x023e0000, LENGTH = 0x0
145	arena.MAIN			(RW)  : ORIGIN = AFTER(<STATIC.NAME><FOREACH.OVERLAYS=MAIN>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
146	arena.MAIN_EX		(RW)  : ORIGIN = AFTER(dummy.MAIN_EX<FOREACH.OVERLAYS=MAINEX>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
147	arena.ITCM		(RW)  : ORIGIN = AFTER(ITCM<FOREACH.OVERLAYS=ITCM>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
148	arena.DTCM		(RW)  : ORIGIN = AFTER(DTCM<FOREACH.OVERLAYS=DTCM>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
149	binary.MODULE_FILES		(RW)  : ORIGIN = 0x0, LENGTH = 0x0     > component.files
150	check.ITCM			(RWX) : ORIGIN = 0x0, LENGTH = 0x08000 > itcm.check
151	check.DTCM			(RW)  : ORIGIN = 0x0, LENGTH = 0x04000 > dtcm.check
152}
153
154FORCE_ACTIVE
155{
156	SVC_SoftReset
157}
158
159KEEP_SECTION
160{
161	.sinit
162}
163
164SECTIONS
165{
166	############################ STATIC #################################
167	.<STATIC.NAME>:
168	{
169	ALIGNALL(4);			. = ALIGN(32);	# Fit to cache line
170					<IF.NITRO_LCFSPEC.GE.2>
171					<FOREACH.STATIC.SEARCHSYMBOLS>
172					SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
173					<END.STATIC.SEARCHSYMBOLS>
174					<ENDIF>
175	#
176	#  TEXT BLOCK: READ ONLY
177	#
178	SDK_STATIC_START		=.;
179	SDK_STATIC_TEXT_START		=.;
180					#:::::::::: text/rodata
181					libsyscall.a (.text)
182					crt0.o (.text)
183					crt0.o (.rodata)
184					#
185					# Added .version section.
186					# The information included in this section will be needed for Lotcheck purposes. Be sure to leave it in this position.
187					#
188					#
189					* (.version)
190					OBJECT(NitroMain,*)
191					<FOREACH.STATIC.OBJECTS=.text>
192					<STATIC.OBJECT=.text:t>
193					<END.STATIC.OBJECTS>
194					<FOREACH.STATIC.LIBRARIES=.text>
195					<STATIC.LIBRARY=.text:t>
196					<END.STATIC.LIBRARIES>
197					. = ALIGN(4);
198					* (.exception)
199					. = ALIGN(4);
200	SDK_STATIC_ETABLE_START		=.;
201					EXCEPTION
202	SDK_STATIC_ETABLE_END		=.;
203					. = ALIGN(4);
204					<FOREACH.STATIC.OBJECTS=.init>
205					<STATIC.OBJECT=.init:t>
206					<END.STATIC.OBJECTS>
207					<FOREACH.STATIC.LIBRARIES=.init>
208					<STATIC.LIBRARY=.init:t>
209					<END.STATIC.LIBRARIES>
210					. = ALIGN(4);
211					<FOREACH.STATIC.OBJECTS=.rodata>
212					<STATIC.OBJECT=.rodata:t>
213					<END.STATIC.OBJECTS>
214					<FOREACH.STATIC.LIBRARIES=.rodata>
215					<STATIC.LIBRARY=.rodata:t>
216					<END.STATIC.LIBRARIES>
217					. = ALIGN(4);
218
219	SDK_STATIC_SINIT_START		=.;
220					#:::::::::: ctor
221					<FOREACH.STATIC.OBJECTS=.ctor>
222					<STATIC.OBJECT=.ctor:t>
223					<END.STATIC.OBJECTS>
224					<FOREACH.STATIC.LIBRARIES=.ctor>
225					<STATIC.LIBRARY=.ctor:t>
226					<END.STATIC.LIBRARIES>
227					<FOREACH.STATIC.OBJECTS=.sinit>
228					<STATIC.OBJECT=.sinit:t>
229					<END.STATIC.OBJECTS>
230					<FOREACH.STATIC.LIBRARIES=.sinit>
231					<STATIC.LIBRARY=.sinit:t>
232					<END.STATIC.LIBRARIES>
233					WRITEW	0;
234					#:::::::::: ctor
235	SDK_STATIC_SINIT_END		=.;
236
237					#:::::::::: text/rodata
238					. = ALIGN(32);
239	SDK_STATIC_TEXT_END		=.;
240
241	#
242	#  DATA BLOCK: READ WRITE
243	#
244	SDK_STATIC_DATA_START		=.;
245					#:::::::::: Data
246					<FOREACH.STATIC.OBJECTS=.sdata>
247					<STATIC.OBJECT=.sdata:t>
248					<END.STATIC.OBJECTS>
249					<FOREACH.STATIC.LIBRARIES=.sdata>
250					<STATIC.LIBRARY=.sdata:t>
251					<END.STATIC.LIBRARIES>
252					. = ALIGN(4);
253					<FOREACH.STATIC.OBJECTS=.data>
254					<STATIC.OBJECT=.data:t>
255					<END.STATIC.OBJECTS>
256					<FOREACH.STATIC.LIBRARIES=.data>
257					<STATIC.LIBRARY=.data:t>
258					<END.STATIC.LIBRARIES>
259					. = ALIGN(4);
260	SDK_OVERLAY_DIGEST		=.;
261					# NO DIGEST
262	SDK_OVERLAY_DIGEST_END		=.;
263					#:::::::::: Data
264					. = ALIGN(32);
265	SDK_STATIC_DATA_END		=.;
266	SDK_STATIC_END			=.;
267
268	SDK_STATIC_TEXT_SIZE		= SDK_STATIC_TEXT_END - SDK_STATIC_TEXT_START;
269	SDK_STATIC_DATA_SIZE		= SDK_STATIC_DATA_END - SDK_STATIC_DATA_START;
270	SDK_STATIC_SIZE			= SDK_STATIC_END      - SDK_STATIC_START;
271	__sinit__			= SDK_STATIC_SINIT_START;	# For static initializer
272	__exception_table_start__	= SDK_STATIC_ETABLE_START;	# For exception table
273	__exception_table_end__		= SDK_STATIC_ETABLE_END;	# For exception table
274	} > <STATIC.NAME>
275
276	.<STATIC.NAME>.bss:
277	{
278	ALIGNALL(4);			. = ALIGN(32);
279					<IF.NITRO_LCFSPEC.GE.2>
280					<FOREACH.STATIC.SEARCHSYMBOLS>
281					SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
282					<END.STATIC.SEARCHSYMBOLS>
283					<ENDIF>
284	#
285	#  BSS BLOCK
286	#
287	SDK_STATIC_BSS_START		=.;
288					#:::::::::: bss
289					<FOREACH.STATIC.OBJECTS=.sbss>
290					<STATIC.OBJECT=.sbss:t>
291					<END.STATIC.OBJECTS>
292					<FOREACH.STATIC.LIBRARIES=.sbss>
293					<STATIC.LIBRARY=.sbss:t>
294					<END.STATIC.LIBRARIES>
295					. = ALIGN(4);
296					<FOREACH.STATIC.OBJECTS=.bss>
297					<STATIC.OBJECT=.bss:t>
298					<END.STATIC.OBJECTS>
299					<FOREACH.STATIC.LIBRARIES=.bss>
300					<STATIC.LIBRARY=.bss:t>
301					<END.STATIC.LIBRARIES>
302					. = ALIGN(4);
303					#:::::::::: bss
304					. = ALIGN(32);
305	SDK_STATIC_BSS_END		= .;
306	SDK_STATIC_BSS_SIZE		= SDK_STATIC_BSS_END - SDK_STATIC_BSS_START;
307
308	} >> <STATIC.NAME>
309
310
311	############################ AUTOLOADS ##############################
312	SDK_AUTOLOAD.ITCM.START			= 0x01ff8000;
313	SDK_AUTOLOAD.ITCM.END			= SDK_AUTOLOAD.ITCM.START;
314	SDK_AUTOLOAD.ITCM.BSS_END		= SDK_AUTOLOAD.ITCM.START;
315	SDK_AUTOLOAD.ITCM.SIZE			= 0;
316	SDK_AUTOLOAD.ITCM.BSS_SIZE		= 0;
317	SDK_AUTOLOAD.DTCM.START			= 0x027e0000;
318	SDK_AUTOLOAD.DTCM.END			= SDK_AUTOLOAD.DTCM.START;
319	SDK_AUTOLOAD.DTCM.BSS_END		= SDK_AUTOLOAD.DTCM.START;
320	SDK_AUTOLOAD.DTCM.SIZE			= 0;
321	SDK_AUTOLOAD.DTCM.BSS_SIZE		= 0;
322	SDK_AUTOLOAD_START			= SDK_STATIC_END;
323	SDK_AUTOLOAD_SIZE			= 0;
324	SDK_AUTOLOAD_NUMBER			= <NUMBER.AUTOLOADS>;
325
326<FOREACH.AUTOLOADS>
327	.<AUTOLOAD.NAME>:
328	{
329	ALIGNALL(4);				. = ALIGN(32);
330						<IF.NITRO_LCFSPEC.GE.2>
331						<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
332						SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
333						<END.AUTOLOAD.SEARCHSYMBOLS>
334						<ENDIF>
335	#
336	#   TEXT BLOCK: READ ONLY
337	#
338	SDK_AUTOLOAD_<AUTOLOAD.NAME>_ID		=<AUTOLOAD.ID>;
339	SDK_AUTOLOAD.<AUTOLOAD.NAME>.ID		=<AUTOLOAD.ID>;
340	SDK_AUTOLOAD.<AUTOLOAD.NAME>.START	=.;
341	SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START	=.;
342						#:::::::::: text/rodata
343						<FOREACH.AUTOLOAD.OBJECTS=.text>
344						<AUTOLOAD.OBJECT=.text:t>
345						<END.AUTOLOAD.OBJECTS>
346						<FOREACH.AUTOLOAD.LIBRARIES=.text>
347						<AUTOLOAD.LIBRARY=.text:t>
348						<END.AUTOLOAD.LIBRARIES>
349						. = ALIGN(4);
350						<FOREACH.AUTOLOAD.OBJECTS=.itcm>
351						<AUTOLOAD.OBJECT=.itcm:t>
352						<END.AUTOLOAD.OBJECTS>
353						<FOREACH.AUTOLOAD.LIBRARIES=.itcm>
354						<AUTOLOAD.LIBRARY=.itcm:t>
355						<END.AUTOLOAD.LIBRARIES>
356						. = ALIGN(4);
357						<FOREACH.AUTOLOAD.OBJECTS=.rodata>
358						<AUTOLOAD.OBJECT=.rodata:t>
359						<END.AUTOLOAD.OBJECTS>
360						<FOREACH.AUTOLOAD.LIBRARIES=.rodata>
361						<AUTOLOAD.LIBRARY=.rodata:t>
362						<END.AUTOLOAD.LIBRARIES>
363						. = ALIGN(4);
364						#:::::::::: text/rodata
365	SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END	=.;
366
367	#
368	#  DATA BLOCK: READ WRITE BLOCK
369	#
370	SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START	=.;
371						#:::::::::: Data
372						<FOREACH.AUTOLOAD.OBJECTS=.sdata>
373						<AUTOLOAD.OBJECT=.sdata:t>
374						<END.AUTOLOAD.OBJECTS>
375						<FOREACH.AUTOLOAD.LIBRARIES=.sdata>
376						<AUTOLOAD.LIBRARY=.sdata:t>
377						<END.AUTOLOAD.LIBRARIES>
378						. = ALIGN(4);
379						<FOREACH.AUTOLOAD.OBJECTS=.data>
380						<AUTOLOAD.OBJECT=.data:t>
381						<END.AUTOLOAD.OBJECTS>
382						<FOREACH.AUTOLOAD.LIBRARIES=.data>
383						<AUTOLOAD.LIBRARY=.data:t>
384						<END.AUTOLOAD.LIBRARIES>
385						. = ALIGN(4);
386						<FOREACH.AUTOLOAD.OBJECTS=.dtcm>
387						<AUTOLOAD.OBJECT=.dtcm:t>
388						<END.AUTOLOAD.OBJECTS>
389						<FOREACH.AUTOLOAD.LIBRARIES=.dtcm>
390						<AUTOLOAD.LIBRARY=.dtcm:t>
391						<END.AUTOLOAD.LIBRARIES>
392						. = ALIGN(4);
393						#:::::::::: Data
394						. = ALIGN(32);
395	SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END	=.;
396	SDK_AUTOLOAD.<AUTOLOAD.NAME>.END	=.;
397
398	SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_SIZE	= SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START;
399	SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_SIZE	= SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START;
400	SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE	= SDK_AUTOLOAD.<AUTOLOAD.NAME>.END	- SDK_AUTOLOAD.<AUTOLOAD.NAME>.START;
401	SDK_AUTOLOAD_SIZE			= SDK_AUTOLOAD_SIZE + SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
402
403	} > <AUTOLOAD.NAME>
404
405	.<AUTOLOAD.NAME>.bss:
406	{
407	ALIGNALL(4);				. = ALIGN(32);
408						<IF.NITRO_LCFSPEC.GE.2>
409						<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
410						SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
411						<END.AUTOLOAD.SEARCHSYMBOLS>
412						<ENDIF>
413	#
414	#  BSS BLOCK
415	#
416	SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START	= .;
417						#:::::::::: bss
418						<FOREACH.AUTOLOAD.OBJECTS=.sbss>
419						<AUTOLOAD.OBJECT=.sbss:t>
420						<END.AUTOLOAD.OBJECTS>
421						<FOREACH.AUTOLOAD.LIBRARIES=.sbss>
422						<AUTOLOAD.LIBRARY=.sbss:t>
423						<END.AUTOLOAD.LIBRARIES>
424						. = ALIGN(4);
425						<FOREACH.AUTOLOAD.OBJECTS=.bss>
426						<AUTOLOAD.OBJECT=.bss:t>
427						<END.AUTOLOAD.OBJECTS>
428						<FOREACH.AUTOLOAD.LIBRARIES=.bss>
429						<AUTOLOAD.LIBRARY=.bss:t>
430						<END.AUTOLOAD.LIBRARIES>
431						. = ALIGN(4);
432						<FOREACH.AUTOLOAD.OBJECTS=.dtcm>
433						<AUTOLOAD.OBJECT=.dtcm.bss:t>
434						<END.AUTOLOAD.OBJECTS>
435						<FOREACH.AUTOLOAD.LIBRARIES=.dtcm>
436						<AUTOLOAD.LIBRARY=.dtcm.bss:t>
437						<END.AUTOLOAD.LIBRARIES>
438						. = ALIGN(4);
439						<FOREACH.AUTOLOAD.OBJECTS=.itcm>
440						<AUTOLOAD.OBJECT=.itcm.bss:t>
441						<END.AUTOLOAD.OBJECTS>
442						<FOREACH.AUTOLOAD.LIBRARIES=.itcm>
443						<AUTOLOAD.LIBRARY=.itcm.bss:t>
444						<END.AUTOLOAD.LIBRARIES>
445						. = ALIGN(4);
446						#:::::::::: bss
447						. = ALIGN(32);
448	SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END	= .;
449
450	SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE	= SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START;
451
452	} >> <AUTOLOAD.NAME>
453
454<END.AUTOLOADS>
455
456	SDK_AUTOLOAD_ITCM_START			= SDK_AUTOLOAD.ITCM.START;
457	SDK_AUTOLOAD_ITCM_END			= SDK_AUTOLOAD.ITCM.END;
458	SDK_AUTOLOAD_ITCM_BSS_END		= SDK_AUTOLOAD.ITCM.BSS_END;
459	SDK_AUTOLOAD_ITCM_SIZE			= SDK_AUTOLOAD.ITCM.SIZE;
460	SDK_AUTOLOAD_ITCM_BSS_SIZE		= SDK_AUTOLOAD.ITCM.BSS_SIZE;
461	SDK_AUTOLOAD_DTCM_START			= SDK_AUTOLOAD.DTCM.START;
462	SDK_AUTOLOAD_DTCM_END			= SDK_AUTOLOAD.DTCM.END;
463	SDK_AUTOLOAD_DTCM_BSS_END		= SDK_AUTOLOAD.DTCM.BSS_END;
464	SDK_AUTOLOAD_DTCM_SIZE			= SDK_AUTOLOAD.DTCM.SIZE;
465	SDK_AUTOLOAD_DTCM_BSS_SIZE		= SDK_AUTOLOAD.DTCM.BSS_SIZE;
466
467	############################ AUTOLOAD_INFO ##########################
468	.binary.AUTOLOAD_INFO:
469	{
470<FOREACH.AUTOLOADS>
471		WRITEW ADDR(.<AUTOLOAD.NAME>);
472		WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
473		WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE;
474<END.AUTOLOADS>
475	} > binary.AUTOLOAD_INFO
476
477	SDK_AUTOLOAD_LIST			= SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE;
478	SDK_AUTOLOAD_LIST_END			= SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO);
479	SDK_AUTOLOAD_SIZE			= SDK_AUTOLOAD_SIZE  + SIZEOF(.binary.AUTOLOAD_INFO);
480
481	############################ STATIC_FOOTER ##########################
482	.binary.STATIC_FOOTER:
483	{
484		WRITEW 0xdec00621;		# LE(0x2106C0DE) = NITRO CODE
485		WRITEW _start_ModuleParams - ADDR(.<STATIC.NAME>);
486		WRITEW 0;			# NO DIGEST
487	} > binary.STATIC_FOOTER
488
489	############################ OVERLAYS ###############################
490	SDK_OVERLAY_NUMBER			= <NUMBER.OVERLAYS>;
491
492<FOREACH.OVERLAYS>
493	.<OVERLAY.NAME>:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
494	{
495	ALIGNALL(4);				. = ALIGN(32);
496						<IF.NITRO_LCFSPEC.GE.2>
497						<FOREACH.OVERLAY.SEARCHSYMBOLS>
498						SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
499						<END.OVERLAY.SEARCHSYMBOLS>
500						<ENDIF>
501	#
502	#   TEXT BLOCK: READ ONLY
503	#
504	SDK_OVERLAY_<OVERLAY.NAME>_ID		=<OVERLAY.ID>;	### SEGMENT <OVERLAY.NAME> OVERLAY ID
505	SDK_OVERLAY.<OVERLAY.NAME>.ID		=<OVERLAY.ID>;
506	SDK_OVERLAY.<OVERLAY.NAME>.START	=.;
507	SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START	=.;
508						#:::::::::: text/rodata
509						<FOREACH.OVERLAY.OBJECTS=.text>
510						<OVERLAY.OBJECT=.text:t>
511						<END.OVERLAY.OBJECTS>
512						<FOREACH.OVERLAY.LIBRARIES=.text>
513						<OVERLAY.LIBRARY=.text:t>
514						<END.OVERLAY.LIBRARIES>
515						. = ALIGN(4);
516						<FOREACH.OVERLAY.OBJECTS=.rodata>
517						<OVERLAY.OBJECT=.rodata:t>
518						<END.OVERLAY.OBJECTS>
519						<FOREACH.OVERLAY.LIBRARIES=.rodata>
520						<OVERLAY.LIBRARY=.rodata:t>
521						<END.OVERLAY.LIBRARIES>
522						. = ALIGN(4);
523						<FOREACH.OVERLAY.OBJECTS=.init>
524						<OVERLAY.OBJECT=.init:t>
525						<END.OVERLAY.OBJECTS>
526						<FOREACH.OVERLAY.LIBRARIES=.init>
527						<OVERLAY.LIBRARY=.init:t>
528						<END.OVERLAY.LIBRARIES>
529						. = ALIGN(4);
530	SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START	=.;
531						#:::::::::: ctor
532						<FOREACH.OVERLAY.OBJECTS=.ctor>
533						<OVERLAY.OBJECT=.ctor:t>
534						<END.OVERLAY.OBJECTS>
535						<FOREACH.OVERLAY.LIBRARIES=.ctor>
536						<OVERLAY.LIBRARY=.ctor:t>
537						<END.OVERLAY.LIBRARIES>
538						<FOREACH.OVERLAY.OBJECTS=.sinit>
539						<OVERLAY.OBJECT=.sinit:t>
540						<END.OVERLAY.OBJECTS>
541						<FOREACH.OVERLAY.LIBRARIES=.sinit>
542						<OVERLAY.LIBRARY=.sinit:t>
543						<END.OVERLAY.LIBRARIES>
544						WRITEW	0;
545						#:::::::::: ctor
546	SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END	=.;
547
548						#:::::::::: text/rodata
549						. = ALIGN(32);
550	SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END	=.;
551
552	#
553	#  DATA BLOCK: READ WRITE
554	#
555	SDK_OVERLAY.<OVERLAY.NAME>.DATA_START	=.;
556						#:::::::::: Data
557						<FOREACH.OVERLAY.OBJECTS=.sdata>
558						<OVERLAY.OBJECT=.sdata:t>
559						<END.OVERLAY.OBJECTS>
560						<FOREACH.OVERLAY.LIBRARIES=.sdata>
561						<OVERLAY.LIBRARY=.sdata:t>
562						<END.OVERLAY.LIBRARIES>
563						. = ALIGN(4);
564						<FOREACH.OVERLAY.OBJECTS=.data>
565						<OVERLAY.OBJECT=.data:t>
566						<END.OVERLAY.OBJECTS>
567						<FOREACH.OVERLAY.LIBRARIES=.data>
568						<OVERLAY.LIBRARY=.data:t>
569						<END.OVERLAY.LIBRARIES>
570						. = ALIGN(4);
571						#:::::::::: Data
572						. = ALIGN(32);
573	SDK_OVERLAY.<OVERLAY.NAME>.DATA_END	=.;
574	SDK_OVERLAY.<OVERLAY.NAME>.END		=.;
575
576	SDK_OVERLAY.<OVERLAY.NAME>.TEXT_SIZE	= SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END - SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START;
577	SDK_OVERLAY.<OVERLAY.NAME>.DATA_SIZE	= SDK_OVERLAY.<OVERLAY.NAME>.DATA_END - SDK_OVERLAY.<OVERLAY.NAME>.DATA_START;
578	SDK_OVERLAY.<OVERLAY.NAME>.SIZE		= SDK_OVERLAY.<OVERLAY.NAME>.END      - SDK_OVERLAY.<OVERLAY.NAME>.START;
579
580	} > <OVERLAY.NAME>
581
582	.<OVERLAY.NAME>.bss:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
583	{
584	ALIGNALL(4);				. = ALIGN(32);
585						<IF.NITRO_LCFSPEC.GE.2>
586						<FOREACH.OVERLAY.SEARCHSYMBOLS>
587						SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
588						<END.OVERLAY.SEARCHSYMBOLS>
589						<ENDIF>
590	#
591	#  BSS BLOCK
592	#
593	SDK_OVERLAY.<OVERLAY.NAME>.BSS_START	= .;
594						#:::::::::: bss
595						<FOREACH.OVERLAY.OBJECTS=.bss>
596						<OVERLAY.OBJECT=.bss:t>
597						<END.OVERLAY.OBJECTS>
598						<FOREACH.OVERLAY.LIBRARIES=.bss>
599						<OVERLAY.LIBRARY=.bss:t>
600						<END.OVERLAY.LIBRARIES>
601						. = ALIGN(4);
602						<FOREACH.OVERLAY.OBJECTS=.sbss>
603						<OVERLAY.OBJECT=.sbss:t>
604						<END.OVERLAY.OBJECTS>
605						<FOREACH.OVERLAY.LIBRARIES=.sbss>
606						<OVERLAY.LIBRARY=.sbss:t>
607						<END.OVERLAY.LIBRARIES>
608						. = ALIGN(4);
609						#:::::::::: bss
610						. = ALIGN(32);
611	SDK_OVERLAY.<OVERLAY.NAME>.BSS_END	= .;
612
613	SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE	= SDK_OVERLAY.<OVERLAY.NAME>.BSS_END - SDK_OVERLAY.<OVERLAY.NAME>.BSS_START;
614
615	} >> <OVERLAY.NAME>
616
617<END.OVERLAYS>
618
619	############################ MAIN EX ##################################
620	# MAIN EX Area
621	.dummy.MAIN_EX:
622	{
623		. = ALIGN(32);
624	} > dummy.MAIN_EX
625
626	############################ ARENA ##################################
627	.arena.MAIN:
628	{
629						. = ALIGN(32);
630		SDK_SECTION_ARENA_START		=.;
631	} > arena.MAIN
632
633	.arena.MAIN_EX:
634	{
635						. = ALIGN(32);
636		SDK_SECTION_ARENA_EX_START	=.;
637	} > arena.MAIN_EX
638
639	.arena.ITCM:
640	{
641						. = ALIGN(32);
642		SDK_SECTION_ARENA_ITCM_START	=.;
643	} > arena.ITCM
644
645	.arena.DTCM:
646	{
647						. = ALIGN(32);
648		SDK_SECTION_ARENA_DTCM_START	=.;
649	} > arena.DTCM
650
651	############################ OVERLAYDEFS ############################
652	.<PROPERTY.OVERLAYDEFS>:
653	{
654		###  <STATIC.NAME> module information
655		WRITEW ADDR(.<STATIC.NAME>);			# Load address
656		WRITEW _start;					# Entry address
657		WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE;	# Size of module
658		WRITEW _start_AutoloadDoneCallback;		# Callback autoload done
659
660		###  overlay filename
661		<FOREACH.OVERLAYS>
662		WRITES ("<OVERLAY.NAME><PROPERTY.SUFFIX>");	# Overlay <OVERLAY.ID>
663		<END.OVERLAYS>
664
665	} > <PROPERTY.OVERLAYDEFS>
666
667
668	############################ OVERLAYTABLE ###########################
669	.<PROPERTY.OVERLAYTABLE>:
670	{
671		<FOREACH.OVERLAYS>
672		#	 Overlay <OVERLAY.ID>
673		WRITEW <OVERLAY.ID>;				# Overlay ID
674		WRITEW ADDR(.<OVERLAY.NAME>);			# Load address
675		WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SIZE;		# Size of module
676		WRITEW SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE;	# Size of bss
677		WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START;	# Start address of static init
678		WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END;	# End address of static init
679		WRITEW <OVERLAY.ID>;				# ROM file ID
680		WRITEW 0;					# Reserved
681
682		<END.OVERLAYS>
683
684	} > <PROPERTY.OVERLAYTABLE>
685
686
687	############################ OTHERS #################################
688	SDK_MAIN_ARENA_LO = SDK_SECTION_ARENA_START;
689	SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>;	# Allocated in DTCM
690	SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>;		# When 0 means all remains of DTCM
691
692	# Module filelist
693	.binary.MODULE_FILES:
694	{
695		WRITES ("<STATIC.NAME><PROPERTY.SUFFIX>");
696		WRITES ("<PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>");
697		WRITES ("<PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>");
698	} > binary.MODULE_FILES
699
700	# ITCM/DTCM size checker => check AUTOLOAD_ITCM/DTCM
701	.check.ITCM:
702	{
703		. = . + SDK_AUTOLOAD_ITCM_SIZE + SDK_AUTOLOAD_ITCM_BSS_SIZE;
704	} > check.ITCM
705
706	SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1;
707	.check.DTCM:
708	{
709		. = . + SDK_AUTOLOAD_DTCM_SIZE + SDK_AUTOLOAD_DTCM_BSS_SIZE;
710		. = . + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
711	} > check.DTCM
712
713}
714