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