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