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