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 binary.COMP_SPEC_LIST (RW) : ORIGIN = 0x0, LENGTH = 0x0 > compspec.list 151 check.ITCM (RWX) : ORIGIN = 0x0, LENGTH = 0x08000 > itcm.check 152 check.DTCM (RW) : ORIGIN = 0x0, LENGTH = 0x04000 > dtcm.check 153} 154 155FORCE_ACTIVE 156{ 157 SVC_SoftReset 158} 159 160KEEP_SECTION 161{ 162 .sinit 163} 164 165SECTIONS 166{ 167 ############################ STATIC ################################# 168 .<STATIC.NAME>: 169 { 170 ALIGNALL(4); . = ALIGN(32); # Fit to cache line 171 <IF.NITRO_LCFSPEC.GE.2> 172 <FOREACH.STATIC.SEARCHSYMBOLS> 173 SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>; 174 <END.STATIC.SEARCHSYMBOLS> 175 <ENDIF> 176 # 177 # TEXT BLOCK: READ ONLY 178 # 179 SDK_STATIC_START =.; 180 SDK_STATIC_TEXT_START =.; 181 #:::::::::: text/rodata 182 libsyscall.a (.text) 183 crt0.o (.text) 184 crt0.o (.rodata) 185 # 186 # Added .version section. 187 # The information included in this section will be needed for Lotcheck purposes. Be sure to leave it in this position. 188 # 189 # 190 * (.version) 191 OBJECT(NitroMain,*) 192 <FOREACH.STATIC.FORCES> 193 FORCE_OBJECT<STATIC.FORCE> 194 <END.STATIC.FORCES> 195 <FOREACH.STATIC.OBJECTS=.text> 196 <STATIC.OBJECT=.text:t> 197 <END.STATIC.OBJECTS> 198 <FOREACH.STATIC.LIBRARIES=.text> 199 <STATIC.LIBRARY=.text:t> 200 <END.STATIC.LIBRARIES> 201 . = ALIGN(4); 202 * (.exception) 203 . = ALIGN(4); 204 SDK_STATIC_ETABLE_START =.; 205 EXCEPTION 206 SDK_STATIC_ETABLE_END =.; 207 . = ALIGN(4); 208 <FOREACH.STATIC.OBJECTS=.init> 209 <STATIC.OBJECT=.init:t> 210 <END.STATIC.OBJECTS> 211 <FOREACH.STATIC.LIBRARIES=.init> 212 <STATIC.LIBRARY=.init:t> 213 <END.STATIC.LIBRARIES> 214 . = ALIGN(4); 215 <FOREACH.STATIC.OBJECTS=.rodata> 216 <STATIC.OBJECT=.rodata:t> 217 <END.STATIC.OBJECTS> 218 <FOREACH.STATIC.LIBRARIES=.rodata> 219 <STATIC.LIBRARY=.rodata:t> 220 <END.STATIC.LIBRARIES> 221 . = ALIGN(4); 222 223 SDK_STATIC_SINIT_START =.; 224 #:::::::::: ctor 225 <FOREACH.STATIC.OBJECTS=.ctor> 226 <STATIC.OBJECT=.ctor:t> 227 <END.STATIC.OBJECTS> 228 <FOREACH.STATIC.LIBRARIES=.ctor> 229 <STATIC.LIBRARY=.ctor:t> 230 <END.STATIC.LIBRARIES> 231 <FOREACH.STATIC.OBJECTS=.sinit> 232 <STATIC.OBJECT=.sinit:t> 233 <END.STATIC.OBJECTS> 234 <FOREACH.STATIC.LIBRARIES=.sinit> 235 <STATIC.LIBRARY=.sinit:t> 236 <END.STATIC.LIBRARIES> 237 WRITEW 0; 238 #:::::::::: ctor 239 SDK_STATIC_SINIT_END =.; 240 241 #:::::::::: text/rodata 242 . = ALIGN(32); 243 SDK_STATIC_TEXT_END =.; 244 245 # 246 # DATA BLOCK: READ WRITE 247 # 248 SDK_STATIC_DATA_START =.; 249 #:::::::::: data 250 <FOREACH.STATIC.OBJECTS=.sdata> 251 <STATIC.OBJECT=.sdata:t> 252 <END.STATIC.OBJECTS> 253 <FOREACH.STATIC.LIBRARIES=.sdata> 254 <STATIC.LIBRARY=.sdata:t> 255 <END.STATIC.LIBRARIES> 256 . = ALIGN(4); 257 <FOREACH.STATIC.OBJECTS=.data> 258 <STATIC.OBJECT=.data:t> 259 <END.STATIC.OBJECTS> 260 <FOREACH.STATIC.LIBRARIES=.data> 261 <STATIC.LIBRARY=.data:t> 262 <END.STATIC.LIBRARIES> 263 . = ALIGN(4); 264 SDK_OVERLAY_DIGEST =.; 265 # NO DIGEST 266 SDK_OVERLAY_DIGEST_END =.; 267 #:::::::::: data 268 . = ALIGN(32); 269 SDK_STATIC_DATA_END =.; 270 SDK_STATIC_END =.; 271 272 SDK_STATIC_TEXT_SIZE = SDK_STATIC_TEXT_END - SDK_STATIC_TEXT_START; 273 SDK_STATIC_DATA_SIZE = SDK_STATIC_DATA_END - SDK_STATIC_DATA_START; 274 SDK_STATIC_SIZE = SDK_STATIC_END - SDK_STATIC_START; 275 __sinit__ = SDK_STATIC_SINIT_START; # for static initializer 276 __exception_table_start__ = SDK_STATIC_ETABLE_START; # for exception table 277 __exception_table_end__ = SDK_STATIC_ETABLE_END; # for exception table 278 } > <STATIC.NAME> 279 280 .<STATIC.NAME>.bss: 281 { 282 ALIGNALL(4); . = ALIGN(32); 283 <IF.NITRO_LCFSPEC.GE.2> 284 <FOREACH.STATIC.SEARCHSYMBOLS> 285 SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>; 286 <END.STATIC.SEARCHSYMBOLS> 287 <ENDIF> 288 # 289 # BSS BLOCK 290 # 291 SDK_STATIC_BSS_START =.; 292 #:::::::::: bss 293 <FOREACH.STATIC.OBJECTS=.sbss> 294 <STATIC.OBJECT=.sbss:t> 295 <END.STATIC.OBJECTS> 296 <FOREACH.STATIC.LIBRARIES=.sbss> 297 <STATIC.LIBRARY=.sbss:t> 298 <END.STATIC.LIBRARIES> 299 . = ALIGN(4); 300 <FOREACH.STATIC.OBJECTS=.bss> 301 <STATIC.OBJECT=.bss:t> 302 <END.STATIC.OBJECTS> 303 <FOREACH.STATIC.LIBRARIES=.bss> 304 <STATIC.LIBRARY=.bss:t> 305 <END.STATIC.LIBRARIES> 306 . = ALIGN(4); 307 #:::::::::: bss 308 . = ALIGN(32); 309 SDK_STATIC_BSS_END = .; 310 SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START; 311 312 } >> <STATIC.NAME> 313 314 315 ############################ AUTOLOADS ############################## 316 SDK_AUTOLOAD.ITCM.START = 0x01ff8000; 317 SDK_AUTOLOAD.ITCM.END = SDK_AUTOLOAD.ITCM.START; 318 SDK_AUTOLOAD.ITCM.BSS_END = SDK_AUTOLOAD.ITCM.START; 319 SDK_AUTOLOAD.ITCM.SIZE = 0; 320 SDK_AUTOLOAD.ITCM.BSS_SIZE = 0; 321 SDK_AUTOLOAD.DTCM.START = 0x027e0000; 322 SDK_AUTOLOAD.DTCM.END = SDK_AUTOLOAD.DTCM.START; 323 SDK_AUTOLOAD.DTCM.BSS_END = SDK_AUTOLOAD.DTCM.START; 324 SDK_AUTOLOAD.DTCM.SIZE = 0; 325 SDK_AUTOLOAD.DTCM.BSS_SIZE = 0; 326 SDK_AUTOLOAD_START = SDK_STATIC_END; 327 SDK_AUTOLOAD_SIZE = 0; 328 SDK_AUTOLOAD_NUMBER = <NUMBER.AUTOLOADS>; 329 330<FOREACH.AUTOLOADS> 331 .<AUTOLOAD.NAME>: 332 { 333 ALIGNALL(4); . = ALIGN(32); 334 <IF.NITRO_LCFSPEC.GE.2> 335 <FOREACH.AUTOLOAD.SEARCHSYMBOLS> 336 SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>; 337 <END.AUTOLOAD.SEARCHSYMBOLS> 338 <ENDIF> 339 # 340 # TEXT BLOCK: READ ONLY 341 # 342 SDK_AUTOLOAD_<AUTOLOAD.NAME>_ID =<AUTOLOAD.ID>; 343 SDK_AUTOLOAD.<AUTOLOAD.NAME>.ID =<AUTOLOAD.ID>; 344 SDK_AUTOLOAD.<AUTOLOAD.NAME>.START =.; 345 SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START =.; 346 #:::::::::: text/rodata 347 <FOREACH.AUTOLOAD.FORCES> 348 FORCE_OBJECT<AUTOLOAD.FORCE> 349 <END.AUTOLOAD.FORCES> 350 <FOREACH.AUTOLOAD.OBJECTS=.text> 351 <AUTOLOAD.OBJECT=.text:t> 352 <END.AUTOLOAD.OBJECTS> 353 <FOREACH.AUTOLOAD.LIBRARIES=.text> 354 <AUTOLOAD.LIBRARY=.text:t> 355 <END.AUTOLOAD.LIBRARIES> 356 . = ALIGN(4); 357 <FOREACH.AUTOLOAD.OBJECTS=.itcm> 358 <AUTOLOAD.OBJECT=.itcm:t> 359 <END.AUTOLOAD.OBJECTS> 360 <FOREACH.AUTOLOAD.LIBRARIES=.itcm> 361 <AUTOLOAD.LIBRARY=.itcm:t> 362 <END.AUTOLOAD.LIBRARIES> 363 . = ALIGN(4); 364 <FOREACH.AUTOLOAD.OBJECTS=.rodata> 365 <AUTOLOAD.OBJECT=.rodata:t> 366 <END.AUTOLOAD.OBJECTS> 367 <FOREACH.AUTOLOAD.LIBRARIES=.rodata> 368 <AUTOLOAD.LIBRARY=.rodata:t> 369 <END.AUTOLOAD.LIBRARIES> 370 . = ALIGN(4); 371 #:::::::::: text/rodata 372 SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END =.; 373 374 # 375 # DATA BLOCK: READ WRITE BLOCK 376 # 377 SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START =.; 378 #:::::::::: data 379 <FOREACH.AUTOLOAD.OBJECTS=.sdata> 380 <AUTOLOAD.OBJECT=.sdata:t> 381 <END.AUTOLOAD.OBJECTS> 382 <FOREACH.AUTOLOAD.LIBRARIES=.sdata> 383 <AUTOLOAD.LIBRARY=.sdata:t> 384 <END.AUTOLOAD.LIBRARIES> 385 . = ALIGN(4); 386 <FOREACH.AUTOLOAD.OBJECTS=.data> 387 <AUTOLOAD.OBJECT=.data:t> 388 <END.AUTOLOAD.OBJECTS> 389 <FOREACH.AUTOLOAD.LIBRARIES=.data> 390 <AUTOLOAD.LIBRARY=.data:t> 391 <END.AUTOLOAD.LIBRARIES> 392 . = ALIGN(4); 393 <FOREACH.AUTOLOAD.OBJECTS=.dtcm> 394 <AUTOLOAD.OBJECT=.dtcm:t> 395 <END.AUTOLOAD.OBJECTS> 396 <FOREACH.AUTOLOAD.LIBRARIES=.dtcm> 397 <AUTOLOAD.LIBRARY=.dtcm:t> 398 <END.AUTOLOAD.LIBRARIES> 399 . = ALIGN(4); 400 #:::::::::: data 401 . = ALIGN(32); 402 SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END =.; 403 SDK_AUTOLOAD.<AUTOLOAD.NAME>.END =.; 404 405 SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START; 406 SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START; 407 SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.START; 408 SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE; 409 410 } > <AUTOLOAD.NAME> 411 412 .<AUTOLOAD.NAME>.bss: 413 { 414 ALIGNALL(4); . = ALIGN(32); 415 <IF.NITRO_LCFSPEC.GE.2> 416 <FOREACH.AUTOLOAD.SEARCHSYMBOLS> 417 SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>; 418 <END.AUTOLOAD.SEARCHSYMBOLS> 419 <ENDIF> 420 # 421 # BSS BLOCK 422 # 423 SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START = .; 424 #:::::::::: bss 425 <FOREACH.AUTOLOAD.OBJECTS=.sbss> 426 <AUTOLOAD.OBJECT=.sbss:t> 427 <END.AUTOLOAD.OBJECTS> 428 <FOREACH.AUTOLOAD.LIBRARIES=.sbss> 429 <AUTOLOAD.LIBRARY=.sbss:t> 430 <END.AUTOLOAD.LIBRARIES> 431 . = ALIGN(4); 432 <FOREACH.AUTOLOAD.OBJECTS=.bss> 433 <AUTOLOAD.OBJECT=.bss:t> 434 <END.AUTOLOAD.OBJECTS> 435 <FOREACH.AUTOLOAD.LIBRARIES=.bss> 436 <AUTOLOAD.LIBRARY=.bss:t> 437 <END.AUTOLOAD.LIBRARIES> 438 . = ALIGN(4); 439 <FOREACH.AUTOLOAD.OBJECTS=.dtcm> 440 <AUTOLOAD.OBJECT=.dtcm.bss:t> 441 <END.AUTOLOAD.OBJECTS> 442 <FOREACH.AUTOLOAD.LIBRARIES=.dtcm> 443 <AUTOLOAD.LIBRARY=.dtcm.bss:t> 444 <END.AUTOLOAD.LIBRARIES> 445 . = ALIGN(4); 446 <FOREACH.AUTOLOAD.OBJECTS=.itcm> 447 <AUTOLOAD.OBJECT=.itcm.bss:t> 448 <END.AUTOLOAD.OBJECTS> 449 <FOREACH.AUTOLOAD.LIBRARIES=.itcm> 450 <AUTOLOAD.LIBRARY=.itcm.bss:t> 451 <END.AUTOLOAD.LIBRARIES> 452 . = ALIGN(4); 453 #:::::::::: bss 454 . = ALIGN(32); 455 SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END = .; 456 457 SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START; 458 459 } >> <AUTOLOAD.NAME> 460 461<END.AUTOLOADS> 462 463 SDK_AUTOLOAD_ITCM_START = SDK_AUTOLOAD.ITCM.START; 464 SDK_AUTOLOAD_ITCM_END = SDK_AUTOLOAD.ITCM.END; 465 SDK_AUTOLOAD_ITCM_BSS_END = SDK_AUTOLOAD.ITCM.BSS_END; 466 SDK_AUTOLOAD_ITCM_SIZE = SDK_AUTOLOAD.ITCM.SIZE; 467 SDK_AUTOLOAD_ITCM_BSS_SIZE = SDK_AUTOLOAD.ITCM.BSS_SIZE; 468 SDK_AUTOLOAD_DTCM_START = SDK_AUTOLOAD.DTCM.START; 469 SDK_AUTOLOAD_DTCM_END = SDK_AUTOLOAD.DTCM.END; 470 SDK_AUTOLOAD_DTCM_BSS_END = SDK_AUTOLOAD.DTCM.BSS_END; 471 SDK_AUTOLOAD_DTCM_SIZE = SDK_AUTOLOAD.DTCM.SIZE; 472 SDK_AUTOLOAD_DTCM_BSS_SIZE = SDK_AUTOLOAD.DTCM.BSS_SIZE; 473 474 ############################ AUTOLOAD_INFO ########################## 475 .binary.AUTOLOAD_INFO: 476 { 477<FOREACH.AUTOLOADS> 478 WRITEW ADDR(.<AUTOLOAD.NAME>); 479 WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE; 480 WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE; 481<END.AUTOLOADS> 482 } > binary.AUTOLOAD_INFO 483 484 SDK_AUTOLOAD_LIST = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE; 485 SDK_AUTOLOAD_LIST_END = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); 486 SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); 487 488 ############################ STATIC_FOOTER ########################## 489 .binary.STATIC_FOOTER: 490 { 491 WRITEW 0xdec00621; # LE(0x2106C0DE) = NITRO CODE 492 WRITEW _start_ModuleParams - ADDR(.<STATIC.NAME>); 493 WRITEW 0; # NO DIGEST 494 } > binary.STATIC_FOOTER 495 496 ############################ OVERLAYS ############################### 497 SDK_OVERLAY_NUMBER = <NUMBER.OVERLAYS>; 498 499<FOREACH.OVERLAYS> 500 .<OVERLAY.NAME>:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF> 501 { 502 ALIGNALL(4); . = ALIGN(32); 503 <IF.NITRO_LCFSPEC.GE.2> 504 <FOREACH.OVERLAY.SEARCHSYMBOLS> 505 SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>; 506 <END.OVERLAY.SEARCHSYMBOLS> 507 <ENDIF> 508 # 509 # TEXT BLOCK: READ ONLY 510 # 511 SDK_OVERLAY_<OVERLAY.NAME>_ID =<OVERLAY.ID>; ### SEGMENT <OVERLAY.NAME> OVERLAY ID 512 SDK_OVERLAY.<OVERLAY.NAME>.ID =<OVERLAY.ID>; 513 SDK_OVERLAY.<OVERLAY.NAME>.START =.; 514 SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START =.; 515 #:::::::::: text/rodata 516 <FOREACH.OVERLAY.FORCES> 517 FORCE_OBJECT<OVERLAY.FORCE> 518 <END.OVERLAY.FORCES> 519 <FOREACH.OVERLAY.OBJECTS=.text> 520 <OVERLAY.OBJECT=.text:t> 521 <END.OVERLAY.OBJECTS> 522 <FOREACH.OVERLAY.LIBRARIES=.text> 523 <OVERLAY.LIBRARY=.text:t> 524 <END.OVERLAY.LIBRARIES> 525 . = ALIGN(4); 526 <FOREACH.OVERLAY.OBJECTS=.rodata> 527 <OVERLAY.OBJECT=.rodata:t> 528 <END.OVERLAY.OBJECTS> 529 <FOREACH.OVERLAY.LIBRARIES=.rodata> 530 <OVERLAY.LIBRARY=.rodata:t> 531 <END.OVERLAY.LIBRARIES> 532 . = ALIGN(4); 533 <FOREACH.OVERLAY.OBJECTS=.init> 534 <OVERLAY.OBJECT=.init:t> 535 <END.OVERLAY.OBJECTS> 536 <FOREACH.OVERLAY.LIBRARIES=.init> 537 <OVERLAY.LIBRARY=.init:t> 538 <END.OVERLAY.LIBRARIES> 539 . = ALIGN(4); 540 SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START =.; 541 #:::::::::: ctor 542 <FOREACH.OVERLAY.OBJECTS=.ctor> 543 <OVERLAY.OBJECT=.ctor:t> 544 <END.OVERLAY.OBJECTS> 545 <FOREACH.OVERLAY.LIBRARIES=.ctor> 546 <OVERLAY.LIBRARY=.ctor:t> 547 <END.OVERLAY.LIBRARIES> 548 <FOREACH.OVERLAY.OBJECTS=.sinit> 549 <OVERLAY.OBJECT=.sinit:t> 550 <END.OVERLAY.OBJECTS> 551 <FOREACH.OVERLAY.LIBRARIES=.sinit> 552 <OVERLAY.LIBRARY=.sinit:t> 553 <END.OVERLAY.LIBRARIES> 554 WRITEW 0; 555 #:::::::::: ctor 556 SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END =.; 557 558 #:::::::::: text/rodata 559 . = ALIGN(32); 560 SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END =.; 561 562 # 563 # DATA BLOCK: READ WRITE 564 # 565 SDK_OVERLAY.<OVERLAY.NAME>.DATA_START =.; 566 #:::::::::: data 567 <FOREACH.OVERLAY.OBJECTS=.sdata> 568 <OVERLAY.OBJECT=.sdata:t> 569 <END.OVERLAY.OBJECTS> 570 <FOREACH.OVERLAY.LIBRARIES=.sdata> 571 <OVERLAY.LIBRARY=.sdata:t> 572 <END.OVERLAY.LIBRARIES> 573 . = ALIGN(4); 574 <FOREACH.OVERLAY.OBJECTS=.data> 575 <OVERLAY.OBJECT=.data:t> 576 <END.OVERLAY.OBJECTS> 577 <FOREACH.OVERLAY.LIBRARIES=.data> 578 <OVERLAY.LIBRARY=.data:t> 579 <END.OVERLAY.LIBRARIES> 580 . = ALIGN(4); 581 #:::::::::: data 582 . = ALIGN(32); 583 SDK_OVERLAY.<OVERLAY.NAME>.DATA_END =.; 584 SDK_OVERLAY.<OVERLAY.NAME>.END =.; 585 586 SDK_OVERLAY.<OVERLAY.NAME>.TEXT_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END - SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START; 587 SDK_OVERLAY.<OVERLAY.NAME>.DATA_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.DATA_END - SDK_OVERLAY.<OVERLAY.NAME>.DATA_START; 588 SDK_OVERLAY.<OVERLAY.NAME>.SIZE = SDK_OVERLAY.<OVERLAY.NAME>.END - SDK_OVERLAY.<OVERLAY.NAME>.START; 589 590 } > <OVERLAY.NAME> 591 592 .<OVERLAY.NAME>.bss:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF> 593 { 594 ALIGNALL(4); . = ALIGN(32); 595 <IF.NITRO_LCFSPEC.GE.2> 596 <FOREACH.OVERLAY.SEARCHSYMBOLS> 597 SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>; 598 <END.OVERLAY.SEARCHSYMBOLS> 599 <ENDIF> 600 # 601 # BSS BLOCK 602 # 603 SDK_OVERLAY.<OVERLAY.NAME>.BSS_START = .; 604 #:::::::::: bss 605 <FOREACH.OVERLAY.OBJECTS=.bss> 606 <OVERLAY.OBJECT=.bss:t> 607 <END.OVERLAY.OBJECTS> 608 <FOREACH.OVERLAY.LIBRARIES=.bss> 609 <OVERLAY.LIBRARY=.bss:t> 610 <END.OVERLAY.LIBRARIES> 611 . = ALIGN(4); 612 <FOREACH.OVERLAY.OBJECTS=.sbss> 613 <OVERLAY.OBJECT=.sbss:t> 614 <END.OVERLAY.OBJECTS> 615 <FOREACH.OVERLAY.LIBRARIES=.sbss> 616 <OVERLAY.LIBRARY=.sbss:t> 617 <END.OVERLAY.LIBRARIES> 618 . = ALIGN(4); 619 #:::::::::: bss 620 . = ALIGN(32); 621 SDK_OVERLAY.<OVERLAY.NAME>.BSS_END = .; 622 623 SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.BSS_END - SDK_OVERLAY.<OVERLAY.NAME>.BSS_START; 624 625 } >> <OVERLAY.NAME> 626 627<END.OVERLAYS> 628 629 ############################ MAIN EX ################################## 630 # MAIN EX Area 631 .dummy.MAIN_EX: 632 { 633 . = ALIGN(32); 634 } > dummy.MAIN_EX 635 636 ############################ ARENA ################################## 637 .arena.MAIN: 638 { 639 . = ALIGN(32); 640 SDK_SECTION_ARENA_START =.; 641 } > arena.MAIN 642 643 .arena.MAIN_EX: 644 { 645 . = ALIGN(32); 646 SDK_SECTION_ARENA_EX_START =.; 647 } > arena.MAIN_EX 648 649 .arena.ITCM: 650 { 651 . = ALIGN(32); 652 SDK_SECTION_ARENA_ITCM_START =.; 653 } > arena.ITCM 654 655 .arena.DTCM: 656 { 657 . = ALIGN(32); 658 SDK_SECTION_ARENA_DTCM_START =.; 659 } > arena.DTCM 660 661 ############################ OVERLAYDEFS ############################ 662 .<PROPERTY.OVERLAYDEFS>: 663 { 664 ### <STATIC.NAME> module information 665 WRITEW ADDR(.<STATIC.NAME>); # load address 666 WRITEW _start; # entry address 667 WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE; # size of module 668 WRITEW _start_AutoloadDoneCallback; # callback autoload done 669 670 ### overlay filename 671 <FOREACH.OVERLAYS> 672 WRITES ("<OVERLAY.NAME><PROPERTY.SUFFIX>"); # Overlay <OVERLAY.ID> 673 <END.OVERLAYS> 674 675 } > <PROPERTY.OVERLAYDEFS> 676 677 678 ############################ OVERLAYTABLE ########################### 679 .<PROPERTY.OVERLAYTABLE>: 680 { 681 <FOREACH.OVERLAYS> 682 # Overlay <OVERLAY.ID> 683 WRITEW <OVERLAY.ID>; # overlay ID 684 WRITEW ADDR(.<OVERLAY.NAME>); # load address 685 WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SIZE; # size of module 686 WRITEW SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE; # size of bss 687 WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START; # start address of static init 688 WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END; # end address of static init 689 WRITEW <OVERLAY.ID>; # ROM file ID 690 WRITEW 0; # Reserved 691 692 <END.OVERLAYS> 693 694 } > <PROPERTY.OVERLAYTABLE> 695 696 697 ############################ OTHERS ################################# 698 SDK_MAIN_ARENA_LO = SDK_SECTION_ARENA_START; 699 SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>; # allocated in DTCM 700 SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>; # when 0 means all remains of DTCM 701 702 # Module filelist 703 .binary.MODULE_FILES: 704 { 705 WRITES ("<STATIC.NAME><PROPERTY.SUFFIX>"); 706 WRITES ("<PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>"); 707 WRITES ("<PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>"); 708 } > binary.MODULE_FILES 709 710 # Compression Spec List 711 .binary.COMP_SPEC_LIST: 712 { 713 <FOREACH.OVERLAYS> 714 WRITES ("<OVERLAY.NAME><PROPERTY.SUFFIX>,<OVERLAY.COMPRESS>"); # Overlay <OVERLAY.ID> 715 <END.OVERLAYS> 716 } > binary.COMP_SPEC_LIST 717 718 # ITCM/DTCM size checker => check AUTOLOAD_ITCM/DTCM 719 .check.ITCM: 720 { 721 . = . + SDK_AUTOLOAD_ITCM_SIZE + SDK_AUTOLOAD_ITCM_BSS_SIZE; 722 } > check.ITCM 723 724 SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1; 725 .check.DTCM: 726 { 727 . = . + SDK_AUTOLOAD_DTCM_SIZE + SDK_AUTOLOAD_DTCM_BSS_SIZE; 728 . = . + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN; 729 } > check.DTCM 730 731} 732