#--------------------------------------------------------------------------- # Project: NitroSDK - tools - makelcf # File: ARM9-TS-cloneboot.lcf.template # # Copyright 2003-2008 Nintendo. All rights reserved. # # These coded instructions, statements, and computer programs contain # proprietary information of Nintendo of America Inc. and/or Nintendo # Company Ltd., and are protected by Federal copyright law. They may # not be disclosed to third parties or copied or duplicated in any form, # in whole or in part, without the prior written consent of Nintendo. # # $Log: ARM9-TS-cloneboot-C.lcf.template,v $ # Revision 1.3 2006/07/20 07:29:12 kitase_hirotake # Added the description explaining the version section # # Revision 1.2 2006/03/30 00:31:29 yasu # Revised NUMBER_OVERLAYS to NUMBER.OVERLAYS # # Revision 1.1 2005/09/05 01:38:31 yasu # Recorded template before editing tags # # Revision 1.8 2005/08/26 11:22:16 yasu # Overlay support for ITCM/DTCM # # Revision 1.7 2005/06/20 12:29:20 yasu # Changed Surffix to Suffix # # Revision 1.6 2005/06/14 09:03:42 yada # Fix specific to negative value of SDK_STACKSIZE # # Revision 1.5 2005/05/19 03:22:51 yosizaki # Added .sinit section # # Revision 1.4 2005/04/13 12:52:03 terui # Change SDK_AUTOLOAD_DTCM_START 0x027c0000 -> 0x027e0000 # # Revision 1.3 2005/03/30 00:02:14 yosizaki # Fixed copyright header # # Revision 1.2 2005/03/25 12:54:59 yasu # Added the .version section # # Revision 1.1 2004/11/24 09:40:22 yasu # lcf template for cloneboot # # Revision 1.2 2004/11/05 04:23:38 yasu # Added OverlayTable digest # # Revision 1.1 2004/11/05 00:04:13 yasu # Added DIGEST # # Revision 1.2 2004/09/24 06:26:28 yasu # crt0.o moves into common-A # # Revision 1.1 2004/09/24 06:13:50 yasu # Newly created for mb-clone boot # # $NoKeywords: $ #--------------------------------------------------------------------------- MEMORY { (RWX) : ORIGIN = , LENGTH = 0x0 > (RWX) : ORIGIN = , LENGTH = 0x0 >> AUTOLOAD_INFO__ (RWX) : ORIGIN = 0, LENGTH = 0x0 >> STATIC_FOOTER__ (RWX) : ORIGIN = 0, LENGTH = 0x0 >> (RW) : ORIGIN = AFTER(), LENGTH = 0x0 > (RW) : ORIGIN = AFTER(), LENGTH = 0x0 > (RWXO): ORIGIN = , LENGTH = 0x0 > MAIN_EX__ (RW) : ORIGIN = 0x02400000, LENGTH = 0x0 ARENA__ (RW) : ORIGIN = AFTER(,), LENGTH = 0x0 ARENA_EX__ (RW) : ORIGIN = AFTER(MAIN_EX__,), LENGTH = 0x0 ARENA_ITCM__ (RW) : ORIGIN = AFTER(ITCM,), LENGTH = 0x0 ARENA_DTCM__ (RW) : ORIGIN = AFTER(DTCM,), LENGTH = 0x0 MODULE_FILES__ (RW) : ORIGIN = 0x0, LENGTH = 0x0 > component.files ITCM__ (RWX) : ORIGIN = 0x0, LENGTH = 0x08000 > itcm.check DTCM__ (RW) : ORIGIN = 0x0, LENGTH = 0x04000 > dtcm.check COMMON__ (RW) : ORIGIN = 0x0, LENGTH = 0x01000 > common.check PARENT__ (RW) : ORIGIN = 0x0, LENGTH = 0x02000 > parent.check } FORCE_ACTIVE { SVC_SoftReset } KEEP_SECTION { .sinit } SECTIONS { ############################ STATIC ################################# .: { ALIGNALL(4); . = ALIGN(32); # Fit to cache line # # TEXT BLOCK: READ ONLY # SDK_STATIC_START =.; SDK_STATIC_TEXT_START =.; #:::::::::: text/rodata #:: Common A ----- 4KB SDK_STATIC_TEXT_COMMON_START =.; libsyscall.a (.text) crt0.o (.text) crt0.o (.rodata) # # Added .version section. # The information included in this section will be needed for Lotcheck purposes. Be sure to leave it in this position. # # * (.version) SDK_STATIC_TEXT_COMMON_END =.; .= SDK_STATIC_START + 4 * 1024; #:: Parent Only -- 8KB SDK_STATIC_TEXT_PARENT_START =.; # # Collected .parent section code # Notice that .bss, .data section code is not included! * (.parent) # SDK_STATIC_TEXT_PARENT_END =.; .= SDK_STATIC_START + 12 * 1024; #:: Common B ----- 4KB + ... OBJECT(NitroMain,*) . = ALIGN(4); * (.exception) . = ALIGN(4); SDK_STATIC_ETABLE_START =.; EXCEPTION SDK_STATIC_ETABLE_END =.; . = ALIGN(4); . = ALIGN(4); . = ALIGN(4); SDK_STATIC_SINIT_START =.; #:::::::::: ctor WRITEW 0; #:::::::::: ctor SDK_STATIC_SINIT_END =.; #:::::::::: text/rodata . = ALIGN(32); SDK_STATIC_TEXT_END =.; # # DATA BLOCK: READ WRITE # SDK_STATIC_DATA_START =.; #:::::::::: Data . = ALIGN(4); . = ALIGN(4); SDK_OVERLAYTABLE_DIGEST =.; . = . + 20; SDK_OVERLAYTABLE_DIGEST_END =.; SDK_OVERLAY_DIGEST =.; . = . + * 20; SDK_OVERLAY_DIGEST_END =.; #:::::::::: Data . = ALIGN(32); SDK_STATIC_DATA_END =.; SDK_STATIC_END =.; SDK_STATIC_TEXT_SIZE = SDK_STATIC_TEXT_END - SDK_STATIC_TEXT_START; SDK_STATIC_DATA_SIZE = SDK_STATIC_DATA_END - SDK_STATIC_DATA_START; SDK_STATIC_SIZE = SDK_STATIC_END - SDK_STATIC_START; __sinit__ = SDK_STATIC_SINIT_START; # For static initializer __exception_table_start__ = SDK_STATIC_ETABLE_START; # For exception table __exception_table_end__ = SDK_STATIC_ETABLE_END; # For exception table } > ._bss: { ALIGNALL(4); . = ALIGN(32); # # BSS BLOCK # SDK_STATIC_BSS_START =.; #:::::::::: bss . = ALIGN(4); . = ALIGN(4); #:::::::::: bss . = ALIGN(32); SDK_STATIC_BSS_END = .; SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START; } >> ############################ AUTOLOADS ############################## SDK_AUTOLOAD_ITCM_START = 0x01ff8000; SDK_AUTOLOAD_ITCM_END = SDK_AUTOLOAD_ITCM_START; SDK_AUTOLOAD_ITCM_BSS_END = SDK_AUTOLOAD_ITCM_START; SDK_AUTOLOAD_DTCM_START = 0x027e0000; SDK_AUTOLOAD_DTCM_END = SDK_AUTOLOAD_DTCM_START; SDK_AUTOLOAD_DTCM_BSS_END = SDK_AUTOLOAD_DTCM_START; SDK_AUTOLOAD_START = SDK_STATIC_END; SDK_AUTOLOAD_SIZE = 0; SDK_AUTOLOAD_NUMBER = ; .: { ALIGNALL(4); . = ALIGN(32); # # TEXT BLOCK: READ ONLY # SDK_AUTOLOAD__ID =; SDK_AUTOLOAD__START =.; SDK_AUTOLOAD__TEXT_START =.; #:::::::::: text/rodata . = ALIGN(4); . = ALIGN(4); . = ALIGN(4); #:::::::::: text/rodata SDK_AUTOLOAD__TEXT_END =.; # # DATA BLOCK: READ WRITE BLOCK # SDK_AUTOLOAD__DATA_START =.; #:::::::::: Data . = ALIGN(4); . = ALIGN(4); . = ALIGN(4); #:::::::::: Data . = ALIGN(32); SDK_AUTOLOAD__DATA_END =.; SDK_AUTOLOAD__END =.; SDK_AUTOLOAD__TEXT_SIZE = SDK_AUTOLOAD__TEXT_END - SDK_AUTOLOAD__TEXT_START; SDK_AUTOLOAD__DATA_SIZE = SDK_AUTOLOAD__DATA_END - SDK_AUTOLOAD__DATA_START; SDK_AUTOLOAD__SIZE = SDK_AUTOLOAD__END - SDK_AUTOLOAD__START; SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SDK_AUTOLOAD__SIZE; } > ._bss: { ALIGNALL(4); . = ALIGN(32); # # BSS BLOCK # SDK_AUTOLOAD__BSS_START = .; #:::::::::: bss . = ALIGN(4); . = ALIGN(4); #:::::::::: bss . = ALIGN(32); SDK_AUTOLOAD__BSS_END = .; SDK_AUTOLOAD__BSS_SIZE = SDK_AUTOLOAD__BSS_END - SDK_AUTOLOAD__BSS_START; } >> ############################ AUTOLOAD_INFO ########################## .AUTOLOAD_INFO__: { WRITEW ADDR(.); WRITEW SDK_AUTOLOAD__SIZE; WRITEW SDK_AUTOLOAD__BSS_SIZE; } > AUTOLOAD_INFO__ SDK_AUTOLOAD_LIST = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE; SDK_AUTOLOAD_LIST_END = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.AUTOLOAD_INFO__); SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SIZEOF(.AUTOLOAD_INFO__); ############################ STATIC_FOOTER ########################## .STATIC_FOOTER__: { WRITEW 0xdec00621; # LE(0x2106C0DE) = NITRO CODE WRITEW _start_ModuleParams - ADDR(.); WRITEW SDK_OVERLAY_DIGEST - ADDR(.); } > STATIC_FOOTER__ ############################ OVERLAYS ############################### SDK_OVERLAY_NUMBER = ; .: { ALIGNALL(4); . = ALIGN(32); # # TEXT BLOCK: READ ONLY # SDK_OVERLAY__ID =; ### SEGMENT OVERLAY ID SDK_OVERLAY__START =.; SDK_OVERLAY__TEXT_START =.; #:::::::::: text/rodata . = ALIGN(4); . = ALIGN(4); . = ALIGN(4); SDK_OVERLAY__SINIT_START =.; #:::::::::: ctor WRITEW 0; #:::::::::: ctor SDK_OVERLAY__SINIT_END =.; #:::::::::: text/rodata . = ALIGN(32); SDK_OVERLAY__TEXT_END =.; # # DATA BLOCK: READ WRITE # SDK_OVERLAY__DATA_START =.; #:::::::::: Data . = ALIGN(4); . = ALIGN(4); #:::::::::: Data . = ALIGN(32); SDK_OVERLAY__DATA_END =.; SDK_OVERLAY__END =.; SDK_OVERLAY__TEXT_SIZE = SDK_OVERLAY__TEXT_END - SDK_OVERLAY__TEXT_START; SDK_OVERLAY__DATA_SIZE = SDK_OVERLAY__DATA_END - SDK_OVERLAY__DATA_START; SDK_OVERLAY__SIZE = SDK_OVERLAY__END - SDK_OVERLAY__START; } > ._bss: { ALIGNALL(4); . = ALIGN(32); # # BSS BLOCK # SDK_OVERLAY__BSS_START = .; #:::::::::: bss . = ALIGN(4); . = ALIGN(4); #:::::::::: bss . = ALIGN(32); SDK_OVERLAY__BSS_END = .; SDK_OVERLAY__BSS_SIZE = SDK_OVERLAY__BSS_END - SDK_OVERLAY__BSS_START; } >> ############################ MAIN EX ################################## .MAIN_EX__: { . = ALIGN(32); } > MAIN_EX__ ############################ ARENA ################################## .ARENA__: { . = ALIGN(32); SDK_SECTION_ARENA_START =.; } > ARENA__ .ARENA_EX__: { . = ALIGN(32); SDK_SECTION_ARENA_EX_START =.; } > ARENA_EX__ .ARENA_ITCM__: { . = ALIGN(32); SDK_SECTION_ARENA_ITCM_START =.; } > ARENA_ITCM__ .ARENA_DTCM__: { . = ALIGN(32); SDK_SECTION_ARENA_DTCM_START =.; } > ARENA_DTCM__ ############################ OVERLAYDEFS ############################ .: { ### module information WRITEW ADDR(.); # Load address WRITEW _start; # Entry address WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE; # Size of module WRITEW _start_AutoloadDoneCallback; # Callback autoload done ### overlay filename WRITES (""); # Overlay } > ############################ OVERLAYTABLE ########################### .: { # Overlay WRITEW ; # Overlay ID WRITEW ADDR(.); # Load address WRITEW SDK_OVERLAY__SIZE; # Size of module WRITEW SDK_OVERLAY__BSS_SIZE; # Size of bss WRITEW SDK_OVERLAY__SINIT_START; # Start address of static init WRITEW SDK_OVERLAY__SINIT_END; # End address of static init WRITEW ; # ROM file ID WRITEW 0; # Reserved } > ############################ OTHERS ################################# SDK_MAIN_ARENA_LO = SDK_SECTION_ARENA_START; SDK_IRQ_STACKSIZE = ; # Allocated in DTCM SDK_SYS_STACKSIZE = ; # When 0 means all remains of DTCM # Module filelist .MODULE_FILES__: { WRITES (""); WRITES (""); WRITES (""); } > MODULE_FILES__ # ITCM/DTCM size checker => check AUTOLOAD_ITCM/DTCM .ITCM__: { . = . + SDK_AUTOLOAD_ITCM_SIZE + SDK_AUTOLOAD_ITCM_BSS_SIZE; . = . + SDK_OVERLAY__SIZE + SDK_OVERLAY__BSS_SIZE; } > ITCM__ SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1; .DTCM__: { . = . + SDK_AUTOLOAD_DTCM_SIZE + SDK_AUTOLOAD_DTCM_BSS_SIZE; . = . + SDK_OVERLAY__SIZE + SDK_OVERLAY__BSS_SIZE; . = . + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN; } > DTCM__ .COMMON__: { . = . + SDK_STATIC_TEXT_COMMON_END - SDK_STATIC_TEXT_COMMON_START; } > COMMON__ .PARENT__: { . = . + SDK_STATIC_TEXT_PARENT_END - SDK_STATIC_TEXT_PARENT_START; } > PARENT__ }