#--------------------------------------------------------------------------- # Project: NitroSDK - tools - makelcf # File: ARM7-TEG.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: ARM7-TEG.lcf.template,v $ # Revision 1.31 2006/05/10 03:19:47 yasu # Added support for the CodeWarrior 2.x overlay expansion # # Revision 1.30 2006/03/30 00:43:20 yasu # Updated copyright year # # Revision 1.29 2006/03/29 13:19:14 yasu # NUMBER_OVERLAYS revised to NUMBER.OVERLAYS # # Revision 1.28 2005/09/02 04:14:22 yasu # Old symbols were redefined so they can be used even under SDK2.2 # # Revision 1.27 2005/08/31 09:34:57 yasu # Corrected a problem where code would not function normally when using section names such as section_BSS # # Revision 1.26 2005/06/20 12:29:20 yasu # Changed Surffix to Suffix # # Revision 1.25 2005/06/17 03:16:11 yasu # Fixed copyright header # # Revision 1.24 2005/06/14 09:03:42 yada # Fix specific to negative value of SDK_STACKSIZE # # Revision 1.23 2004/09/08 01:27:18 yasu # Added * (.wram) on static segment # # Revision 1.22 2004/08/18 02:00:34 yasu # Fixed address of SDK_AUTOLOAD.MAIN.START # # Revision 1.21 2004/08/18 01:50:40 yasu # Support for SDK_SUBPRIV_ARENA_LO # # Revision 1.20 2004/08/02 10:38:53 yasu # Added autoload-done callback address in overlaydefs # # Revision 1.19 2004/07/26 00:08:27 yasu # Fixed label of exception table # # Revision 1.18 2004/07/24 05:42:25 yasu # Set default values for SDK_AUTOGEN_xTCM_START # # Revision 1.17 2004/07/23 11:32:14 yasu # Defined labels for __exception_table_start__ and _end__ # # Revision 1.16 2004/07/10 04:10:26 yasu # Added support for command 'Library' # # Revision 1.15 2004/07/08 04:04:59 yasu # Fixed small typo # # Revision 1.14 2004/07/02 08:13:02 yasu # Added support for OBJECT() # # Revision 1.13 2004/07/01 12:54:38 yasu # Added support for ITCM/DTCM/WRAM autoload # # Revision 1.12 2004/07/01 10:41:46 yasu # Added support for autoload # # Revision 1.11 2004/07/01 09:41:50 yasu # Added support for autoload # # Revision 1.10 2004/06/14 11:28:15 yasu # Support for section filter "FOREACH.STATIC.OBJECTS=.sectionName" # # Revision 1.9 2004/05/27 04:06:42 yasu # Fixed SDK_WRAM_ARENA_LO # # Revision 1.8 2004/04/26 11:41:38 yasu # Added KEEP_SECTION { .ctor } # # Revision 1.7 2004/04/19 06:39:41 yasu # Fixed workram checker # # Revision 1.6 2004/04/19 04:27:30 yasu # Support for WRAM overflow check # # Revision 1.5 2004/04/06 01:53:34 yasu # Moved rodata section into text section # # Revision 1.4 2004/04/06 01:39:24 miya # Modified overlay module size # # Revision 1.3 2004/03/29 11:40:48 yasu # Deleted ROM SIZE parameter on overlay table # # Revision 1.2 2004/03/26 09:32:48 yasu # Deleted useless ALIGN # # Revision 1.1 2004/03/26 06:04:32 yasu # Moved spec files # # Revision 1.3 2004/03/23 00:15:35 yasu # Added WRITEW 0 for the termination of __OVERLAY_static_init__ # # Revision 1.2 2004/03/22 02:15:49 yasu # Set _start as entry address in ROM header # # Revision 1.1 2004/03/16 10:06:07 yasu # Copied ARM9s template file # # $NoKeywords: $ #--------------------------------------------------------------------------- MEMORY { (RWX) : ORIGIN = , LENGTH = 0x0 > (RWX) : ORIGIN = , LENGTH = 0x0 >> binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> (RW) : ORIGIN = AFTER(), LENGTH = 0x0 > (RW) : ORIGIN = AFTER(), LENGTH = 0x0 > (RWXO): ORIGIN = , LENGTH = 0x0 > arena.MAIN (RW) : ORIGIN = AFTER(,), LENGTH = 0x0 check.WORKRAM (RWX) : ORIGIN = , LENGTH = 0x10000 > workram.check } KEEP_SECTION { .ctor } SECTIONS { ############################ STATIC ################################# .: { ALIGNALL(4); . = ALIGN(4); # Fit to cache line SEARCH_SYMBOL ; # # TEXT BLOCK: READ ONLY # SDK_STATIC_START =.; SDK_STATIC_TEXT_START =.; #:::::::::: text/rodata OBJECT(_start,*) crt0.o (.text) . = 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(4); SDK_STATIC_TEXT_END =.; # # DATA BLOCK: READ WRITE # SDK_STATIC_DATA_START =.; #:::::::::: Data . = ALIGN(4); . = ALIGN(4); . = ALIGN(4); #:::::::::: Data . = ALIGN(4); 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(4); SEARCH_SYMBOL ; # # BSS BLOCK # SDK_STATIC_BSS_START =.; #:::::::::: bss . = ALIGN(4); . = ALIGN(4); #:::::::::: bss . = ALIGN(4); SDK_STATIC_BSS_END = .; SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START; } >> ############################ AUTOLOADS ############################## SDK_AUTOLOAD.MAIN.START = 0x02380000; SDK_AUTOLOAD.MAIN.END = SDK_AUTOLOAD.MAIN.START; SDK_AUTOLOAD.MAIN.BSS_END = SDK_AUTOLOAD.MAIN.START; SDK_AUTOLOAD.MAIN.SIZE = 0; SDK_AUTOLOAD.MAIN.BSS_SIZE = 0; SDK_AUTOLOAD.WRAM.START = 0x037f8000; SDK_AUTOLOAD.WRAM.END = SDK_AUTOLOAD.WRAM.START; SDK_AUTOLOAD.WRAM.BSS_END = SDK_AUTOLOAD.WRAM.START; SDK_AUTOLOAD.WRAM.SIZE = 0; SDK_AUTOLOAD.WRAM.BSS_SIZE = 0; SDK_AUTOLOAD_START = SDK_STATIC_END; SDK_AUTOLOAD_SIZE = 0; SDK_AUTOLOAD_NUMBER = ; .: { ALIGNALL(4); . = ALIGN(4); SEARCH_SYMBOL ; # # TEXT BLOCK: READ ONLY # SDK_AUTOLOAD__ID =; SDK_AUTOLOAD..ID =; SDK_AUTOLOAD..START =.; SDK_AUTOLOAD..TEXT_START =.; #:::::::::: text/rodata . = 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 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(4); SEARCH_SYMBOL ; # # BSS BLOCK # SDK_AUTOLOAD..BSS_START = .; #:::::::::: bss . = ALIGN(4); . = ALIGN(4); #:::::::::: bss . = ALIGN(4); SDK_AUTOLOAD..BSS_END = .; SDK_AUTOLOAD..BSS_SIZE = SDK_AUTOLOAD..BSS_END - SDK_AUTOLOAD..BSS_START; } >> SDK_AUTOLOAD_MAIN_START = SDK_AUTOLOAD.MAIN.START; SDK_AUTOLOAD_MAIN_END = SDK_AUTOLOAD.MAIN.END; SDK_AUTOLOAD_MAIN_BSS_END = SDK_AUTOLOAD.MAIN.BSS_END; SDK_AUTOLOAD_MAIN_SIZE = SDK_AUTOLOAD.MAIN.SIZE; SDK_AUTOLOAD_MAIN_BSS_SIZE = SDK_AUTOLOAD.MAIN.BSS_SIZE; SDK_AUTOLOAD_WRAM_START = SDK_AUTOLOAD.WRAM.START; SDK_AUTOLOAD_WRAM_END = SDK_AUTOLOAD.WRAM.END; SDK_AUTOLOAD_WRAM_BSS_END = SDK_AUTOLOAD.WRAM.BSS_END; SDK_AUTOLOAD_WRAM_SIZE = SDK_AUTOLOAD.WRAM.SIZE; SDK_AUTOLOAD_WRAM_BSS_SIZE = SDK_AUTOLOAD.WRAM.BSS_SIZE; ############################ AUTOLOAD_INFO ########################## .binary.AUTOLOAD_INFO: { WRITEW ADDR(.); WRITEW SDK_AUTOLOAD..SIZE; WRITEW SDK_AUTOLOAD..BSS_SIZE; } > binary.AUTOLOAD_INFO SDK_AUTOLOAD_LIST = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE; SDK_AUTOLOAD_LIST_END = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); ############################ OVERLAYS ############################### SDK_OVERLAY_NUMBER = ; .: { ALIGNALL(4); . = ALIGN(4); SEARCH_SYMBOL ; # # TEXT BLOCK: READ ONLY # SDK_OVERLAY__ID =; ### SEGMENT OVERLAY ID SDK_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(4); SDK_OVERLAY..TEXT_END =.; # # DATA BLOCK: READ WRITE # SDK_OVERLAY..DATA_START =.; #:::::::::: Data . = ALIGN(4); . = ALIGN(4); #:::::::::: Data . = ALIGN(4); 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(4); SEARCH_SYMBOL ; # # BSS BLOCK # SDK_OVERLAY..BSS_START = .; #:::::::::: bss . = ALIGN(4); . = ALIGN(4); #:::::::::: bss . = ALIGN(4); SDK_OVERLAY..BSS_END = .; SDK_OVERLAY..BSS_SIZE = SDK_OVERLAY..BSS_END - SDK_OVERLAY..BSS_START; } >> ############################ ARENA ################################## .arena.MAIN: { . = ALIGN(4); SDK_SECTION_ARENA_START =.; } > arena.MAIN ############################ 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_SUBPRIV_ARENA_LO = SDK_AUTOLOAD.MAIN.BSS_END; SDK_WRAM_ARENA_LO = SDK_SECTION_ARENA_START; SDK_IRQ_STACKSIZE = ; # Allocated in WRAM SDK_SYS_STACKSIZE = ; # Allocated in WRAM # Work RAM size checker SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1; .check.WORKRAM: { . = . + SDK_SECTION_ARENA_START - + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN; } > check.WORKRAM }