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