1#--------------------------------------------------------------------------- 2# Project: TwlSDK - 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# $Date:: 2008-09-18#$ 14# $Rev: 8573 $ 15# $Author: okubata_ryoma $ 16#--------------------------------------------------------------------------- 17MEMORY 18{ 19 main (RWX) : ORIGIN = 0x02000000, LENGTH = 0x0 > main.sbin 20 ITCM (RWX) : ORIGIN = 0x01ff8000, LENGTH = 0x0 >> main.sbin 21 DTCM (RWX) : ORIGIN = 0x023e0000, LENGTH = 0x0 >> main.sbin 22 binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> main.sbin 23 binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> main.sbin 24 25 main_defs (RW) : ORIGIN = AFTER(main), LENGTH = 0x0 > main_defs.sbin 26 main_table (RW) : ORIGIN = AFTER(main), LENGTH = 0x0 > main_table.sbin 27 main_overlay_1 (RWXO): ORIGIN = AFTER(main), LENGTH = 0x0 > main_overlay_1.sbin 28 main_overlay_2 (RWXO): ORIGIN = AFTER(main), LENGTH = 0x0 > main_overlay_2.sbin 29 main_itcm_1 (RWXO): ORIGIN = AFTER(ITCM), LENGTH = 0x0 > main_itcm_1.sbin 30 main_dtcm_1 (RWXO): ORIGIN = AFTER(DTCM), LENGTH = 0x0 > main_dtcm_1.sbin 31 main_dtcm_2 (RWXO): ORIGIN = AFTER(DTCM), LENGTH = 0x0 > main_dtcm_2.sbin 32 MAIN_EX (RWXO): ORIGIN = 0x02400000, LENGTH = 0x0 > MAIN_EX.sbin 33 MAIN_EX_2 (RWXO): ORIGIN = AFTER(MAIN_EX), LENGTH = 0x0 > MAIN_EX_2.sbin 34 dummy.MAIN_EX (RW) : ORIGIN = 0x023e0000, LENGTH = 0x0 35 arena.MAIN (RW) : ORIGIN = AFTER(main,main_overlay_1,main_overlay_2), LENGTH = 0x0 36 arena.MAIN_EX (RW) : ORIGIN = AFTER(dummy.MAIN_EX,MAIN_EX,MAIN_EX_2), LENGTH = 0x0 37 arena.ITCM (RW) : ORIGIN = AFTER(ITCM,main_itcm_1), LENGTH = 0x0 38 arena.DTCM (RW) : ORIGIN = AFTER(DTCM,main_dtcm_1,main_dtcm_2), LENGTH = 0x0 39 binary.MODULE_FILES (RW) : ORIGIN = 0x0, LENGTH = 0x0 > component.files 40 check.ITCM (RWX) : ORIGIN = 0x0, LENGTH = 0x08000 > itcm.check 41 check.DTCM (RW) : ORIGIN = 0x0, LENGTH = 0x04000 > dtcm.check 42} 43 44FORCE_ACTIVE 45{ 46 SVC_SoftReset 47} 48 49KEEP_SECTION 50{ 51 .sinit 52} 53 54SECTIONS 55{ 56 ############################ STATIC ################################# 57 .main: 58 { 59 ALIGNALL(4); . = ALIGN(32); # Fit to cache line 60 61 # 62 # TEXT BLOCK: READ ONLY 63 # 64 SDK_STATIC_START =.; 65 SDK_STATIC_TEXT_START =.; 66 #:::::::::: text/rodata 67 libsyscall.a (.text) 68 crt0.o (.text) 69 crt0.o (.rodata) 70 # 71 # Added .version section. 72 # The information included in this section will be needed for Lotcheck purposes. Be sure to leave it in this position. 73 # 74 # 75 * (.version) 76 OBJECT(NitroMain,*) 77 main_a.o (.text) 78 main_b.o (.text) 79 main_c.o (.text) 80 main_a.a (.text) 81 main_b.a (.text) 82 main_c.a (.text) 83 . = ALIGN(4); 84 * (.exception) 85 . = ALIGN(4); 86 SDK_STATIC_ETABLE_START =.; 87 EXCEPTION 88 SDK_STATIC_ETABLE_END =.; 89 . = ALIGN(4); 90 main_a.o (.init) 91 main_b.o (.init) 92 main_c.o (.init) 93 main_a.a (.init) 94 main_b.a (.init) 95 main_c.a (.init) 96 . = ALIGN(4); 97 main_a.o (.rodata) 98 main_b.o (.rodata) 99 main_c.o (.rodata) 100 main_a.a (.rodata) 101 main_b.a (.rodata) 102 main_c.a (.rodata) 103 . = ALIGN(4); 104 105 SDK_STATIC_SINIT_START =.; 106 #:::::::::: ctor 107 main_a.o (.ctor) 108 main_b.o (.ctor) 109 main_c.o (.ctor) 110 main_a.a (.ctor) 111 main_b.a (.ctor) 112 main_c.a (.ctor) 113 main_a.o (.sinit) 114 main_b.o (.sinit) 115 main_c.o (.sinit) 116 main_a.a (.sinit) 117 main_b.a (.sinit) 118 main_c.a (.sinit) 119 WRITEW 0; 120 #:::::::::: ctor 121 SDK_STATIC_SINIT_END =.; 122 123 #:::::::::: text/rodata 124 . = ALIGN(32); 125 SDK_STATIC_TEXT_END =.; 126 127 # 128 # DATA BLOCK: READ WRITE 129 # 130 SDK_STATIC_DATA_START =.; 131 #:::::::::: Data 132 main_a.o (.sdata) 133 main_b.o (.sdata) 134 main_c.o (.sdata) 135 main_a.a (.sdata) 136 main_b.a (.sdata) 137 main_c.a (.sdata) 138 . = ALIGN(4); 139 main_a.o (.data) 140 main_b.o (.data) 141 main_c.o (.data) 142 main_a.a (.data) 143 main_b.a (.data) 144 main_c.a (.data) 145 . = ALIGN(4); 146 SDK_OVERLAY_DIGEST =.; 147 # NO DIGEST 148 SDK_OVERLAY_DIGEST_END =.; 149 #:::::::::: Data 150 . = ALIGN(32); 151 SDK_STATIC_DATA_END =.; 152 SDK_STATIC_END =.; 153 154 SDK_STATIC_TEXT_SIZE = SDK_STATIC_TEXT_END - SDK_STATIC_TEXT_START; 155 SDK_STATIC_DATA_SIZE = SDK_STATIC_DATA_END - SDK_STATIC_DATA_START; 156 SDK_STATIC_SIZE = SDK_STATIC_END - SDK_STATIC_START; 157 __sinit__ = SDK_STATIC_SINIT_START; # For static initializer 158 __exception_table_start__ = SDK_STATIC_ETABLE_START; # For exception table 159 __exception_table_end__ = SDK_STATIC_ETABLE_END; # For exception table 160 } > main 161 162 .main.bss: 163 { 164 ALIGNALL(4); . = ALIGN(32); 165 166 # 167 # BSS BLOCK 168 # 169 SDK_STATIC_BSS_START =.; 170 #:::::::::: bss 171 main_a.o (.sbss) 172 main_b.o (.sbss) 173 main_c.o (.sbss) 174 main_a.a (.sbss) 175 main_b.a (.sbss) 176 main_c.a (.sbss) 177 . = ALIGN(4); 178 main_a.o (.bss) 179 main_b.o (.bss) 180 main_c.o (.bss) 181 main_a.a (.bss) 182 main_b.a (.bss) 183 main_c.a (.bss) 184 . = ALIGN(4); 185 #:::::::::: bss 186 . = ALIGN(32); 187 SDK_STATIC_BSS_END = .; 188 SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START; 189 190 } >> main 191 192 193 ############################ AUTOLOADS ############################## 194 SDK_AUTOLOAD.ITCM.START = 0x01ff8000; 195 SDK_AUTOLOAD.ITCM.END = SDK_AUTOLOAD.ITCM.START; 196 SDK_AUTOLOAD.ITCM.BSS_END = SDK_AUTOLOAD.ITCM.START; 197 SDK_AUTOLOAD.ITCM.SIZE = 0; 198 SDK_AUTOLOAD.ITCM.BSS_SIZE = 0; 199 SDK_AUTOLOAD.DTCM.START = 0x027e0000; 200 SDK_AUTOLOAD.DTCM.END = SDK_AUTOLOAD.DTCM.START; 201 SDK_AUTOLOAD.DTCM.BSS_END = SDK_AUTOLOAD.DTCM.START; 202 SDK_AUTOLOAD.DTCM.SIZE = 0; 203 SDK_AUTOLOAD.DTCM.BSS_SIZE = 0; 204 SDK_AUTOLOAD_START = SDK_STATIC_END; 205 SDK_AUTOLOAD_SIZE = 0; 206 SDK_AUTOLOAD_NUMBER = 2; 207 208 .ITCM: 209 { 210 ALIGNALL(4); . = ALIGN(32); 211 212 # 213 # TEXT BLOCK: READ ONLY 214 # 215 SDK_AUTOLOAD_ITCM_ID =0; 216 SDK_AUTOLOAD.ITCM.ID =0; 217 SDK_AUTOLOAD.ITCM.START =.; 218 SDK_AUTOLOAD.ITCM.TEXT_START =.; 219 #:::::::::: text/rodata 220 . = ALIGN(4); 221 * (.itcm) 222 . = ALIGN(4); 223 . = ALIGN(4); 224 #:::::::::: text/rodata 225 SDK_AUTOLOAD.ITCM.TEXT_END =.; 226 227 # 228 # DATA BLOCK: READ WRITE BLOCK 229 # 230 SDK_AUTOLOAD.ITCM.DATA_START =.; 231 #:::::::::: Data 232 . = ALIGN(4); 233 . = ALIGN(4); 234 . = ALIGN(4); 235 #:::::::::: Data 236 . = ALIGN(32); 237 SDK_AUTOLOAD.ITCM.DATA_END =.; 238 SDK_AUTOLOAD.ITCM.END =.; 239 240 SDK_AUTOLOAD.ITCM.TEXT_SIZE = SDK_AUTOLOAD.ITCM.TEXT_END - SDK_AUTOLOAD.ITCM.TEXT_START; 241 SDK_AUTOLOAD.ITCM.DATA_SIZE = SDK_AUTOLOAD.ITCM.DATA_END - SDK_AUTOLOAD.ITCM.DATA_START; 242 SDK_AUTOLOAD.ITCM.SIZE = SDK_AUTOLOAD.ITCM.END - SDK_AUTOLOAD.ITCM.START; 243 SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SDK_AUTOLOAD.ITCM.SIZE; 244 245 } > ITCM 246 247 .ITCM.bss: 248 { 249 ALIGNALL(4); . = ALIGN(32); 250 251 # 252 # BSS BLOCK 253 # 254 SDK_AUTOLOAD.ITCM.BSS_START = .; 255 #:::::::::: bss 256 . = ALIGN(4); 257 . = ALIGN(4); 258 . = ALIGN(4); 259 * (.itcm.bss) 260 . = ALIGN(4); 261 #:::::::::: bss 262 . = ALIGN(32); 263 SDK_AUTOLOAD.ITCM.BSS_END = .; 264 265 SDK_AUTOLOAD.ITCM.BSS_SIZE = SDK_AUTOLOAD.ITCM.BSS_END - SDK_AUTOLOAD.ITCM.BSS_START; 266 267 } >> ITCM 268 269 .DTCM: 270 { 271 ALIGNALL(4); . = ALIGN(32); 272 273 # 274 # TEXT BLOCK: READ ONLY 275 # 276 SDK_AUTOLOAD_DTCM_ID =1; 277 SDK_AUTOLOAD.DTCM.ID =1; 278 SDK_AUTOLOAD.DTCM.START =.; 279 SDK_AUTOLOAD.DTCM.TEXT_START =.; 280 #:::::::::: text/rodata 281 . = ALIGN(4); 282 . = ALIGN(4); 283 . = ALIGN(4); 284 #:::::::::: text/rodata 285 SDK_AUTOLOAD.DTCM.TEXT_END =.; 286 287 # 288 # DATA BLOCK: READ WRITE BLOCK 289 # 290 SDK_AUTOLOAD.DTCM.DATA_START =.; 291 #:::::::::: Data 292 . = ALIGN(4); 293 . = ALIGN(4); 294 * (.dtcm) 295 . = ALIGN(4); 296 #:::::::::: Data 297 . = ALIGN(32); 298 SDK_AUTOLOAD.DTCM.DATA_END =.; 299 SDK_AUTOLOAD.DTCM.END =.; 300 301 SDK_AUTOLOAD.DTCM.TEXT_SIZE = SDK_AUTOLOAD.DTCM.TEXT_END - SDK_AUTOLOAD.DTCM.TEXT_START; 302 SDK_AUTOLOAD.DTCM.DATA_SIZE = SDK_AUTOLOAD.DTCM.DATA_END - SDK_AUTOLOAD.DTCM.DATA_START; 303 SDK_AUTOLOAD.DTCM.SIZE = SDK_AUTOLOAD.DTCM.END - SDK_AUTOLOAD.DTCM.START; 304 SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SDK_AUTOLOAD.DTCM.SIZE; 305 306 } > DTCM 307 308 .DTCM.bss: 309 { 310 ALIGNALL(4); . = ALIGN(32); 311 312 # 313 # BSS BLOCK 314 # 315 SDK_AUTOLOAD.DTCM.BSS_START = .; 316 #:::::::::: bss 317 . = ALIGN(4); 318 . = ALIGN(4); 319 * (.dtcm.bss) 320 . = ALIGN(4); 321 . = ALIGN(4); 322 #:::::::::: bss 323 . = ALIGN(32); 324 SDK_AUTOLOAD.DTCM.BSS_END = .; 325 326 SDK_AUTOLOAD.DTCM.BSS_SIZE = SDK_AUTOLOAD.DTCM.BSS_END - SDK_AUTOLOAD.DTCM.BSS_START; 327 328 } >> DTCM 329 330 331 SDK_AUTOLOAD_ITCM_START = SDK_AUTOLOAD.ITCM.START; 332 SDK_AUTOLOAD_ITCM_END = SDK_AUTOLOAD.ITCM.END; 333 SDK_AUTOLOAD_ITCM_BSS_END = SDK_AUTOLOAD.ITCM.BSS_END; 334 SDK_AUTOLOAD_ITCM_SIZE = SDK_AUTOLOAD.ITCM.SIZE; 335 SDK_AUTOLOAD_ITCM_BSS_SIZE = SDK_AUTOLOAD.ITCM.BSS_SIZE; 336 SDK_AUTOLOAD_DTCM_START = SDK_AUTOLOAD.DTCM.START; 337 SDK_AUTOLOAD_DTCM_END = SDK_AUTOLOAD.DTCM.END; 338 SDK_AUTOLOAD_DTCM_BSS_END = SDK_AUTOLOAD.DTCM.BSS_END; 339 SDK_AUTOLOAD_DTCM_SIZE = SDK_AUTOLOAD.DTCM.SIZE; 340 SDK_AUTOLOAD_DTCM_BSS_SIZE = SDK_AUTOLOAD.DTCM.BSS_SIZE; 341 342 ############################ AUTOLOAD_INFO ########################## 343 .binary.AUTOLOAD_INFO: 344 { 345 WRITEW ADDR(.ITCM); 346 WRITEW SDK_AUTOLOAD.ITCM.SIZE; 347 WRITEW SDK_AUTOLOAD.ITCM.BSS_SIZE; 348 WRITEW ADDR(.DTCM); 349 WRITEW SDK_AUTOLOAD.DTCM.SIZE; 350 WRITEW SDK_AUTOLOAD.DTCM.BSS_SIZE; 351 } > binary.AUTOLOAD_INFO 352 353 SDK_AUTOLOAD_LIST = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE; 354 SDK_AUTOLOAD_LIST_END = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); 355 SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); 356 357 ############################ STATIC_FOOTER ########################## 358 .binary.STATIC_FOOTER: 359 { 360 WRITEW 0xdec00621; # LE(0x2106C0DE) = NITRO CODE 361 WRITEW _start_ModuleParams - ADDR(.main); 362 WRITEW 0; # NO DIGEST 363 } > binary.STATIC_FOOTER 364 365 ############################ OVERLAYS ############################### 366 SDK_OVERLAY_NUMBER = 7; 367 368 .main_overlay_1: 369 { 370 ALIGNALL(4); . = ALIGN(32); 371 372 # 373 # TEXT BLOCK: READ ONLY 374 # 375 SDK_OVERLAY_main_overlay_1_ID =0; ### SEGMENT main_overlay_1 OVERLAY ID 376 SDK_OVERLAY.main_overlay_1.ID =0; 377 SDK_OVERLAY.main_overlay_1.START =.; 378 SDK_OVERLAY.main_overlay_1.TEXT_START =.; 379 #:::::::::: text/rodata 380 func_1.o (.text) 381 . = ALIGN(4); 382 func_1.o (.rodata) 383 . = ALIGN(4); 384 func_1.o (.init) 385 . = ALIGN(4); 386 SDK_OVERLAY.main_overlay_1.SINIT_START =.; 387 #:::::::::: ctor 388 func_1.o (.ctor) 389 func_1.o (.sinit) 390 WRITEW 0; 391 #:::::::::: ctor 392 SDK_OVERLAY.main_overlay_1.SINIT_END =.; 393 394 #:::::::::: text/rodata 395 . = ALIGN(32); 396 SDK_OVERLAY.main_overlay_1.TEXT_END =.; 397 398 # 399 # DATA BLOCK: READ WRITE 400 # 401 SDK_OVERLAY.main_overlay_1.DATA_START =.; 402 #:::::::::: Data 403 func_1.o (.sdata) 404 . = ALIGN(4); 405 func_1.o (.data) 406 . = ALIGN(4); 407 #:::::::::: Data 408 . = ALIGN(32); 409 SDK_OVERLAY.main_overlay_1.DATA_END =.; 410 SDK_OVERLAY.main_overlay_1.END =.; 411 412 SDK_OVERLAY.main_overlay_1.TEXT_SIZE = SDK_OVERLAY.main_overlay_1.TEXT_END - SDK_OVERLAY.main_overlay_1.TEXT_START; 413 SDK_OVERLAY.main_overlay_1.DATA_SIZE = SDK_OVERLAY.main_overlay_1.DATA_END - SDK_OVERLAY.main_overlay_1.DATA_START; 414 SDK_OVERLAY.main_overlay_1.SIZE = SDK_OVERLAY.main_overlay_1.END - SDK_OVERLAY.main_overlay_1.START; 415 416 } > main_overlay_1 417 418 .main_overlay_1.bss: 419 { 420 ALIGNALL(4); . = ALIGN(32); 421 422 # 423 # BSS BLOCK 424 # 425 SDK_OVERLAY.main_overlay_1.BSS_START = .; 426 #:::::::::: bss 427 func_1.o (.bss) 428 . = ALIGN(4); 429 func_1.o (.sbss) 430 . = ALIGN(4); 431 #:::::::::: bss 432 . = ALIGN(32); 433 SDK_OVERLAY.main_overlay_1.BSS_END = .; 434 435 SDK_OVERLAY.main_overlay_1.BSS_SIZE = SDK_OVERLAY.main_overlay_1.BSS_END - SDK_OVERLAY.main_overlay_1.BSS_START; 436 437 } >> main_overlay_1 438 439 .main_overlay_2: 440 { 441 ALIGNALL(4); . = ALIGN(32); 442 443 # 444 # TEXT BLOCK: READ ONLY 445 # 446 SDK_OVERLAY_main_overlay_2_ID =1; ### SEGMENT main_overlay_2 OVERLAY ID 447 SDK_OVERLAY.main_overlay_2.ID =1; 448 SDK_OVERLAY.main_overlay_2.START =.; 449 SDK_OVERLAY.main_overlay_2.TEXT_START =.; 450 #:::::::::: text/rodata 451 func_2.o (.text) 452 . = ALIGN(4); 453 func_2.o (.rodata) 454 . = ALIGN(4); 455 func_2.o (.init) 456 . = ALIGN(4); 457 SDK_OVERLAY.main_overlay_2.SINIT_START =.; 458 #:::::::::: ctor 459 func_2.o (.ctor) 460 func_2.o (.sinit) 461 WRITEW 0; 462 #:::::::::: ctor 463 SDK_OVERLAY.main_overlay_2.SINIT_END =.; 464 465 #:::::::::: text/rodata 466 . = ALIGN(32); 467 SDK_OVERLAY.main_overlay_2.TEXT_END =.; 468 469 # 470 # DATA BLOCK: READ WRITE 471 # 472 SDK_OVERLAY.main_overlay_2.DATA_START =.; 473 #:::::::::: Data 474 func_2.o (.sdata) 475 . = ALIGN(4); 476 func_2.o (.data) 477 . = ALIGN(4); 478 #:::::::::: Data 479 . = ALIGN(32); 480 SDK_OVERLAY.main_overlay_2.DATA_END =.; 481 SDK_OVERLAY.main_overlay_2.END =.; 482 483 SDK_OVERLAY.main_overlay_2.TEXT_SIZE = SDK_OVERLAY.main_overlay_2.TEXT_END - SDK_OVERLAY.main_overlay_2.TEXT_START; 484 SDK_OVERLAY.main_overlay_2.DATA_SIZE = SDK_OVERLAY.main_overlay_2.DATA_END - SDK_OVERLAY.main_overlay_2.DATA_START; 485 SDK_OVERLAY.main_overlay_2.SIZE = SDK_OVERLAY.main_overlay_2.END - SDK_OVERLAY.main_overlay_2.START; 486 487 } > main_overlay_2 488 489 .main_overlay_2.bss: 490 { 491 ALIGNALL(4); . = ALIGN(32); 492 493 # 494 # BSS BLOCK 495 # 496 SDK_OVERLAY.main_overlay_2.BSS_START = .; 497 #:::::::::: bss 498 func_2.o (.bss) 499 . = ALIGN(4); 500 func_2.o (.sbss) 501 . = ALIGN(4); 502 #:::::::::: bss 503 . = ALIGN(32); 504 SDK_OVERLAY.main_overlay_2.BSS_END = .; 505 506 SDK_OVERLAY.main_overlay_2.BSS_SIZE = SDK_OVERLAY.main_overlay_2.BSS_END - SDK_OVERLAY.main_overlay_2.BSS_START; 507 508 } >> main_overlay_2 509 510 .main_itcm_1: 511 { 512 ALIGNALL(4); . = ALIGN(32); 513 514 # 515 # TEXT BLOCK: READ ONLY 516 # 517 SDK_OVERLAY_main_itcm_1_ID =2; ### SEGMENT main_itcm_1 OVERLAY ID 518 SDK_OVERLAY.main_itcm_1.ID =2; 519 SDK_OVERLAY.main_itcm_1.START =.; 520 SDK_OVERLAY.main_itcm_1.TEXT_START =.; 521 #:::::::::: text/rodata 522 func_3.o (.text) 523 . = ALIGN(4); 524 func_3.o (.rodata) 525 . = ALIGN(4); 526 func_3.o (.init) 527 . = ALIGN(4); 528 SDK_OVERLAY.main_itcm_1.SINIT_START =.; 529 #:::::::::: ctor 530 func_3.o (.ctor) 531 func_3.o (.sinit) 532 WRITEW 0; 533 #:::::::::: ctor 534 SDK_OVERLAY.main_itcm_1.SINIT_END =.; 535 536 #:::::::::: text/rodata 537 . = ALIGN(32); 538 SDK_OVERLAY.main_itcm_1.TEXT_END =.; 539 540 # 541 # DATA BLOCK: READ WRITE 542 # 543 SDK_OVERLAY.main_itcm_1.DATA_START =.; 544 #:::::::::: Data 545 func_3.o (.sdata) 546 . = ALIGN(4); 547 func_3.o (.data) 548 . = ALIGN(4); 549 #:::::::::: Data 550 . = ALIGN(32); 551 SDK_OVERLAY.main_itcm_1.DATA_END =.; 552 SDK_OVERLAY.main_itcm_1.END =.; 553 554 SDK_OVERLAY.main_itcm_1.TEXT_SIZE = SDK_OVERLAY.main_itcm_1.TEXT_END - SDK_OVERLAY.main_itcm_1.TEXT_START; 555 SDK_OVERLAY.main_itcm_1.DATA_SIZE = SDK_OVERLAY.main_itcm_1.DATA_END - SDK_OVERLAY.main_itcm_1.DATA_START; 556 SDK_OVERLAY.main_itcm_1.SIZE = SDK_OVERLAY.main_itcm_1.END - SDK_OVERLAY.main_itcm_1.START; 557 558 } > main_itcm_1 559 560 .main_itcm_1.bss: 561 { 562 ALIGNALL(4); . = ALIGN(32); 563 564 # 565 # BSS BLOCK 566 # 567 SDK_OVERLAY.main_itcm_1.BSS_START = .; 568 #:::::::::: bss 569 func_3.o (.bss) 570 . = ALIGN(4); 571 func_3.o (.sbss) 572 . = ALIGN(4); 573 #:::::::::: bss 574 . = ALIGN(32); 575 SDK_OVERLAY.main_itcm_1.BSS_END = .; 576 577 SDK_OVERLAY.main_itcm_1.BSS_SIZE = SDK_OVERLAY.main_itcm_1.BSS_END - SDK_OVERLAY.main_itcm_1.BSS_START; 578 579 } >> main_itcm_1 580 581 .main_dtcm_1: 582 { 583 ALIGNALL(4); . = ALIGN(32); 584 585 # 586 # TEXT BLOCK: READ ONLY 587 # 588 SDK_OVERLAY_main_dtcm_1_ID =3; ### SEGMENT main_dtcm_1 OVERLAY ID 589 SDK_OVERLAY.main_dtcm_1.ID =3; 590 SDK_OVERLAY.main_dtcm_1.START =.; 591 SDK_OVERLAY.main_dtcm_1.TEXT_START =.; 592 #:::::::::: text/rodata 593 func_4.o (.text) 594 . = ALIGN(4); 595 func_4.o (.rodata) 596 . = ALIGN(4); 597 func_4.o (.init) 598 . = ALIGN(4); 599 SDK_OVERLAY.main_dtcm_1.SINIT_START =.; 600 #:::::::::: ctor 601 func_4.o (.ctor) 602 func_4.o (.sinit) 603 WRITEW 0; 604 #:::::::::: ctor 605 SDK_OVERLAY.main_dtcm_1.SINIT_END =.; 606 607 #:::::::::: text/rodata 608 . = ALIGN(32); 609 SDK_OVERLAY.main_dtcm_1.TEXT_END =.; 610 611 # 612 # DATA BLOCK: READ WRITE 613 # 614 SDK_OVERLAY.main_dtcm_1.DATA_START =.; 615 #:::::::::: Data 616 func_4.o (.sdata) 617 . = ALIGN(4); 618 func_4.o (.data) 619 . = ALIGN(4); 620 #:::::::::: Data 621 . = ALIGN(32); 622 SDK_OVERLAY.main_dtcm_1.DATA_END =.; 623 SDK_OVERLAY.main_dtcm_1.END =.; 624 625 SDK_OVERLAY.main_dtcm_1.TEXT_SIZE = SDK_OVERLAY.main_dtcm_1.TEXT_END - SDK_OVERLAY.main_dtcm_1.TEXT_START; 626 SDK_OVERLAY.main_dtcm_1.DATA_SIZE = SDK_OVERLAY.main_dtcm_1.DATA_END - SDK_OVERLAY.main_dtcm_1.DATA_START; 627 SDK_OVERLAY.main_dtcm_1.SIZE = SDK_OVERLAY.main_dtcm_1.END - SDK_OVERLAY.main_dtcm_1.START; 628 629 } > main_dtcm_1 630 631 .main_dtcm_1.bss: 632 { 633 ALIGNALL(4); . = ALIGN(32); 634 635 # 636 # BSS BLOCK 637 # 638 SDK_OVERLAY.main_dtcm_1.BSS_START = .; 639 #:::::::::: bss 640 func_4.o (.bss) 641 . = ALIGN(4); 642 func_4.o (.sbss) 643 . = ALIGN(4); 644 #:::::::::: bss 645 . = ALIGN(32); 646 SDK_OVERLAY.main_dtcm_1.BSS_END = .; 647 648 SDK_OVERLAY.main_dtcm_1.BSS_SIZE = SDK_OVERLAY.main_dtcm_1.BSS_END - SDK_OVERLAY.main_dtcm_1.BSS_START; 649 650 } >> main_dtcm_1 651 652 .main_dtcm_2: 653 { 654 ALIGNALL(4); . = ALIGN(32); 655 656 # 657 # TEXT BLOCK: READ ONLY 658 # 659 SDK_OVERLAY_main_dtcm_2_ID =4; ### SEGMENT main_dtcm_2 OVERLAY ID 660 SDK_OVERLAY.main_dtcm_2.ID =4; 661 SDK_OVERLAY.main_dtcm_2.START =.; 662 SDK_OVERLAY.main_dtcm_2.TEXT_START =.; 663 #:::::::::: text/rodata 664 func_5.o (.text) 665 . = ALIGN(4); 666 func_5.o (.rodata) 667 . = ALIGN(4); 668 func_5.o (.init) 669 . = ALIGN(4); 670 SDK_OVERLAY.main_dtcm_2.SINIT_START =.; 671 #:::::::::: ctor 672 func_5.o (.ctor) 673 func_5.o (.sinit) 674 WRITEW 0; 675 #:::::::::: ctor 676 SDK_OVERLAY.main_dtcm_2.SINIT_END =.; 677 678 #:::::::::: text/rodata 679 . = ALIGN(32); 680 SDK_OVERLAY.main_dtcm_2.TEXT_END =.; 681 682 # 683 # DATA BLOCK: READ WRITE 684 # 685 SDK_OVERLAY.main_dtcm_2.DATA_START =.; 686 #:::::::::: Data 687 func_5.o (.sdata) 688 . = ALIGN(4); 689 func_5.o (.data) 690 . = ALIGN(4); 691 #:::::::::: Data 692 . = ALIGN(32); 693 SDK_OVERLAY.main_dtcm_2.DATA_END =.; 694 SDK_OVERLAY.main_dtcm_2.END =.; 695 696 SDK_OVERLAY.main_dtcm_2.TEXT_SIZE = SDK_OVERLAY.main_dtcm_2.TEXT_END - SDK_OVERLAY.main_dtcm_2.TEXT_START; 697 SDK_OVERLAY.main_dtcm_2.DATA_SIZE = SDK_OVERLAY.main_dtcm_2.DATA_END - SDK_OVERLAY.main_dtcm_2.DATA_START; 698 SDK_OVERLAY.main_dtcm_2.SIZE = SDK_OVERLAY.main_dtcm_2.END - SDK_OVERLAY.main_dtcm_2.START; 699 700 } > main_dtcm_2 701 702 .main_dtcm_2.bss: 703 { 704 ALIGNALL(4); . = ALIGN(32); 705 706 # 707 # BSS BLOCK 708 # 709 SDK_OVERLAY.main_dtcm_2.BSS_START = .; 710 #:::::::::: bss 711 func_5.o (.bss) 712 . = ALIGN(4); 713 func_5.o (.sbss) 714 . = ALIGN(4); 715 #:::::::::: bss 716 . = ALIGN(32); 717 SDK_OVERLAY.main_dtcm_2.BSS_END = .; 718 719 SDK_OVERLAY.main_dtcm_2.BSS_SIZE = SDK_OVERLAY.main_dtcm_2.BSS_END - SDK_OVERLAY.main_dtcm_2.BSS_START; 720 721 } >> main_dtcm_2 722 723 .MAIN_EX: 724 { 725 ALIGNALL(4); . = ALIGN(32); 726 727 # 728 # TEXT BLOCK: READ ONLY 729 # 730 SDK_OVERLAY_MAIN_EX_ID =5; ### SEGMENT MAIN_EX OVERLAY ID 731 SDK_OVERLAY.MAIN_EX.ID =5; 732 SDK_OVERLAY.MAIN_EX.START =.; 733 SDK_OVERLAY.MAIN_EX.TEXT_START =.; 734 #:::::::::: text/rodata 735 ex_1.o (.text) 736 . = ALIGN(4); 737 ex_1.o (.rodata) 738 . = ALIGN(4); 739 ex_1.o (.init) 740 . = ALIGN(4); 741 SDK_OVERLAY.MAIN_EX.SINIT_START =.; 742 #:::::::::: ctor 743 ex_1.o (.ctor) 744 ex_1.o (.sinit) 745 WRITEW 0; 746 #:::::::::: ctor 747 SDK_OVERLAY.MAIN_EX.SINIT_END =.; 748 749 #:::::::::: text/rodata 750 . = ALIGN(32); 751 SDK_OVERLAY.MAIN_EX.TEXT_END =.; 752 753 # 754 # DATA BLOCK: READ WRITE 755 # 756 SDK_OVERLAY.MAIN_EX.DATA_START =.; 757 #:::::::::: Data 758 ex_1.o (.sdata) 759 . = ALIGN(4); 760 ex_1.o (.data) 761 . = ALIGN(4); 762 #:::::::::: Data 763 . = ALIGN(32); 764 SDK_OVERLAY.MAIN_EX.DATA_END =.; 765 SDK_OVERLAY.MAIN_EX.END =.; 766 767 SDK_OVERLAY.MAIN_EX.TEXT_SIZE = SDK_OVERLAY.MAIN_EX.TEXT_END - SDK_OVERLAY.MAIN_EX.TEXT_START; 768 SDK_OVERLAY.MAIN_EX.DATA_SIZE = SDK_OVERLAY.MAIN_EX.DATA_END - SDK_OVERLAY.MAIN_EX.DATA_START; 769 SDK_OVERLAY.MAIN_EX.SIZE = SDK_OVERLAY.MAIN_EX.END - SDK_OVERLAY.MAIN_EX.START; 770 771 } > MAIN_EX 772 773 .MAIN_EX.bss: 774 { 775 ALIGNALL(4); . = ALIGN(32); 776 777 # 778 # BSS BLOCK 779 # 780 SDK_OVERLAY.MAIN_EX.BSS_START = .; 781 #:::::::::: bss 782 ex_1.o (.bss) 783 . = ALIGN(4); 784 ex_1.o (.sbss) 785 . = ALIGN(4); 786 #:::::::::: bss 787 . = ALIGN(32); 788 SDK_OVERLAY.MAIN_EX.BSS_END = .; 789 790 SDK_OVERLAY.MAIN_EX.BSS_SIZE = SDK_OVERLAY.MAIN_EX.BSS_END - SDK_OVERLAY.MAIN_EX.BSS_START; 791 792 } >> MAIN_EX 793 794 .MAIN_EX_2: 795 { 796 ALIGNALL(4); . = ALIGN(32); 797 798 # 799 # TEXT BLOCK: READ ONLY 800 # 801 SDK_OVERLAY_MAIN_EX_2_ID =6; ### SEGMENT MAIN_EX_2 OVERLAY ID 802 SDK_OVERLAY.MAIN_EX_2.ID =6; 803 SDK_OVERLAY.MAIN_EX_2.START =.; 804 SDK_OVERLAY.MAIN_EX_2.TEXT_START =.; 805 #:::::::::: text/rodata 806 ex_2.o (.text) 807 . = ALIGN(4); 808 ex_2.o (.rodata) 809 . = ALIGN(4); 810 ex_2.o (.init) 811 . = ALIGN(4); 812 SDK_OVERLAY.MAIN_EX_2.SINIT_START =.; 813 #:::::::::: ctor 814 ex_2.o (.ctor) 815 ex_2.o (.sinit) 816 WRITEW 0; 817 #:::::::::: ctor 818 SDK_OVERLAY.MAIN_EX_2.SINIT_END =.; 819 820 #:::::::::: text/rodata 821 . = ALIGN(32); 822 SDK_OVERLAY.MAIN_EX_2.TEXT_END =.; 823 824 # 825 # DATA BLOCK: READ WRITE 826 # 827 SDK_OVERLAY.MAIN_EX_2.DATA_START =.; 828 #:::::::::: Data 829 ex_2.o (.sdata) 830 . = ALIGN(4); 831 ex_2.o (.data) 832 . = ALIGN(4); 833 #:::::::::: Data 834 . = ALIGN(32); 835 SDK_OVERLAY.MAIN_EX_2.DATA_END =.; 836 SDK_OVERLAY.MAIN_EX_2.END =.; 837 838 SDK_OVERLAY.MAIN_EX_2.TEXT_SIZE = SDK_OVERLAY.MAIN_EX_2.TEXT_END - SDK_OVERLAY.MAIN_EX_2.TEXT_START; 839 SDK_OVERLAY.MAIN_EX_2.DATA_SIZE = SDK_OVERLAY.MAIN_EX_2.DATA_END - SDK_OVERLAY.MAIN_EX_2.DATA_START; 840 SDK_OVERLAY.MAIN_EX_2.SIZE = SDK_OVERLAY.MAIN_EX_2.END - SDK_OVERLAY.MAIN_EX_2.START; 841 842 } > MAIN_EX_2 843 844 .MAIN_EX_2.bss: 845 { 846 ALIGNALL(4); . = ALIGN(32); 847 848 # 849 # BSS BLOCK 850 # 851 SDK_OVERLAY.MAIN_EX_2.BSS_START = .; 852 #:::::::::: bss 853 ex_2.o (.bss) 854 . = ALIGN(4); 855 ex_2.o (.sbss) 856 . = ALIGN(4); 857 #:::::::::: bss 858 . = ALIGN(32); 859 SDK_OVERLAY.MAIN_EX_2.BSS_END = .; 860 861 SDK_OVERLAY.MAIN_EX_2.BSS_SIZE = SDK_OVERLAY.MAIN_EX_2.BSS_END - SDK_OVERLAY.MAIN_EX_2.BSS_START; 862 863 } >> MAIN_EX_2 864 865 866 ############################ MAIN EX ################################## 867 # MAIN EX Area 868 .dummy.MAIN_EX: 869 { 870 . = ALIGN(32); 871 } > dummy.MAIN_EX 872 873 ############################ ARENA ################################## 874 .arena.MAIN: 875 { 876 . = ALIGN(32); 877 SDK_SECTION_ARENA_START =.; 878 } > arena.MAIN 879 880 .arena.MAIN_EX: 881 { 882 . = ALIGN(32); 883 SDK_SECTION_ARENA_EX_START =.; 884 } > arena.MAIN_EX 885 886 .arena.ITCM: 887 { 888 . = ALIGN(32); 889 SDK_SECTION_ARENA_ITCM_START =.; 890 } > arena.ITCM 891 892 .arena.DTCM: 893 { 894 . = ALIGN(32); 895 SDK_SECTION_ARENA_DTCM_START =.; 896 } > arena.DTCM 897 898 ############################ OVERLAYDEFS ############################ 899 .main_defs: 900 { 901 ### main module information 902 WRITEW ADDR(.main); # Load address 903 WRITEW _start; # Entry address 904 WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE; # Size of module 905 WRITEW _start_AutoloadDoneCallback; # Callback autoload done 906 907 ### overlay filename 908 WRITES ("main_overlay_1.sbin"); # Overlay 0 909 WRITES ("main_overlay_2.sbin"); # Overlay 1 910 WRITES ("main_itcm_1.sbin"); # Overlay 2 911 WRITES ("main_dtcm_1.sbin"); # Overlay 3 912 WRITES ("main_dtcm_2.sbin"); # Overlay 4 913 WRITES ("MAIN_EX.sbin"); # Overlay 5 914 WRITES ("MAIN_EX_2.sbin"); # Overlay 6 915 916 } > main_defs 917 918 919 ############################ OVERLAYTABLE ########################### 920 .main_table: 921 { 922 # Overlay 0 923 WRITEW 0; # Overlay ID 924 WRITEW ADDR(.main_overlay_1); # Load address 925 WRITEW SDK_OVERLAY.main_overlay_1.SIZE; # Size of module 926 WRITEW SDK_OVERLAY.main_overlay_1.BSS_SIZE; # Size of bss 927 WRITEW SDK_OVERLAY.main_overlay_1.SINIT_START; # Start address of static init 928 WRITEW SDK_OVERLAY.main_overlay_1.SINIT_END; # End address of static init 929 WRITEW 0; # ROM file ID 930 WRITEW 0; # Reserved 931 932 # Overlay 1 933 WRITEW 1; # Overlay ID 934 WRITEW ADDR(.main_overlay_2); # Load address 935 WRITEW SDK_OVERLAY.main_overlay_2.SIZE; # Size of module 936 WRITEW SDK_OVERLAY.main_overlay_2.BSS_SIZE; # Size of bss 937 WRITEW SDK_OVERLAY.main_overlay_2.SINIT_START; # Start address of static init 938 WRITEW SDK_OVERLAY.main_overlay_2.SINIT_END; # End address of static init 939 WRITEW 1; # ROM file ID 940 WRITEW 0; # Reserved 941 942 # Overlay 2 943 WRITEW 2; # Overlay ID 944 WRITEW ADDR(.main_itcm_1); # Load address 945 WRITEW SDK_OVERLAY.main_itcm_1.SIZE; # Size of module 946 WRITEW SDK_OVERLAY.main_itcm_1.BSS_SIZE; # Size of bss 947 WRITEW SDK_OVERLAY.main_itcm_1.SINIT_START; # Start address of static init 948 WRITEW SDK_OVERLAY.main_itcm_1.SINIT_END; # End address of static init 949 WRITEW 2; # ROM file ID 950 WRITEW 0; # Reserved 951 952 # Overlay 3 953 WRITEW 3; # Overlay ID 954 WRITEW ADDR(.main_dtcm_1); # Load address 955 WRITEW SDK_OVERLAY.main_dtcm_1.SIZE; # Size of module 956 WRITEW SDK_OVERLAY.main_dtcm_1.BSS_SIZE; # Size of bss 957 WRITEW SDK_OVERLAY.main_dtcm_1.SINIT_START; # Start address of static init 958 WRITEW SDK_OVERLAY.main_dtcm_1.SINIT_END; # End address of static init 959 WRITEW 3; # ROM file ID 960 WRITEW 0; # Reserved 961 962 # Overlay 4 963 WRITEW 4; # Overlay ID 964 WRITEW ADDR(.main_dtcm_2); # Load address 965 WRITEW SDK_OVERLAY.main_dtcm_2.SIZE; # Size of module 966 WRITEW SDK_OVERLAY.main_dtcm_2.BSS_SIZE; # Size of bss 967 WRITEW SDK_OVERLAY.main_dtcm_2.SINIT_START; # Start address of static init 968 WRITEW SDK_OVERLAY.main_dtcm_2.SINIT_END; # End address of static init 969 WRITEW 4; # ROM file ID 970 WRITEW 0; # Reserved 971 972 # Overlay 5 973 WRITEW 5; # Overlay ID 974 WRITEW ADDR(.MAIN_EX); # Load address 975 WRITEW SDK_OVERLAY.MAIN_EX.SIZE; # Size of module 976 WRITEW SDK_OVERLAY.MAIN_EX.BSS_SIZE; # Size of bss 977 WRITEW SDK_OVERLAY.MAIN_EX.SINIT_START; # Start address of static init 978 WRITEW SDK_OVERLAY.MAIN_EX.SINIT_END; # End address of static init 979 WRITEW 5; # ROM file ID 980 WRITEW 0; # Reserved 981 982 # Overlay 6 983 WRITEW 6; # Overlay ID 984 WRITEW ADDR(.MAIN_EX_2); # Load address 985 WRITEW SDK_OVERLAY.MAIN_EX_2.SIZE; # Size of module 986 WRITEW SDK_OVERLAY.MAIN_EX_2.BSS_SIZE; # Size of bss 987 WRITEW SDK_OVERLAY.MAIN_EX_2.SINIT_START; # Start address of static init 988 WRITEW SDK_OVERLAY.MAIN_EX_2.SINIT_END; # End address of static init 989 WRITEW 6; # ROM file ID 990 WRITEW 0; # Reserved 991 992 993 } > main_table 994 995 996 ############################ OTHERS ################################# 997 SDK_MAIN_ARENA_LO = SDK_SECTION_ARENA_START; 998 SDK_IRQ_STACKSIZE = 1024; # Allocated in DTCM 999 SDK_SYS_STACKSIZE = 0; # When 0 means all remains of DTCM 1000 1001 # Module filelist 1002 .binary.MODULE_FILES: 1003 { 1004 WRITES ("main.sbin"); 1005 WRITES ("main_defs.sbin"); 1006 WRITES ("main_table.sbin"); 1007 } > binary.MODULE_FILES 1008 1009 # ITCM/DTCM size checker => check AUTOLOAD_ITCM/DTCM 1010 .check.ITCM: 1011 { 1012 . = . + SDK_AUTOLOAD_ITCM_SIZE + SDK_AUTOLOAD_ITCM_BSS_SIZE; 1013 } > check.ITCM 1014 1015 SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1; 1016 .check.DTCM: 1017 { 1018 . = . + SDK_AUTOLOAD_DTCM_SIZE + SDK_AUTOLOAD_DTCM_BSS_SIZE; 1019 . = . + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN; 1020 } > check.DTCM 1021 1022} 1023