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