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