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