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 = 0x02004000, 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 dummy.MAIN_EX (RW) : ORIGIN = 0x023e0000, LENGTH = 0x0 145 arena.MAIN (RW) : ORIGIN = AFTER(main), LENGTH = 0x0 146 arena.MAIN_EX (RW) : ORIGIN = AFTER(dummy.MAIN_EX), LENGTH = 0x0 147 arena.ITCM (RW) : ORIGIN = AFTER(ITCM), LENGTH = 0x0 148 arena.DTCM (RW) : ORIGIN = AFTER(DTCM), LENGTH = 0x0 149 binary.MODULE_FILES (RW) : ORIGIN = 0x0, LENGTH = 0x0 > component.files 150 check.ITCM (RWX) : ORIGIN = 0x0, LENGTH = 0x08000 > itcm.check 151 check.DTCM (RW) : ORIGIN = 0x0, LENGTH = 0x04000 > dtcm.check 152} 153 154FORCE_ACTIVE 155{ 156 SVC_SoftReset 157} 158 159KEEP_SECTION 160{ 161 .sinit 162} 163 164SECTIONS 165{ 166 ############################ STATIC ################################# 167 .main: 168 { 169 ALIGNALL(4); . = ALIGN(32); # Fit to cache line 170 171 # 172 # TEXT BLOCK: READ ONLY 173 # 174 SDK_STATIC_START =.; 175 SDK_STATIC_TEXT_START =.; 176 #:::::::::: text/rodata 177 libsyscall.a (.text) 178 crt0.o (.text) 179 crt0.o (.rodata) 180 # 181 # Added .version section. 182 # The information included in this section will be needed for Lotcheck purposes. Be sure to leave it in this position. 183 # 184 # 185 * (.version) 186 OBJECT(NitroMain,*) 187 * (.text) 188 . = ALIGN(4); 189 * (.exception) 190 . = ALIGN(4); 191 SDK_STATIC_ETABLE_START =.; 192 EXCEPTION 193 SDK_STATIC_ETABLE_END =.; 194 . = ALIGN(4); 195 * (.init) 196 . = ALIGN(4); 197 * (.rodata) 198 . = ALIGN(4); 199 200 SDK_STATIC_SINIT_START =.; 201 #:::::::::: ctor 202 * (.ctor) 203 * (.sinit) 204 WRITEW 0; 205 #:::::::::: ctor 206 SDK_STATIC_SINIT_END =.; 207 208 #:::::::::: text/rodata 209 . = ALIGN(32); 210 SDK_STATIC_TEXT_END =.; 211 212 # 213 # DATA BLOCK: READ WRITE 214 # 215 SDK_STATIC_DATA_START =.; 216 #:::::::::: Data 217 * (.sdata) 218 . = ALIGN(4); 219 * (.data) 220 . = ALIGN(4); 221 SDK_OVERLAY_DIGEST =.; 222 # NO DIGEST 223 SDK_OVERLAY_DIGEST_END =.; 224 #:::::::::: Data 225 . = ALIGN(32); 226 SDK_STATIC_DATA_END =.; 227 SDK_STATIC_END =.; 228 229 SDK_STATIC_TEXT_SIZE = SDK_STATIC_TEXT_END - SDK_STATIC_TEXT_START; 230 SDK_STATIC_DATA_SIZE = SDK_STATIC_DATA_END - SDK_STATIC_DATA_START; 231 SDK_STATIC_SIZE = SDK_STATIC_END - SDK_STATIC_START; 232 __sinit__ = SDK_STATIC_SINIT_START; # For static initializer 233 __exception_table_start__ = SDK_STATIC_ETABLE_START; # For exception table 234 __exception_table_end__ = SDK_STATIC_ETABLE_END; # For exception table 235 } > main 236 237 .main.bss: 238 { 239 ALIGNALL(4); . = ALIGN(32); 240 241 # 242 # BSS BLOCK 243 # 244 SDK_STATIC_BSS_START =.; 245 #:::::::::: bss 246 * (.sbss) 247 . = ALIGN(4); 248 * (.bss) 249 . = ALIGN(4); 250 #:::::::::: bss 251 . = ALIGN(32); 252 SDK_STATIC_BSS_END = .; 253 SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START; 254 255 } >> main 256 257 258 ############################ AUTOLOADS ############################## 259 SDK_AUTOLOAD.ITCM.START = 0x01ff8000; 260 SDK_AUTOLOAD.ITCM.END = SDK_AUTOLOAD.ITCM.START; 261 SDK_AUTOLOAD.ITCM.BSS_END = SDK_AUTOLOAD.ITCM.START; 262 SDK_AUTOLOAD.ITCM.SIZE = 0; 263 SDK_AUTOLOAD.ITCM.BSS_SIZE = 0; 264 SDK_AUTOLOAD.DTCM.START = 0x027e0000; 265 SDK_AUTOLOAD.DTCM.END = SDK_AUTOLOAD.DTCM.START; 266 SDK_AUTOLOAD.DTCM.BSS_END = SDK_AUTOLOAD.DTCM.START; 267 SDK_AUTOLOAD.DTCM.SIZE = 0; 268 SDK_AUTOLOAD.DTCM.BSS_SIZE = 0; 269 SDK_AUTOLOAD_START = SDK_STATIC_END; 270 SDK_AUTOLOAD_SIZE = 0; 271 SDK_AUTOLOAD_NUMBER = 0; 272 273 274 SDK_AUTOLOAD_ITCM_START = SDK_AUTOLOAD.ITCM.START; 275 SDK_AUTOLOAD_ITCM_END = SDK_AUTOLOAD.ITCM.END; 276 SDK_AUTOLOAD_ITCM_BSS_END = SDK_AUTOLOAD.ITCM.BSS_END; 277 SDK_AUTOLOAD_ITCM_SIZE = SDK_AUTOLOAD.ITCM.SIZE; 278 SDK_AUTOLOAD_ITCM_BSS_SIZE = SDK_AUTOLOAD.ITCM.BSS_SIZE; 279 SDK_AUTOLOAD_DTCM_START = SDK_AUTOLOAD.DTCM.START; 280 SDK_AUTOLOAD_DTCM_END = SDK_AUTOLOAD.DTCM.END; 281 SDK_AUTOLOAD_DTCM_BSS_END = SDK_AUTOLOAD.DTCM.BSS_END; 282 SDK_AUTOLOAD_DTCM_SIZE = SDK_AUTOLOAD.DTCM.SIZE; 283 SDK_AUTOLOAD_DTCM_BSS_SIZE = SDK_AUTOLOAD.DTCM.BSS_SIZE; 284 285 ############################ AUTOLOAD_INFO ########################## 286 .binary.AUTOLOAD_INFO: 287 { 288 } > binary.AUTOLOAD_INFO 289 290 SDK_AUTOLOAD_LIST = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE; 291 SDK_AUTOLOAD_LIST_END = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); 292 SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); 293 294 ############################ STATIC_FOOTER ########################## 295 .binary.STATIC_FOOTER: 296 { 297 WRITEW 0xdec00621; # LE(0x2106C0DE) = NITRO CODE 298 WRITEW _start_ModuleParams - ADDR(.main); 299 WRITEW 0; # NO DIGEST 300 } > binary.STATIC_FOOTER 301 302 ############################ OVERLAYS ############################### 303 SDK_OVERLAY_NUMBER = 0; 304 305 306 ############################ MAIN EX ################################## 307 # MAIN EX Area 308 .dummy.MAIN_EX: 309 { 310 . = ALIGN(32); 311 } > dummy.MAIN_EX 312 313 ############################ ARENA ################################## 314 .arena.MAIN: 315 { 316 . = ALIGN(32); 317 SDK_SECTION_ARENA_START =.; 318 } > arena.MAIN 319 320 .arena.MAIN_EX: 321 { 322 . = ALIGN(32); 323 SDK_SECTION_ARENA_EX_START =.; 324 } > arena.MAIN_EX 325 326 .arena.ITCM: 327 { 328 . = ALIGN(32); 329 SDK_SECTION_ARENA_ITCM_START =.; 330 } > arena.ITCM 331 332 .arena.DTCM: 333 { 334 . = ALIGN(32); 335 SDK_SECTION_ARENA_DTCM_START =.; 336 } > arena.DTCM 337 338 ############################ OVERLAYDEFS ############################ 339 .main_defs: 340 { 341 ### main module information 342 WRITEW ADDR(.main); # Load address 343 WRITEW _start; # Entry address 344 WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE; # Size of module 345 WRITEW _start_AutoloadDoneCallback; # Callback autoload done 346 347 ### overlay filename 348 349 } > main_defs 350 351 352 ############################ OVERLAYTABLE ########################### 353 .main_table: 354 { 355 356 } > main_table 357 358 359 ############################ OTHERS ################################# 360 SDK_MAIN_ARENA_LO = SDK_SECTION_ARENA_START; 361 SDK_IRQ_STACKSIZE = 2048; # Allocated in DTCM 362 SDK_SYS_STACKSIZE = 0; # When 0 means all remains of DTCM 363 364 # Module filelist 365 .binary.MODULE_FILES: 366 { 367 WRITES ("main.sbin"); 368 WRITES ("main_defs.sbin"); 369 WRITES ("main_table.sbin"); 370 } > binary.MODULE_FILES 371 372 # ITCM/DTCM size checker => check AUTOLOAD_ITCM/DTCM 373 .check.ITCM: 374 { 375 . = . + SDK_AUTOLOAD_ITCM_SIZE + SDK_AUTOLOAD_ITCM_BSS_SIZE; 376 } > check.ITCM 377 378 SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1; 379 .check.DTCM: 380 { 381 . = . + SDK_AUTOLOAD_DTCM_SIZE + SDK_AUTOLOAD_DTCM_BSS_SIZE; 382 . = . + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN; 383 } > check.DTCM 384 385} 386