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