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