1#---------------------------------------------------------------------------
2#  Project:  TwlSDK - include
3#  File:     ARM9-TS.lcf.template
4#
5#  Copyright 2007-2009 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#  $Date:: 2009-11-11#$
14#  $Rev: 11140 $
15#  $Author: kitase_hirotake $
16#---------------------------------------------------------------------------
17MEMORY
18{
19	<STATIC.NAME>				(RWX) :	ORIGIN = <STATIC.ADDRESS>,		LENGTH = 0x0	>	<STATIC.NAME><PROPERTY.FLXSUFFIX>
20
21	<FOREACH.AUTOLOADS>
22	<AUTOLOAD.NAME>				(RWX) :	ORIGIN = <AUTOLOAD.ADDRESS>,	LENGTH = 0x0	>>	<STATIC.NAME><PROPERTY.FLXSUFFIX>
23	<END.AUTOLOADS>
24	binary.AUTOLOAD_INFO		(RWX) :	ORIGIN = 0,						LENGTH = 0x0	>>	<STATIC.NAME><PROPERTY.FLXSUFFIX>
25	binary.STATIC_FOOTER		(RWX) :	ORIGIN = 0,						LENGTH = 0x0	>>	<STATIC.NAME><PROPERTY.FLXSUFFIX>
26
27	<PROPERTY.OVERLAYDEFS>F		(RW)  :	ORIGIN = 0,						LENGTH = 0x0	>	<PROPERTY.OVERLAYDEFS><PROPERTY.FLXSUFFIX>
28	<PROPERTY.OVERLAYTABLE>F	(RW)  :	ORIGIN = 0,						LENGTH = 0x0	>	<PROPERTY.OVERLAYTABLE><PROPERTY.FLXSUFFIX>
29	<FOREACH.OVERLAYS>
30	<OVERLAY.NAME>				(RWXO):	ORIGIN = <OVERLAY.ADDRESS>,		LENGTH = 0x0	>	<OVERLAY.NAME><PROPERTY.FLXSUFFIX>
31	<END.OVERLAYS>
32
33	dummy.MAIN_EX.NITRO			(RW)  :	ORIGIN = 0x023e0000,	LENGTH = 0x0
34	arena.MAIN.NITRO			(RW)  :	ORIGIN = AFTER(<STATIC.NAME><FOREACH.OVERLAYS=MAIN>,<OVERLAY.NAME><END.OVERLAYS>),	LENGTH = 0x0
35	arena.MAIN_EX.NITRO			(RW)  :	ORIGIN = AFTER(dummy.MAIN_EX.NITRO<FOREACH.OVERLAYS=MAINEX>,<OVERLAY.NAME><END.OVERLAYS>),	LENGTH = 0x0
36	arena.ITCM					(RW)  :	ORIGIN = AFTER(ITCM<FOREACH.OVERLAYS=ITCM>,<OVERLAY.NAME><END.OVERLAYS>),	LENGTH = 0x0
37	arena.DTCM					(RW)  :	ORIGIN = AFTER(DTCM<FOREACH.OVERLAYS=DTCM>,<OVERLAY.NAME><END.OVERLAYS>),	LENGTH = 0x0
38
39	check.ITCM					(RW)  :	ORIGIN = 0x0,					LENGTH = 0x08000	>	itcm.check
40	check.DTCM					(RW)  :	ORIGIN = 0x0,					LENGTH = 0x04000	>	dtcm.check
41
42	binary.LTDAUTOLOAD_TOP		(RW)  :	ORIGIN = 0,						LENGTH = 0x0	>	<STATIC.NAME><PROPERTY.LTDSUFFIX>
43	<FOREACH.LTDAUTOLOADS>
44	<LTDAUTOLOAD.NAME>			(RWX) :	ORIGIN = <LTDAUTOLOAD.ADDRESS>,	LENGTH = 0x0	>>	<STATIC.NAME><PROPERTY.LTDSUFFIX>
45	<END.LTDAUTOLOADS>
46	binary.LTDAUTOLOAD_INFO		(RWX) :	ORIGIN = 0,						LENGTH = 0x0	>>	<STATIC.NAME><PROPERTY.LTDSUFFIX>
47
48	<PROPERTY.LTDOVERLAYDEFS>L	(RW)  :	ORIGIN = 0,						LENGTH = 0x0	>	<PROPERTY.LTDOVERLAYDEFS><PROPERTY.LTDSUFFIX>
49	<PROPERTY.LTDOVERLAYTABLE>L	(RW)  :	ORIGIN = 0,						LENGTH = 0x0	>	<PROPERTY.LTDOVERLAYTABLE><PROPERTY.LTDSUFFIX>
50	<FOREACH.LTDOVERLAYS>
51	<LTDOVERLAY.NAME>			(RWXO):	ORIGIN = <LTDOVERLAY.ADDRESS>,	LENGTH = 0x0	>	<LTDOVERLAY.NAME><PROPERTY.LTDSUFFIX>
52	<END.LTDOVERLAYS>
53
54	dummy.MAIN_EX.TWL			(RW)  :	ORIGIN = 0x0d000000,	LENGTH = 0x0
55	arena.MAIN.TWL				(RW)  :	ORIGIN = AFTER(<STATIC.NAME><FOREACH.OVERLAYS=MAIN>,<OVERLAY.NAME><END.OVERLAYS>,LTDMAIN<FOREACH.LTDOVERLAYS=MAIN>,<LTDOVERLAY.NAME><END.LTDOVERLAYS>),	LENGTH = 0x0
56	arena.MAIN_EX.TWL			(RW)  :	ORIGIN = AFTER(dummy.MAIN_EX.TWL,<STATIC.NAME><FOREACH.OVERLAYS=MAIN>,<OVERLAY.NAME><END.OVERLAYS>,LTDMAIN<FOREACH.LTDOVERLAYS=MAIN>,<LTDOVERLAY.NAME><END.LTDOVERLAYS><FOREACH.AUTOLOADS>,<AUTOLOAD.NAME><END.AUTOLOADS>),	LENGTH = 0x0
57
58	binary.MODULE_FILES			(RW)  :	ORIGIN = 0,						LENGTH = 0x0	>	component.files
59	binary.COMP_SPEC_LIST		(RW)  :	ORIGIN = 0,						LENGTH = 0x0	>	compspec.list
60	COMMON__		(RW)  : ORIGIN = 0x0, LENGTH = 0x01400 > common.check
61	PARENT__		(RW)  : ORIGIN = 0x0, LENGTH = 0x02000 > parent.check
62}
63
64FORCE_ACTIVE
65{
66	SVC_SoftReset
67}
68
69KEEP_SECTION
70{
71	.sinit
72}
73
74SECTIONS
75{
76	############################ STATIC #################################
77	.<STATIC.NAME>:
78	{
79		ALIGNALL(4);
80		. = ALIGN(32);	# Fit to cache line
81
82		#
83		#  Definition to refer overlay segment, when same name symbols exist in multiple overlays.
84		#
85		<FOREACH.STATIC.SEARCHSYMBOLS>
86		SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
87		<END.STATIC.SEARCHSYMBOLS>
88
89		#
90		#  TEXT BLOCK: READ ONLY
91		#
92		SDK_STATIC_START		=.;
93		SDK_STATIC_TEXT_START		=.;
94				#:::::::::: text/rodata
95
96					#:: Common A ----- 5KB
97		SDK_STATIC_TEXT_COMMON_START	=.;
98				libsyscall.a (.text)
99				OBJECT(_start,*)
100				<STATIC.CRT0.OBJECT=.text>
101				<STATIC.CRT0.OBJECT=.rodata>
102				#
103				# Added .version section.
104				# The information included in this section will be needed for Lotcheck purposes. Be sure to leave it in this position.
105				#
106				#
107				* (.version)
108		SDK_STATIC_TEXT_COMMON_END	=.;
109					.= SDK_STATIC_START +  5 * 1024;
110
111					#:: Parent Only -- 8KB
112		SDK_STATIC_TEXT_PARENT_START	=.;
113	#
114	# Collected .parent section code
115	# Notice that .bss, .data section code is not included!
116					* (.parent)
117	#
118		SDK_STATIC_TEXT_PARENT_END	=.;
119					.= SDK_STATIC_START + 13 * 1024;
120
121					#:: Common B ----- 3KB + ...
122				OBJECT(TwlMain,*)
123				<FOREACH.STATIC.FORCES>
124				FORCE_OBJECT<STATIC.FORCE>
125				<END.STATIC.FORCES>
126				<FOREACH.STATIC.OBJECTS=.text>
127				<STATIC.OBJECT=.text:t>
128				<END.STATIC.OBJECTS>
129				<FOREACH.STATIC.LIBRARIES=.text>
130				<STATIC.LIBRARY=.text:t>
131				<END.STATIC.LIBRARIES>
132				* (.exception)
133		. = ALIGN(4);
134		SDK_STATIC_ETABLE_START		=.;
135		__exception_table_start__	=.;
136				EXCEPTION
137		__exception_table_end__		=.;
138		SDK_STATIC_ETABLE_END		=.;
139				<FOREACH.STATIC.OBJECTS=.rodata>
140				<STATIC.OBJECT=.rodata:t>
141				<END.STATIC.OBJECTS>
142				<FOREACH.STATIC.LIBRARIES=.rodata>
143				<STATIC.LIBRARY=.rodata:t>
144				<END.STATIC.LIBRARIES>
145				<FOREACH.STATIC.OBJECTS=.init>
146				<STATIC.OBJECT=.init:t>
147				<END.STATIC.OBJECTS>
148				<FOREACH.STATIC.LIBRARIES=.init>
149				<STATIC.LIBRARY=.init:t>
150				<END.STATIC.LIBRARIES>
151		. = ALIGN(4);
152		SDK_STATIC_SINIT_START		=.;
153				#:::::::::: ctor
154				<FOREACH.STATIC.OBJECTS=.ctor>
155				<STATIC.OBJECT=.ctor:t>
156				<END.STATIC.OBJECTS>
157				<FOREACH.STATIC.LIBRARIES=.ctor>
158				<STATIC.LIBRARY=.ctor:t>
159				<END.STATIC.LIBRARIES>
160				<FOREACH.STATIC.OBJECTS=.sinit>
161				<STATIC.OBJECT=.sinit:t>
162				<END.STATIC.OBJECTS>
163				<FOREACH.STATIC.LIBRARIES=.sinit>
164				<STATIC.LIBRARY=.sinit:t>
165				<END.STATIC.LIBRARIES>
166				WRITEW	0;
167				#:::::::::: ctor
168		SDK_STATIC_SINIT_END		=.;
169				#:::::::::: text/rodata
170		SDK_STATIC_TEXT_END		=.;
171
172		#
173		#  DATA BLOCK: READ WRITE
174		#
175		. = ALIGN(32);	# Fit to cache line
176		SDK_STATIC_DATA_START		=.;
177				#:::::::::: data
178				<FOREACH.STATIC.OBJECTS=.sdata>
179				<STATIC.OBJECT=.sdata:t>
180				<END.STATIC.OBJECTS>
181				<FOREACH.STATIC.LIBRARIES=.sdata>
182				<STATIC.LIBRARY=.sdata:t>
183				<END.STATIC.LIBRARIES>
184				<FOREACH.STATIC.OBJECTS=.data>
185				<STATIC.OBJECT=.data:t>
186				<END.STATIC.OBJECTS>
187				<FOREACH.STATIC.LIBRARIES=.data>
188				<STATIC.LIBRARY=.data:t>
189				<END.STATIC.LIBRARIES>
190				. = ALIGN(4);
191
192		SDK_LTDOVERLAYTABLE_DIGEST	=.;
193				. = . + 20;
194		SDK_LTDOVERLAYTABLE_DIGEST_END	=.;
195		SDK_OVERLAYTABLE_DIGEST	=.;
196				. = . + 20;
197		SDK_OVERLAYTABLE_DIGEST_END	=.;
198		SDK_OVERLAY_DIGEST		=.;
199				. = . + <NUMBER.OVERLAYS> * 20;
200				. = . + <NUMBER.LTDOVERLAYS> * 20;
201		SDK_OVERLAY_DIGEST_END	=.;
202				#:::::::::: data
203				. = ALIGN(32);
204		SDK_STATIC_DATA_END		=.;
205		SDK_STATIC_END			=.;
206
207		SDK_STATIC_TEXT_SIZE	= SDK_STATIC_TEXT_END - SDK_STATIC_TEXT_START;
208		SDK_STATIC_DATA_SIZE	= SDK_STATIC_DATA_END - SDK_STATIC_DATA_START;
209		SDK_STATIC_SIZE			= SDK_STATIC_END      - SDK_STATIC_START;
210		__sinit__				= SDK_STATIC_SINIT_START;	# for static initializer
211
212	} > <STATIC.NAME>
213
214	.<STATIC.NAME>.bss:
215	{
216		ALIGNALL(4);
217		. = ALIGN(32);	# Fit to cache line
218
219		#
220		#  Definition to refer overlay segment, when same name symbols exist in multiple overlays.
221		#
222		<FOREACH.STATIC.SEARCHSYMBOLS>
223		SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
224		<END.STATIC.SEARCHSYMBOLS>
225
226		#
227		#  BSS BLOCK
228		#
229		SDK_STATIC_BSS_START	=.;
230				#:::::::::: bss
231				<FOREACH.STATIC.OBJECTS=.sbss>
232				<STATIC.OBJECT=.sbss:t>
233				<END.STATIC.OBJECTS>
234				<FOREACH.STATIC.LIBRARIES=.sbss>
235				<STATIC.LIBRARY=.sbss:t>
236				<END.STATIC.LIBRARIES>
237				<FOREACH.STATIC.OBJECTS=.bss>
238				<STATIC.OBJECT=.bss:t>
239				<END.STATIC.OBJECTS>
240				<FOREACH.STATIC.LIBRARIES=.bss>
241				<STATIC.LIBRARY=.bss:t>
242				<END.STATIC.LIBRARIES>
243				#:::::::::: bss
244		. = ALIGN(32);
245		SDK_STATIC_BSS_END		= .;
246
247		SDK_STATIC_BSS_SIZE		= SDK_STATIC_BSS_END - SDK_STATIC_BSS_START;
248
249	} >> <STATIC.NAME>
250
251
252	############################ AUTOLOADS ##############################
253	SDK_AUTOLOAD.ITCM.START			= 0x01ff8000;
254	SDK_AUTOLOAD.ITCM.END			= SDK_AUTOLOAD.ITCM.START;
255	SDK_AUTOLOAD.ITCM.BSS_END		= SDK_AUTOLOAD.ITCM.START;
256	SDK_AUTOLOAD.ITCM.SIZE			= 0;
257	SDK_AUTOLOAD.ITCM.BSS_SIZE		= 0;
258	SDK_AUTOLOAD.DTCM.START			= 0x02fe0000;
259	SDK_AUTOLOAD.DTCM.END			= SDK_AUTOLOAD.DTCM.START;
260	SDK_AUTOLOAD.DTCM.BSS_END		= SDK_AUTOLOAD.DTCM.START;
261	SDK_AUTOLOAD.DTCM.SIZE			= 0;
262	SDK_AUTOLOAD.DTCM.BSS_SIZE		= 0;
263	SDK_AUTOLOAD_START				= SDK_STATIC_END;
264	SDK_AUTOLOAD_SIZE				= 0;
265	SDK_AUTOLOAD_NUMBER				= <NUMBER.AUTOLOADS>;
266
267<FOREACH.AUTOLOADS>
268	.<AUTOLOAD.NAME>:
269	{
270		ALIGNALL(4);
271		. = ALIGN(32);
272
273		#
274		#  Definition to refer overlay segment, when same name symbols exist in multiple overlays.
275		#
276		<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
277		SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
278		<END.AUTOLOAD.SEARCHSYMBOLS>
279
280		#
281		#   TEXT BLOCK: READ ONLY
282		#
283		SDK_AUTOLOAD_<AUTOLOAD.NAME>_ID		=<AUTOLOAD.ID>;
284		SDK_AUTOLOAD.<AUTOLOAD.NAME>.ID		=<AUTOLOAD.ID>;
285		SDK_AUTOLOAD.<AUTOLOAD.NAME>.START	=.;
286		SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START	=.;
287				#:::::::::: text/rodata
288				<FOREACH.AUTOLOAD.FORCES>
289				FORCE_OBJECT<AUTOLOAD.FORCE>
290				<END.AUTOLOAD.FORCES>
291				<FOREACH.AUTOLOAD.OBJECTS=.text>
292				<AUTOLOAD.OBJECT=.text:t>
293				<END.AUTOLOAD.OBJECTS>
294				<FOREACH.AUTOLOAD.LIBRARIES=.text>
295				<AUTOLOAD.LIBRARY=.text:t>
296				<END.AUTOLOAD.LIBRARIES>
297				<FOREACH.AUTOLOAD.OBJECTS=.rodata>
298				<AUTOLOAD.OBJECT=.rodata:t>
299				<END.AUTOLOAD.OBJECTS>
300				<FOREACH.AUTOLOAD.LIBRARIES=.rodata>
301				<AUTOLOAD.LIBRARY=.rodata:t>
302				<END.AUTOLOAD.LIBRARIES>
303				<FOREACH.AUTOLOAD.OBJECTS=.init>
304				<AUTOLOAD.OBJECT=.init:t>
305				<END.AUTOLOAD.OBJECTS>
306				<FOREACH.AUTOLOAD.LIBRARIES=.init>
307				<AUTOLOAD.LIBRARY=.init:t>
308				<END.AUTOLOAD.LIBRARIES>
309		. = ALIGN(4);
310		SDK_AUTOLOAD.<AUTOLOAD.NAME>.SINIT_START	= .;
311				#:::::::::: ctor
312				<FOREACH.AUTOLOAD.OBJECTS=.ctor>
313				<AUTOLOAD.OBJECT=.ctor:t>
314				<END.AUTOLOAD.OBJECTS>
315				<FOREACH.AUTOLOAD.LIBRARIES=.ctor>
316				<AUTOLOAD.LIBRARY=.ctor:t>
317				<END.AUTOLOAD.LIBRARIES>
318				<FOREACH.AUTOLOAD.OBJECTS=.sinit>
319				<AUTOLOAD.OBJECT=.sinit:t>
320				<END.AUTOLOAD.OBJECTS>
321				<FOREACH.AUTOLOAD.LIBRARIES=.sinit>
322				<AUTOLOAD.LIBRARY=.sinit:t>
323				<END.AUTOLOAD.LIBRARIES>
324				WRITEW 0;
325				#:::::::::: ctor
326		SDK_AUTOLOAD.<AUTOLOAD.NAME>.SINIT_END	= .;
327				#:::::::::: text/rodata
328		SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END	=.;
329
330		#
331		#  DATA BLOCK: READ WRITE BLOCK
332		#
333		. = ALIGN(32);
334		SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START	=.;
335				#:::::::::: data
336				<FOREACH.AUTOLOAD.OBJECTS=.itcm>
337				<AUTOLOAD.OBJECT=.itcm:t>
338				<END.AUTOLOAD.OBJECTS>
339				<FOREACH.AUTOLOAD.LIBRARIES=.itcm>
340				<AUTOLOAD.LIBRARY=.itcm:t>
341				<END.AUTOLOAD.LIBRARIES>
342				<FOREACH.AUTOLOAD.OBJECTS=.dtcm>
343				<AUTOLOAD.OBJECT=.dtcm:t>
344				<END.AUTOLOAD.OBJECTS>
345				<FOREACH.AUTOLOAD.LIBRARIES=.dtcm>
346				<AUTOLOAD.LIBRARY=.dtcm:t>
347				<END.AUTOLOAD.LIBRARIES>
348				<FOREACH.AUTOLOAD.OBJECTS=.sdata>
349				<AUTOLOAD.OBJECT=.sdata:t>
350				<END.AUTOLOAD.OBJECTS>
351				<FOREACH.AUTOLOAD.LIBRARIES=.sdata>
352				<AUTOLOAD.LIBRARY=.sdata:t>
353				<END.AUTOLOAD.LIBRARIES>
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				#:::::::::: data
361		SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END	=.;
362		. = ALIGN(32);
363		SDK_AUTOLOAD.<AUTOLOAD.NAME>.END	=.;
364
365		SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_SIZE	= SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START;
366		SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_SIZE	= SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START;
367		SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE		= SDK_AUTOLOAD.<AUTOLOAD.NAME>.END      - SDK_AUTOLOAD.<AUTOLOAD.NAME>.START;
368		SDK_AUTOLOAD_SIZE			= SDK_AUTOLOAD_SIZE + SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
369
370	} > <AUTOLOAD.NAME>
371
372	.<AUTOLOAD.NAME>.bss:
373	{
374		ALIGNALL(4);
375		. = ALIGN(32);
376
377		#
378		#  Definition to refer overlay segment, when same name symbols exist in multiple overlays.
379		#
380		<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
381		SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>
382		<END.AUTOLOAD.SEARCHSYMBOLS>
383
384		#
385		#  BSS BLOCK
386		#
387		SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START	= .;
388				#:::::::::: bss
389				<FOREACH.AUTOLOAD.OBJECTS=.itcm>
390				<AUTOLOAD.OBJECT=.itcm.bss:t>
391				<END.AUTOLOAD.OBJECTS>
392				<FOREACH.AUTOLOAD.LIBRARIES=.itcm>
393				<AUTOLOAD.LIBRARY=.itcm.bss:t>
394				<END.AUTOLOAD.LIBRARIES>
395				<FOREACH.AUTOLOAD.OBJECTS=.dtcm>
396				<AUTOLOAD.OBJECT=.dtcm.bss:t>
397				<END.AUTOLOAD.OBJECTS>
398				<FOREACH.AUTOLOAD.LIBRARIES=.dtcm>
399				<AUTOLOAD.LIBRARY=.dtcm.bss:t>
400				<END.AUTOLOAD.LIBRARIES>
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				<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				#:::::::::: bss
414		. = ALIGN(32);
415		SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END	= .;
416
417		SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE	= SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START;
418
419	} >> <AUTOLOAD.NAME>
420
421<END.AUTOLOADS>
422
423	SDK_AUTOLOAD_ITCM_START			= SDK_AUTOLOAD.ITCM.START;
424	SDK_AUTOLOAD_ITCM_END			= SDK_AUTOLOAD.ITCM.END;
425	SDK_AUTOLOAD_ITCM_BSS_END		= SDK_AUTOLOAD.ITCM.BSS_END;
426	SDK_AUTOLOAD_ITCM_SIZE			= SDK_AUTOLOAD.ITCM.SIZE;
427	SDK_AUTOLOAD_ITCM_BSS_SIZE		= SDK_AUTOLOAD.ITCM.BSS_SIZE;
428	SDK_AUTOLOAD_DTCM_START			= SDK_AUTOLOAD.DTCM.START;
429	SDK_AUTOLOAD_DTCM_END			= SDK_AUTOLOAD.DTCM.END;
430	SDK_AUTOLOAD_DTCM_BSS_END		= SDK_AUTOLOAD.DTCM.BSS_END;
431	SDK_AUTOLOAD_DTCM_SIZE			= SDK_AUTOLOAD.DTCM.SIZE;
432	SDK_AUTOLOAD_DTCM_BSS_SIZE		= SDK_AUTOLOAD.DTCM.BSS_SIZE;
433
434	############################ AUTOLOAD_INFO ##########################
435	.binary.AUTOLOAD_INFO:
436	{
437		<FOREACH.AUTOLOADS>
438				WRITEW ADDR(.<AUTOLOAD.NAME>);
439				WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
440				WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SINIT_START;
441				WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE;
442		<END.AUTOLOADS>
443
444	} > binary.AUTOLOAD_INFO
445
446	SDK_AUTOLOAD_LIST		= SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE;
447	SDK_AUTOLOAD_LIST_END	= SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO);
448	SDK_AUTOLOAD_SIZE		= SDK_AUTOLOAD_SIZE  + SIZEOF(.binary.AUTOLOAD_INFO);
449
450	############################ STATIC_FOOTER ##########################
451	.binary.STATIC_FOOTER:
452	{
453		WRITEW 0xdec00621;		# LE(0x2106C0DE) = NITRO CODE
454		WRITEW _start_ModuleParams - ADDR(.<STATIC.NAME>);
455		WRITEW SDK_OVERLAY_DIGEST  - ADDR(.<STATIC.NAME>);
456		WRITEW _start_LtdModuleParams - ADDR(.<STATIC.NAME>);
457	} > binary.STATIC_FOOTER
458
459	############################ OVERLAYS ###############################
460	SDK_OVERLAY_NUMBER			= <NUMBER.OVERLAYS>;
461
462<FOREACH.OVERLAYS>
463	.<OVERLAY.NAME>:<OVERLAY.NAME>
464	{
465		ALIGNALL(4);
466		. = ALIGN(32);	# Fit to cache line
467
468		#
469		#  Definition to refer overlay segment, when same name symbols exist in multiple overlays.
470		#
471		<FOREACH.OVERLAY.SEARCHSYMBOLS>
472		SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
473		<END.OVERLAY.SEARCHSYMBOLS>
474
475		#
476		#   TEXT BLOCK: READ ONLY
477		#
478		SDK_OVERLAY_<OVERLAY.NAME>_ID		=<OVERLAY.ID>;	### SEGMENT <OVERLAY.NAME> OVERLAY ID
479		SDK_OVERLAY.<OVERLAY.NAME>.ID		=<OVERLAY.ID>;
480		SDK_OVERLAY.<OVERLAY.NAME>.START	=.;
481		SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START	=.;
482				#:::::::::: text/rodata
483				<FOREACH.OVERLAY.FORCES>
484				FORCE_OBJECT<OVERLAY.FORCE>
485				<END.OVERLAY.FORCES>
486				<FOREACH.OVERLAY.OBJECTS=.text>
487				<OVERLAY.OBJECT=.text:t>
488				<END.OVERLAY.OBJECTS>
489				<FOREACH.OVERLAY.LIBRARIES=.text>
490				<OVERLAY.LIBRARY=.text:t>
491				<END.OVERLAY.LIBRARIES>
492				<FOREACH.OVERLAY.OBJECTS=.rodata>
493				<OVERLAY.OBJECT=.rodata:t>
494				<END.OVERLAY.OBJECTS>
495				<FOREACH.OVERLAY.LIBRARIES=.rodata>
496				<OVERLAY.LIBRARY=.rodata:t>
497				<END.OVERLAY.LIBRARIES>
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				#:::::::::: text/rodata
523		SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END	=.;
524
525		#
526		#  DATA BLOCK: READ WRITE
527		#
528		. = ALIGN(32);
529		SDK_OVERLAY.<OVERLAY.NAME>.DATA_START	=.;
530				#:::::::::: data
531				<FOREACH.OVERLAY.OBJECTS=.sdata>
532				<OVERLAY.OBJECT=.sdata:t>
533				<END.OVERLAY.OBJECTS>
534				<FOREACH.OVERLAY.LIBRARIES=.sdata>
535				<OVERLAY.LIBRARY=.sdata:t>
536				<END.OVERLAY.LIBRARIES>
537				<FOREACH.OVERLAY.OBJECTS=.data>
538				<OVERLAY.OBJECT=.data:t>
539				<END.OVERLAY.OBJECTS>
540				<FOREACH.OVERLAY.LIBRARIES=.data>
541				<OVERLAY.LIBRARY=.data:t>
542				<END.OVERLAY.LIBRARIES>
543				#:::::::::: data
544		SDK_OVERLAY.<OVERLAY.NAME>.DATA_END	=.;
545		. = ALIGN(32);
546		SDK_OVERLAY.<OVERLAY.NAME>.END		=.;
547
548		SDK_OVERLAY.<OVERLAY.NAME>.TEXT_SIZE	= SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END - SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START;
549		SDK_OVERLAY.<OVERLAY.NAME>.DATA_SIZE	= SDK_OVERLAY.<OVERLAY.NAME>.DATA_END - SDK_OVERLAY.<OVERLAY.NAME>.DATA_START;
550		SDK_OVERLAY.<OVERLAY.NAME>.SIZE			= SDK_OVERLAY.<OVERLAY.NAME>.END      - SDK_OVERLAY.<OVERLAY.NAME>.START;
551
552	} > <OVERLAY.NAME>
553
554	.<OVERLAY.NAME>.bss:<OVERLAY.NAME>
555	{
556		ALIGNALL(4);
557		. = ALIGN(32);
558
559		#
560		#  Definition to refer overlay segment, when same name symbols exist in multiple overlays.
561		#
562		<FOREACH.OVERLAY.SEARCHSYMBOLS>
563		SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
564		<END.OVERLAY.SEARCHSYMBOLS>
565
566		#
567		#  BSS BLOCK
568		#
569		SDK_OVERLAY.<OVERLAY.NAME>.BSS_START	= .;
570				#:::::::::: bss
571				<FOREACH.OVERLAY.OBJECTS=.bss>
572				<OVERLAY.OBJECT=.bss:t>
573				<END.OVERLAY.OBJECTS>
574				<FOREACH.OVERLAY.LIBRARIES=.bss>
575				<OVERLAY.LIBRARY=.bss:t>
576				<END.OVERLAY.LIBRARIES>
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				#:::::::::: bss
584		. = ALIGN(32);
585		SDK_OVERLAY.<OVERLAY.NAME>.BSS_END	= .;
586
587		SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE	= SDK_OVERLAY.<OVERLAY.NAME>.BSS_END - SDK_OVERLAY.<OVERLAY.NAME>.BSS_START;
588
589	} >> <OVERLAY.NAME>
590
591<END.OVERLAYS>
592
593	############################ OVERLAYDEFS ############################
594	.<PROPERTY.OVERLAYDEFS>F:
595	{
596		###  <STATIC.NAME> module information
597				WRITEW ADDR(.<STATIC.NAME>);				# load address
598				WRITEW _start;								# entry address
599				WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE;	# size of module
600				WRITEW _start_AutoloadDoneCallback;			# callback autoload done
601
602		###  overlay filename
603				<FOREACH.OVERLAYS>
604				WRITES ("<OVERLAY.NAME><PROPERTY.FLXSUFFIX>");	# Overlay <OVERLAY.ID>
605				<END.OVERLAYS>
606
607	} > <PROPERTY.OVERLAYDEFS>F
608
609	############################ OVERLAYTABLE ###########################
610	.<PROPERTY.OVERLAYTABLE>F:
611	{
612		<FOREACH.OVERLAYS>
613				WRITEW <OVERLAY.ID>;							# overlay ID
614				WRITEW ADDR(.<OVERLAY.NAME>);					# load address
615				WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SIZE;			# size of module
616				WRITEW SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE;		# size of bss
617				WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START;	# start address of static init
618				WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END;	# end address of static init
619				WRITEW <OVERLAY.ID>;							# ROM file ID
620				WRITEW 0;										# compressed state
621		<END.OVERLAYS>
622
623	} > <PROPERTY.OVERLAYTABLE>F
624
625	############################ ARENA ##################################
626	.dummy.MAIN_EX.NITRO:
627	{
628		. = ALIGN(32);
629
630	} > dummy.MAIN_EX.NITRO
631
632	.arena.MAIN.NITRO:
633	{
634		. = ALIGN(32);
635		SDK_SECTION_ARENA_START		=.;
636
637	} > arena.MAIN.NITRO
638
639	.arena.MAIN_EX.NITRO:
640	{
641		. = ALIGN(32);
642		SDK_SECTION_ARENA_EX_START	=.;
643
644	} > arena.MAIN_EX.NITRO
645
646	.arena.ITCM:
647	{
648		. = ALIGN(32);
649		SDK_SECTION_ARENA_ITCM_START	=.;
650
651	} > arena.ITCM
652
653	.arena.DTCM:
654	{
655		. = ALIGN(32);
656		SDK_SECTION_ARENA_DTCM_START	=.;
657
658	} > arena.DTCM
659
660	############################ OTHERS #################################
661	SDK_MAIN_ARENA_LO = SDK_SECTION_ARENA_START;
662	SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>;	# allocated in DTCM
663	SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>;		# when 0 means all remains of DTCM
664	SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1;
665
666	.check.ITCM:
667	{
668		. = . + SDK_AUTOLOAD_ITCM_SIZE + SDK_AUTOLOAD_ITCM_BSS_SIZE;
669		<FOREACH.OVERLAYS=ITCM>
670		. = . + SDK_OVERLAY.<OVERLAY.NAME>.SIZE + SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE;
671		<END.OVERLAYS>
672
673	} > check.ITCM
674
675	.check.DTCM:
676	{
677		. = . + SDK_AUTOLOAD_DTCM_SIZE + SDK_AUTOLOAD_DTCM_BSS_SIZE;
678		<FOREACH.OVERLAYS=DTCM>
679		. = . + SDK_OVERLAY.<OVERLAY.NAME>.SIZE + SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE;
680		<END.OVERLAYS>
681		. = . + 0x080 + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
682	} > check.DTCM
683
684	.COMMON__:
685	{
686		. = . + SDK_STATIC_TEXT_COMMON_END - SDK_STATIC_TEXT_COMMON_START;
687	} > COMMON__
688
689	.PARENT__:
690	{
691		. = . + SDK_STATIC_TEXT_PARENT_END - SDK_STATIC_TEXT_PARENT_START;
692	} > PARENT__
693
694	########################### LTDAUTOLOADS ############################
695	SDK_LTDAUTOLOAD.LTDMAIN.START		= SDK_STATIC_BSS_END;
696	SDK_LTDAUTOLOAD.LTDMAIN.END			= SDK_LTDAUTOLOAD.LTDMAIN.START;
697	SDK_LTDAUTOLOAD.LTDMAIN.BSS_END		= SDK_LTDAUTOLOAD.LTDMAIN.START;
698	SDK_LTDAUTOLOAD.LTDMAIN.SIZE		= 0;
699	SDK_LTDAUTOLOAD.LTDMAIN.BSS_SIZE	= 0;
700	SDK_LTDAUTOLOAD_TOP_START			= 0x02400000;
701	SDK_LTDAUTOLOAD_TOP_SIZE			= 4;	# While there is no STATIC region, a 4-byte dummy is at the top of the binary file
702	SDK_LTDAUTOLOAD_START				= SDK_LTDAUTOLOAD_TOP_START + SDK_LTDAUTOLOAD_TOP_SIZE;
703	SDK_LTDAUTOLOAD_SIZE				= 0;
704	SDK_LTDAUTOLOAD_NUMBER				= <NUMBER.LTDAUTOLOADS>;
705
706	.binary.LTDAUTOLOAD_TOP:
707	{
708				WRITEW 0;
709
710	} > binary.LTDAUTOLOAD_TOP
711
712<FOREACH.LTDAUTOLOADS>
713	.<LTDAUTOLOAD.NAME>:
714	{
715		ALIGNALL(4);
716		. = ALIGN(32);	# Fit to cache line
717
718		#
719		#  Definition to refer overlay segment, when same name symbols exist in multiple overlays.
720		#
721		<FOREACH.LTDAUTOLOAD.SEARCHSYMBOLS>
722		SEARCH_SYMBOL <LTDAUTOLOAD.SEARCHSYMBOL>;
723		<END.LTDAUTOLOAD.SEARCHSYMBOLS>
724
725		SDK_LTDAUTOLOAD_<LTDAUTOLOAD.NAME>_ID		=<LTDAUTOLOAD.ID>;
726		SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.ID		=<LTDAUTOLOAD.ID>;
727		SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.START	=.;
728		#
729		#   TEXT BLOCK: READ ONLY
730		#
731		SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.TEXT_START	=.;
732				#:::::::::: text/rodata
733				<FOREACH.LTDAUTOLOAD.FORCES>
734				FORCE_OBJECT<LTDAUTOLOAD.FORCE>
735				<END.LTDAUTOLOAD.FORCES>
736				<FOREACH.LTDAUTOLOAD.OBJECTS=.text>
737				<LTDAUTOLOAD.OBJECT=.text:t>
738				<END.LTDAUTOLOAD.OBJECTS>
739				<FOREACH.LTDAUTOLOAD.LIBRARIES=.text>
740				<LTDAUTOLOAD.LIBRARY=.text:t>
741				<END.LTDAUTOLOAD.LIBRARIES>
742				<FOREACH.LTDAUTOLOAD.OBJECTS=.rodata>
743				<LTDAUTOLOAD.OBJECT=.rodata:t>
744				<END.LTDAUTOLOAD.OBJECTS>
745				<FOREACH.LTDAUTOLOAD.LIBRARIES=.rodata>
746				<LTDAUTOLOAD.LIBRARY=.rodata:t>
747				<END.LTDAUTOLOAD.LIBRARIES>
748				<FOREACH.LTDAUTOLOAD.OBJECTS=.init>
749				<LTDAUTOLOAD.OBJECT=.init:t>
750				<END.LTDAUTOLOAD.OBJECTS>
751				<FOREACH.LTDAUTOLOAD.LIBRARIES=.init>
752				<LTDAUTOLOAD.LIBRARY=.init:t>
753				<END.LTDAUTOLOAD.LIBRARIES>
754		. = ALIGN(4);
755		SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.SINIT_START	= .;
756				#:::::::::: ctor
757				<FOREACH.LTDAUTOLOAD.OBJECTS=.ctor>
758				<LTDAUTOLOAD.OBJECT=.ctor:t>
759				<END.LTDAUTOLOAD.OBJECTS>
760				<FOREACH.LTDAUTOLOAD.LIBRARIES=.ctor>
761				<LTDAUTOLOAD.LIBRARY=.ctor:t>
762				<END.LTDAUTOLOAD.LIBRARIES>
763				<FOREACH.LTDAUTOLOAD.OBJECTS=.sinit>
764				<LTDAUTOLOAD.OBJECT=.sinit:t>
765				<END.LTDAUTOLOAD.OBJECTS>
766				<FOREACH.LTDAUTOLOAD.LIBRARIES=.sinit>
767				<LTDAUTOLOAD.LIBRARY=.sinit:t>
768				<END.LTDAUTOLOAD.LIBRARIES>
769				WRITEW 0;
770				#:::::::::: ctor
771		SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.SINIT_END	= .;
772				#:::::::::: text/rodata
773		SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.TEXT_END	=.;
774
775		#
776		#  DATA BLOCK: READ WRITE
777		#
778		. = ALIGN(32);
779		SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.DATA_START	=.;
780				#:::::::::: data
781				<FOREACH.LTDAUTOLOAD.OBJECTS=.ltdmain>
782				<LTDAUTOLOAD.OBJECT=.ltdmain:t>
783				<END.LTDAUTOLOAD.OBJECTS>
784				<FOREACH.LTDAUTOLOAD.LIBRARIES=.ltdmain>
785				<LTDAUTOLOAD.LIBRARY=.ltdmain:t>
786				<END.LTDAUTOLOAD.LIBRARIES>
787				<FOREACH.LTDAUTOLOAD.OBJECTS=.sdata>
788				<LTDAUTOLOAD.OBJECT=.sdata:t>
789				<END.LTDAUTOLOAD.OBJECTS>
790				<FOREACH.LTDAUTOLOAD.LIBRARIES=.sdata>
791				<LTDAUTOLOAD.LIBRARY=.sdata:t>
792				<END.LTDAUTOLOAD.LIBRARIES>
793				<FOREACH.LTDAUTOLOAD.OBJECTS=.data>
794				<LTDAUTOLOAD.OBJECT=.data:t>
795				<END.LTDAUTOLOAD.OBJECTS>
796				<FOREACH.LTDAUTOLOAD.LIBRARIES=.data>
797				<LTDAUTOLOAD.LIBRARY=.data:t>
798				<END.LTDAUTOLOAD.LIBRARIES>
799				#:::::::::: data
800		SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.DATA_END	=.;
801		. = ALIGN(32);
802		SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.END	=.;
803
804		SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.TEXT_SIZE	= SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.TEXT_END - SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.TEXT_START;
805		SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.DATA_SIZE	= SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.DATA_END - SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.DATA_START;
806		SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.SIZE			= SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.END      - SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.START;
807		SDK_LTDAUTOLOAD_SIZE							= SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.SIZE;
808
809	} > <LTDAUTOLOAD.NAME>
810
811	.<LTDAUTOLOAD.NAME>.bss:
812	{
813		ALIGNALL(4);
814		. = ALIGN(32);
815
816		#
817		#  Definition to refer overlay segment, when same name symbols exist in multiple overlays.
818		#
819		<FOREACH.LTDAUTOLOAD.SEARCHSYMBOLS>
820		SEARCH_SYMBOL <LTDAUTOLOAD.SEARCHSYMBOL>;
821		<END.LTDAUTOLOAD.SEARCHSYMBOLS>
822
823		#
824		#  BSS BLOCK
825		#
826		SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.BSS_START	=.;
827				#:::::::::: bss
828				<FOREACH.LTDAUTOLOAD.OBJECTS=.ltdmain>
829				<LTDAUTOLOAD.OBJECT=.ltdmain.bss:t>
830				<END.LTDAUTOLOAD.OBJECTS>
831				<FOREACH.LTDAUTOLOAD.LIBRARIES=.ltdmain>
832				<LTDAUTOLOAD.LIBRARY=.ltdmain.bss:t>
833				<END.LTDAUTOLOAD.LIBRARIES>
834				<FOREACH.LTDAUTOLOAD.OBJECTS=.sbss>
835				<LTDAUTOLOAD.OBJECT=.sbss:t>
836				<END.LTDAUTOLOAD.OBJECTS>
837				<FOREACH.LTDAUTOLOAD.LIBRARIES=.sbss>
838				<LTDAUTOLOAD.LIBRARY=.sbss:t>
839				<END.LTDAUTOLOAD.LIBRARIES>
840				<FOREACH.LTDAUTOLOAD.OBJECTS=.bss>
841				<LTDAUTOLOAD.OBJECT=.bss:t>
842				<END.LTDAUTOLOAD.OBJECTS>
843				<FOREACH.LTDAUTOLOAD.LIBRARIES=.bss>
844				<LTDAUTOLOAD.LIBRARY=.bss:t>
845				<END.LTDAUTOLOAD.LIBRARIES>
846				#:::::::::: bss
847		. = ALIGN(32);
848		SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.BSS_END	=.;
849
850		SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.BSS_SIZE		= SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.BSS_END - SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.BSS_START;
851
852	} >> <LTDAUTOLOAD.NAME>
853
854<END.LTDAUTOLOADS>
855
856	SDK_LTDAUTOLOAD_LTDMAIN_START		= SDK_LTDAUTOLOAD.LTDMAIN.START;
857	SDK_LTDAUTOLOAD_LTDMAIN_END			= SDK_LTDAUTOLOAD.LTDMAIN.END;
858	SDK_LTDAUTOLOAD_LTDMAIN_BSS_END		= SDK_LTDAUTOLOAD.LTDMAIN.BSS_END;
859	SDK_LTDAUTOLOAD_LTDMAIN_SIZE		= SDK_LTDAUTOLOAD.LTDMAIN.SIZE;
860	SDK_LTDAUTOLOAD_LTDMAIN_BSS_SIZE	= SDK_LTDAUTOLOAD.LTDMAIN.BSS_SIZE;
861
862	######################### LTDAUTOLOAD_INFO ##########################
863	.binary.LTDAUTOLOAD_INFO:
864	{
865		<FOREACH.LTDAUTOLOADS>
866				WRITEW ADDR(.<LTDAUTOLOAD.NAME>);
867				WRITEW SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.SIZE;
868				WRITEW SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.SINIT_START;
869				WRITEW SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.BSS_SIZE;
870		<END.LTDAUTOLOADS>
871
872	} > binary.LTDAUTOLOAD_INFO
873
874	SDK_LTDAUTOLOAD_LIST		= SDK_LTDAUTOLOAD_START + SDK_LTDAUTOLOAD_SIZE;
875	SDK_LTDAUTOLOAD_LIST_END	= SDK_LTDAUTOLOAD_LIST + SIZEOF(.binary.LTDAUTOLOAD_INFO);
876	SDK_LTDAUTOLOAD_SIZE		= SDK_LTDAUTOLOAD_SIZE + SIZEOF(.binary.LTDAUTOLOAD_INFO);
877
878	########################### LTDOVERLAYS #############################
879	SDK_LTDOVERLAY_NUMBER			= <NUMBER.LTDOVERLAYS>;
880
881<FOREACH.LTDOVERLAYS>
882	.<LTDOVERLAY.NAME>:<LTDOVERLAY.NAME>
883	{
884		ALIGNALL(4);
885		. = ALIGN(32);
886
887		#
888		#  Definition to refer overlay segment, when same name symbols exist in multiple overlays.
889		#
890		<FOREACH.LTDOVERLAY.SEARCHSYMBOLS>
891		SEARCH_SYMBOL <LTDOVERLAY.SEARCHSYMBOL>;
892		<END.LTDOVERLAY.SEARCHSYMBOLS>
893
894		SDK_LTDOVERLAY_<LTDOVERLAY.NAME>_ID			=<LTDOVERLAY.ID>;
895		SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.ID			=<LTDOVERLAY.ID>;
896		SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.START		=.;
897		#
898		#  TEXT BLOCK: READ ONLY
899		#
900		SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.TEXT_START	=.;
901				#:::::::::: text/rodata
902				<FOREACH.LTDOVERLAY.FORCES>
903				FORCE_OBJECT<LTDOVERLAY.FORCE>
904				<END.LTDOVERLAY.FORCES>
905				<FOREACH.LTDOVERLAY.OBJECTS=.text>
906				<LTDOVERLAY.OBJECT=.text:t>
907				<END.LTDOVERLAY.OBJECTS>
908				<FOREACH.LTDOVERLAY.LIBRARIES=.text>
909				<LTDOVERLAY.LIBRARY=.text:t>
910				<END.LTDOVERLAY.LIBRARIES>
911				<FOREACH.LTDOVERLAY.OBJECTS=.rodata>
912				<LTDOVERLAY.OBJECT=.rodata:t>
913				<END.LTDOVERLAY.OBJECTS>
914				<FOREACH.LTDOVERLAY.LIBRARIES=.rodata>
915				<LTDOVERLAY.LIBRARY=.rodata:t>
916				<END.LTDOVERLAY.LIBRARIES>
917				<FOREACH.LTDOVERLAY.OBJECTS=.init>
918				<LTDOVERLAY.OBJECT=.init:t>
919				<END.LTDOVERLAY.OBJECTS>
920				<FOREACH.LTDOVERLAY.LIBRARIES=.init>
921				<LTDOVERLAY.LIBRARY=.init:t>
922				<END.LTDOVERLAY.LIBRARIES>
923		. = ALIGN(4);
924		SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.SINIT_START	=.;
925				#:::::::::: ctor
926				<FOREACH.LTDOVERLAY.OBJECTS=.ctor>
927				<LTDOVERLAY.OBJECT=.ctor:t>
928				<END.LTDOVERLAY.OBJECTS>
929				<FOREACH.LTDOVERLAY.LIBRARIES=.ctor>
930				<LTDOVERLAY.LIBRARY=.ctor:t>
931				<END.LTDOVERLAY.LIBRARIES>
932				<FOREACH.LTDOVERLAY.OBJECTS=.sinit>
933				<LTDOVERLAY.OBJECT=.sinit:t>
934				<END.LTDOVERLAY.OBJECTS>
935				<FOREACH.LTDOVERLAY.LIBRARIES=.sinit>
936				<LTDOVERLAY.LIBRARY=.sinit:t>
937				<END.LTDOVERLAY.LIBRARIES>
938				WRITEW	0;
939				#:::::::::: ctor
940		SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.SINIT_END	=.;
941				#:::::::::: text/rodata
942		SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.TEXT_END	=.;
943
944		#
945		#  DATA BLOCK: READ WRITE
946		#
947		. = ALIGN(32);
948		SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.DATA_START	=.;
949				#:::::::::: data
950				<FOREACH.LTDOVERLAY.OBJECTS=.sdata>
951				<LTDOVERLAY.OBJECT=.sdata:t>
952				<END.LTDOVERLAY.OBJECTS>
953				<FOREACH.LTDOVERLAY.LIBRARIES=.sdata>
954				<LTDOVERLAY.LIBRARY=.sdata:t>
955				<END.LTDOVERLAY.LIBRARIES>
956				<FOREACH.LTDOVERLAY.OBJECTS=.data>
957				<LTDOVERLAY.OBJECT=.data:t>
958				<END.LTDOVERLAY.OBJECTS>
959				<FOREACH.LTDOVERLAY.LIBRARIES=.data>
960				<LTDOVERLAY.LIBRARY=.data:t>
961				<END.LTDOVERLAY.LIBRARIES>
962				#:::::::::: data
963		SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.DATA_END	=.;
964		. = ALIGN(32);
965		SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.END		=.;
966
967		SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.TEXT_SIZE	= SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.TEXT_END - SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.TEXT_START;
968		SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.DATA_SIZE	= SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.DATA_END - SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.DATA_START;
969		SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.SIZE		= SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.END      - SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.START;
970
971	} > <LTDOVERLAY.NAME>
972
973	.<LTDOVERLAY.NAME>.bss:<LTDOVERLAY.NAME>
974	{
975		ALIGNALL(4);
976		. = ALIGN(32);
977
978		#
979		#  Definition to refer overlay segment, when same name symbols exist in multiple overlays.
980		#
981		<FOREACH.LTDOVERLAY.SEARCHSYMBOLS>
982		SEARCH_SYMBOL <LTDOVERLAY.SEARCHSYMBOL>;
983		<END.LTDOVERLAY.SEARCHSYMBOLS>
984
985		#
986		#  BSS BLOCK
987		#
988		SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.BSS_START	=.;
989				#:::::::::: bss
990				<FOREACH.LTDOVERLAY.OBJECTS=.bss>
991				<LTDOVERLAY.OBJECT=.bss:t>
992				<END.LTDOVERLAY.OBJECTS>
993				<FOREACH.LTDOVERLAY.LIBRARIES=.bss>
994				<LTDOVERLAY.LIBRARY=.bss:t>
995				<END.LTDOVERLAY.LIBRARIES>
996				<FOREACH.LTDOVERLAY.OBJECTS=.sbss>
997				<LTDOVERLAY.OBJECT=.sbss:t>
998				<END.LTDOVERLAY.OBJECTS>
999				<FOREACH.LTDOVERLAY.LIBRARIES=.sbss>
1000				<LTDOVERLAY.LIBRARY=.sbss:t>
1001				<END.LTDOVERLAY.LIBRARIES>
1002				#:::::::::: bss
1003		. = ALIGN(32);
1004		SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.BSS_END	=.;
1005
1006		SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.BSS_SIZE	= SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.BSS_END - SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.BSS_START;
1007
1008	} >> <LTDOVERLAY.NAME>
1009
1010<END.LTDOVERLAYS>
1011
1012	########################## LTDOVERLAYDEFS ###########################
1013	.<PROPERTY.LTDOVERLAYDEFS>L:
1014	{
1015		###  TWL limited extended static module information
1016				WRITEW SDK_LTDAUTOLOAD_TOP_START;						# load address
1017				WRITEW 0;												# padding
1018				WRITEW SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD_TOP_SIZE;	# size of module
1019				WRITEW 0;												# padding
1020
1021		###  TWL limited overlay filename
1022				<FOREACH.LTDOVERLAYS>
1023				WRITES ("<LTDOVERLAY.NAME><PROPERTY.LTDSUFFIX>");
1024				<END.LTDOVERLAYS>
1025
1026	} > <PROPERTY.LTDOVERLAYDEFS>L
1027
1028	######################### LTDOVERLAYTABLE ###########################
1029	.<PROPERTY.LTDOVERLAYTABLE>L:
1030	{
1031		<FOREACH.LTDOVERLAYS>
1032				WRITEW <LTDOVERLAY.ID>;									# overlay ID
1033				WRITEW ADDR(.<LTDOVERLAY.NAME>);						# load address
1034				WRITEW SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.SIZE;			# size of module
1035				WRITEW SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.BSS_SIZE;		# size of bss
1036				WRITEW SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.SINIT_START;	# start address of static init
1037				WRITEW SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.SINIT_END;		# end address of static init
1038				WRITEW <LTDOVERLAY.ID>;									# ROM file ID
1039				WRITEW 0;												# compressed state
1040		<END.LTDOVERLAYS>
1041
1042	} > <PROPERTY.LTDOVERLAYTABLE>L
1043
1044	############################ ARENA ##################################
1045	.dummy.MAIN_EX.TWL:
1046	{
1047		. = ALIGN(32);
1048
1049	} > dummy.MAIN_EX.TWL
1050
1051	.arena.MAIN.TWL:
1052	{
1053		. = ALIGN(32);
1054		SDK_LTDMAIN_ARENA_LO	=.;
1055
1056	} > arena.MAIN.TWL
1057
1058	.arena.MAIN_EX.TWL:
1059	{
1060		. = ALIGN(32);
1061		SDK_LTDMAIN_EX_ARENA_LO	=.;
1062
1063	} > arena.MAIN_EX.TWL
1064
1065	############################ OTHERS #################################
1066	# Module filelist
1067	.binary.MODULE_FILES:
1068	{
1069		WRITES ("<STATIC.NAME><PROPERTY.FLXSUFFIX>");
1070		WRITES ("<PROPERTY.OVERLAYDEFS><PROPERTY.FLXSUFFIX>");
1071		WRITES ("<PROPERTY.OVERLAYTABLE><PROPERTY.FLXSUFFIX>");
1072		WRITES ("<STATIC.NAME><PROPERTY.LTDSUFFIX>");
1073		WRITES ("<PROPERTY.LTDOVERLAYDEFS><PROPERTY.LTDSUFFIX>");
1074		WRITES ("<PROPERTY.LTDOVERLAYTABLE><PROPERTY.LTDSUFFIX>");
1075
1076	} > binary.MODULE_FILES
1077
1078	# Compression Spec List
1079	.binary.COMP_SPEC_LIST:
1080	{
1081		<FOREACH.OVERLAYS>
1082		WRITES ("<OVERLAY.NAME><PROPERTY.SUFFIX>,<OVERLAY.COMPRESS>");	# Overlay <OVERLAY.ID>
1083		<END.OVERLAYS>
1084		<FOREACH.LTDOVERLAYS>
1085		WRITES ("<LTDOVERLAY.NAME><PROPERTY.LTDSUFFIX>,<LTDOVERLAY.COMPRESS>");	# Overlay <LTDOVERLAY.ID>
1086		<END.LTDOVERLAYS>
1087	} > binary.COMP_SPEC_LIST
1088
1089}
1090