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