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