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