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