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	binary.COMP_SPEC_LIST		(RW)  : ORIGIN = 0x0, LENGTH = 0x0     > compspec.list
99	check.ITCM			(RWX) : ORIGIN = 0x01ff8000, LENGTH = 0x08000   > itcm.check
100	check.DTCM			(RW)  : ORIGIN = 0x027e0000, LENGTH = 0x04000   > dtcm.check
101	check.MAIN			(RW)  :	ORIGIN = 0x02000000, LENGTH = 0x03e0000 > main.check
102}
103
104FORCE_ACTIVE
105{
106	SVC_SoftReset
107}
108
109KEEP_SECTION
110{
111	.sinit
112}
113
114SECTIONS
115{
116	############################ STATIC #################################
117	.<STATIC.NAME>:
118	{
119	ALIGNALL(4);			. = ALIGN(32);	# Fit to cache line
120					<IF.NITRO_LCFSPEC.GE.2>
121					<FOREACH.STATIC.SEARCHSYMBOLS>
122					SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
123					<END.STATIC.SEARCHSYMBOLS>
124					<ENDIF>
125	#
126	#  TEXT BLOCK: READ ONLY
127	#
128	SDK_STATIC_START		=.;
129	SDK_STATIC_TEXT_START		=.;
130					#:::::::::: text/rodata
131					libsyscall.a (.text)
132					crt0.o (.text)
133					crt0.o (.rodata)
134					#
135					# Added .version section.
136					# The information included in this section will be needed for Lotcheck purposes. Be sure to leave it in this position.
137					#
138					#
139					* (.version)
140					OBJECT(NitroMain,*)
141					<FOREACH.STATIC.FORCES>
142					FORCE_OBJECT<STATIC.FORCE>
143					<END.STATIC.FORCES>
144					<FOREACH.STATIC.OBJECTS=.text>
145					<STATIC.OBJECT=.text:t>
146					<END.STATIC.OBJECTS>
147					<FOREACH.STATIC.LIBRARIES=.text>
148					<STATIC.LIBRARY=.text:t>
149					<END.STATIC.LIBRARIES>
150					. = ALIGN(4);
151					* (.exception)
152					. = ALIGN(4);
153	SDK_STATIC_ETABLE_START		=.;
154					EXCEPTION
155	SDK_STATIC_ETABLE_END		=.;
156					. = ALIGN(4);
157					<FOREACH.STATIC.OBJECTS=.init>
158					<STATIC.OBJECT=.init:t>
159					<END.STATIC.OBJECTS>
160					<FOREACH.STATIC.LIBRARIES=.init>
161					<STATIC.LIBRARY=.init:t>
162					<END.STATIC.LIBRARIES>
163					. = ALIGN(4);
164					<FOREACH.STATIC.OBJECTS=.rodata>
165					<STATIC.OBJECT=.rodata:t>
166					<END.STATIC.OBJECTS>
167					<FOREACH.STATIC.LIBRARIES=.rodata>
168					<STATIC.LIBRARY=.rodata:t>
169					<END.STATIC.LIBRARIES>
170					. = ALIGN(4);
171
172	SDK_STATIC_SINIT_START		=.;
173					#:::::::::: ctor
174					<FOREACH.STATIC.OBJECTS=.ctor>
175					<STATIC.OBJECT=.ctor:t>
176					<END.STATIC.OBJECTS>
177					<FOREACH.STATIC.LIBRARIES=.ctor>
178					<STATIC.LIBRARY=.ctor:t>
179					<END.STATIC.LIBRARIES>
180					<FOREACH.STATIC.OBJECTS=.sinit>
181					<STATIC.OBJECT=.sinit:t>
182					<END.STATIC.OBJECTS>
183					<FOREACH.STATIC.LIBRARIES=.sinit>
184					<STATIC.LIBRARY=.sinit:t>
185					<END.STATIC.LIBRARIES>
186					WRITEW	0;
187					#:::::::::: ctor
188	SDK_STATIC_SINIT_END		=.;
189
190					#:::::::::: text/rodata
191					. = ALIGN(32);
192	SDK_STATIC_TEXT_END		=.;
193
194	#
195	#  DATA BLOCK: READ WRITE
196	#
197	SDK_STATIC_DATA_START		=.;
198					#:::::::::: data
199					<FOREACH.STATIC.OBJECTS=.sdata>
200					<STATIC.OBJECT=.sdata:t>
201					<END.STATIC.OBJECTS>
202					<FOREACH.STATIC.LIBRARIES=.sdata>
203					<STATIC.LIBRARY=.sdata:t>
204					<END.STATIC.LIBRARIES>
205					. = ALIGN(4);
206					<FOREACH.STATIC.OBJECTS=.data>
207					<STATIC.OBJECT=.data:t>
208					<END.STATIC.OBJECTS>
209					<FOREACH.STATIC.LIBRARIES=.data>
210					<STATIC.LIBRARY=.data:t>
211					<END.STATIC.LIBRARIES>
212					. = ALIGN(4);
213
214	SDK_OVERLAYTABLE_DIGEST		=.;
215					. = . + 20;
216	SDK_OVERLAYTABLE_DIGEST_END	=.;
217	SDK_OVERLAY_DIGEST		=.;
218					. = . + <NUMBER.OVERLAYS> * 20;
219	SDK_OVERLAY_DIGEST_END		=.;
220
221					#:::::::::: data
222					. = ALIGN(32);
223	SDK_STATIC_DATA_END		=.;
224	SDK_STATIC_END			=.;
225
226	SDK_STATIC_TEXT_SIZE		= SDK_STATIC_TEXT_END - SDK_STATIC_TEXT_START;
227	SDK_STATIC_DATA_SIZE		= SDK_STATIC_DATA_END - SDK_STATIC_DATA_START;
228	SDK_STATIC_SIZE			= SDK_STATIC_END      - SDK_STATIC_START;
229	__sinit__			= SDK_STATIC_SINIT_START;	# for static initializer
230	__exception_table_start__	= SDK_STATIC_ETABLE_START;	# for exception table
231	__exception_table_end__		= SDK_STATIC_ETABLE_END;	# for exception table
232	} > <STATIC.NAME>
233
234	.<STATIC.NAME>.bss:
235	{
236	ALIGNALL(4);			. = ALIGN(32);
237					<IF.NITRO_LCFSPEC.GE.2>
238					<FOREACH.STATIC.SEARCHSYMBOLS>
239					SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
240					<END.STATIC.SEARCHSYMBOLS>
241					<ENDIF>
242	#
243	#  BSS BLOCK
244	#
245	SDK_STATIC_BSS_START		=.;
246					#:::::::::: bss
247					<FOREACH.STATIC.OBJECTS=.sbss>
248					<STATIC.OBJECT=.sbss:t>
249					<END.STATIC.OBJECTS>
250					<FOREACH.STATIC.LIBRARIES=.sbss>
251					<STATIC.LIBRARY=.sbss:t>
252					<END.STATIC.LIBRARIES>
253					. = ALIGN(4);
254					<FOREACH.STATIC.OBJECTS=.bss>
255					<STATIC.OBJECT=.bss:t>
256					<END.STATIC.OBJECTS>
257					<FOREACH.STATIC.LIBRARIES=.bss>
258					<STATIC.LIBRARY=.bss:t>
259					<END.STATIC.LIBRARIES>
260					. = ALIGN(4);
261					#:::::::::: bss
262					. = ALIGN(32);
263	SDK_STATIC_BSS_END		= .;
264	SDK_STATIC_BSS_SIZE		= SDK_STATIC_BSS_END - SDK_STATIC_BSS_START;
265
266	} >> <STATIC.NAME>
267
268
269	############################ AUTOLOADS ##############################
270	SDK_AUTOLOAD.ITCM.START			= 0x01ff8000;
271	SDK_AUTOLOAD.ITCM.END			= SDK_AUTOLOAD.ITCM.START;
272	SDK_AUTOLOAD.ITCM.BSS_END		= SDK_AUTOLOAD.ITCM.START;
273	SDK_AUTOLOAD.ITCM.SIZE			= 0;
274	SDK_AUTOLOAD.ITCM.BSS_SIZE		= 0;
275	SDK_AUTOLOAD.DTCM.START			= 0x027e0000;
276	SDK_AUTOLOAD.DTCM.END			= SDK_AUTOLOAD.DTCM.START;
277	SDK_AUTOLOAD.DTCM.BSS_END		= SDK_AUTOLOAD.DTCM.START;
278	SDK_AUTOLOAD.DTCM.SIZE			= 0;
279	SDK_AUTOLOAD.DTCM.BSS_SIZE		= 0;
280	SDK_AUTOLOAD_START			= SDK_STATIC_END;
281	SDK_AUTOLOAD_SIZE			= 0;
282	SDK_AUTOLOAD_NUMBER			= <NUMBER.AUTOLOADS>;
283
284<FOREACH.AUTOLOADS>
285	.<AUTOLOAD.NAME>:
286	{
287	ALIGNALL(4);				. = ALIGN(32);
288						<IF.NITRO_LCFSPEC.GE.2>
289						<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
290						SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
291						<END.AUTOLOAD.SEARCHSYMBOLS>
292						<ENDIF>
293	#
294	#   TEXT BLOCK: READ ONLY
295	#
296	SDK_AUTOLOAD_<AUTOLOAD.NAME>_ID		=<AUTOLOAD.ID>;
297	SDK_AUTOLOAD.<AUTOLOAD.NAME>.ID		=<AUTOLOAD.ID>;
298	SDK_AUTOLOAD.<AUTOLOAD.NAME>.START	=.;
299	SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START	=.;
300						#:::::::::: text/rodata
301						<FOREACH.AUTOLOAD.FORCES>
302						FORCE_OBJECT<AUTOLOAD.FORCE>
303						<END.AUTOLOAD.FORCES>
304						<FOREACH.AUTOLOAD.OBJECTS=.text>
305						<AUTOLOAD.OBJECT=.text:t>
306						<END.AUTOLOAD.OBJECTS>
307						<FOREACH.AUTOLOAD.LIBRARIES=.text>
308						<AUTOLOAD.LIBRARY=.text:t>
309						<END.AUTOLOAD.LIBRARIES>
310						. = ALIGN(4);
311						<FOREACH.AUTOLOAD.OBJECTS=.itcm>
312						<AUTOLOAD.OBJECT=.itcm:t>
313						<END.AUTOLOAD.OBJECTS>
314						<FOREACH.AUTOLOAD.LIBRARIES=.itcm>
315						<AUTOLOAD.LIBRARY=.itcm:t>
316						<END.AUTOLOAD.LIBRARIES>
317						. = ALIGN(4);
318						<FOREACH.AUTOLOAD.OBJECTS=.rodata>
319						<AUTOLOAD.OBJECT=.rodata:t>
320						<END.AUTOLOAD.OBJECTS>
321						<FOREACH.AUTOLOAD.LIBRARIES=.rodata>
322						<AUTOLOAD.LIBRARY=.rodata:t>
323						<END.AUTOLOAD.LIBRARIES>
324						. = ALIGN(4);
325						#:::::::::: text/rodata
326	SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END	=.;
327
328	#
329	#  DATA BLOCK: READ WRITE BLOCK
330	#
331	SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START	=.;
332						#:::::::::: data
333						<FOREACH.AUTOLOAD.OBJECTS=.sdata>
334						<AUTOLOAD.OBJECT=.sdata:t>
335						<END.AUTOLOAD.OBJECTS>
336						<FOREACH.AUTOLOAD.LIBRARIES=.sdata>
337						<AUTOLOAD.LIBRARY=.sdata:t>
338						<END.AUTOLOAD.LIBRARIES>
339						. = ALIGN(4);
340						<FOREACH.AUTOLOAD.OBJECTS=.data>
341						<AUTOLOAD.OBJECT=.data:t>
342						<END.AUTOLOAD.OBJECTS>
343						<FOREACH.AUTOLOAD.LIBRARIES=.data>
344						<AUTOLOAD.LIBRARY=.data:t>
345						<END.AUTOLOAD.LIBRARIES>
346						. = ALIGN(4);
347						<FOREACH.AUTOLOAD.OBJECTS=.dtcm>
348						<AUTOLOAD.OBJECT=.dtcm:t>
349						<END.AUTOLOAD.OBJECTS>
350						<FOREACH.AUTOLOAD.LIBRARIES=.dtcm>
351						<AUTOLOAD.LIBRARY=.dtcm:t>
352						<END.AUTOLOAD.LIBRARIES>
353						. = ALIGN(4);
354						#:::::::::: data
355						. = ALIGN(32);
356	SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END	=.;
357	SDK_AUTOLOAD.<AUTOLOAD.NAME>.END	=.;
358
359	SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_SIZE	= SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START;
360	SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_SIZE	= SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START;
361	SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE	= SDK_AUTOLOAD.<AUTOLOAD.NAME>.END      - SDK_AUTOLOAD.<AUTOLOAD.NAME>.START;
362	SDK_AUTOLOAD_SIZE			= SDK_AUTOLOAD_SIZE + SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
363
364	} > <AUTOLOAD.NAME>
365
366	.<AUTOLOAD.NAME>.bss:
367	{
368	ALIGNALL(4);				. = ALIGN(32);
369						<IF.NITRO_LCFSPEC.GE.2>
370						<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
371						SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
372						<END.AUTOLOAD.SEARCHSYMBOLS>
373						<ENDIF>
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						<FOREACH.AUTOLOAD.OBJECTS=.dtcm>
394						<AUTOLOAD.OBJECT=.dtcm.bss:t>
395						<END.AUTOLOAD.OBJECTS>
396						<FOREACH.AUTOLOAD.LIBRARIES=.dtcm>
397						<AUTOLOAD.LIBRARY=.dtcm.bss:t>
398						<END.AUTOLOAD.LIBRARIES>
399						. = ALIGN(4);
400						<FOREACH.AUTOLOAD.OBJECTS=.itcm>
401						<AUTOLOAD.OBJECT=.itcm.bss:t>
402						<END.AUTOLOAD.OBJECTS>
403						<FOREACH.AUTOLOAD.LIBRARIES=.itcm>
404						<AUTOLOAD.LIBRARY=.itcm.bss:t>
405						<END.AUTOLOAD.LIBRARIES>
406						. = ALIGN(4);
407						#:::::::::: bss
408						. = ALIGN(32);
409	SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END	= .;
410
411	SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE	= SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START;
412
413	} >> <AUTOLOAD.NAME>
414
415<END.AUTOLOADS>
416
417	SDK_AUTOLOAD_ITCM_START			= SDK_AUTOLOAD.ITCM.START;
418	SDK_AUTOLOAD_ITCM_END			= SDK_AUTOLOAD.ITCM.END;
419	SDK_AUTOLOAD_ITCM_BSS_END		= SDK_AUTOLOAD.ITCM.BSS_END;
420	SDK_AUTOLOAD_ITCM_SIZE			= SDK_AUTOLOAD.ITCM.SIZE;
421	SDK_AUTOLOAD_ITCM_BSS_SIZE		= SDK_AUTOLOAD.ITCM.BSS_SIZE;
422	SDK_AUTOLOAD_DTCM_START			= SDK_AUTOLOAD.DTCM.START;
423	SDK_AUTOLOAD_DTCM_END			= SDK_AUTOLOAD.DTCM.END;
424	SDK_AUTOLOAD_DTCM_BSS_END		= SDK_AUTOLOAD.DTCM.BSS_END;
425	SDK_AUTOLOAD_DTCM_SIZE			= SDK_AUTOLOAD.DTCM.SIZE;
426	SDK_AUTOLOAD_DTCM_BSS_SIZE		= SDK_AUTOLOAD.DTCM.BSS_SIZE;
427
428	############################ AUTOLOAD_INFO ##########################
429	.binary.AUTOLOAD_INFO:
430	{
431<FOREACH.AUTOLOADS>
432		WRITEW ADDR(.<AUTOLOAD.NAME>);
433		WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
434		WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE;
435<END.AUTOLOADS>
436	} > binary.AUTOLOAD_INFO
437
438	SDK_AUTOLOAD_LIST			= SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE;
439	SDK_AUTOLOAD_LIST_END			= SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO);
440	SDK_AUTOLOAD_SIZE			= SDK_AUTOLOAD_SIZE  + SIZEOF(.binary.AUTOLOAD_INFO);
441
442	############################ STATIC_FOOTER ##########################
443	.binary.STATIC_FOOTER:
444	{
445		WRITEW 0xdec00621;		# LE(0x2106C0DE) = NITRO CODE
446		WRITEW _start_ModuleParams - ADDR(.<STATIC.NAME>);
447		WRITEW SDK_OVERLAY_DIGEST  - ADDR(.<STATIC.NAME>);
448	} > binary.STATIC_FOOTER
449
450	############################ OVERLAYS ###############################
451	SDK_OVERLAY_NUMBER 			= <NUMBER.OVERLAYS>;
452
453<FOREACH.OVERLAYS>
454	.<OVERLAY.NAME>:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
455	{
456	ALIGNALL(4);				. = ALIGN(32);
457						<IF.NITRO_LCFSPEC.GE.2>
458						<FOREACH.OVERLAY.SEARCHSYMBOLS>
459						SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
460						<END.OVERLAY.SEARCHSYMBOLS>
461						<ENDIF>
462	#
463	#   TEXT BLOCK: READ ONLY
464	#
465	SDK_OVERLAY_<OVERLAY.NAME>_ID		=<OVERLAY.ID>;	### SEGMENT <OVERLAY.NAME> OVERLAY ID
466	SDK_OVERLAY.<OVERLAY.NAME>.ID		=<OVERLAY.ID>;
467	SDK_OVERLAY.<OVERLAY.NAME>.START	=.;
468	SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START	=.;
469						#:::::::::: text/rodata
470						<FOREACH.OVERLAY.FORCES>
471						FORCE_OBJECT<OVERLAY.FORCE>
472						<END.OVERLAY.FORCES>
473						<FOREACH.OVERLAY.OBJECTS=.text>
474						<OVERLAY.OBJECT=.text:t>
475						<END.OVERLAY.OBJECTS>
476						<FOREACH.OVERLAY.LIBRARIES=.text>
477						<OVERLAY.LIBRARY=.text:t>
478						<END.OVERLAY.LIBRARIES>
479						. = ALIGN(4);
480						<FOREACH.OVERLAY.OBJECTS=.rodata>
481						<OVERLAY.OBJECT=.rodata:t>
482						<END.OVERLAY.OBJECTS>
483						<FOREACH.OVERLAY.LIBRARIES=.rodata>
484						<OVERLAY.LIBRARY=.rodata:t>
485						<END.OVERLAY.LIBRARIES>
486						. = ALIGN(4);
487						<FOREACH.OVERLAY.OBJECTS=.init>
488						<OVERLAY.OBJECT=.init:t>
489						<END.OVERLAY.OBJECTS>
490						<FOREACH.OVERLAY.LIBRARIES=.init>
491						<OVERLAY.LIBRARY=.init:t>
492						<END.OVERLAY.LIBRARIES>
493						. = ALIGN(4);
494	SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START	=.;
495						#:::::::::: ctor
496						<FOREACH.OVERLAY.OBJECTS=.ctor>
497						<OVERLAY.OBJECT=.ctor:t>
498						<END.OVERLAY.OBJECTS>
499						<FOREACH.OVERLAY.LIBRARIES=.ctor>
500						<OVERLAY.LIBRARY=.ctor:t>
501						<END.OVERLAY.LIBRARIES>
502						<FOREACH.OVERLAY.OBJECTS=.sinit>
503						<OVERLAY.OBJECT=.sinit:t>
504						<END.OVERLAY.OBJECTS>
505						<FOREACH.OVERLAY.LIBRARIES=.sinit>
506						<OVERLAY.LIBRARY=.sinit:t>
507						<END.OVERLAY.LIBRARIES>
508						WRITEW	0;
509						#:::::::::: ctor
510	SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END	=.;
511
512						#:::::::::: text/rodata
513						. = ALIGN(32);
514	SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END	=.;
515
516	#
517	#  DATA BLOCK: READ WRITE
518	#
519	SDK_OVERLAY.<OVERLAY.NAME>.DATA_START	=.;
520						#:::::::::: data
521						<FOREACH.OVERLAY.OBJECTS=.sdata>
522						<OVERLAY.OBJECT=.sdata:t>
523						<END.OVERLAY.OBJECTS>
524						<FOREACH.OVERLAY.LIBRARIES=.sdata>
525						<OVERLAY.LIBRARY=.sdata:t>
526						<END.OVERLAY.LIBRARIES>
527						. = ALIGN(4);
528						<FOREACH.OVERLAY.OBJECTS=.data>
529						<OVERLAY.OBJECT=.data:t>
530						<END.OVERLAY.OBJECTS>
531						<FOREACH.OVERLAY.LIBRARIES=.data>
532						<OVERLAY.LIBRARY=.data:t>
533						<END.OVERLAY.LIBRARIES>
534						. = ALIGN(4);
535						#:::::::::: data
536						. = ALIGN(32);
537	SDK_OVERLAY.<OVERLAY.NAME>.DATA_END	=.;
538	SDK_OVERLAY.<OVERLAY.NAME>.END		=.;
539
540	SDK_OVERLAY.<OVERLAY.NAME>.TEXT_SIZE	= SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END - SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START;
541	SDK_OVERLAY.<OVERLAY.NAME>.DATA_SIZE	= SDK_OVERLAY.<OVERLAY.NAME>.DATA_END - SDK_OVERLAY.<OVERLAY.NAME>.DATA_START;
542	SDK_OVERLAY.<OVERLAY.NAME>.SIZE		= SDK_OVERLAY.<OVERLAY.NAME>.END      - SDK_OVERLAY.<OVERLAY.NAME>.START;
543
544	} > <OVERLAY.NAME>
545
546	.<OVERLAY.NAME>.bss:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
547	{
548	ALIGNALL(4);				. = ALIGN(32);
549						<IF.NITRO_LCFSPEC.GE.2>
550						<FOREACH.OVERLAY.SEARCHSYMBOLS>
551						SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
552						<END.OVERLAY.SEARCHSYMBOLS>
553						<ENDIF>
554	#
555	#  BSS BLOCK
556	#
557	SDK_OVERLAY.<OVERLAY.NAME>.BSS_START	= .;
558						#:::::::::: bss
559						<FOREACH.OVERLAY.OBJECTS=.bss>
560						<OVERLAY.OBJECT=.bss:t>
561						<END.OVERLAY.OBJECTS>
562						<FOREACH.OVERLAY.LIBRARIES=.bss>
563						<OVERLAY.LIBRARY=.bss:t>
564						<END.OVERLAY.LIBRARIES>
565						. = ALIGN(4);
566						<FOREACH.OVERLAY.OBJECTS=.sbss>
567						<OVERLAY.OBJECT=.sbss:t>
568						<END.OVERLAY.OBJECTS>
569						<FOREACH.OVERLAY.LIBRARIES=.sbss>
570						<OVERLAY.LIBRARY=.sbss:t>
571						<END.OVERLAY.LIBRARIES>
572						. = ALIGN(4);
573						#:::::::::: bss
574						. = ALIGN(32);
575	SDK_OVERLAY.<OVERLAY.NAME>.BSS_END	= .;
576
577	SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE	= SDK_OVERLAY.<OVERLAY.NAME>.BSS_END - SDK_OVERLAY.<OVERLAY.NAME>.BSS_START;
578
579	} >> <OVERLAY.NAME>
580
581<END.OVERLAYS>
582
583	############################ MAIN EX ##################################
584	# MAIN EX Area
585	.dummy.MAIN_EX:
586	{
587		. = ALIGN(32);
588	} > dummy.MAIN_EX
589
590	############################ ARENA ##################################
591	.arena.MAIN:
592	{
593						. = ALIGN(32);
594		SDK_SECTION_ARENA_START		=.;
595	} > arena.MAIN
596
597	.arena.MAIN_EX:
598	{
599						. = ALIGN(32);
600		SDK_SECTION_ARENA_EX_START	=.;
601	} > arena.MAIN_EX
602
603	.arena.ITCM:
604	{
605						. = ALIGN(32);
606		SDK_SECTION_ARENA_ITCM_START	=.;
607	} > arena.ITCM
608
609	.arena.DTCM:
610	{
611						. = ALIGN(32);
612		SDK_SECTION_ARENA_DTCM_START	=.;
613	} > arena.DTCM
614
615	############################ OVERLAYDEFS ############################
616	.<PROPERTY.OVERLAYDEFS>:
617	{
618		###  <STATIC.NAME> module information
619		WRITEW ADDR(.<STATIC.NAME>);			# load address
620		WRITEW _start;					# entry address
621		WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE;	# size of module
622		WRITEW _start_AutoloadDoneCallback;		# callback autoload done
623
624		###  overlay filename
625		<FOREACH.OVERLAYS>
626		WRITES ("<OVERLAY.NAME><PROPERTY.SUFFIX>");	# Overlay <OVERLAY.ID>
627		<END.OVERLAYS>
628
629	} > <PROPERTY.OVERLAYDEFS>
630
631
632	############################ OVERLAYTABLE ###########################
633	.<PROPERTY.OVERLAYTABLE>:
634	{
635		<FOREACH.OVERLAYS>
636		#	 Overlay <OVERLAY.ID>
637		WRITEW <OVERLAY.ID>;				# overlay ID
638		WRITEW ADDR(.<OVERLAY.NAME>);			# load address
639		WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SIZE;		# size of module
640		WRITEW SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE;	# size of bss
641		WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START;	# start address of static init
642		WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END;	# end address of static init
643		WRITEW <OVERLAY.ID>;				# ROM file ID
644		WRITEW 0;					# Reserved
645
646		<END.OVERLAYS>
647
648	} > <PROPERTY.OVERLAYTABLE>
649
650
651	############################ OTHERS #################################
652	SDK_MAIN_ARENA_LO = SDK_SECTION_ARENA_START;
653	SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>;	# allocated in DTCM
654	SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>;		# when 0 means all remains of DTCM
655
656	# Module filelist
657	.binary.MODULE_FILES:
658	{
659		WRITES ("<STATIC.NAME><PROPERTY.SUFFIX>");
660		WRITES ("<PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>");
661		WRITES ("<PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>");
662	} > binary.MODULE_FILES
663
664	# Compression Spec List
665	.binary.COMP_SPEC_LIST:
666	{
667		<FOREACH.OVERLAYS>
668		WRITES ("<OVERLAY.NAME><PROPERTY.SUFFIX>,<OVERLAY.COMPRESS>");	# Overlay <OVERLAY.ID>
669		<END.OVERLAYS>
670	} > binary.COMP_SPEC_LIST
671
672	# ITCM/DTCM size checker => check AUTOLOAD_ITCM/DTCM
673	.check.ITCM:
674	{
675		. = SDK_SECTION_ARENA_ITCM_START;
676	} > check.ITCM
677
678	SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1;
679	.check.DTCM:
680	{
681		. = SDK_SECTION_ARENA_DTCM_START;
682		. = . + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
683	} > check.DTCM
684
685	.check.MAIN:
686	{
687		. = SDK_SECTION_ARENA_START;
688
689	} > check.MAIN
690
691}
692