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