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.37 2006/07/20 07:29:12 kitase_hirotake 15# Added the description explaining the version section 16# 17# Revision 1.36 2006/07/18 11:11:01 yasu 18# 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. 19# 20# 21# 22# Revision 1.35 2006/05/10 03:19:47 yasu 23# Added support for the CodeWarrior 2.x overlay expansion 24# 25# Revision 1.34 2006/04/06 09:02:36 kitase_hirotake 26# Support for .itcm.bss and .dtcm.bss 27# 28# Revision 1.33 2006/03/30 23:59:22 yasu 29# Updated copyright year 30# 31# Revision 1.32 2006/03/29 13:14:22 yasu 32# Support for overlays in CWVER 2.x 33# 34# Revision 1.31 2005/11/24 01:16:47 yada 35# Changed start address of mainEX arena from 0x2400000 to 0x23e0000 36# 37# Revision 1.30 2005/09/02 04:14:22 yasu 38# Old symbols were redefined so they can be used even under SDK2.2 39# 40# Revision 1.29 2005/08/31 09:34:57 yasu 41# Corrected a problem where code would not function normally when using section names such as section_BSS 42# 43# Revision 1.28 2005/08/26 11:22:16 yasu 44# Overlay support for ITCM/DTCM 45# 46# Revision 1.27 2005/06/20 12:29:20 yasu 47# Changed Surffix to Suffix 48# 49# Revision 1.26 2005/06/14 09:03:42 yada 50# Fixed around minus value of SDK_STACKSIZE. 51# 52# Revision 1.25 2005/04/13 12:51:00 terui 53# Changed SDK_AUTOLOAD.DTCM.START 0x027c0000 to 0x027e0000 54# 55# Revision 1.24 2005/03/30 00:02:14 yosizaki 56# Fixed copyright header 57# 58# Revision 1.23 2005/03/25 12:54:59 yasu 59# Added the .version section 60# 61# Revision 1.22 2004/10/03 02:00:56 yasu 62# Output component file list for compstatic tool 63# 64# Revision 1.21 2004/09/27 21:21:40 PM yasu 65# Added support for .sinit 66# 67# Revision 1.20 2004/09/09 11:49:20 yasu 68# Added support for compstatic in default 69# 70# Revision 1.19 2004/09/06 06:40:00 yasu 71# Added labels for digest 72# 73# Revision 1.18 2004/08/20 06:19:59 yasu 74# DTCM moves to 0x027c0000 at default 75# 76# Revision 1.17 2004/08/02 10:38:53 yasu 77# Added autoload-done callback address in overlaydefs 78# 79# Revision 1.16 2004/07/26 02:22:32 yasu 80# Changed DTCM address to 0x023c0000 81# 82# Revision 1.15 2004/07/26 00:08:27 yasu 83# Fixed label of exception table 84# 85# Revision 1.14 2004/07/24 05:42:25 yasu 86# Set default values for SDK_AUTOGEN_xTCM_START 87# 88# Revision 1.13 2004/07/23 11:32:14 yasu 89# Defined labels for __exception_table_start__ and _end__ 90# 91# Revision 1.12 2004/07/12 12:21:08 yasu 92# Checked size of ITCM/DTCM 93# 94# Revision 1.11 2004/07/10 04:10:26 yasu 95# Added support for command 'Library' 96# 97# Revision 1.10 2004/07/02 08:13:02 yasu 98# Added support for OBJECT( ) 99# 100# Revision 1.9 2004/07/01 12:54:38 yasu 101# Added support for ITCM/DTCM/WRAM autoload 102# 103# Revision 1.8 2004/07/01 10:41:46 yasu 104# Added support for autoload 105# 106# Revision 1.7 2004/06/02 07:35:37 yasu 107# Set libsyscall.a in FORCE_ACTIVE 108# Put NitroMain at the top of ROM image 109# 110# Revision 1.6 2004/06/02 04:56:28 yasu 111# Revised to match the new ROM map of TS 112# 113# Revision 1.5 2004/06/01 06:12:00 miya 114# Added padding at top of ROM image. 115# 116# Revision 1.4 2004/04/26 12:16:48 yasu 117# Added KEEP_SECTIONS 118# 119# Revision 1.3 2004/04/20 07:41:32 yasu 120# Set STATICINIT instead of .ctor temporarily 121# 122# Revision 1.2 2004/04/14 07:16:42 yasu 123# Added ALIGN(32) for convenience to handle cache line 124# 125# Revision 1.1 2004/04/06 01:59:54 yasu 126# Newly added 127# 128# $NoKeywords: $ 129#--------------------------------------------------------------------------- 130MEMORY 131{ 132 <STATIC.NAME> (RWX) : ORIGIN = <STATIC.ADDRESS>, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.SUFFIX> 133 <FOREACH.AUTOLOADS> 134 <AUTOLOAD.NAME> (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.SUFFIX> 135 <END.AUTOLOADS> 136 binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.SUFFIX> 137 binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.SUFFIX> 138 139 <PROPERTY.OVERLAYDEFS> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX> 140 <PROPERTY.OVERLAYTABLE> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX> 141 <FOREACH.OVERLAYS> 142 <OVERLAY.NAME> (RWXO): ORIGIN = <OVERLAY.ADDRESS>, LENGTH = 0x0 > <OVERLAY.NAME><PROPERTY.SUFFIX> 143 <END.OVERLAYS> 144 dummy.MAIN_EX (RW) : ORIGIN = 0x023e0000, LENGTH = 0x0 145 arena.MAIN (RW) : ORIGIN = AFTER(<STATIC.NAME><FOREACH.OVERLAYS=MAIN>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0 146 arena.MAIN_EX (RW) : ORIGIN = AFTER(dummy.MAIN_EX<FOREACH.OVERLAYS=MAINEX>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0 147 arena.ITCM (RW) : ORIGIN = AFTER(ITCM<FOREACH.OVERLAYS=ITCM>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0 148 arena.DTCM (RW) : ORIGIN = AFTER(DTCM<FOREACH.OVERLAYS=DTCM>,<OVERLAY.NAME><END.OVERLAYS>), 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 .<STATIC.NAME>: 168 { 169 ALIGNALL(4); . = ALIGN(32); # Fit to cache line 170 <IF.NITRO_LCFSPEC.GE.2> 171 <FOREACH.STATIC.SEARCHSYMBOLS> 172 SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>; 173 <END.STATIC.SEARCHSYMBOLS> 174 <ENDIF> 175 # 176 # TEXT BLOCK: READ ONLY 177 # 178 SDK_STATIC_START =.; 179 SDK_STATIC_TEXT_START =.; 180 #:::::::::: text/rodata 181 libsyscall.a (.text) 182 crt0.o (.text) 183 crt0.o (.rodata) 184 # 185 # Added .version section. 186 # The information included in this section will be needed for Lotcheck purposes. Be sure to leave it in this position. 187 # 188 # 189 * (.version) 190 OBJECT(NitroMain,*) 191 <FOREACH.STATIC.OBJECTS=.text> 192 <STATIC.OBJECT=.text:t> 193 <END.STATIC.OBJECTS> 194 <FOREACH.STATIC.LIBRARIES=.text> 195 <STATIC.LIBRARY=.text:t> 196 <END.STATIC.LIBRARIES> 197 . = ALIGN(4); 198 * (.exception) 199 . = ALIGN(4); 200 SDK_STATIC_ETABLE_START =.; 201 EXCEPTION 202 SDK_STATIC_ETABLE_END =.; 203 . = ALIGN(4); 204 <FOREACH.STATIC.OBJECTS=.init> 205 <STATIC.OBJECT=.init:t> 206 <END.STATIC.OBJECTS> 207 <FOREACH.STATIC.LIBRARIES=.init> 208 <STATIC.LIBRARY=.init:t> 209 <END.STATIC.LIBRARIES> 210 . = ALIGN(4); 211 <FOREACH.STATIC.OBJECTS=.rodata> 212 <STATIC.OBJECT=.rodata:t> 213 <END.STATIC.OBJECTS> 214 <FOREACH.STATIC.LIBRARIES=.rodata> 215 <STATIC.LIBRARY=.rodata:t> 216 <END.STATIC.LIBRARIES> 217 . = ALIGN(4); 218 219 SDK_STATIC_SINIT_START =.; 220 #:::::::::: ctor 221 <FOREACH.STATIC.OBJECTS=.ctor> 222 <STATIC.OBJECT=.ctor:t> 223 <END.STATIC.OBJECTS> 224 <FOREACH.STATIC.LIBRARIES=.ctor> 225 <STATIC.LIBRARY=.ctor:t> 226 <END.STATIC.LIBRARIES> 227 <FOREACH.STATIC.OBJECTS=.sinit> 228 <STATIC.OBJECT=.sinit:t> 229 <END.STATIC.OBJECTS> 230 <FOREACH.STATIC.LIBRARIES=.sinit> 231 <STATIC.LIBRARY=.sinit:t> 232 <END.STATIC.LIBRARIES> 233 WRITEW 0; 234 #:::::::::: ctor 235 SDK_STATIC_SINIT_END =.; 236 237 #:::::::::: text/rodata 238 . = ALIGN(32); 239 SDK_STATIC_TEXT_END =.; 240 241 # 242 # DATA BLOCK: READ WRITE 243 # 244 SDK_STATIC_DATA_START =.; 245 #:::::::::: Data 246 <FOREACH.STATIC.OBJECTS=.sdata> 247 <STATIC.OBJECT=.sdata:t> 248 <END.STATIC.OBJECTS> 249 <FOREACH.STATIC.LIBRARIES=.sdata> 250 <STATIC.LIBRARY=.sdata:t> 251 <END.STATIC.LIBRARIES> 252 . = ALIGN(4); 253 <FOREACH.STATIC.OBJECTS=.data> 254 <STATIC.OBJECT=.data:t> 255 <END.STATIC.OBJECTS> 256 <FOREACH.STATIC.LIBRARIES=.data> 257 <STATIC.LIBRARY=.data:t> 258 <END.STATIC.LIBRARIES> 259 . = ALIGN(4); 260 SDK_OVERLAY_DIGEST =.; 261 # NO DIGEST 262 SDK_OVERLAY_DIGEST_END =.; 263 #:::::::::: Data 264 . = ALIGN(32); 265 SDK_STATIC_DATA_END =.; 266 SDK_STATIC_END =.; 267 268 SDK_STATIC_TEXT_SIZE = SDK_STATIC_TEXT_END - SDK_STATIC_TEXT_START; 269 SDK_STATIC_DATA_SIZE = SDK_STATIC_DATA_END - SDK_STATIC_DATA_START; 270 SDK_STATIC_SIZE = SDK_STATIC_END - SDK_STATIC_START; 271 __sinit__ = SDK_STATIC_SINIT_START; # For static initializer 272 __exception_table_start__ = SDK_STATIC_ETABLE_START; # For exception table 273 __exception_table_end__ = SDK_STATIC_ETABLE_END; # For exception table 274 } > <STATIC.NAME> 275 276 .<STATIC.NAME>.bss: 277 { 278 ALIGNALL(4); . = ALIGN(32); 279 <IF.NITRO_LCFSPEC.GE.2> 280 <FOREACH.STATIC.SEARCHSYMBOLS> 281 SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>; 282 <END.STATIC.SEARCHSYMBOLS> 283 <ENDIF> 284 # 285 # BSS BLOCK 286 # 287 SDK_STATIC_BSS_START =.; 288 #:::::::::: bss 289 <FOREACH.STATIC.OBJECTS=.sbss> 290 <STATIC.OBJECT=.sbss:t> 291 <END.STATIC.OBJECTS> 292 <FOREACH.STATIC.LIBRARIES=.sbss> 293 <STATIC.LIBRARY=.sbss:t> 294 <END.STATIC.LIBRARIES> 295 . = ALIGN(4); 296 <FOREACH.STATIC.OBJECTS=.bss> 297 <STATIC.OBJECT=.bss:t> 298 <END.STATIC.OBJECTS> 299 <FOREACH.STATIC.LIBRARIES=.bss> 300 <STATIC.LIBRARY=.bss:t> 301 <END.STATIC.LIBRARIES> 302 . = ALIGN(4); 303 #:::::::::: bss 304 . = ALIGN(32); 305 SDK_STATIC_BSS_END = .; 306 SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START; 307 308 } >> <STATIC.NAME> 309 310 311 ############################ AUTOLOADS ############################## 312 SDK_AUTOLOAD.ITCM.START = 0x01ff8000; 313 SDK_AUTOLOAD.ITCM.END = SDK_AUTOLOAD.ITCM.START; 314 SDK_AUTOLOAD.ITCM.BSS_END = SDK_AUTOLOAD.ITCM.START; 315 SDK_AUTOLOAD.ITCM.SIZE = 0; 316 SDK_AUTOLOAD.ITCM.BSS_SIZE = 0; 317 SDK_AUTOLOAD.DTCM.START = 0x027e0000; 318 SDK_AUTOLOAD.DTCM.END = SDK_AUTOLOAD.DTCM.START; 319 SDK_AUTOLOAD.DTCM.BSS_END = SDK_AUTOLOAD.DTCM.START; 320 SDK_AUTOLOAD.DTCM.SIZE = 0; 321 SDK_AUTOLOAD.DTCM.BSS_SIZE = 0; 322 SDK_AUTOLOAD_START = SDK_STATIC_END; 323 SDK_AUTOLOAD_SIZE = 0; 324 SDK_AUTOLOAD_NUMBER = <NUMBER.AUTOLOADS>; 325 326<FOREACH.AUTOLOADS> 327 .<AUTOLOAD.NAME>: 328 { 329 ALIGNALL(4); . = ALIGN(32); 330 <IF.NITRO_LCFSPEC.GE.2> 331 <FOREACH.AUTOLOAD.SEARCHSYMBOLS> 332 SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>; 333 <END.AUTOLOAD.SEARCHSYMBOLS> 334 <ENDIF> 335 # 336 # TEXT BLOCK: READ ONLY 337 # 338 SDK_AUTOLOAD_<AUTOLOAD.NAME>_ID =<AUTOLOAD.ID>; 339 SDK_AUTOLOAD.<AUTOLOAD.NAME>.ID =<AUTOLOAD.ID>; 340 SDK_AUTOLOAD.<AUTOLOAD.NAME>.START =.; 341 SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START =.; 342 #:::::::::: text/rodata 343 <FOREACH.AUTOLOAD.OBJECTS=.text> 344 <AUTOLOAD.OBJECT=.text:t> 345 <END.AUTOLOAD.OBJECTS> 346 <FOREACH.AUTOLOAD.LIBRARIES=.text> 347 <AUTOLOAD.LIBRARY=.text:t> 348 <END.AUTOLOAD.LIBRARIES> 349 . = ALIGN(4); 350 <FOREACH.AUTOLOAD.OBJECTS=.itcm> 351 <AUTOLOAD.OBJECT=.itcm:t> 352 <END.AUTOLOAD.OBJECTS> 353 <FOREACH.AUTOLOAD.LIBRARIES=.itcm> 354 <AUTOLOAD.LIBRARY=.itcm:t> 355 <END.AUTOLOAD.LIBRARIES> 356 . = ALIGN(4); 357 <FOREACH.AUTOLOAD.OBJECTS=.rodata> 358 <AUTOLOAD.OBJECT=.rodata:t> 359 <END.AUTOLOAD.OBJECTS> 360 <FOREACH.AUTOLOAD.LIBRARIES=.rodata> 361 <AUTOLOAD.LIBRARY=.rodata:t> 362 <END.AUTOLOAD.LIBRARIES> 363 . = ALIGN(4); 364 #:::::::::: text/rodata 365 SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END =.; 366 367 # 368 # DATA BLOCK: READ WRITE BLOCK 369 # 370 SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START =.; 371 #:::::::::: Data 372 <FOREACH.AUTOLOAD.OBJECTS=.sdata> 373 <AUTOLOAD.OBJECT=.sdata:t> 374 <END.AUTOLOAD.OBJECTS> 375 <FOREACH.AUTOLOAD.LIBRARIES=.sdata> 376 <AUTOLOAD.LIBRARY=.sdata:t> 377 <END.AUTOLOAD.LIBRARIES> 378 . = ALIGN(4); 379 <FOREACH.AUTOLOAD.OBJECTS=.data> 380 <AUTOLOAD.OBJECT=.data:t> 381 <END.AUTOLOAD.OBJECTS> 382 <FOREACH.AUTOLOAD.LIBRARIES=.data> 383 <AUTOLOAD.LIBRARY=.data:t> 384 <END.AUTOLOAD.LIBRARIES> 385 . = ALIGN(4); 386 <FOREACH.AUTOLOAD.OBJECTS=.dtcm> 387 <AUTOLOAD.OBJECT=.dtcm:t> 388 <END.AUTOLOAD.OBJECTS> 389 <FOREACH.AUTOLOAD.LIBRARIES=.dtcm> 390 <AUTOLOAD.LIBRARY=.dtcm:t> 391 <END.AUTOLOAD.LIBRARIES> 392 . = ALIGN(4); 393 #:::::::::: Data 394 . = ALIGN(32); 395 SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END =.; 396 SDK_AUTOLOAD.<AUTOLOAD.NAME>.END =.; 397 398 SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START; 399 SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START; 400 SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.START; 401 SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE; 402 403 } > <AUTOLOAD.NAME> 404 405 .<AUTOLOAD.NAME>.bss: 406 { 407 ALIGNALL(4); . = ALIGN(32); 408 <IF.NITRO_LCFSPEC.GE.2> 409 <FOREACH.AUTOLOAD.SEARCHSYMBOLS> 410 SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>; 411 <END.AUTOLOAD.SEARCHSYMBOLS> 412 <ENDIF> 413 # 414 # BSS BLOCK 415 # 416 SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START = .; 417 #:::::::::: bss 418 <FOREACH.AUTOLOAD.OBJECTS=.sbss> 419 <AUTOLOAD.OBJECT=.sbss:t> 420 <END.AUTOLOAD.OBJECTS> 421 <FOREACH.AUTOLOAD.LIBRARIES=.sbss> 422 <AUTOLOAD.LIBRARY=.sbss:t> 423 <END.AUTOLOAD.LIBRARIES> 424 . = ALIGN(4); 425 <FOREACH.AUTOLOAD.OBJECTS=.bss> 426 <AUTOLOAD.OBJECT=.bss:t> 427 <END.AUTOLOAD.OBJECTS> 428 <FOREACH.AUTOLOAD.LIBRARIES=.bss> 429 <AUTOLOAD.LIBRARY=.bss:t> 430 <END.AUTOLOAD.LIBRARIES> 431 . = ALIGN(4); 432 <FOREACH.AUTOLOAD.OBJECTS=.dtcm> 433 <AUTOLOAD.OBJECT=.dtcm.bss:t> 434 <END.AUTOLOAD.OBJECTS> 435 <FOREACH.AUTOLOAD.LIBRARIES=.dtcm> 436 <AUTOLOAD.LIBRARY=.dtcm.bss:t> 437 <END.AUTOLOAD.LIBRARIES> 438 . = ALIGN(4); 439 <FOREACH.AUTOLOAD.OBJECTS=.itcm> 440 <AUTOLOAD.OBJECT=.itcm.bss:t> 441 <END.AUTOLOAD.OBJECTS> 442 <FOREACH.AUTOLOAD.LIBRARIES=.itcm> 443 <AUTOLOAD.LIBRARY=.itcm.bss:t> 444 <END.AUTOLOAD.LIBRARIES> 445 . = ALIGN(4); 446 #:::::::::: bss 447 . = ALIGN(32); 448 SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END = .; 449 450 SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START; 451 452 } >> <AUTOLOAD.NAME> 453 454<END.AUTOLOADS> 455 456 SDK_AUTOLOAD_ITCM_START = SDK_AUTOLOAD.ITCM.START; 457 SDK_AUTOLOAD_ITCM_END = SDK_AUTOLOAD.ITCM.END; 458 SDK_AUTOLOAD_ITCM_BSS_END = SDK_AUTOLOAD.ITCM.BSS_END; 459 SDK_AUTOLOAD_ITCM_SIZE = SDK_AUTOLOAD.ITCM.SIZE; 460 SDK_AUTOLOAD_ITCM_BSS_SIZE = SDK_AUTOLOAD.ITCM.BSS_SIZE; 461 SDK_AUTOLOAD_DTCM_START = SDK_AUTOLOAD.DTCM.START; 462 SDK_AUTOLOAD_DTCM_END = SDK_AUTOLOAD.DTCM.END; 463 SDK_AUTOLOAD_DTCM_BSS_END = SDK_AUTOLOAD.DTCM.BSS_END; 464 SDK_AUTOLOAD_DTCM_SIZE = SDK_AUTOLOAD.DTCM.SIZE; 465 SDK_AUTOLOAD_DTCM_BSS_SIZE = SDK_AUTOLOAD.DTCM.BSS_SIZE; 466 467 ############################ AUTOLOAD_INFO ########################## 468 .binary.AUTOLOAD_INFO: 469 { 470<FOREACH.AUTOLOADS> 471 WRITEW ADDR(.<AUTOLOAD.NAME>); 472 WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE; 473 WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE; 474<END.AUTOLOADS> 475 } > binary.AUTOLOAD_INFO 476 477 SDK_AUTOLOAD_LIST = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE; 478 SDK_AUTOLOAD_LIST_END = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); 479 SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); 480 481 ############################ STATIC_FOOTER ########################## 482 .binary.STATIC_FOOTER: 483 { 484 WRITEW 0xdec00621; # LE(0x2106C0DE) = NITRO CODE 485 WRITEW _start_ModuleParams - ADDR(.<STATIC.NAME>); 486 WRITEW 0; # NO DIGEST 487 } > binary.STATIC_FOOTER 488 489 ############################ OVERLAYS ############################### 490 SDK_OVERLAY_NUMBER = <NUMBER.OVERLAYS>; 491 492<FOREACH.OVERLAYS> 493 .<OVERLAY.NAME>:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF> 494 { 495 ALIGNALL(4); . = ALIGN(32); 496 <IF.NITRO_LCFSPEC.GE.2> 497 <FOREACH.OVERLAY.SEARCHSYMBOLS> 498 SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>; 499 <END.OVERLAY.SEARCHSYMBOLS> 500 <ENDIF> 501 # 502 # TEXT BLOCK: READ ONLY 503 # 504 SDK_OVERLAY_<OVERLAY.NAME>_ID =<OVERLAY.ID>; ### SEGMENT <OVERLAY.NAME> OVERLAY ID 505 SDK_OVERLAY.<OVERLAY.NAME>.ID =<OVERLAY.ID>; 506 SDK_OVERLAY.<OVERLAY.NAME>.START =.; 507 SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START =.; 508 #:::::::::: text/rodata 509 <FOREACH.OVERLAY.OBJECTS=.text> 510 <OVERLAY.OBJECT=.text:t> 511 <END.OVERLAY.OBJECTS> 512 <FOREACH.OVERLAY.LIBRARIES=.text> 513 <OVERLAY.LIBRARY=.text:t> 514 <END.OVERLAY.LIBRARIES> 515 . = ALIGN(4); 516 <FOREACH.OVERLAY.OBJECTS=.rodata> 517 <OVERLAY.OBJECT=.rodata:t> 518 <END.OVERLAY.OBJECTS> 519 <FOREACH.OVERLAY.LIBRARIES=.rodata> 520 <OVERLAY.LIBRARY=.rodata:t> 521 <END.OVERLAY.LIBRARIES> 522 . = ALIGN(4); 523 <FOREACH.OVERLAY.OBJECTS=.init> 524 <OVERLAY.OBJECT=.init:t> 525 <END.OVERLAY.OBJECTS> 526 <FOREACH.OVERLAY.LIBRARIES=.init> 527 <OVERLAY.LIBRARY=.init:t> 528 <END.OVERLAY.LIBRARIES> 529 . = ALIGN(4); 530 SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START =.; 531 #:::::::::: ctor 532 <FOREACH.OVERLAY.OBJECTS=.ctor> 533 <OVERLAY.OBJECT=.ctor:t> 534 <END.OVERLAY.OBJECTS> 535 <FOREACH.OVERLAY.LIBRARIES=.ctor> 536 <OVERLAY.LIBRARY=.ctor:t> 537 <END.OVERLAY.LIBRARIES> 538 <FOREACH.OVERLAY.OBJECTS=.sinit> 539 <OVERLAY.OBJECT=.sinit:t> 540 <END.OVERLAY.OBJECTS> 541 <FOREACH.OVERLAY.LIBRARIES=.sinit> 542 <OVERLAY.LIBRARY=.sinit:t> 543 <END.OVERLAY.LIBRARIES> 544 WRITEW 0; 545 #:::::::::: ctor 546 SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END =.; 547 548 #:::::::::: text/rodata 549 . = ALIGN(32); 550 SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END =.; 551 552 # 553 # DATA BLOCK: READ WRITE 554 # 555 SDK_OVERLAY.<OVERLAY.NAME>.DATA_START =.; 556 #:::::::::: Data 557 <FOREACH.OVERLAY.OBJECTS=.sdata> 558 <OVERLAY.OBJECT=.sdata:t> 559 <END.OVERLAY.OBJECTS> 560 <FOREACH.OVERLAY.LIBRARIES=.sdata> 561 <OVERLAY.LIBRARY=.sdata:t> 562 <END.OVERLAY.LIBRARIES> 563 . = ALIGN(4); 564 <FOREACH.OVERLAY.OBJECTS=.data> 565 <OVERLAY.OBJECT=.data:t> 566 <END.OVERLAY.OBJECTS> 567 <FOREACH.OVERLAY.LIBRARIES=.data> 568 <OVERLAY.LIBRARY=.data:t> 569 <END.OVERLAY.LIBRARIES> 570 . = ALIGN(4); 571 #:::::::::: Data 572 . = ALIGN(32); 573 SDK_OVERLAY.<OVERLAY.NAME>.DATA_END =.; 574 SDK_OVERLAY.<OVERLAY.NAME>.END =.; 575 576 SDK_OVERLAY.<OVERLAY.NAME>.TEXT_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END - SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START; 577 SDK_OVERLAY.<OVERLAY.NAME>.DATA_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.DATA_END - SDK_OVERLAY.<OVERLAY.NAME>.DATA_START; 578 SDK_OVERLAY.<OVERLAY.NAME>.SIZE = SDK_OVERLAY.<OVERLAY.NAME>.END - SDK_OVERLAY.<OVERLAY.NAME>.START; 579 580 } > <OVERLAY.NAME> 581 582 .<OVERLAY.NAME>.bss:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF> 583 { 584 ALIGNALL(4); . = ALIGN(32); 585 <IF.NITRO_LCFSPEC.GE.2> 586 <FOREACH.OVERLAY.SEARCHSYMBOLS> 587 SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>; 588 <END.OVERLAY.SEARCHSYMBOLS> 589 <ENDIF> 590 # 591 # BSS BLOCK 592 # 593 SDK_OVERLAY.<OVERLAY.NAME>.BSS_START = .; 594 #:::::::::: bss 595 <FOREACH.OVERLAY.OBJECTS=.bss> 596 <OVERLAY.OBJECT=.bss:t> 597 <END.OVERLAY.OBJECTS> 598 <FOREACH.OVERLAY.LIBRARIES=.bss> 599 <OVERLAY.LIBRARY=.bss:t> 600 <END.OVERLAY.LIBRARIES> 601 . = ALIGN(4); 602 <FOREACH.OVERLAY.OBJECTS=.sbss> 603 <OVERLAY.OBJECT=.sbss:t> 604 <END.OVERLAY.OBJECTS> 605 <FOREACH.OVERLAY.LIBRARIES=.sbss> 606 <OVERLAY.LIBRARY=.sbss:t> 607 <END.OVERLAY.LIBRARIES> 608 . = ALIGN(4); 609 #:::::::::: bss 610 . = ALIGN(32); 611 SDK_OVERLAY.<OVERLAY.NAME>.BSS_END = .; 612 613 SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.BSS_END - SDK_OVERLAY.<OVERLAY.NAME>.BSS_START; 614 615 } >> <OVERLAY.NAME> 616 617<END.OVERLAYS> 618 619 ############################ MAIN EX ################################## 620 # MAIN EX Area 621 .dummy.MAIN_EX: 622 { 623 . = ALIGN(32); 624 } > dummy.MAIN_EX 625 626 ############################ ARENA ################################## 627 .arena.MAIN: 628 { 629 . = ALIGN(32); 630 SDK_SECTION_ARENA_START =.; 631 } > arena.MAIN 632 633 .arena.MAIN_EX: 634 { 635 . = ALIGN(32); 636 SDK_SECTION_ARENA_EX_START =.; 637 } > arena.MAIN_EX 638 639 .arena.ITCM: 640 { 641 . = ALIGN(32); 642 SDK_SECTION_ARENA_ITCM_START =.; 643 } > arena.ITCM 644 645 .arena.DTCM: 646 { 647 . = ALIGN(32); 648 SDK_SECTION_ARENA_DTCM_START =.; 649 } > arena.DTCM 650 651 ############################ OVERLAYDEFS ############################ 652 .<PROPERTY.OVERLAYDEFS>: 653 { 654 ### <STATIC.NAME> module information 655 WRITEW ADDR(.<STATIC.NAME>); # Load address 656 WRITEW _start; # Entry address 657 WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE; # Size of module 658 WRITEW _start_AutoloadDoneCallback; # Callback autoload done 659 660 ### overlay filename 661 <FOREACH.OVERLAYS> 662 WRITES ("<OVERLAY.NAME><PROPERTY.SUFFIX>"); # Overlay <OVERLAY.ID> 663 <END.OVERLAYS> 664 665 } > <PROPERTY.OVERLAYDEFS> 666 667 668 ############################ OVERLAYTABLE ########################### 669 .<PROPERTY.OVERLAYTABLE>: 670 { 671 <FOREACH.OVERLAYS> 672 # Overlay <OVERLAY.ID> 673 WRITEW <OVERLAY.ID>; # Overlay ID 674 WRITEW ADDR(.<OVERLAY.NAME>); # Load address 675 WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SIZE; # Size of module 676 WRITEW SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE; # Size of bss 677 WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START; # Start address of static init 678 WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END; # End address of static init 679 WRITEW <OVERLAY.ID>; # ROM file ID 680 WRITEW 0; # Reserved 681 682 <END.OVERLAYS> 683 684 } > <PROPERTY.OVERLAYTABLE> 685 686 687 ############################ OTHERS ################################# 688 SDK_MAIN_ARENA_LO = SDK_SECTION_ARENA_START; 689 SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>; # Allocated in DTCM 690 SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>; # When 0 means all remains of DTCM 691 692 # Module filelist 693 .binary.MODULE_FILES: 694 { 695 WRITES ("<STATIC.NAME><PROPERTY.SUFFIX>"); 696 WRITES ("<PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>"); 697 WRITES ("<PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>"); 698 } > binary.MODULE_FILES 699 700 # ITCM/DTCM size checker => check AUTOLOAD_ITCM/DTCM 701 .check.ITCM: 702 { 703 . = . + SDK_AUTOLOAD_ITCM_SIZE + SDK_AUTOLOAD_ITCM_BSS_SIZE; 704 } > check.ITCM 705 706 SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1; 707 .check.DTCM: 708 { 709 . = . + SDK_AUTOLOAD_DTCM_SIZE + SDK_AUTOLOAD_DTCM_BSS_SIZE; 710 . = . + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN; 711 } > check.DTCM 712 713} 714