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