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