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