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