#--------------------------------------------------------------------------- # Project: TwlSDK - components - armadillo.TWL # File: armadillo.lcf.template # # Copyright 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. # # $Date:: $ # $Rev$ # $Author$ #--------------------------------------------------------------------------- MEMORY { (RWX) : ORIGIN = , LENGTH = 0x0 > binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> F (RW) : ORIGIN = 0, LENGTH = 0x0 > binary.LTDAUTOLOAD_TOP (RW) : ORIGIN = 0, LENGTH = 0x0 > (RWX) : ORIGIN = , LENGTH = 0x0 >> binary.LTDAUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> L (RW) : ORIGIN = 0, LENGTH = 0x0 > check.WORKRAM (RWX) : ORIGIN = 0x03740000, LENGTH = 0xd0000 > workram.check } KEEP_SECTION { .sinit } SECTIONS { ############################ STATIC ################################# .: { ALIGNALL(4); . = ALIGN(4); # # Definition to refer overlay segment, when same name symbols exist in multiple overlays. # SEARCH_SYMBOL ; # # TEXT BLOCK: READ ONLY # SDK_STATIC_START =.; OBJECT(_start,*) . = ALIGN(4); SDK_STATIC_SINIT_START =.; WRITEW 0; # # DATA BLOCK: READ WRITE # . = ALIGN(4); . = ALIGN(4); SDK_STATIC_END =.; SDK_STATIC_SIZE = SDK_STATIC_END - SDK_STATIC_START; __sinit__ = SDK_STATIC_SINIT_START; # for static initializer } > ..bss: { ALIGNALL(4); . = ALIGN(4); # # Definition to refer overlay segment, when same name symbols exist in multiple overlays. # SEARCH_SYMBOL ; # # BSS BLOCK # SDK_STATIC_BSS_START =.; . = ALIGN(4); SDK_STATIC_BSS_END = .; SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START; } >> ############################ STATIC_FOOTER ########################## .binary.STATIC_FOOTER: { WRITEW 0xdec00621; # LE(0x2106C0DE) = NITRO CODE WRITEW _start_ModuleParams - ADDR(.); WRITEW 0; # NO DIGEST WRITEW _start_LtdModuleParams - ADDR(.); } > binary.STATIC_FOOTER ############################ OVERLAYDEFS ############################ .F: { ### module information WRITEW ADDR(.); # load address WRITEW _start; # entry address WRITEW SDK_STATIC_SIZE; # size of module WRITEW _start_AutoloadDoneCallback; # callback autoload done } > F ########################### LTDAUTOLOADS ############################ SDK_LTDAUTOLOAD_TOP_START = 0x02f00000; SDK_LTDAUTOLOAD_TOP_SIZE = 4; # STATIC 領域が無い代わりに 4 bytes のダミーがバイナリファイルの先頭に入る # SDK_LTDAUTOLOAD_START = SDK_LTDAUTOLOAD_TOP_START + SDK_LTDAUTOLOAD_TOP_SIZE; SDK_LTDAUTOLOAD_SIZE = 0; SDK_LTDAUTOLOAD_BSS_END = 0x03740000; .binary.LTDAUTOLOAD_TOP: { WRITEW 0; } > binary.LTDAUTOLOAD_TOP .: { ALIGNALL(4); . = ALIGN(4); # # Definition to refer overlay segment, when same name symbols exist in multiple overlays. # SEARCH_SYMBOL ; # # TEXT BLOCK: READ ONLY # SDK_LTDAUTOLOAD..START =.; . = ALIGN(4); SDK_STATIC_ETABLE_START =.; __exception_table_start__ =.; EXCEPTION __exception_table_end__ =.; SDK_STATIC_ETABLE_END =.; . = ALIGN(4); SDK_LTDAUTOLOAD..SINIT_START =.; WRITEW 0; # # DATA BLOCK: READ WRITE BLOCK # . = ALIGN(4); . = ALIGN(4); SDK_LTDAUTOLOAD..END =.; SDK_LTDAUTOLOAD..SIZE = SDK_LTDAUTOLOAD..END - SDK_LTDAUTOLOAD..START; SDK_LTDAUTOLOAD_SIZE = SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD..SIZE; } > ..bss: { ALIGNALL(4); . = ALIGN(4); # # Definition to refer overlay segment, when same name symbols exist in multiple overlays. # SEARCH_SYMBOL ; # # BSS BLOCK # SDK_LTDAUTOLOAD..BSS_START =.; . = ALIGN(4); SDK_LTDAUTOLOAD..BSS_END =.; SDK_LTDAUTOLOAD_BSS_END =.; SDK_LTDAUTOLOAD..BSS_SIZE = SDK_LTDAUTOLOAD..BSS_END - SDK_LTDAUTOLOAD..BSS_START; } >> SDK_MOUNT_INFO_TABLE = SDK_LTDAUTOLOAD_BSS_END; SDK_LTDAUTOLOAD_BSS_END = SDK_MOUNT_INFO_TABLE + 0x400; ######################### LTDAUTOLOAD_INFO ########################## .binary.LTDAUTOLOAD_INFO: { WRITEW ADDR(.); WRITEW SDK_LTDAUTOLOAD..SIZE; WRITEW SDK_LTDAUTOLOAD..SINIT_START; WRITEW SDK_LTDAUTOLOAD..BSS_SIZE; } > binary.LTDAUTOLOAD_INFO SDK_LTDAUTOLOAD_LIST = SDK_LTDAUTOLOAD_START + SDK_LTDAUTOLOAD_SIZE; SDK_LTDAUTOLOAD_LIST_END = SDK_LTDAUTOLOAD_LIST + SIZEOF(.binary.LTDAUTOLOAD_INFO); SDK_LTDAUTOLOAD_SIZE = SDK_LTDAUTOLOAD_SIZE + SIZEOF(.binary.LTDAUTOLOAD_INFO); ########################## LTDOVERLAYDEFS ########################### .L: { ### TWL limited extended static module information WRITEW SDK_LTDAUTOLOAD_TOP_START; # load address WRITEW SDK_MOUNT_INFO_TABLE; # address of the FS mount information table WRITEW SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD_TOP_SIZE; # size of module WRITEW 0; # padding } > L ############################ OTHERS ################################# SDK_SUBPRIV_ARENA_LO = 0x02ffc000; # メインメモリアリーナはサイズ 0 SDK_SEA_KEY_STORE = SDK_LTDAUTOLOAD_BSS_END; SDK_WRAM_ARENA_LO = SDK_LTDAUTOLOAD_BSS_END + 0x40; SDK_IRQ_STACKSIZE = ; # allocated in WRAM SDK_SYS_STACKSIZE = ; # allocated in WRAM SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1; .check.WORKRAM: { . = SDK_WRAM_ARENA_LO + 0x80 + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN; } > check.WORKRAM }