1#--------------------------------------------------------------------------- 2# Project: NitroSDK - tools - makelcf 3# File: ARM9-TS.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.lcf.template,v $ 14# Revision 1.37 2006/07/20 07:29:12 kitase_hirotake 15# Added the description explaining the version section 16# 17# Revision 1.36 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.35 2006/05/10 03:19:47 yasu 23# Added support for the CodeWarrior 2.x overlay expansion 24# 25# Revision 1.34 2006/04/06 09:02:36 kitase_hirotake 26# Support for .itcm.bss and .dtcm.bss 27# 28# Revision 1.33 2006/03/30 23:59:22 yasu 29# Updated copyright year 30# 31# Revision 1.32 2006/03/29 13:14:22 yasu 32# Support for overlays in CWVER 2.x 33# 34# Revision 1.31 2005/11/24 01:16:47 yada 35# Changed start address of mainEX arena from 0x2400000 to 0x23e0000 36# 37# Revision 1.30 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.29 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.28 2005/08/26 11:22:16 yasu 44# Overlay support for ITCM/DTCM 45# 46# Revision 1.27 2005/06/20 12:29:20 yasu 47# Changed Surffix to Suffix 48# 49# Revision 1.26 2005/06/14 09:03:42 yada 50# Fixed around minus value of SDK_STACKSIZE. 51# 52# Revision 1.25 2005/04/13 12:51:00 terui 53# Changed SDK_AUTOLOAD.DTCM.START 0x027c0000 to 0x027e0000 54# 55# Revision 1.24 2005/03/30 00:02:14 yosizaki 56# Fixed copyright header 57# 58# Revision 1.23 2005/03/25 12:54:59 yasu 59# Added the .version section 60# 61# Revision 1.22 2004/10/03 02:00:56 yasu 62# Output component file list for compstatic tool 63# 64# Revision 1.21 2004/09/27 21:21:40 PM yasu 65# Added support for .sinit 66# 67# Revision 1.20 2004/09/09 11:49:20 yasu 68# Added support for compstatic in default 69# 70# Revision 1.19 2004/09/06 06:40:00 yasu 71# Added labels for digest 72# 73# Revision 1.18 2004/08/20 06:19:59 yasu 74# DTCM moves to 0x027c0000 at default 75# 76# Revision 1.17 2004/08/02 10:38:53 yasu 77# Added autoload-done callback address in overlaydefs 78# 79# Revision 1.16 2004/07/26 02:22:32 yasu 80# Changed DTCM address to 0x023c0000 81# 82# Revision 1.15 2004/07/26 00:08:27 yasu 83# Fixed label of exception table 84# 85# Revision 1.14 2004/07/24 05:42:25 yasu 86# Set default values for SDK_AUTOGEN_xTCM_START 87# 88# Revision 1.13 2004/07/23 11:32:14 yasu 89# Defined labels for __exception_table_start__ and _end__ 90# 91# Revision 1.12 2004/07/12 12:21:08 yasu 92# Checked size of ITCM/DTCM 93# 94# Revision 1.11 2004/07/10 04:10:26 yasu 95# Added support for command 'Library' 96# 97# Revision 1.10 2004/07/02 08:13:02 yasu 98# Added support for OBJECT( ) 99# 100# Revision 1.9 2004/07/01 12:54:38 yasu 101# Added support for ITCM/DTCM/WRAM autoload 102# 103# Revision 1.8 2004/07/01 10:41:46 yasu 104# Added support for autoload 105# 106# Revision 1.7 2004/06/02 07:35:37 yasu 107# Set libsyscall.a in FORCE_ACTIVE 108# Put NitroMain at the top of ROM image 109# 110# Revision 1.6 2004/06/02 04:56:28 yasu 111# Revised to match the new ROM map of TS 112# 113# Revision 1.5 2004/06/01 06:12:00 miya 114# Added padding at top of ROM image. 115# 116# Revision 1.4 2004/04/26 12:16:48 yasu 117# Added KEEP_SECTIONS 118# 119# Revision 1.3 2004/04/20 07:41:32 yasu 120# Set STATICINIT instead of .ctor temporarily 121# 122# Revision 1.2 2004/04/14 07:16:42 yasu 123# Added ALIGN(32) for convenience to handle cache line 124# 125# Revision 1.1 2004/04/06 01:59:54 yasu 126# Newly added 127# 128# $NoKeywords: $ 129#--------------------------------------------------------------------------- 130MEMORY 131{ 132 <STATIC.NAME> (RWX) : ORIGIN = <STATIC.ADDRESS>, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.SUFFIX> 133 <FOREACH.AUTOLOADS> 134 <AUTOLOAD.NAME> (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.SUFFIX> 135 <END.AUTOLOADS> 136 binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.SUFFIX> 137 binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.SUFFIX> 138 139 <PROPERTY.OVERLAYDEFS> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX> 140 <PROPERTY.OVERLAYTABLE> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX> 141 <FOREACH.OVERLAYS> 142 <OVERLAY.NAME> (RWXO): ORIGIN = <OVERLAY.ADDRESS>, LENGTH = 0x0 > <OVERLAY.NAME><PROPERTY.SUFFIX> 143 <END.OVERLAYS> 144 dummy.MAIN_EX (RW) : ORIGIN = 0x023e0000, LENGTH = 0x0 145 arena.MAIN (RW) : ORIGIN = AFTER(<STATIC.NAME><FOREACH.OVERLAYS=MAIN>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0 146 arena.MAIN_EX (RW) : ORIGIN = AFTER(dummy.MAIN_EX<FOREACH.OVERLAYS=MAINEX>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0 147 arena.ITCM (RW) : ORIGIN = AFTER(ITCM<FOREACH.OVERLAYS=ITCM>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0 148 arena.DTCM (RW) : ORIGIN = AFTER(DTCM<FOREACH.OVERLAYS=DTCM>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0 149 binary.MODULE_FILES (RW) : ORIGIN = 0x0, LENGTH = 0x0 > component.files 150 binary.COMP_SPEC_LIST (RW) : ORIGIN = 0x0, LENGTH = 0x0 > compspec.list 151 check.ITCM (RWX) : ORIGIN = 0x01ff8000, LENGTH = 0x08000 > itcm.check 152 check.DTCM (RW) : ORIGIN = 0x027e0000, LENGTH = 0x04000 > dtcm.check 153 check.MAIN (RW) : ORIGIN = 0x02000000, LENGTH = 0x03e0000 > main.check 154} 155 156FORCE_ACTIVE 157{ 158 SVC_SoftReset 159} 160 161KEEP_SECTION 162{ 163 .sinit 164} 165 166SECTIONS 167{ 168 ############################ STATIC ################################# 169 .<STATIC.NAME>: 170 { 171 ALIGNALL(4); . = ALIGN(32); # Fit to cache line 172 <IF.NITRO_LCFSPEC.GE.2> 173 <FOREACH.STATIC.SEARCHSYMBOLS> 174 SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>; 175 <END.STATIC.SEARCHSYMBOLS> 176 <ENDIF> 177 # 178 # TEXT BLOCK: READ ONLY 179 # 180 SDK_STATIC_START =.; 181 SDK_STATIC_TEXT_START =.; 182 #:::::::::: text/rodata 183 libsyscall.a (.text) 184 crt0.o (.text) 185 crt0.o (.rodata) 186 # 187 # Added .version section. 188 # The information included in this section will be needed for Lotcheck purposes. Be sure to leave it in this position. 189 # 190 # 191 * (.version) 192 OBJECT(NitroMain,*) 193 <FOREACH.STATIC.FORCES> 194 FORCE_OBJECT<STATIC.FORCE> 195 <END.STATIC.FORCES> 196 <FOREACH.STATIC.OBJECTS=.text> 197 <STATIC.OBJECT=.text:t> 198 <END.STATIC.OBJECTS> 199 <FOREACH.STATIC.LIBRARIES=.text> 200 <STATIC.LIBRARY=.text:t> 201 <END.STATIC.LIBRARIES> 202 . = ALIGN(4); 203 * (.exception) 204 . = ALIGN(4); 205 SDK_STATIC_ETABLE_START =.; 206 EXCEPTION 207 SDK_STATIC_ETABLE_END =.; 208 . = ALIGN(4); 209 <FOREACH.STATIC.OBJECTS=.init> 210 <STATIC.OBJECT=.init:t> 211 <END.STATIC.OBJECTS> 212 <FOREACH.STATIC.LIBRARIES=.init> 213 <STATIC.LIBRARY=.init:t> 214 <END.STATIC.LIBRARIES> 215 . = ALIGN(4); 216 <FOREACH.STATIC.OBJECTS=.rodata> 217 <STATIC.OBJECT=.rodata:t> 218 <END.STATIC.OBJECTS> 219 <FOREACH.STATIC.LIBRARIES=.rodata> 220 <STATIC.LIBRARY=.rodata:t> 221 <END.STATIC.LIBRARIES> 222 . = ALIGN(4); 223 224 SDK_STATIC_SINIT_START =.; 225 #:::::::::: ctor 226 <FOREACH.STATIC.OBJECTS=.ctor> 227 <STATIC.OBJECT=.ctor:t> 228 <END.STATIC.OBJECTS> 229 <FOREACH.STATIC.LIBRARIES=.ctor> 230 <STATIC.LIBRARY=.ctor:t> 231 <END.STATIC.LIBRARIES> 232 <FOREACH.STATIC.OBJECTS=.sinit> 233 <STATIC.OBJECT=.sinit:t> 234 <END.STATIC.OBJECTS> 235 <FOREACH.STATIC.LIBRARIES=.sinit> 236 <STATIC.LIBRARY=.sinit:t> 237 <END.STATIC.LIBRARIES> 238 WRITEW 0; 239 #:::::::::: ctor 240 SDK_STATIC_SINIT_END =.; 241 242 #:::::::::: text/rodata 243 . = ALIGN(32); 244 SDK_STATIC_TEXT_END =.; 245 246 # 247 # DATA BLOCK: READ WRITE 248 # 249 SDK_STATIC_DATA_START =.; 250 #:::::::::: data 251 <FOREACH.STATIC.OBJECTS=.sdata> 252 <STATIC.OBJECT=.sdata:t> 253 <END.STATIC.OBJECTS> 254 <FOREACH.STATIC.LIBRARIES=.sdata> 255 <STATIC.LIBRARY=.sdata:t> 256 <END.STATIC.LIBRARIES> 257 . = ALIGN(4); 258 <FOREACH.STATIC.OBJECTS=.data> 259 <STATIC.OBJECT=.data:t> 260 <END.STATIC.OBJECTS> 261 <FOREACH.STATIC.LIBRARIES=.data> 262 <STATIC.LIBRARY=.data:t> 263 <END.STATIC.LIBRARIES> 264 . = ALIGN(4); 265 SDK_OVERLAY_DIGEST =.; 266 # NO DIGEST 267 SDK_OVERLAY_DIGEST_END =.; 268 #:::::::::: data 269 . = ALIGN(32); 270 SDK_STATIC_DATA_END =.; 271 SDK_STATIC_END =.; 272 273 SDK_STATIC_TEXT_SIZE = SDK_STATIC_TEXT_END - SDK_STATIC_TEXT_START; 274 SDK_STATIC_DATA_SIZE = SDK_STATIC_DATA_END - SDK_STATIC_DATA_START; 275 SDK_STATIC_SIZE = SDK_STATIC_END - SDK_STATIC_START; 276 __sinit__ = SDK_STATIC_SINIT_START; # for static initializer 277 __exception_table_start__ = SDK_STATIC_ETABLE_START; # for exception table 278 __exception_table_end__ = SDK_STATIC_ETABLE_END; # for exception table 279 } > <STATIC.NAME> 280 281 .<STATIC.NAME>.bss: 282 { 283 ALIGNALL(4); . = ALIGN(32); 284 <IF.NITRO_LCFSPEC.GE.2> 285 <FOREACH.STATIC.SEARCHSYMBOLS> 286 SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>; 287 <END.STATIC.SEARCHSYMBOLS> 288 <ENDIF> 289 # 290 # BSS BLOCK 291 # 292 SDK_STATIC_BSS_START =.; 293 #:::::::::: bss 294 <FOREACH.STATIC.OBJECTS=.sbss> 295 <STATIC.OBJECT=.sbss:t> 296 <END.STATIC.OBJECTS> 297 <FOREACH.STATIC.LIBRARIES=.sbss> 298 <STATIC.LIBRARY=.sbss:t> 299 <END.STATIC.LIBRARIES> 300 . = ALIGN(4); 301 <FOREACH.STATIC.OBJECTS=.bss> 302 <STATIC.OBJECT=.bss:t> 303 <END.STATIC.OBJECTS> 304 <FOREACH.STATIC.LIBRARIES=.bss> 305 <STATIC.LIBRARY=.bss:t> 306 <END.STATIC.LIBRARIES> 307 . = ALIGN(4); 308 #:::::::::: bss 309 . = ALIGN(32); 310 SDK_STATIC_BSS_END = .; 311 SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START; 312 313 } >> <STATIC.NAME> 314 315 316 ############################ AUTOLOADS ############################## 317 SDK_AUTOLOAD.ITCM.START = 0x01ff8000; 318 SDK_AUTOLOAD.ITCM.END = SDK_AUTOLOAD.ITCM.START; 319 SDK_AUTOLOAD.ITCM.BSS_END = SDK_AUTOLOAD.ITCM.START; 320 SDK_AUTOLOAD.ITCM.SIZE = 0; 321 SDK_AUTOLOAD.ITCM.BSS_SIZE = 0; 322 SDK_AUTOLOAD.DTCM.START = 0x027e0000; 323 SDK_AUTOLOAD.DTCM.END = SDK_AUTOLOAD.DTCM.START; 324 SDK_AUTOLOAD.DTCM.BSS_END = SDK_AUTOLOAD.DTCM.START; 325 SDK_AUTOLOAD.DTCM.SIZE = 0; 326 SDK_AUTOLOAD.DTCM.BSS_SIZE = 0; 327 SDK_AUTOLOAD_START = SDK_STATIC_END; 328 SDK_AUTOLOAD_SIZE = 0; 329 SDK_AUTOLOAD_NUMBER = <NUMBER.AUTOLOADS>; 330 331<FOREACH.AUTOLOADS> 332 .<AUTOLOAD.NAME>: 333 { 334 ALIGNALL(4); . = ALIGN(32); 335 <IF.NITRO_LCFSPEC.GE.2> 336 <FOREACH.AUTOLOAD.SEARCHSYMBOLS> 337 SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>; 338 <END.AUTOLOAD.SEARCHSYMBOLS> 339 <ENDIF> 340 # 341 # TEXT BLOCK: READ ONLY 342 # 343 SDK_AUTOLOAD_<AUTOLOAD.NAME>_ID =<AUTOLOAD.ID>; 344 SDK_AUTOLOAD.<AUTOLOAD.NAME>.ID =<AUTOLOAD.ID>; 345 SDK_AUTOLOAD.<AUTOLOAD.NAME>.START =.; 346 SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START =.; 347 #:::::::::: text/rodata 348 <FOREACH.AUTOLOAD.FORCES> 349 FORCE_OBJECT<AUTOLOAD.FORCE> 350 <END.AUTOLOAD.FORCES> 351 <FOREACH.AUTOLOAD.OBJECTS=.text> 352 <AUTOLOAD.OBJECT=.text:t> 353 <END.AUTOLOAD.OBJECTS> 354 <FOREACH.AUTOLOAD.LIBRARIES=.text> 355 <AUTOLOAD.LIBRARY=.text:t> 356 <END.AUTOLOAD.LIBRARIES> 357 . = ALIGN(4); 358 <FOREACH.AUTOLOAD.OBJECTS=.itcm> 359 <AUTOLOAD.OBJECT=.itcm:t> 360 <END.AUTOLOAD.OBJECTS> 361 <FOREACH.AUTOLOAD.LIBRARIES=.itcm> 362 <AUTOLOAD.LIBRARY=.itcm:t> 363 <END.AUTOLOAD.LIBRARIES> 364 . = ALIGN(4); 365 <FOREACH.AUTOLOAD.OBJECTS=.rodata> 366 <AUTOLOAD.OBJECT=.rodata:t> 367 <END.AUTOLOAD.OBJECTS> 368 <FOREACH.AUTOLOAD.LIBRARIES=.rodata> 369 <AUTOLOAD.LIBRARY=.rodata:t> 370 <END.AUTOLOAD.LIBRARIES> 371 . = ALIGN(4); 372 #:::::::::: text/rodata 373 SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END =.; 374 375 # 376 # DATA BLOCK: READ WRITE BLOCK 377 # 378 SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START =.; 379 #:::::::::: data 380 <FOREACH.AUTOLOAD.OBJECTS=.sdata> 381 <AUTOLOAD.OBJECT=.sdata:t> 382 <END.AUTOLOAD.OBJECTS> 383 <FOREACH.AUTOLOAD.LIBRARIES=.sdata> 384 <AUTOLOAD.LIBRARY=.sdata:t> 385 <END.AUTOLOAD.LIBRARIES> 386 . = ALIGN(4); 387 <FOREACH.AUTOLOAD.OBJECTS=.data> 388 <AUTOLOAD.OBJECT=.data:t> 389 <END.AUTOLOAD.OBJECTS> 390 <FOREACH.AUTOLOAD.LIBRARIES=.data> 391 <AUTOLOAD.LIBRARY=.data:t> 392 <END.AUTOLOAD.LIBRARIES> 393 . = ALIGN(4); 394 <FOREACH.AUTOLOAD.OBJECTS=.dtcm> 395 <AUTOLOAD.OBJECT=.dtcm:t> 396 <END.AUTOLOAD.OBJECTS> 397 <FOREACH.AUTOLOAD.LIBRARIES=.dtcm> 398 <AUTOLOAD.LIBRARY=.dtcm:t> 399 <END.AUTOLOAD.LIBRARIES> 400 . = ALIGN(4); 401 #:::::::::: data 402 . = ALIGN(32); 403 SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END =.; 404 SDK_AUTOLOAD.<AUTOLOAD.NAME>.END =.; 405 406 SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START; 407 SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START; 408 SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.START; 409 SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE; 410 411 } > <AUTOLOAD.NAME> 412 413 .<AUTOLOAD.NAME>.bss: 414 { 415 ALIGNALL(4); . = ALIGN(32); 416 <IF.NITRO_LCFSPEC.GE.2> 417 <FOREACH.AUTOLOAD.SEARCHSYMBOLS> 418 SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>; 419 <END.AUTOLOAD.SEARCHSYMBOLS> 420 <ENDIF> 421 # 422 # BSS BLOCK 423 # 424 SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START = .; 425 #:::::::::: bss 426 <FOREACH.AUTOLOAD.OBJECTS=.sbss> 427 <AUTOLOAD.OBJECT=.sbss:t> 428 <END.AUTOLOAD.OBJECTS> 429 <FOREACH.AUTOLOAD.LIBRARIES=.sbss> 430 <AUTOLOAD.LIBRARY=.sbss:t> 431 <END.AUTOLOAD.LIBRARIES> 432 . = ALIGN(4); 433 <FOREACH.AUTOLOAD.OBJECTS=.bss> 434 <AUTOLOAD.OBJECT=.bss:t> 435 <END.AUTOLOAD.OBJECTS> 436 <FOREACH.AUTOLOAD.LIBRARIES=.bss> 437 <AUTOLOAD.LIBRARY=.bss:t> 438 <END.AUTOLOAD.LIBRARIES> 439 . = ALIGN(4); 440 <FOREACH.AUTOLOAD.OBJECTS=.dtcm> 441 <AUTOLOAD.OBJECT=.dtcm.bss:t> 442 <END.AUTOLOAD.OBJECTS> 443 <FOREACH.AUTOLOAD.LIBRARIES=.dtcm> 444 <AUTOLOAD.LIBRARY=.dtcm.bss:t> 445 <END.AUTOLOAD.LIBRARIES> 446 . = ALIGN(4); 447 <FOREACH.AUTOLOAD.OBJECTS=.itcm> 448 <AUTOLOAD.OBJECT=.itcm.bss:t> 449 <END.AUTOLOAD.OBJECTS> 450 <FOREACH.AUTOLOAD.LIBRARIES=.itcm> 451 <AUTOLOAD.LIBRARY=.itcm.bss:t> 452 <END.AUTOLOAD.LIBRARIES> 453 . = ALIGN(4); 454 #:::::::::: bss 455 . = ALIGN(32); 456 SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END = .; 457 458 SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START; 459 460 } >> <AUTOLOAD.NAME> 461 462<END.AUTOLOADS> 463 464 SDK_AUTOLOAD_ITCM_START = SDK_AUTOLOAD.ITCM.START; 465 SDK_AUTOLOAD_ITCM_END = SDK_AUTOLOAD.ITCM.END; 466 SDK_AUTOLOAD_ITCM_BSS_END = SDK_AUTOLOAD.ITCM.BSS_END; 467 SDK_AUTOLOAD_ITCM_SIZE = SDK_AUTOLOAD.ITCM.SIZE; 468 SDK_AUTOLOAD_ITCM_BSS_SIZE = SDK_AUTOLOAD.ITCM.BSS_SIZE; 469 SDK_AUTOLOAD_DTCM_START = SDK_AUTOLOAD.DTCM.START; 470 SDK_AUTOLOAD_DTCM_END = SDK_AUTOLOAD.DTCM.END; 471 SDK_AUTOLOAD_DTCM_BSS_END = SDK_AUTOLOAD.DTCM.BSS_END; 472 SDK_AUTOLOAD_DTCM_SIZE = SDK_AUTOLOAD.DTCM.SIZE; 473 SDK_AUTOLOAD_DTCM_BSS_SIZE = SDK_AUTOLOAD.DTCM.BSS_SIZE; 474 475 ############################ AUTOLOAD_INFO ########################## 476 .binary.AUTOLOAD_INFO: 477 { 478<FOREACH.AUTOLOADS> 479 WRITEW ADDR(.<AUTOLOAD.NAME>); 480 WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE; 481 WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE; 482<END.AUTOLOADS> 483 } > binary.AUTOLOAD_INFO 484 485 SDK_AUTOLOAD_LIST = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE; 486 SDK_AUTOLOAD_LIST_END = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); 487 SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); 488 489 ############################ STATIC_FOOTER ########################## 490 .binary.STATIC_FOOTER: 491 { 492 WRITEW 0xdec00621; # LE(0x2106C0DE) = NITRO CODE 493 WRITEW _start_ModuleParams - ADDR(.<STATIC.NAME>); 494 WRITEW 0; # NO DIGEST 495 } > binary.STATIC_FOOTER 496 497 ############################ OVERLAYS ############################### 498 SDK_OVERLAY_NUMBER = <NUMBER.OVERLAYS>; 499 500<FOREACH.OVERLAYS> 501 .<OVERLAY.NAME>:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF> 502 { 503 ALIGNALL(4); . = ALIGN(32); 504 <IF.NITRO_LCFSPEC.GE.2> 505 <FOREACH.OVERLAY.SEARCHSYMBOLS> 506 SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>; 507 <END.OVERLAY.SEARCHSYMBOLS> 508 <ENDIF> 509 # 510 # TEXT BLOCK: READ ONLY 511 # 512 SDK_OVERLAY_<OVERLAY.NAME>_ID =<OVERLAY.ID>; ### SEGMENT <OVERLAY.NAME> OVERLAY ID 513 SDK_OVERLAY.<OVERLAY.NAME>.ID =<OVERLAY.ID>; 514 SDK_OVERLAY.<OVERLAY.NAME>.START =.; 515 SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START =.; 516 #:::::::::: text/rodata 517 <FOREACH.OVERLAY.FORCES> 518 FORCE_OBJECT<OVERLAY.FORCE> 519 <END.OVERLAY.FORCES> 520 <FOREACH.OVERLAY.OBJECTS=.text> 521 <OVERLAY.OBJECT=.text:t> 522 <END.OVERLAY.OBJECTS> 523 <FOREACH.OVERLAY.LIBRARIES=.text> 524 <OVERLAY.LIBRARY=.text:t> 525 <END.OVERLAY.LIBRARIES> 526 . = ALIGN(4); 527 <FOREACH.OVERLAY.OBJECTS=.rodata> 528 <OVERLAY.OBJECT=.rodata:t> 529 <END.OVERLAY.OBJECTS> 530 <FOREACH.OVERLAY.LIBRARIES=.rodata> 531 <OVERLAY.LIBRARY=.rodata:t> 532 <END.OVERLAY.LIBRARIES> 533 . = ALIGN(4); 534 <FOREACH.OVERLAY.OBJECTS=.init> 535 <OVERLAY.OBJECT=.init:t> 536 <END.OVERLAY.OBJECTS> 537 <FOREACH.OVERLAY.LIBRARIES=.init> 538 <OVERLAY.LIBRARY=.init:t> 539 <END.OVERLAY.LIBRARIES> 540 . = ALIGN(4); 541 SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START =.; 542 #:::::::::: ctor 543 <FOREACH.OVERLAY.OBJECTS=.ctor> 544 <OVERLAY.OBJECT=.ctor:t> 545 <END.OVERLAY.OBJECTS> 546 <FOREACH.OVERLAY.LIBRARIES=.ctor> 547 <OVERLAY.LIBRARY=.ctor:t> 548 <END.OVERLAY.LIBRARIES> 549 <FOREACH.OVERLAY.OBJECTS=.sinit> 550 <OVERLAY.OBJECT=.sinit:t> 551 <END.OVERLAY.OBJECTS> 552 <FOREACH.OVERLAY.LIBRARIES=.sinit> 553 <OVERLAY.LIBRARY=.sinit:t> 554 <END.OVERLAY.LIBRARIES> 555 WRITEW 0; 556 #:::::::::: ctor 557 SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END =.; 558 559 #:::::::::: text/rodata 560 . = ALIGN(32); 561 SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END =.; 562 563 # 564 # DATA BLOCK: READ WRITE 565 # 566 SDK_OVERLAY.<OVERLAY.NAME>.DATA_START =.; 567 #:::::::::: data 568 <FOREACH.OVERLAY.OBJECTS=.sdata> 569 <OVERLAY.OBJECT=.sdata:t> 570 <END.OVERLAY.OBJECTS> 571 <FOREACH.OVERLAY.LIBRARIES=.sdata> 572 <OVERLAY.LIBRARY=.sdata:t> 573 <END.OVERLAY.LIBRARIES> 574 . = ALIGN(4); 575 <FOREACH.OVERLAY.OBJECTS=.data> 576 <OVERLAY.OBJECT=.data:t> 577 <END.OVERLAY.OBJECTS> 578 <FOREACH.OVERLAY.LIBRARIES=.data> 579 <OVERLAY.LIBRARY=.data:t> 580 <END.OVERLAY.LIBRARIES> 581 . = ALIGN(4); 582 #:::::::::: data 583 . = ALIGN(32); 584 SDK_OVERLAY.<OVERLAY.NAME>.DATA_END =.; 585 SDK_OVERLAY.<OVERLAY.NAME>.END =.; 586 587 SDK_OVERLAY.<OVERLAY.NAME>.TEXT_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END - SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START; 588 SDK_OVERLAY.<OVERLAY.NAME>.DATA_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.DATA_END - SDK_OVERLAY.<OVERLAY.NAME>.DATA_START; 589 SDK_OVERLAY.<OVERLAY.NAME>.SIZE = SDK_OVERLAY.<OVERLAY.NAME>.END - SDK_OVERLAY.<OVERLAY.NAME>.START; 590 591 } > <OVERLAY.NAME> 592 593 .<OVERLAY.NAME>.bss:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF> 594 { 595 ALIGNALL(4); . = ALIGN(32); 596 <IF.NITRO_LCFSPEC.GE.2> 597 <FOREACH.OVERLAY.SEARCHSYMBOLS> 598 SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>; 599 <END.OVERLAY.SEARCHSYMBOLS> 600 <ENDIF> 601 # 602 # BSS BLOCK 603 # 604 SDK_OVERLAY.<OVERLAY.NAME>.BSS_START = .; 605 #:::::::::: bss 606 <FOREACH.OVERLAY.OBJECTS=.bss> 607 <OVERLAY.OBJECT=.bss:t> 608 <END.OVERLAY.OBJECTS> 609 <FOREACH.OVERLAY.LIBRARIES=.bss> 610 <OVERLAY.LIBRARY=.bss:t> 611 <END.OVERLAY.LIBRARIES> 612 . = ALIGN(4); 613 <FOREACH.OVERLAY.OBJECTS=.sbss> 614 <OVERLAY.OBJECT=.sbss:t> 615 <END.OVERLAY.OBJECTS> 616 <FOREACH.OVERLAY.LIBRARIES=.sbss> 617 <OVERLAY.LIBRARY=.sbss:t> 618 <END.OVERLAY.LIBRARIES> 619 . = ALIGN(4); 620 #:::::::::: bss 621 . = ALIGN(32); 622 SDK_OVERLAY.<OVERLAY.NAME>.BSS_END = .; 623 624 SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.BSS_END - SDK_OVERLAY.<OVERLAY.NAME>.BSS_START; 625 626 } >> <OVERLAY.NAME> 627 628<END.OVERLAYS> 629 630 ############################ MAIN EX ################################## 631 # MAIN EX Area 632 .dummy.MAIN_EX: 633 { 634 . = ALIGN(32); 635 } > dummy.MAIN_EX 636 637 ############################ ARENA ################################## 638 .arena.MAIN: 639 { 640 . = ALIGN(32); 641 SDK_SECTION_ARENA_START =.; 642 } > arena.MAIN 643 644 .arena.MAIN_EX: 645 { 646 . = ALIGN(32); 647 SDK_SECTION_ARENA_EX_START =.; 648 } > arena.MAIN_EX 649 650 .arena.ITCM: 651 { 652 . = ALIGN(32); 653 SDK_SECTION_ARENA_ITCM_START =.; 654 } > arena.ITCM 655 656 .arena.DTCM: 657 { 658 . = ALIGN(32); 659 SDK_SECTION_ARENA_DTCM_START =.; 660 } > arena.DTCM 661 662 ############################ OVERLAYDEFS ############################ 663 .<PROPERTY.OVERLAYDEFS>: 664 { 665 ### <STATIC.NAME> module information 666 WRITEW ADDR(.<STATIC.NAME>); # load address 667 WRITEW _start; # entry address 668 WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE; # size of module 669 WRITEW _start_AutoloadDoneCallback; # callback autoload done 670 671 ### overlay filename 672 <FOREACH.OVERLAYS> 673 WRITES ("<OVERLAY.NAME><PROPERTY.SUFFIX>"); # Overlay <OVERLAY.ID> 674 <END.OVERLAYS> 675 676 } > <PROPERTY.OVERLAYDEFS> 677 678 679 ############################ OVERLAYTABLE ########################### 680 .<PROPERTY.OVERLAYTABLE>: 681 { 682 <FOREACH.OVERLAYS> 683 # Overlay <OVERLAY.ID> 684 WRITEW <OVERLAY.ID>; # overlay ID 685 WRITEW ADDR(.<OVERLAY.NAME>); # load address 686 WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SIZE; # size of module 687 WRITEW SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE; # size of bss 688 WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START; # start address of static init 689 WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END; # end address of static init 690 WRITEW <OVERLAY.ID>; # ROM file ID 691 WRITEW 0; # Reserved 692 693 <END.OVERLAYS> 694 695 } > <PROPERTY.OVERLAYTABLE> 696 697 698 ############################ OTHERS ################################# 699 SDK_MAIN_ARENA_LO = SDK_SECTION_ARENA_START; 700 SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>; # allocated in DTCM 701 SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>; # when 0 means all remains of DTCM 702 703 # Module filelist 704 .binary.MODULE_FILES: 705 { 706 WRITES ("<STATIC.NAME><PROPERTY.SUFFIX>"); 707 WRITES ("<PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>"); 708 WRITES ("<PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>"); 709 } > binary.MODULE_FILES 710 711 # Compression Spec List 712 .binary.COMP_SPEC_LIST: 713 { 714 <FOREACH.OVERLAYS> 715 WRITES ("<OVERLAY.NAME><PROPERTY.SUFFIX>,<OVERLAY.COMPRESS>"); # Overlay <OVERLAY.ID> 716 <END.OVERLAYS> 717 } > binary.COMP_SPEC_LIST 718 719 # ITCM/DTCM size checker => check AUTOLOAD_ITCM/DTCM 720 .check.ITCM: 721 { 722 . = SDK_SECTION_ARENA_ITCM_START; 723 } > check.ITCM 724 725 SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1; 726 .check.DTCM: 727 { 728 . = SDK_SECTION_ARENA_DTCM_START; 729 . = . + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN; 730 } > check.DTCM 731 732 .check.MAIN: 733 { 734 . = SDK_SECTION_ARENA_START; 735 736 } > check.MAIN 737 738} 739