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