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