1#---------------------------------------------------------------------------
2#  Project:  NitroSDK - tools - makelcf
3#  File:     ARM9-TS.lcf.template
4#
5#  Copyright 2003-2008 Nintendo. All rights reserved.
6#
7#  These coded instructions, statements, and computer programs contain
8#  proprietary information of Nintendo of America Inc. and/or Nintendo
9#  Company Ltd., and are protected by Federal copyright law. They may
10#  not be disclosed to third parties or copied or duplicated in any form,
11#  in whole or in part, without the prior written consent of Nintendo.
12#
13#  $Log: ARM9-TS.lcf.template,v $
14#  Revision 1.39  2007/04/12 00:11:41  yasu
15#  Updated copyright year
16#
17#  Revision 1.38  2007/04/10 14:05:45  yasu
18#  Support for multiple uses of SEARCH_SYMBOL
19#
20#  Revision 1.37  2006/07/20 07:29:12  kitase_hirotake
21#  Added the description explaining the version section
22#
23#  Revision 1.36  2006/07/18 11:11:01  yasu
24#  There is an error in the way check.xTCM gets the OVERLAY region size in the TCM region overflow check. Because it is not currently clear how to accurately calculate this, the addition of the OVERLAY region was cut out.
25#
26#
27#
28#  Revision 1.35  2006/05/10 03:19:47  yasu
29#  Added support for the CodeWarrior 2.x overlay expansion
30#
31#  Revision 1.34  2006/04/06 09:02:36  kitase_hirotake
32#  Support for .itcm.bss and .dtcm.bss
33#
34#  Revision 1.33  2006/03/30 23:59:22  yasu
35#  Updated copyright year
36#
37#  Revision 1.32  2006/03/29 13:14:22  yasu
38#  Support for overlays in CWVER 2.x
39#
40#  Revision 1.31  2005/11/24 01:16:47  yada
41#  Changed start address of mainEX arena from 0x2400000 to 0x23e0000
42#
43#  Revision 1.30  2005/09/02 04:14:22  yasu
44#  Old symbols were redefined so they can be used even under SDK2.2
45#
46#  Revision 1.29  2005/08/31 09:34:57  yasu
47#  Corrected a problem where code would not function normally when using section names such as section_BSS
48#
49#  Revision 1.28  2005/08/26 11:22:16  yasu
50#  Overlay support for ITCM/DTCM
51#
52#  Revision 1.27  2005/06/20 12:29:20  yasu
53#  Changed Surffix to Suffix
54#
55#  Revision 1.26  2005/06/14 09:03:42  yada
56#  Fix specific to negative value of SDK_STACKSIZE
57#
58#  Revision 1.25  2005/04/13 12:51:00  terui
59#  Changed SDK_AUTOLOAD.DTCM.START 0x027c0000 to 0x027e0000
60#
61#  Revision 1.24  2005/03/30 00:02:14  yosizaki
62#  Fixed copyright header
63#
64#  Revision 1.23  2005/03/25 12:54:59  yasu
65#  Added the .version section
66#
67#  Revision 1.22  2004/10/03 02:00:56  yasu
68#  Output component file list for compstatic tool
69#
70#  Revision 1.21  2004/09/27 05:28:21  yasu
71#  Added support for .sinit
72#
73#  Revision 1.20  2004/09/09 11:49:20  yasu
74#  Added support for compstatic in default
75#
76#  Revision 1.19  2004/09/06 06:40:00  yasu
77#  Added labels for digest
78#
79#  Revision 1.18  2004/08/20 06:19:59  yasu
80#  DTCM moves to 0x027c0000 at default
81#
82#  Revision 1.17  2004/08/02 10:38:53  yasu
83#  Added autoload-done callback address in overlaydefs
84#
85#  Revision 1.16  2004/07/26 02:22:32  yasu
86#  Changed DTCM address to 0x023c0000
87#
88#  Revision 1.15  2004/07/26 00:08:27  yasu
89#  Fixed label of exception table
90#
91#  Revision 1.14  2004/07/24 05:42:25  yasu
92#  Set default values for SDK_AUTOGEN_xTCM_START
93#
94#  Revision 1.13  2004/07/23 11:32:14  yasu
95#  Defined labels for __exception_table_start__ and _end__
96#
97#  Revision 1.12  2004/07/12 12:21:08  yasu
98#  Checked size of ITCM/DTCM
99#
100#  Revision 1.11  2004/07/10 04:10:26  yasu
101#  Added support for command 'Library'
102#
103#  Revision 1.10  2004/07/02 08:13:02  yasu
104#  Added support for OBJECT( )
105#
106#  Revision 1.9	 2004/07/01 12:54:38  yasu
107#  Added support for ITCM/DTCM/WRAM autoload
108#
109#  Revision 1.8	 2004/07/01 10:41:46  yasu
110#  Added support for autoload
111#
112#  Revision 1.7	 2004/06/02 07:35:37  yasu
113#  Set libsyscall.a in FORCE_ACTIVE
114#  Put NitroMain at the top of ROM image
115#
116#  Revision 1.6	 2004/06/02 04:56:28  yasu
117#  Revised to match the new ROM map of TS
118#
119#  Revision 1.5	 2004/06/01 06:12:00  miya
120#  Added padding at top of ROM image
121#
122#  Revision 1.4	 2004/04/26 12:16:48  yasu
123#  Added KEEP_SECTIONS
124#
125#  Revision 1.3	 2004/04/20 07:41:32  yasu
126#  Set STATICINIT instead of .ctor temporarily
127#
128#  Revision 1.2	 2004/04/14 07:16:42  yasu
129#  Added ALIGN(32) for convenience to handle cache line
130#
131#  Revision 1.1	 2004/04/06 01:59:54  yasu
132#  Newly added
133#
134#  $NoKeywords: $
135#---------------------------------------------------------------------------
136MEMORY
137{
138	main		(RWX) : ORIGIN = 0x02000000,   LENGTH = 0x0 >  main.sbin
139	binary.AUTOLOAD_INFO		(RWX) : ORIGIN = 0, LENGTH = 0x0 >> main.sbin
140	binary.STATIC_FOOTER		(RWX) : ORIGIN = 0, LENGTH = 0x0 >> main.sbin
141
142	main_defs	(RW)  : ORIGIN = AFTER(main), LENGTH = 0x0 > main_defs.sbin
143	main_table	(RW)  : ORIGIN = AFTER(main), LENGTH = 0x0 > main_table.sbin
144	overlay_0		(RWXO): ORIGIN = 0x03f00000, LENGTH = 0x0 > overlay_0.sbin
145	overlay_1		(RWXO): ORIGIN = AFTER(main), LENGTH = 0x0 > overlay_1.sbin
146	overlay_2		(RWXO): ORIGIN = AFTER(overlay_1), LENGTH = 0x0 > overlay_2.sbin
147	dummy.MAIN_EX		(RW)  : ORIGIN = 0x023e0000, LENGTH = 0x0
148	arena.MAIN			(RW)  : ORIGIN = AFTER(main,overlay_1,overlay_2), LENGTH = 0x0
149	arena.MAIN_EX		(RW)  : ORIGIN = AFTER(dummy.MAIN_EX), LENGTH = 0x0
150	arena.ITCM		(RW)  : ORIGIN = AFTER(ITCM), LENGTH = 0x0
151	arena.DTCM		(RW)  : ORIGIN = AFTER(DTCM), LENGTH = 0x0
152	binary.MODULE_FILES		(RW)  : ORIGIN = 0x0, LENGTH = 0x0     > component.files
153	check.ITCM			(RWX) : ORIGIN = 0x0, LENGTH = 0x08000 > itcm.check
154	check.DTCM			(RW)  : ORIGIN = 0x0, LENGTH = 0x04000 > dtcm.check
155}
156
157FORCE_ACTIVE
158{
159	SVC_SoftReset
160}
161
162KEEP_SECTION
163{
164	.sinit
165}
166
167SECTIONS
168{
169	############################ STATIC #################################
170	.main:
171	{
172	ALIGNALL(4);			. = ALIGN(32);	# Fit to cache line
173
174	#
175	#  TEXT BLOCK: READ ONLY
176	#
177	SDK_STATIC_START		=.;
178	SDK_STATIC_TEXT_START		=.;
179					#:::::::::: text/rodata
180					libsyscall.a (.text)
181					crt0.o (.text)
182					crt0.o (.rodata)
183					#
184					# Added .version section.
185					# The information included in this section will be needed for Lotcheck purposes. Be sure to leave it in this position.
186					#
187					#
188					* (.version)
189					OBJECT(NitroMain,*)
190					*.o (.text)
191					. = ALIGN(4);
192					* (.exception)
193					. = ALIGN(4);
194	SDK_STATIC_ETABLE_START		=.;
195					EXCEPTION
196	SDK_STATIC_ETABLE_END		=.;
197					. = ALIGN(4);
198					. = ALIGN(4);
199					. = ALIGN(4);
200
201	SDK_STATIC_SINIT_START		=.;
202					#:::::::::: ctor
203					*.axxx (.ctor)
204					WRITEW	0;
205					#:::::::::: ctor
206	SDK_STATIC_SINIT_END		=.;
207
208					#:::::::::: text/rodata
209					. = ALIGN(32);
210	SDK_STATIC_TEXT_END		=.;
211
212	#
213	#  DATA BLOCK: READ WRITE
214	#
215	SDK_STATIC_DATA_START		=.;
216					#:::::::::: Data
217					. = ALIGN(4);
218					. = ALIGN(4);
219	SDK_OVERLAY_DIGEST		=.;
220					# NO DIGEST
221	SDK_OVERLAY_DIGEST_END		=.;
222					#:::::::::: Data
223					. = ALIGN(32);
224	SDK_STATIC_DATA_END		=.;
225	SDK_STATIC_END			=.;
226
227	SDK_STATIC_TEXT_SIZE		= SDK_STATIC_TEXT_END - SDK_STATIC_TEXT_START;
228	SDK_STATIC_DATA_SIZE		= SDK_STATIC_DATA_END - SDK_STATIC_DATA_START;
229	SDK_STATIC_SIZE			= SDK_STATIC_END      - SDK_STATIC_START;
230	__sinit__			= SDK_STATIC_SINIT_START;	# For static initializer
231	__exception_table_start__	= SDK_STATIC_ETABLE_START;	# For exception table
232	__exception_table_end__		= SDK_STATIC_ETABLE_END;	# For exception table
233	} > main
234
235	.main.bss:
236	{
237	ALIGNALL(4);			. = ALIGN(32);
238
239	#
240	#  BSS BLOCK
241	#
242	SDK_STATIC_BSS_START		=.;
243					#:::::::::: bss
244					. = ALIGN(4);
245					. = ALIGN(4);
246					#:::::::::: bss
247					. = ALIGN(32);
248	SDK_STATIC_BSS_END		= .;
249	SDK_STATIC_BSS_SIZE		= SDK_STATIC_BSS_END - SDK_STATIC_BSS_START;
250
251	} >> main
252
253
254	############################ AUTOLOADS ##############################
255	SDK_AUTOLOAD.ITCM.START			= 0x01ff8000;
256	SDK_AUTOLOAD.ITCM.END			= SDK_AUTOLOAD.ITCM.START;
257	SDK_AUTOLOAD.ITCM.BSS_END		= SDK_AUTOLOAD.ITCM.START;
258	SDK_AUTOLOAD.ITCM.SIZE			= 0;
259	SDK_AUTOLOAD.ITCM.BSS_SIZE		= 0;
260	SDK_AUTOLOAD.DTCM.START			= 0x027e0000;
261	SDK_AUTOLOAD.DTCM.END			= SDK_AUTOLOAD.DTCM.START;
262	SDK_AUTOLOAD.DTCM.BSS_END		= SDK_AUTOLOAD.DTCM.START;
263	SDK_AUTOLOAD.DTCM.SIZE			= 0;
264	SDK_AUTOLOAD.DTCM.BSS_SIZE		= 0;
265	SDK_AUTOLOAD_START			= SDK_STATIC_END;
266	SDK_AUTOLOAD_SIZE			= 0;
267	SDK_AUTOLOAD_NUMBER			= 0;
268
269
270	SDK_AUTOLOAD_ITCM_START			= SDK_AUTOLOAD.ITCM.START;
271	SDK_AUTOLOAD_ITCM_END			= SDK_AUTOLOAD.ITCM.END;
272	SDK_AUTOLOAD_ITCM_BSS_END		= SDK_AUTOLOAD.ITCM.BSS_END;
273	SDK_AUTOLOAD_ITCM_SIZE			= SDK_AUTOLOAD.ITCM.SIZE;
274	SDK_AUTOLOAD_ITCM_BSS_SIZE		= SDK_AUTOLOAD.ITCM.BSS_SIZE;
275	SDK_AUTOLOAD_DTCM_START			= SDK_AUTOLOAD.DTCM.START;
276	SDK_AUTOLOAD_DTCM_END			= SDK_AUTOLOAD.DTCM.END;
277	SDK_AUTOLOAD_DTCM_BSS_END		= SDK_AUTOLOAD.DTCM.BSS_END;
278	SDK_AUTOLOAD_DTCM_SIZE			= SDK_AUTOLOAD.DTCM.SIZE;
279	SDK_AUTOLOAD_DTCM_BSS_SIZE		= SDK_AUTOLOAD.DTCM.BSS_SIZE;
280
281	############################ AUTOLOAD_INFO ##########################
282	.binary.AUTOLOAD_INFO:
283	{
284	} > binary.AUTOLOAD_INFO
285
286	SDK_AUTOLOAD_LIST			= SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE;
287	SDK_AUTOLOAD_LIST_END			= SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO);
288	SDK_AUTOLOAD_SIZE			= SDK_AUTOLOAD_SIZE  + SIZEOF(.binary.AUTOLOAD_INFO);
289
290	############################ STATIC_FOOTER ##########################
291	.binary.STATIC_FOOTER:
292	{
293		WRITEW 0xdec00621;		# LE(0x2106C0DE) = NITRO CODE
294		WRITEW _start_ModuleParams - ADDR(.main);
295		WRITEW 0;			# NO DIGEST
296	} > binary.STATIC_FOOTER
297
298	############################ OVERLAYS ###############################
299	SDK_OVERLAY_NUMBER			= 3;
300
301	.overlay_0:
302	{
303	ALIGNALL(4);				. = ALIGN(32);
304
305	#
306	#   TEXT BLOCK: READ ONLY
307	#
308	SDK_OVERLAY_overlay_0_ID		=0;	### SEGMENT overlay_0 OVERLAY ID
309	SDK_OVERLAY.overlay_0.ID		=0;
310	SDK_OVERLAY.overlay_0.START	=.;
311	SDK_OVERLAY.overlay_0.TEXT_START	=.;
312						#:::::::::: text/rodata
313						aaa.o (.text)
314						bbb.o (.text)
315						. = ALIGN(4);
316						aaa.o (.rodata)
317						bbb.o (.rodata)
318						. = ALIGN(4);
319						aaa.o (.init)
320						bbb.o (.init)
321						. = ALIGN(4);
322	SDK_OVERLAY.overlay_0.SINIT_START	=.;
323						#:::::::::: ctor
324						aaa.o (.ctor)
325						bbb.o (.ctor)
326						aaa.o (.sinit)
327						bbb.o (.sinit)
328						WRITEW	0;
329						#:::::::::: ctor
330	SDK_OVERLAY.overlay_0.SINIT_END	=.;
331
332						#:::::::::: text/rodata
333						. = ALIGN(32);
334	SDK_OVERLAY.overlay_0.TEXT_END	=.;
335
336	#
337	#  DATA BLOCK: READ WRITE
338	#
339	SDK_OVERLAY.overlay_0.DATA_START	=.;
340						#:::::::::: Data
341						aaa.o (.sdata)
342						bbb.o (.sdata)
343						. = ALIGN(4);
344						aaa.o (.data)
345						bbb.o (.data)
346						. = ALIGN(4);
347						#:::::::::: Data
348						. = ALIGN(32);
349	SDK_OVERLAY.overlay_0.DATA_END	=.;
350	SDK_OVERLAY.overlay_0.END		=.;
351
352	SDK_OVERLAY.overlay_0.TEXT_SIZE	= SDK_OVERLAY.overlay_0.TEXT_END - SDK_OVERLAY.overlay_0.TEXT_START;
353	SDK_OVERLAY.overlay_0.DATA_SIZE	= SDK_OVERLAY.overlay_0.DATA_END - SDK_OVERLAY.overlay_0.DATA_START;
354	SDK_OVERLAY.overlay_0.SIZE		= SDK_OVERLAY.overlay_0.END      - SDK_OVERLAY.overlay_0.START;
355
356	} > overlay_0
357
358	.overlay_0.bss:
359	{
360	ALIGNALL(4);				. = ALIGN(32);
361
362	#
363	#  BSS BLOCK
364	#
365	SDK_OVERLAY.overlay_0.BSS_START	= .;
366						#:::::::::: bss
367						aaa.o (.bss)
368						bbb.o (.bss)
369						. = ALIGN(4);
370						aaa.o (.sbss)
371						bbb.o (.sbss)
372						. = ALIGN(4);
373						#:::::::::: bss
374						. = ALIGN(32);
375	SDK_OVERLAY.overlay_0.BSS_END	= .;
376
377	SDK_OVERLAY.overlay_0.BSS_SIZE	= SDK_OVERLAY.overlay_0.BSS_END - SDK_OVERLAY.overlay_0.BSS_START;
378
379	} >> overlay_0
380
381	.overlay_1:
382	{
383	ALIGNALL(4);				. = ALIGN(32);
384
385	#
386	#   TEXT BLOCK: READ ONLY
387	#
388	SDK_OVERLAY_overlay_1_ID		=1;	### SEGMENT overlay_1 OVERLAY ID
389	SDK_OVERLAY.overlay_1.ID		=1;
390	SDK_OVERLAY.overlay_1.START	=.;
391	SDK_OVERLAY.overlay_1.TEXT_START	=.;
392						#:::::::::: text/rodata
393						ccc.o (.text)
394						ddd.o (.text)
395						. = ALIGN(4);
396						ccc.o (.rodata)
397						ddd.o (.rodata)
398						. = ALIGN(4);
399						ccc.o (.init)
400						ddd.o (.init)
401						. = ALIGN(4);
402	SDK_OVERLAY.overlay_1.SINIT_START	=.;
403						#:::::::::: ctor
404						ccc.o (.ctor)
405						ddd.o (.ctor)
406						ccc.o (.sinit)
407						ddd.o (.sinit)
408						WRITEW	0;
409						#:::::::::: ctor
410	SDK_OVERLAY.overlay_1.SINIT_END	=.;
411
412						#:::::::::: text/rodata
413						. = ALIGN(32);
414	SDK_OVERLAY.overlay_1.TEXT_END	=.;
415
416	#
417	#  DATA BLOCK: READ WRITE
418	#
419	SDK_OVERLAY.overlay_1.DATA_START	=.;
420						#:::::::::: Data
421						ccc.o (.sdata)
422						ddd.o (.sdata)
423						. = ALIGN(4);
424						ccc.o (.data)
425						ddd.o (.data)
426						. = ALIGN(4);
427						#:::::::::: Data
428						. = ALIGN(32);
429	SDK_OVERLAY.overlay_1.DATA_END	=.;
430	SDK_OVERLAY.overlay_1.END		=.;
431
432	SDK_OVERLAY.overlay_1.TEXT_SIZE	= SDK_OVERLAY.overlay_1.TEXT_END - SDK_OVERLAY.overlay_1.TEXT_START;
433	SDK_OVERLAY.overlay_1.DATA_SIZE	= SDK_OVERLAY.overlay_1.DATA_END - SDK_OVERLAY.overlay_1.DATA_START;
434	SDK_OVERLAY.overlay_1.SIZE		= SDK_OVERLAY.overlay_1.END      - SDK_OVERLAY.overlay_1.START;
435
436	} > overlay_1
437
438	.overlay_1.bss:
439	{
440	ALIGNALL(4);				. = ALIGN(32);
441
442	#
443	#  BSS BLOCK
444	#
445	SDK_OVERLAY.overlay_1.BSS_START	= .;
446						#:::::::::: bss
447						ccc.o (.bss)
448						ddd.o (.bss)
449						. = ALIGN(4);
450						ccc.o (.sbss)
451						ddd.o (.sbss)
452						. = ALIGN(4);
453						#:::::::::: bss
454						. = ALIGN(32);
455	SDK_OVERLAY.overlay_1.BSS_END	= .;
456
457	SDK_OVERLAY.overlay_1.BSS_SIZE	= SDK_OVERLAY.overlay_1.BSS_END - SDK_OVERLAY.overlay_1.BSS_START;
458
459	} >> overlay_1
460
461	.overlay_2:
462	{
463	ALIGNALL(4);				. = ALIGN(32);
464
465	#
466	#   TEXT BLOCK: READ ONLY
467	#
468	SDK_OVERLAY_overlay_2_ID		=2;	### SEGMENT overlay_2 OVERLAY ID
469	SDK_OVERLAY.overlay_2.ID		=2;
470	SDK_OVERLAY.overlay_2.START	=.;
471	SDK_OVERLAY.overlay_2.TEXT_START	=.;
472						#:::::::::: text/rodata
473						eee.o (.text)
474						fff.o (.text)
475						. = ALIGN(4);
476						eee.o (.rodata)
477						fff.o (.rodata)
478						. = ALIGN(4);
479						eee.o (.init)
480						fff.o (.init)
481						. = ALIGN(4);
482	SDK_OVERLAY.overlay_2.SINIT_START	=.;
483						#:::::::::: ctor
484						eee.o (.ctor)
485						fff.o (.ctor)
486						eee.o (.sinit)
487						fff.o (.sinit)
488						WRITEW	0;
489						#:::::::::: ctor
490	SDK_OVERLAY.overlay_2.SINIT_END	=.;
491
492						#:::::::::: text/rodata
493						. = ALIGN(32);
494	SDK_OVERLAY.overlay_2.TEXT_END	=.;
495
496	#
497	#  DATA BLOCK: READ WRITE
498	#
499	SDK_OVERLAY.overlay_2.DATA_START	=.;
500						#:::::::::: Data
501						eee.o (.sdata)
502						fff.o (.sdata)
503						. = ALIGN(4);
504						eee.o (.data)
505						fff.o (.data)
506						. = ALIGN(4);
507						#:::::::::: Data
508						. = ALIGN(32);
509	SDK_OVERLAY.overlay_2.DATA_END	=.;
510	SDK_OVERLAY.overlay_2.END		=.;
511
512	SDK_OVERLAY.overlay_2.TEXT_SIZE	= SDK_OVERLAY.overlay_2.TEXT_END - SDK_OVERLAY.overlay_2.TEXT_START;
513	SDK_OVERLAY.overlay_2.DATA_SIZE	= SDK_OVERLAY.overlay_2.DATA_END - SDK_OVERLAY.overlay_2.DATA_START;
514	SDK_OVERLAY.overlay_2.SIZE		= SDK_OVERLAY.overlay_2.END      - SDK_OVERLAY.overlay_2.START;
515
516	} > overlay_2
517
518	.overlay_2.bss:
519	{
520	ALIGNALL(4);				. = ALIGN(32);
521
522	#
523	#  BSS BLOCK
524	#
525	SDK_OVERLAY.overlay_2.BSS_START	= .;
526						#:::::::::: bss
527						eee.o (.bss)
528						fff.o (.bss)
529						. = ALIGN(4);
530						eee.o (.sbss)
531						fff.o (.sbss)
532						. = ALIGN(4);
533						#:::::::::: bss
534						. = ALIGN(32);
535	SDK_OVERLAY.overlay_2.BSS_END	= .;
536
537	SDK_OVERLAY.overlay_2.BSS_SIZE	= SDK_OVERLAY.overlay_2.BSS_END - SDK_OVERLAY.overlay_2.BSS_START;
538
539	} >> overlay_2
540
541
542	############################ MAIN EX ##################################
543	# MAIN EX Area
544	.dummy.MAIN_EX:
545	{
546		. = ALIGN(32);
547	} > dummy.MAIN_EX
548
549	############################ ARENA ##################################
550	.arena.MAIN:
551	{
552						. = ALIGN(32);
553		SDK_SECTION_ARENA_START		=.;
554	} > arena.MAIN
555
556	.arena.MAIN_EX:
557	{
558						. = ALIGN(32);
559		SDK_SECTION_ARENA_EX_START	=.;
560	} > arena.MAIN_EX
561
562	.arena.ITCM:
563	{
564						. = ALIGN(32);
565		SDK_SECTION_ARENA_ITCM_START	=.;
566	} > arena.ITCM
567
568	.arena.DTCM:
569	{
570						. = ALIGN(32);
571		SDK_SECTION_ARENA_DTCM_START	=.;
572	} > arena.DTCM
573
574	############################ OVERLAYDEFS ############################
575	.main_defs:
576	{
577		###  main module information
578		WRITEW ADDR(.main);			# Load address
579		WRITEW _start;					# Entry address
580		WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE;	# Size of module
581		WRITEW _start_AutoloadDoneCallback;		# Callback autoload done
582
583		###  overlay filename
584		WRITES ("overlay_0.sbin");	# Overlay 0
585		WRITES ("overlay_1.sbin");	# Overlay 1
586		WRITES ("overlay_2.sbin");	# Overlay 2
587
588	} > main_defs
589
590
591	############################ OVERLAYTABLE ###########################
592	.main_table:
593	{
594		#	 Overlay 0
595		WRITEW 0;				# Overlay ID
596		WRITEW ADDR(.overlay_0);			# Load address
597		WRITEW SDK_OVERLAY.overlay_0.SIZE;		# Size of module
598		WRITEW SDK_OVERLAY.overlay_0.BSS_SIZE;	# Size of bss
599		WRITEW SDK_OVERLAY.overlay_0.SINIT_START;	# Start address of static init
600		WRITEW SDK_OVERLAY.overlay_0.SINIT_END;	# End address of static init
601		WRITEW 0;				# ROM file ID
602		WRITEW 0;					# Reserved
603
604		#	 Overlay 1
605		WRITEW 1;				# Overlay ID
606		WRITEW ADDR(.overlay_1);			# Load address
607		WRITEW SDK_OVERLAY.overlay_1.SIZE;		# Size of module
608		WRITEW SDK_OVERLAY.overlay_1.BSS_SIZE;	# Size of bss
609		WRITEW SDK_OVERLAY.overlay_1.SINIT_START;	# Start address of static init
610		WRITEW SDK_OVERLAY.overlay_1.SINIT_END;	# End address of static init
611		WRITEW 1;				# ROM file ID
612		WRITEW 0;					# Reserved
613
614		#	 Overlay 2
615		WRITEW 2;				# Overlay ID
616		WRITEW ADDR(.overlay_2);			# Load address
617		WRITEW SDK_OVERLAY.overlay_2.SIZE;		# Size of module
618		WRITEW SDK_OVERLAY.overlay_2.BSS_SIZE;	# Size of bss
619		WRITEW SDK_OVERLAY.overlay_2.SINIT_START;	# Start address of static init
620		WRITEW SDK_OVERLAY.overlay_2.SINIT_END;	# End address of static init
621		WRITEW 2;				# ROM file ID
622		WRITEW 0;					# Reserved
623
624
625	} > main_table
626
627
628	############################ OTHERS #################################
629	SDK_MAIN_ARENA_LO = SDK_SECTION_ARENA_START;
630	SDK_IRQ_STACKSIZE = 1024;	# Allocated in DTCM
631	SDK_SYS_STACKSIZE = 8192;		# When 0 means all remains of DTCM
632
633	# Module filelist
634	.binary.MODULE_FILES:
635	{
636		WRITES ("main.sbin");
637		WRITES ("main_defs.sbin");
638		WRITES ("main_table.sbin");
639	} > binary.MODULE_FILES
640
641	# ITCM/DTCM size checker => check AUTOLOAD_ITCM/DTCM
642	.check.ITCM:
643	{
644		. = . + SDK_AUTOLOAD_ITCM_SIZE + SDK_AUTOLOAD_ITCM_BSS_SIZE;
645	} > check.ITCM
646
647	SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1;
648	.check.DTCM:
649	{
650		. = . + SDK_AUTOLOAD_DTCM_SIZE + SDK_AUTOLOAD_DTCM_BSS_SIZE;
651		. = . + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
652	} > check.DTCM
653
654}
655