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