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