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