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