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