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