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					obj_a.o (.text)
191					obj_b.o (.text)
192					obj_c.o (.text)
193					. = ALIGN(4);
194					* (.exception)
195					. = ALIGN(4);
196	SDK_STATIC_ETABLE_START		=.;
197					EXCEPTION
198	SDK_STATIC_ETABLE_END		=.;
199					. = ALIGN(4);
200					. = ALIGN(4);
201					. = ALIGN(4);
202
203	SDK_STATIC_SINIT_START		=.;
204					#:::::::::: ctor
205					WRITEW	0;
206					#:::::::::: ctor
207	SDK_STATIC_SINIT_END		=.;
208
209					#:::::::::: text/rodata
210					. = ALIGN(32);
211	SDK_STATIC_TEXT_END		=.;
212
213	#
214	#  DATA BLOCK: READ WRITE
215	#
216	SDK_STATIC_DATA_START		=.;
217					#:::::::::: Data
218					. = ALIGN(4);
219					. = ALIGN(4);
220	SDK_OVERLAY_DIGEST		=.;
221					# NO DIGEST
222	SDK_OVERLAY_DIGEST_END		=.;
223					#:::::::::: Data
224					. = ALIGN(32);
225	SDK_STATIC_DATA_END		=.;
226	SDK_STATIC_END			=.;
227
228	SDK_STATIC_TEXT_SIZE		= SDK_STATIC_TEXT_END - SDK_STATIC_TEXT_START;
229	SDK_STATIC_DATA_SIZE		= SDK_STATIC_DATA_END - SDK_STATIC_DATA_START;
230	SDK_STATIC_SIZE			= SDK_STATIC_END      - SDK_STATIC_START;
231	__sinit__			= SDK_STATIC_SINIT_START;	# For static initializer
232	__exception_table_start__	= SDK_STATIC_ETABLE_START;	# For exception table
233	__exception_table_end__		= SDK_STATIC_ETABLE_END;	# For exception table
234	} > main
235
236	.main.bss:
237	{
238	ALIGNALL(4);			. = ALIGN(32);
239
240	#
241	#  BSS BLOCK
242	#
243	SDK_STATIC_BSS_START		=.;
244					#:::::::::: bss
245					. = ALIGN(4);
246					. = ALIGN(4);
247					#:::::::::: bss
248					. = ALIGN(32);
249	SDK_STATIC_BSS_END		= .;
250	SDK_STATIC_BSS_SIZE		= SDK_STATIC_BSS_END - SDK_STATIC_BSS_START;
251
252	} >> main
253
254
255	############################ AUTOLOADS ##############################
256	SDK_AUTOLOAD.ITCM.START			= 0x01ff8000;
257	SDK_AUTOLOAD.ITCM.END			= SDK_AUTOLOAD.ITCM.START;
258	SDK_AUTOLOAD.ITCM.BSS_END		= SDK_AUTOLOAD.ITCM.START;
259	SDK_AUTOLOAD.ITCM.SIZE			= 0;
260	SDK_AUTOLOAD.ITCM.BSS_SIZE		= 0;
261	SDK_AUTOLOAD.DTCM.START			= 0x027e0000;
262	SDK_AUTOLOAD.DTCM.END			= SDK_AUTOLOAD.DTCM.START;
263	SDK_AUTOLOAD.DTCM.BSS_END		= SDK_AUTOLOAD.DTCM.START;
264	SDK_AUTOLOAD.DTCM.SIZE			= 0;
265	SDK_AUTOLOAD.DTCM.BSS_SIZE		= 0;
266	SDK_AUTOLOAD_START			= SDK_STATIC_END;
267	SDK_AUTOLOAD_SIZE			= 0;
268	SDK_AUTOLOAD_NUMBER			= 0;
269
270
271	SDK_AUTOLOAD_ITCM_START			= SDK_AUTOLOAD.ITCM.START;
272	SDK_AUTOLOAD_ITCM_END			= SDK_AUTOLOAD.ITCM.END;
273	SDK_AUTOLOAD_ITCM_BSS_END		= SDK_AUTOLOAD.ITCM.BSS_END;
274	SDK_AUTOLOAD_ITCM_SIZE			= SDK_AUTOLOAD.ITCM.SIZE;
275	SDK_AUTOLOAD_ITCM_BSS_SIZE		= SDK_AUTOLOAD.ITCM.BSS_SIZE;
276	SDK_AUTOLOAD_DTCM_START			= SDK_AUTOLOAD.DTCM.START;
277	SDK_AUTOLOAD_DTCM_END			= SDK_AUTOLOAD.DTCM.END;
278	SDK_AUTOLOAD_DTCM_BSS_END		= SDK_AUTOLOAD.DTCM.BSS_END;
279	SDK_AUTOLOAD_DTCM_SIZE			= SDK_AUTOLOAD.DTCM.SIZE;
280	SDK_AUTOLOAD_DTCM_BSS_SIZE		= SDK_AUTOLOAD.DTCM.BSS_SIZE;
281
282	############################ AUTOLOAD_INFO ##########################
283	.binary.AUTOLOAD_INFO:
284	{
285	} > binary.AUTOLOAD_INFO
286
287	SDK_AUTOLOAD_LIST			= SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE;
288	SDK_AUTOLOAD_LIST_END			= SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO);
289	SDK_AUTOLOAD_SIZE			= SDK_AUTOLOAD_SIZE  + SIZEOF(.binary.AUTOLOAD_INFO);
290
291	############################ STATIC_FOOTER ##########################
292	.binary.STATIC_FOOTER:
293	{
294		WRITEW 0xdec00621;		# LE(0x2106C0DE) = NITRO CODE
295		WRITEW _start_ModuleParams - ADDR(.main);
296		WRITEW 0;			# NO DIGEST
297	} > binary.STATIC_FOOTER
298
299	############################ OVERLAYS ###############################
300	SDK_OVERLAY_NUMBER			= 3;
301
302	.overlay_0:
303	{
304	ALIGNALL(4);				. = ALIGN(32);
305
306	#
307	#   TEXT BLOCK: READ ONLY
308	#
309	SDK_OVERLAY_overlay_0_ID		=0;	### SEGMENT overlay_0 OVERLAY ID
310	SDK_OVERLAY.overlay_0.ID		=0;
311	SDK_OVERLAY.overlay_0.START	=.;
312	SDK_OVERLAY.overlay_0.TEXT_START	=.;
313						#:::::::::: text/rodata
314						aaa.o (.text)
315						bbb.o (.text)
316						. = ALIGN(4);
317						aaa.o (.rodata)
318						bbb.o (.rodata)
319						. = ALIGN(4);
320						aaa.o (.init)
321						bbb.o (.init)
322						. = ALIGN(4);
323	SDK_OVERLAY.overlay_0.SINIT_START	=.;
324						#:::::::::: ctor
325						aaa.o (.ctor)
326						bbb.o (.ctor)
327						aaa.o (.sinit)
328						bbb.o (.sinit)
329						WRITEW	0;
330						#:::::::::: ctor
331	SDK_OVERLAY.overlay_0.SINIT_END	=.;
332
333						#:::::::::: text/rodata
334						. = ALIGN(32);
335	SDK_OVERLAY.overlay_0.TEXT_END	=.;
336
337	#
338	#  DATA BLOCK: READ WRITE
339	#
340	SDK_OVERLAY.overlay_0.DATA_START	=.;
341						#:::::::::: Data
342						aaa.o (.sdata)
343						bbb.o (.sdata)
344						. = ALIGN(4);
345						aaa.o (.data)
346						bbb.o (.data)
347						. = ALIGN(4);
348						#:::::::::: Data
349						. = ALIGN(32);
350	SDK_OVERLAY.overlay_0.DATA_END	=.;
351	SDK_OVERLAY.overlay_0.END		=.;
352
353	SDK_OVERLAY.overlay_0.TEXT_SIZE	= SDK_OVERLAY.overlay_0.TEXT_END - SDK_OVERLAY.overlay_0.TEXT_START;
354	SDK_OVERLAY.overlay_0.DATA_SIZE	= SDK_OVERLAY.overlay_0.DATA_END - SDK_OVERLAY.overlay_0.DATA_START;
355	SDK_OVERLAY.overlay_0.SIZE		= SDK_OVERLAY.overlay_0.END      - SDK_OVERLAY.overlay_0.START;
356
357	} > overlay_0
358
359	.overlay_0.bss:
360	{
361	ALIGNALL(4);				. = ALIGN(32);
362
363	#
364	#  BSS BLOCK
365	#
366	SDK_OVERLAY.overlay_0.BSS_START	= .;
367						#:::::::::: bss
368						aaa.o (.bss)
369						bbb.o (.bss)
370						. = ALIGN(4);
371						aaa.o (.sbss)
372						bbb.o (.sbss)
373						. = ALIGN(4);
374						#:::::::::: bss
375						. = ALIGN(32);
376	SDK_OVERLAY.overlay_0.BSS_END	= .;
377
378	SDK_OVERLAY.overlay_0.BSS_SIZE	= SDK_OVERLAY.overlay_0.BSS_END - SDK_OVERLAY.overlay_0.BSS_START;
379
380	} >> overlay_0
381
382	.overlay_1:
383	{
384	ALIGNALL(4);				. = ALIGN(32);
385
386	#
387	#   TEXT BLOCK: READ ONLY
388	#
389	SDK_OVERLAY_overlay_1_ID		=1;	### SEGMENT overlay_1 OVERLAY ID
390	SDK_OVERLAY.overlay_1.ID		=1;
391	SDK_OVERLAY.overlay_1.START	=.;
392	SDK_OVERLAY.overlay_1.TEXT_START	=.;
393						#:::::::::: text/rodata
394						ccc.o (.text)
395						ddd.o (.text)
396						. = ALIGN(4);
397						ccc.o (.rodata)
398						ddd.o (.rodata)
399						. = ALIGN(4);
400						ccc.o (.init)
401						ddd.o (.init)
402						. = ALIGN(4);
403	SDK_OVERLAY.overlay_1.SINIT_START	=.;
404						#:::::::::: ctor
405						ccc.o (.ctor)
406						ddd.o (.ctor)
407						ccc.o (.sinit)
408						ddd.o (.sinit)
409						WRITEW	0;
410						#:::::::::: ctor
411	SDK_OVERLAY.overlay_1.SINIT_END	=.;
412
413						#:::::::::: text/rodata
414						. = ALIGN(32);
415	SDK_OVERLAY.overlay_1.TEXT_END	=.;
416
417	#
418	#  DATA BLOCK: READ WRITE
419	#
420	SDK_OVERLAY.overlay_1.DATA_START	=.;
421						#:::::::::: Data
422						ccc.o (.sdata)
423						ddd.o (.sdata)
424						. = ALIGN(4);
425						ccc.o (.data)
426						ddd.o (.data)
427						. = ALIGN(4);
428						#:::::::::: Data
429						. = ALIGN(32);
430	SDK_OVERLAY.overlay_1.DATA_END	=.;
431	SDK_OVERLAY.overlay_1.END		=.;
432
433	SDK_OVERLAY.overlay_1.TEXT_SIZE	= SDK_OVERLAY.overlay_1.TEXT_END - SDK_OVERLAY.overlay_1.TEXT_START;
434	SDK_OVERLAY.overlay_1.DATA_SIZE	= SDK_OVERLAY.overlay_1.DATA_END - SDK_OVERLAY.overlay_1.DATA_START;
435	SDK_OVERLAY.overlay_1.SIZE		= SDK_OVERLAY.overlay_1.END      - SDK_OVERLAY.overlay_1.START;
436
437	} > overlay_1
438
439	.overlay_1.bss:
440	{
441	ALIGNALL(4);				. = ALIGN(32);
442
443	#
444	#  BSS BLOCK
445	#
446	SDK_OVERLAY.overlay_1.BSS_START	= .;
447						#:::::::::: bss
448						ccc.o (.bss)
449						ddd.o (.bss)
450						. = ALIGN(4);
451						ccc.o (.sbss)
452						ddd.o (.sbss)
453						. = ALIGN(4);
454						#:::::::::: bss
455						. = ALIGN(32);
456	SDK_OVERLAY.overlay_1.BSS_END	= .;
457
458	SDK_OVERLAY.overlay_1.BSS_SIZE	= SDK_OVERLAY.overlay_1.BSS_END - SDK_OVERLAY.overlay_1.BSS_START;
459
460	} >> overlay_1
461
462	.overlay_2:
463	{
464	ALIGNALL(4);				. = ALIGN(32);
465
466	#
467	#   TEXT BLOCK: READ ONLY
468	#
469	SDK_OVERLAY_overlay_2_ID		=2;	### SEGMENT overlay_2 OVERLAY ID
470	SDK_OVERLAY.overlay_2.ID		=2;
471	SDK_OVERLAY.overlay_2.START	=.;
472	SDK_OVERLAY.overlay_2.TEXT_START	=.;
473						#:::::::::: text/rodata
474						eee.o (.text)
475						fff.o (.text)
476						. = ALIGN(4);
477						eee.o (.rodata)
478						fff.o (.rodata)
479						. = ALIGN(4);
480						eee.o (.init)
481						fff.o (.init)
482						. = ALIGN(4);
483	SDK_OVERLAY.overlay_2.SINIT_START	=.;
484						#:::::::::: ctor
485						eee.o (.ctor)
486						fff.o (.ctor)
487						eee.o (.sinit)
488						fff.o (.sinit)
489						WRITEW	0;
490						#:::::::::: ctor
491	SDK_OVERLAY.overlay_2.SINIT_END	=.;
492
493						#:::::::::: text/rodata
494						. = ALIGN(32);
495	SDK_OVERLAY.overlay_2.TEXT_END	=.;
496
497	#
498	#  DATA BLOCK: READ WRITE
499	#
500	SDK_OVERLAY.overlay_2.DATA_START	=.;
501						#:::::::::: Data
502						eee.o (.sdata)
503						fff.o (.sdata)
504						. = ALIGN(4);
505						eee.o (.data)
506						fff.o (.data)
507						. = ALIGN(4);
508						#:::::::::: Data
509						. = ALIGN(32);
510	SDK_OVERLAY.overlay_2.DATA_END	=.;
511	SDK_OVERLAY.overlay_2.END		=.;
512
513	SDK_OVERLAY.overlay_2.TEXT_SIZE	= SDK_OVERLAY.overlay_2.TEXT_END - SDK_OVERLAY.overlay_2.TEXT_START;
514	SDK_OVERLAY.overlay_2.DATA_SIZE	= SDK_OVERLAY.overlay_2.DATA_END - SDK_OVERLAY.overlay_2.DATA_START;
515	SDK_OVERLAY.overlay_2.SIZE		= SDK_OVERLAY.overlay_2.END      - SDK_OVERLAY.overlay_2.START;
516
517	} > overlay_2
518
519	.overlay_2.bss:
520	{
521	ALIGNALL(4);				. = ALIGN(32);
522
523	#
524	#  BSS BLOCK
525	#
526	SDK_OVERLAY.overlay_2.BSS_START	= .;
527						#:::::::::: bss
528						eee.o (.bss)
529						fff.o (.bss)
530						. = ALIGN(4);
531						eee.o (.sbss)
532						fff.o (.sbss)
533						. = ALIGN(4);
534						#:::::::::: bss
535						. = ALIGN(32);
536	SDK_OVERLAY.overlay_2.BSS_END	= .;
537
538	SDK_OVERLAY.overlay_2.BSS_SIZE	= SDK_OVERLAY.overlay_2.BSS_END - SDK_OVERLAY.overlay_2.BSS_START;
539
540	} >> overlay_2
541
542
543	############################ MAIN EX ##################################
544	# MAIN EX Area
545	.dummy.MAIN_EX:
546	{
547		. = ALIGN(32);
548	} > dummy.MAIN_EX
549
550	############################ ARENA ##################################
551	.arena.MAIN:
552	{
553						. = ALIGN(32);
554		SDK_SECTION_ARENA_START		=.;
555	} > arena.MAIN
556
557	.arena.MAIN_EX:
558	{
559						. = ALIGN(32);
560		SDK_SECTION_ARENA_EX_START	=.;
561	} > arena.MAIN_EX
562
563	.arena.ITCM:
564	{
565						. = ALIGN(32);
566		SDK_SECTION_ARENA_ITCM_START	=.;
567	} > arena.ITCM
568
569	.arena.DTCM:
570	{
571						. = ALIGN(32);
572		SDK_SECTION_ARENA_DTCM_START	=.;
573	} > arena.DTCM
574
575	############################ OVERLAYDEFS ############################
576	.main_defs:
577	{
578		###  main module information
579		WRITEW ADDR(.main);			# Load address
580		WRITEW _start;					# Entry address
581		WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE;	# Size of module
582		WRITEW _start_AutoloadDoneCallback;		# Callback autoload done
583
584		###  overlay filename
585		WRITES ("overlay_0.sbin");	# Overlay 0
586		WRITES ("overlay_1.sbin");	# Overlay 1
587		WRITES ("overlay_2.sbin");	# Overlay 2
588
589	} > main_defs
590
591
592	############################ OVERLAYTABLE ###########################
593	.main_table:
594	{
595		#	 Overlay 0
596		WRITEW 0;				# Overlay ID
597		WRITEW ADDR(.overlay_0);			# Load address
598		WRITEW SDK_OVERLAY.overlay_0.SIZE;		# Size of module
599		WRITEW SDK_OVERLAY.overlay_0.BSS_SIZE;	# Size of bss
600		WRITEW SDK_OVERLAY.overlay_0.SINIT_START;	# Start address of static init
601		WRITEW SDK_OVERLAY.overlay_0.SINIT_END;	# End address of static init
602		WRITEW 0;				# ROM file ID
603		WRITEW 0;					# Reserved
604
605		#	 Overlay 1
606		WRITEW 1;				# Overlay ID
607		WRITEW ADDR(.overlay_1);			# Load address
608		WRITEW SDK_OVERLAY.overlay_1.SIZE;		# Size of module
609		WRITEW SDK_OVERLAY.overlay_1.BSS_SIZE;	# Size of bss
610		WRITEW SDK_OVERLAY.overlay_1.SINIT_START;	# Start address of static init
611		WRITEW SDK_OVERLAY.overlay_1.SINIT_END;	# End address of static init
612		WRITEW 1;				# ROM file ID
613		WRITEW 0;					# Reserved
614
615		#	 Overlay 2
616		WRITEW 2;				# Overlay ID
617		WRITEW ADDR(.overlay_2);			# Load address
618		WRITEW SDK_OVERLAY.overlay_2.SIZE;		# Size of module
619		WRITEW SDK_OVERLAY.overlay_2.BSS_SIZE;	# Size of bss
620		WRITEW SDK_OVERLAY.overlay_2.SINIT_START;	# Start address of static init
621		WRITEW SDK_OVERLAY.overlay_2.SINIT_END;	# End address of static init
622		WRITEW 2;				# ROM file ID
623		WRITEW 0;					# Reserved
624
625
626	} > main_table
627
628
629	############################ OTHERS #################################
630	SDK_MAIN_ARENA_LO = SDK_SECTION_ARENA_START;
631	SDK_IRQ_STACKSIZE = 1024;	# Allocated in DTCM
632	SDK_SYS_STACKSIZE = 8192;		# When 0 means all remains of DTCM
633
634	# Module filelist
635	.binary.MODULE_FILES:
636	{
637		WRITES ("main.sbin");
638		WRITES ("main_defs.sbin");
639		WRITES ("main_table.sbin");
640	} > binary.MODULE_FILES
641
642	# ITCM/DTCM size checker => check AUTOLOAD_ITCM/DTCM
643	.check.ITCM:
644	{
645		. = . + SDK_AUTOLOAD_ITCM_SIZE + SDK_AUTOLOAD_ITCM_BSS_SIZE;
646	} > check.ITCM
647
648	SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1;
649	.check.DTCM:
650	{
651		. = . + SDK_AUTOLOAD_DTCM_SIZE + SDK_AUTOLOAD_DTCM_BSS_SIZE;
652		. = . + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
653	} > check.DTCM
654
655}
656