1#---------------------------------------------------------------------------
2#  Project:  NitroSDK - tools - makelcf
3#  File:     ARM7-TEG.lcf.template
4#
5#  Copyright 2003-2008 Nintendo. All rights reserved.
6#
7#  These coded instructions, statements, and computer programs contain
8#  proprietary information of Nintendo of America Inc. and/or Nintendo
9#  Company Ltd., and are protected by Federal copyright law.  They may
10#  not be disclosed to third parties or copied or duplicated in any form,
11#  in whole or in part, without the prior written consent of Nintendo.
12#
13#  $Log: ARM7-TEG.lcf.template,v $
14#  Revision 1.31  2006/05/10 03:19:47  yasu
15#  Added support for the CodeWarrior 2.x overlay expansion
16#
17#  Revision 1.30  2006/03/30 00:43:20  yasu
18#  Updated copyright year
19#
20#  Revision 1.29  2006/03/29 13:19:14  yasu
21#  NUMBER_OVERLAYS revised to NUMBER.OVERLAYS
22#
23#  Revision 1.28  2005/09/02 04:14:22 yasu
24#  Old symbols were redefined so they can be used even under SDK2.2
25#
26#  Revision 1.27  2005/08/31 09:34:57  yasu
27#  Corrected a problem where code would not function normally when using section names such as section_BSS
28#
29#  Revision 1.26  2005/06/20 12:29:20  yasu
30#  Changed Surffix to Suffix
31#
32#  Revision 1.25  2005/06/17 03:16:11  yasu
33#  Fixed copyright header
34#
35#  Revision 1.24  2005/06/14 09:03:42  yada
36#  Fix specific to negative value of SDK_STACKSIZE
37#
38#  Revision 1.23  2004/09/08 01:27:18  yasu
39#  Added * (.wram) on static segment
40#
41#  Revision 1.22  2004/08/18 02:00:34  yasu
42#  Fixed address of SDK_AUTOLOAD.MAIN.START
43#
44#  Revision 1.21  2004/08/18 01:50:40  yasu
45#  Support for SDK_SUBPRIV_ARENA_LO
46#
47#  Revision 1.20  2004/08/02 10:38:53  yasu
48#  Added autoload-done callback address in overlaydefs
49#
50#  Revision 1.19  2004/07/26 00:08:27  yasu
51#  Fixed label of exception table
52#
53#  Revision 1.18  2004/07/24 05:42:25  yasu
54#  Set default values for SDK_AUTOGEN_xTCM_START
55#
56#  Revision 1.17  2004/07/23 11:32:14  yasu
57#  Defined labels for __exception_table_start__ and _end__
58#
59#  Revision 1.16  2004/07/10 04:10:26  yasu
60#  Added support for command 'Library'
61#
62#  Revision 1.15  2004/07/08 04:04:59  yasu
63#  Fixed small typo
64#
65#  Revision 1.14  2004/07/02 08:13:02  yasu
66#  Added support for OBJECT()
67#
68#  Revision 1.13  2004/07/01 12:54:38  yasu
69#  Added support for ITCM/DTCM/WRAM autoload
70#
71#  Revision 1.12  2004/07/01 10:41:46  yasu
72#  Added support for autoload
73#
74#  Revision 1.11  2004/07/01 09:41:50  yasu
75#  Added support for autoload
76#
77#  Revision 1.10  2004/06/14 11:28:15  yasu
78#  Support for section filter "FOREACH.STATIC.OBJECTS=.sectionName"
79#
80#  Revision 1.9  2004/05/27 04:06:42  yasu
81#  Fixed SDK_WRAM_ARENA_LO
82#
83#  Revision 1.8  2004/04/26 11:41:38  yasu
84#  Added KEEP_SECTION { .ctor }
85#
86#  Revision 1.7  2004/04/19 06:39:41  yasu
87#  Fixed workram checker
88#
89#  Revision 1.6  2004/04/19 04:27:30  yasu
90#  Support for WRAM overflow check
91#
92#  Revision 1.5  2004/04/06 01:53:34  yasu
93#  Moved rodata section into text section
94#
95#  Revision 1.4  2004/04/06 01:39:24  miya
96#  Modified overlay module size
97#
98#  Revision 1.3  2004/03/29 11:40:48  yasu
99#  Deleted ROM SIZE parameter on overlay table
100#
101#  Revision 1.2  2004/03/26 09:32:48  yasu
102#  Deleted useless ALIGN
103#
104#  Revision 1.1  2004/03/26 06:04:32  yasu
105#  Moved spec files
106#
107#  Revision 1.3  2004/03/23 00:15:35  yasu
108#  Added WRITEW 0 for the termination of __OVERLAY_static_init__
109#
110#  Revision 1.2  2004/03/22 02:15:49  yasu
111#  Set _start as entry address in ROM header
112#
113#  Revision 1.1  2004/03/16 10:06:07  yasu
114#  Copied ARM9s template file
115#
116#  $NoKeywords: $
117#---------------------------------------------------------------------------
118MEMORY
119{
120	<STATIC.NAME>           (RWX) : ORIGIN = <STATIC.ADDRESS>,   LENGTH = 0x0 >  <STATIC.NAME><PROPERTY.SUFFIX>
121	<FOREACH.AUTOLOADS>
122	<AUTOLOAD.NAME>         (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.SUFFIX>
123	<END.AUTOLOADS>
124	binary.AUTOLOAD_INFO    (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.SUFFIX>
125
126	<PROPERTY.OVERLAYDEFS>  (RW)  : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>
127	<PROPERTY.OVERLAYTABLE> (RW)  : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>
128	<FOREACH.OVERLAYS>
129	<OVERLAY.NAME>          (RWXO): ORIGIN = <OVERLAY.ADDRESS>, LENGTH = 0x0 > <OVERLAY.NAME><PROPERTY.SUFFIX>
130	<END.OVERLAYS>
131	arena.MAIN              (RW)  : ORIGIN = AFTER(<STATIC.NAME><FOREACH.OVERLAYS>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
132	check.WORKRAM		(RWX) : ORIGIN = <STATIC.ADDRESS>, LENGTH = 0x10000 > workram.check
133}
134
135KEEP_SECTION
136{
137	.ctor
138}
139
140SECTIONS
141{
142	############################ STATIC #################################
143	.<STATIC.NAME>:
144	{
145	ALIGNALL(4);			. = ALIGN(4);	# Fit to cache line
146					<IF.NITRO_LCFSPEC.GE.2>
147					<FOREACH.STATIC.SEARCHSYMBOLS>
148					SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
149					<END.STATIC.SEARCHSYMBOLS>
150					<ENDIF>
151	#
152	#  TEXT BLOCK: READ ONLY
153	#
154	SDK_STATIC_START		=.;
155	SDK_STATIC_TEXT_START		=.;
156					#:::::::::: text/rodata
157					OBJECT(_start,*)
158					crt0.o (.text)
159					<FOREACH.STATIC.OBJECTS=.text>
160					<STATIC.OBJECT=.text:t>
161					<END.STATIC.OBJECTS>
162					<FOREACH.STATIC.LIBRARIES=.text>
163					<STATIC.LIBRARY=.text:t>
164					<END.STATIC.LIBRARIES>
165					. = ALIGN(4);
166					* (.exception)
167					. = ALIGN(4);
168	SDK_STATIC_ETABLE_START		=.;
169					EXCEPTION
170	SDK_STATIC_ETABLE_END		=.;
171					. = ALIGN(4);
172					<FOREACH.STATIC.OBJECTS=.init>
173					<STATIC.OBJECT=.init:t>
174					<END.STATIC.OBJECTS>
175					<FOREACH.STATIC.LIBRARIES=.init>
176					<STATIC.LIBRARY=.init:t>
177					<END.STATIC.LIBRARIES>
178					. = ALIGN(4);
179					<FOREACH.STATIC.OBJECTS=.rodata>
180					<STATIC.OBJECT=.rodata:t>
181					<END.STATIC.OBJECTS>
182					<FOREACH.STATIC.LIBRARIES=.rodata>
183					<STATIC.LIBRARY=.rodata:t>
184					<END.STATIC.LIBRARIES>
185					. = ALIGN(4);
186
187	SDK_STATIC_SINIT_START		=.;
188					#:::::::::: ctor
189					<FOREACH.STATIC.OBJECTS=.ctor>
190					<STATIC.OBJECT=.ctor:t>
191					<END.STATIC.OBJECTS>
192					<FOREACH.STATIC.LIBRARIES=.ctor>
193					<STATIC.LIBRARY=.ctor:t>
194					<END.STATIC.LIBRARIES>
195					WRITEW	0;
196					#:::::::::: ctor
197	SDK_STATIC_SINIT_END		=.;
198
199					#:::::::::: text/rodata
200					. = ALIGN(4);
201	SDK_STATIC_TEXT_END		=.;
202
203	#
204	#  DATA BLOCK: READ WRITE
205	#
206	SDK_STATIC_DATA_START		=.;
207					#:::::::::: Data
208					<FOREACH.STATIC.OBJECTS=.wram>
209					<STATIC.OBJECT=.wram:t>
210					<END.STATIC.OBJECTS>
211					<FOREACH.STATIC.LIBRARIES=.wram>
212					<STATIC.LIBRARY=.wram:t>
213					<END.STATIC.LIBRARIES>
214					. = ALIGN(4);
215					<FOREACH.STATIC.OBJECTS=.sdata>
216					<STATIC.OBJECT=.sdata:t>
217					<END.STATIC.OBJECTS>
218					<FOREACH.STATIC.LIBRARIES=.sdata>
219					<STATIC.LIBRARY=.sdata:t>
220					<END.STATIC.LIBRARIES>
221					. = ALIGN(4);
222					<FOREACH.STATIC.OBJECTS=.data>
223					<STATIC.OBJECT=.data:t>
224					<END.STATIC.OBJECTS>
225					<FOREACH.STATIC.LIBRARIES=.data>
226					<STATIC.LIBRARY=.data:t>
227					<END.STATIC.LIBRARIES>
228					. = ALIGN(4);
229					#:::::::::: Data
230					. = ALIGN(4);
231	SDK_STATIC_DATA_END		=.;
232	SDK_STATIC_END			=.;
233
234	SDK_STATIC_TEXT_SIZE		= SDK_STATIC_TEXT_END - SDK_STATIC_TEXT_START;
235	SDK_STATIC_DATA_SIZE		= SDK_STATIC_DATA_END - SDK_STATIC_DATA_START;
236	SDK_STATIC_SIZE			= SDK_STATIC_END      - SDK_STATIC_START;
237	__sinit__			= SDK_STATIC_SINIT_START;	# For static initializer
238	__exception_table_start__	= SDK_STATIC_ETABLE_START;	# For exception table
239	__exception_table_end__		= SDK_STATIC_ETABLE_END;	# For exception table
240	} > <STATIC.NAME>
241
242	.<STATIC.NAME>.bss:
243	{
244	ALIGNALL(4);			. = ALIGN(4);
245					<IF.NITRO_LCFSPEC.GE.2>
246					<FOREACH.STATIC.SEARCHSYMBOLS>
247					SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
248					<END.STATIC.SEARCHSYMBOLS>
249					<ENDIF>
250	#
251	#  BSS BLOCK
252	#
253	SDK_STATIC_BSS_START		=.;
254					#:::::::::: bss
255					<FOREACH.STATIC.OBJECTS=.sbss>
256					<STATIC.OBJECT=.sbss:t>
257					<END.STATIC.OBJECTS>
258					<FOREACH.STATIC.LIBRARIES=.sbss>
259					<STATIC.LIBRARY=.sbss:t>
260					<END.STATIC.LIBRARIES>
261					. = ALIGN(4);
262					<FOREACH.STATIC.OBJECTS=.bss>
263					<STATIC.OBJECT=.bss:t>
264					<END.STATIC.OBJECTS>
265					<FOREACH.STATIC.LIBRARIES=.bss>
266					<STATIC.LIBRARY=.bss:t>
267					<END.STATIC.LIBRARIES>
268					. = ALIGN(4);
269					#:::::::::: bss
270					. = ALIGN(4);
271	SDK_STATIC_BSS_END		= .;
272	SDK_STATIC_BSS_SIZE		= SDK_STATIC_BSS_END - SDK_STATIC_BSS_START;
273
274	} >> <STATIC.NAME>
275
276
277	############################ AUTOLOADS ##############################
278	SDK_AUTOLOAD.MAIN.START			= 0x02380000;
279	SDK_AUTOLOAD.MAIN.END			= SDK_AUTOLOAD.MAIN.START;
280	SDK_AUTOLOAD.MAIN.BSS_END		= SDK_AUTOLOAD.MAIN.START;
281	SDK_AUTOLOAD.MAIN.SIZE			= 0;
282	SDK_AUTOLOAD.MAIN.BSS_SIZE		= 0;
283	SDK_AUTOLOAD.WRAM.START			= 0x037f8000;
284	SDK_AUTOLOAD.WRAM.END			= SDK_AUTOLOAD.WRAM.START;
285	SDK_AUTOLOAD.WRAM.BSS_END		= SDK_AUTOLOAD.WRAM.START;
286	SDK_AUTOLOAD.WRAM.SIZE			= 0;
287	SDK_AUTOLOAD.WRAM.BSS_SIZE		= 0;
288	SDK_AUTOLOAD_START			= SDK_STATIC_END;
289	SDK_AUTOLOAD_SIZE			= 0;
290	SDK_AUTOLOAD_NUMBER			= <NUMBER.AUTOLOADS>;
291
292<FOREACH.AUTOLOADS>
293	.<AUTOLOAD.NAME>:
294	{
295	ALIGNALL(4);				. = ALIGN(4);
296						<IF.NITRO_LCFSPEC.GE.2>
297						<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
298						SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
299						<END.AUTOLOAD.SEARCHSYMBOLS>
300						<ENDIF>
301	#
302	#   TEXT BLOCK: READ ONLY
303	#
304	SDK_AUTOLOAD_<AUTOLOAD.NAME>_ID		=<AUTOLOAD.ID>;
305	SDK_AUTOLOAD.<AUTOLOAD.NAME>.ID		=<AUTOLOAD.ID>;
306	SDK_AUTOLOAD.<AUTOLOAD.NAME>.START	=.;
307	SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START	=.;
308						#:::::::::: text/rodata
309						<FOREACH.AUTOLOAD.OBJECTS=.text>
310						<AUTOLOAD.OBJECT=.text:t>
311						<END.AUTOLOAD.OBJECTS>
312						<FOREACH.AUTOLOAD.LIBRARIES=.text>
313						<AUTOLOAD.LIBRARY=.text:t>
314						<END.AUTOLOAD.LIBRARIES>
315						. = ALIGN(4);
316						<FOREACH.AUTOLOAD.OBJECTS=.rodata>
317						<AUTOLOAD.OBJECT=.rodata:t>
318						<END.AUTOLOAD.OBJECTS>
319						<FOREACH.AUTOLOAD.LIBRARIES=.rodata>
320						<AUTOLOAD.LIBRARY=.rodata:t>
321						<END.AUTOLOAD.LIBRARIES>
322						. = ALIGN(4);
323						#:::::::::: text/rodata
324	SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END	=.;
325
326	#
327	#  DATA BLOCK: READ WRITE BLOCK
328	#
329	SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START	=.;
330						#:::::::::: Data
331						<FOREACH.AUTOLOAD.OBJECTS=.wram>
332						<AUTOLOAD.OBJECT=.wram:t>
333						<END.AUTOLOAD.OBJECTS>
334						<FOREACH.AUTOLOAD.LIBRARIES=.wram>
335						<AUTOLOAD.LIBRARY=.wram:t>
336						<END.AUTOLOAD.LIBRARIES>
337						. = ALIGN(4);
338						<FOREACH.AUTOLOAD.OBJECTS=.sdata>
339						<AUTOLOAD.OBJECT=.sdata:t>
340						<END.AUTOLOAD.OBJECTS>
341						<FOREACH.AUTOLOAD.LIBRARIES=.sdata>
342						<AUTOLOAD.LIBRARY=.sdata:t>
343						<END.AUTOLOAD.LIBRARIES>
344						. = ALIGN(4);
345						<FOREACH.AUTOLOAD.OBJECTS=.data>
346						<AUTOLOAD.OBJECT=.data:t>
347						<END.AUTOLOAD.OBJECTS>
348						<FOREACH.AUTOLOAD.LIBRARIES=.data>
349						<AUTOLOAD.LIBRARY=.data:t>
350						<END.AUTOLOAD.LIBRARIES>
351						. = ALIGN(4);
352						#:::::::::: Data
353	SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END	=.;
354	SDK_AUTOLOAD.<AUTOLOAD.NAME>.END	=.;
355
356	SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_SIZE	= SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START;
357	SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_SIZE	= SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START;
358	SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE	= SDK_AUTOLOAD.<AUTOLOAD.NAME>.END      - SDK_AUTOLOAD.<AUTOLOAD.NAME>.START;
359	SDK_AUTOLOAD_SIZE			= SDK_AUTOLOAD_SIZE + SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
360
361	} > <AUTOLOAD.NAME>
362
363	.<AUTOLOAD.NAME>.bss:
364	{
365	ALIGNALL(4);				. = ALIGN(4);
366						<IF.NITRO_LCFSPEC.GE.2>
367						<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
368						SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
369						<END.AUTOLOAD.SEARCHSYMBOLS>
370						<ENDIF>
371	#
372	#  BSS BLOCK
373	#
374	SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START	= .;
375						#:::::::::: bss
376						<FOREACH.AUTOLOAD.OBJECTS=.sbss>
377						<AUTOLOAD.OBJECT=.sbss:t>
378						<END.AUTOLOAD.OBJECTS>
379						<FOREACH.AUTOLOAD.LIBRARIES=.sbss>
380						<AUTOLOAD.LIBRARY=.sbss:t>
381						<END.AUTOLOAD.LIBRARIES>
382						. = ALIGN(4);
383						<FOREACH.AUTOLOAD.OBJECTS=.bss>
384						<AUTOLOAD.OBJECT=.bss:t>
385						<END.AUTOLOAD.OBJECTS>
386						<FOREACH.AUTOLOAD.LIBRARIES=.bss>
387						<AUTOLOAD.LIBRARY=.bss:t>
388						<END.AUTOLOAD.LIBRARIES>
389						. = ALIGN(4);
390						#:::::::::: bss
391						. = ALIGN(4);
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_MAIN_START			= SDK_AUTOLOAD.MAIN.START;
401	SDK_AUTOLOAD_MAIN_END			= SDK_AUTOLOAD.MAIN.END;
402	SDK_AUTOLOAD_MAIN_BSS_END		= SDK_AUTOLOAD.MAIN.BSS_END;
403	SDK_AUTOLOAD_MAIN_SIZE			= SDK_AUTOLOAD.MAIN.SIZE;
404	SDK_AUTOLOAD_MAIN_BSS_SIZE		= SDK_AUTOLOAD.MAIN.BSS_SIZE;
405	SDK_AUTOLOAD_WRAM_START			= SDK_AUTOLOAD.WRAM.START;
406	SDK_AUTOLOAD_WRAM_END			= SDK_AUTOLOAD.WRAM.END;
407	SDK_AUTOLOAD_WRAM_BSS_END		= SDK_AUTOLOAD.WRAM.BSS_END;
408	SDK_AUTOLOAD_WRAM_SIZE			= SDK_AUTOLOAD.WRAM.SIZE;
409	SDK_AUTOLOAD_WRAM_BSS_SIZE		= SDK_AUTOLOAD.WRAM.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>.BSS_SIZE;
418<END.AUTOLOADS>
419	} > binary.AUTOLOAD_INFO
420
421	SDK_AUTOLOAD_LIST			= SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE;
422	SDK_AUTOLOAD_LIST_END			= SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO);
423	SDK_AUTOLOAD_SIZE			= SDK_AUTOLOAD_SIZE  + SIZEOF(.binary.AUTOLOAD_INFO);
424
425	############################ OVERLAYS ###############################
426	SDK_OVERLAY_NUMBER 			= <NUMBER.OVERLAYS>;
427
428<FOREACH.OVERLAYS>
429	.<OVERLAY.NAME>:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
430	{
431	ALIGNALL(4);				. = ALIGN(4);
432						<IF.NITRO_LCFSPEC.GE.2>
433						<FOREACH.OVERLAY.SEARCHSYMBOLS>
434						SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
435						<END.OVERLAY.SEARCHSYMBOLS>
436						<ENDIF>
437	#
438	#   TEXT BLOCK: READ ONLY
439	#
440	SDK_OVERLAY_<OVERLAY.NAME>_ID		=<OVERLAY.ID>;	### SEGMENT <OVERLAY.NAME> OVERLAY ID
441	SDK_OVERLAY.<OVERLAY.NAME>.ID		=<OVERLAY.ID>;
442	SDK_OVERLAY.<OVERLAY.NAME>.START	=.;
443	SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START	=.;
444						#:::::::::: text/rodata
445						<FOREACH.OVERLAY.OBJECTS=.text>
446						<OVERLAY.OBJECT=.text:t>
447						<END.OVERLAY.OBJECTS>
448						<FOREACH.OVERLAY.LIBRARIES=.text>
449						<OVERLAY.LIBRARY=.text:t>
450						<END.OVERLAY.LIBRARIES>
451						. = ALIGN(4);
452						<FOREACH.OVERLAY.OBJECTS=.rodata>
453						<OVERLAY.OBJECT=.rodata:t>
454						<END.OVERLAY.OBJECTS>
455						<FOREACH.OVERLAY.LIBRARIES=.rodata>
456						<OVERLAY.LIBRARY=.rodata:t>
457						<END.OVERLAY.LIBRARIES>
458						. = ALIGN(4);
459						<FOREACH.OVERLAY.OBJECTS=.init>
460						<OVERLAY.OBJECT=.init:t>
461						<END.OVERLAY.OBJECTS>
462						<FOREACH.OVERLAY.LIBRARIES=.init>
463						<OVERLAY.LIBRARY=.init:t>
464						<END.OVERLAY.LIBRARIES>
465						. = ALIGN(4);
466	SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START	=.;
467						#:::::::::: ctor
468						<FOREACH.OVERLAY.OBJECTS=.ctor>
469						<OVERLAY.OBJECT=.ctor:t>
470						<END.OVERLAY.OBJECTS>
471						<FOREACH.OVERLAY.LIBRARIES=.ctor>
472						<OVERLAY.LIBRARY=.ctor:t>
473						<END.OVERLAY.LIBRARIES>
474						WRITEW	0;
475						#:::::::::: ctor
476	SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END	=.;
477
478						#:::::::::: text/rodata
479						. = ALIGN(4);
480	SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END	=.;
481
482	#
483	#  DATA BLOCK: READ WRITE
484	#
485	SDK_OVERLAY.<OVERLAY.NAME>.DATA_START	=.;
486						#:::::::::: Data
487						<FOREACH.OVERLAY.OBJECTS=.sdata>
488						<OVERLAY.OBJECT=.sdata:t>
489						<END.OVERLAY.OBJECTS>
490						<FOREACH.OVERLAY.LIBRARIES=.sdata>
491						<OVERLAY.LIBRARY=.sdata:t>
492						<END.OVERLAY.LIBRARIES>
493						. = ALIGN(4);
494						<FOREACH.OVERLAY.OBJECTS=.data>
495						<OVERLAY.OBJECT=.data:t>
496						<END.OVERLAY.OBJECTS>
497						<FOREACH.OVERLAY.LIBRARIES=.data>
498						<OVERLAY.LIBRARY=.data:t>
499						<END.OVERLAY.LIBRARIES>
500						. = ALIGN(4);
501						#:::::::::: Data
502						. = ALIGN(4);
503	SDK_OVERLAY.<OVERLAY.NAME>.DATA_END	=.;
504	SDK_OVERLAY.<OVERLAY.NAME>.END		=.;
505
506	SDK_OVERLAY.<OVERLAY.NAME>.TEXT_SIZE	= SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END - SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START;
507	SDK_OVERLAY.<OVERLAY.NAME>.DATA_SIZE	= SDK_OVERLAY.<OVERLAY.NAME>.DATA_END - SDK_OVERLAY.<OVERLAY.NAME>.DATA_START;
508	SDK_OVERLAY.<OVERLAY.NAME>.SIZE		= SDK_OVERLAY.<OVERLAY.NAME>.END      - SDK_OVERLAY.<OVERLAY.NAME>.START;
509
510	} > <OVERLAY.NAME>
511
512	.<OVERLAY.NAME>.bss:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
513	{
514	ALIGNALL(4);				. = ALIGN(4);
515						<IF.NITRO_LCFSPEC.GE.2>
516						<FOREACH.OVERLAY.SEARCHSYMBOLS>
517						SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
518						<END.OVERLAY.SEARCHSYMBOLS>
519						<ENDIF>
520	#
521	#  BSS BLOCK
522	#
523	SDK_OVERLAY.<OVERLAY.NAME>.BSS_START	= .;
524						#:::::::::: bss
525						<FOREACH.OVERLAY.OBJECTS=.bss>
526						<OVERLAY.OBJECT=.bss:t>
527						<END.OVERLAY.OBJECTS>
528						<FOREACH.OVERLAY.LIBRARIES=.bss>
529						<OVERLAY.LIBRARY=.bss:t>
530						<END.OVERLAY.LIBRARIES>
531						. = ALIGN(4);
532						<FOREACH.OVERLAY.OBJECTS=.sbss>
533						<OVERLAY.OBJECT=.sbss:t>
534						<END.OVERLAY.OBJECTS>
535						<FOREACH.OVERLAY.LIBRARIES=.sbss>
536						<OVERLAY.LIBRARY=.sbss:t>
537						<END.OVERLAY.LIBRARIES>
538						. = ALIGN(4);
539						#:::::::::: bss
540						. = ALIGN(4);
541	SDK_OVERLAY.<OVERLAY.NAME>.BSS_END	= .;
542
543	SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE	= SDK_OVERLAY.<OVERLAY.NAME>.BSS_END - SDK_OVERLAY.<OVERLAY.NAME>.BSS_START;
544
545	} >> <OVERLAY.NAME>
546
547<END.OVERLAYS>
548
549
550	############################ ARENA ##################################
551	.arena.MAIN:
552	{
553						. = ALIGN(4);
554		SDK_SECTION_ARENA_START		=.;
555	} > arena.MAIN
556
557
558	############################ OVERLAYDEFS ############################
559	.<PROPERTY.OVERLAYDEFS>:
560	{
561		###  <STATIC.NAME> module information
562		WRITEW ADDR(.<STATIC.NAME>);			# Load address
563		WRITEW _start;					# Entry address
564		WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE;	# Size of module
565		WRITEW _start_AutoloadDoneCallback;		# Callback autoload done
566
567		###  overlay filename
568		<FOREACH.OVERLAYS>
569		WRITES ("<OVERLAY.NAME><PROPERTY.SUFFIX>");	# Overlay <OVERLAY.ID>
570		<END.OVERLAYS>
571
572	} > <PROPERTY.OVERLAYDEFS>
573
574
575	############################ OVERLAYTABLE ###########################
576	.<PROPERTY.OVERLAYTABLE>:
577	{
578		<FOREACH.OVERLAYS>
579		#	 Overlay <OVERLAY.ID>
580		WRITEW <OVERLAY.ID>;				# Overlay ID
581		WRITEW ADDR(.<OVERLAY.NAME>);			# Load address
582		WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SIZE;		# Size of module
583		WRITEW SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE;	# Size of bss
584		WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START;	# Start address of static init
585		WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END;	# End address of static init
586		WRITEW <OVERLAY.ID>;				# ROM file ID
587		WRITEW 0;					# Reserved
588
589		<END.OVERLAYS>
590
591	} > <PROPERTY.OVERLAYTABLE>
592
593
594	############################ OTHERS #################################
595	SDK_SUBPRIV_ARENA_LO = SDK_AUTOLOAD.MAIN.BSS_END;
596	SDK_WRAM_ARENA_LO    = SDK_SECTION_ARENA_START;
597	SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>;	# Allocated in WRAM
598	SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>;		# Allocated in WRAM
599
600	# Work RAM size checker
601	SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1;
602	.check.WORKRAM:
603	{
604		. = . + SDK_SECTION_ARENA_START - <STATIC.ADDRESS> + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
605	} > check.WORKRAM
606}
607