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