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 = 0x02004000, LENGTH = 0x0 > main.sbin 20 binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> main.sbin 21 binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> main.sbin 22 23 main_defs (RW) : ORIGIN = AFTER(main), LENGTH = 0x0 > main_defs.sbin 24 main_table (RW) : ORIGIN = AFTER(main), LENGTH = 0x0 > main_table.sbin 25 dummy.MAIN_EX (RW) : ORIGIN = 0x023e0000, LENGTH = 0x0 26 arena.MAIN (RW) : ORIGIN = AFTER(main), LENGTH = 0x0 27 arena.MAIN_EX (RW) : ORIGIN = AFTER(dummy.MAIN_EX), LENGTH = 0x0 28 arena.ITCM (RW) : ORIGIN = AFTER(ITCM), LENGTH = 0x0 29 arena.DTCM (RW) : ORIGIN = AFTER(DTCM), LENGTH = 0x0 30 binary.MODULE_FILES (RW) : ORIGIN = 0x0, LENGTH = 0x0 > component.files 31 check.ITCM (RWX) : ORIGIN = 0x0, LENGTH = 0x08000 > itcm.check 32 check.DTCM (RW) : ORIGIN = 0x0, LENGTH = 0x04000 > dtcm.check 33} 34 35FORCE_ACTIVE 36{ 37 SVC_SoftReset 38} 39 40KEEP_SECTION 41{ 42 .sinit 43} 44 45SECTIONS 46{ 47 ############################ STATIC ################################# 48 .main: 49 { 50 ALIGNALL(4); . = ALIGN(32); # Fit to cache line 51 52 # 53 # TEXT BLOCK: READ ONLY 54 # 55 SDK_STATIC_START =.; 56 SDK_STATIC_TEXT_START =.; 57 #:::::::::: text/rodata 58 libsyscall.a (.text) 59 crt0.o (.text) 60 crt0.o (.rodata) 61 # 62 # Added .version section. 63 # The information included in this section will be needed for Lotcheck purposes. Be sure to leave it in this position. 64 # 65 # 66 * (.version) 67 OBJECT(NitroMain,*) 68 * (.text) 69 . = ALIGN(4); 70 * (.exception) 71 . = ALIGN(4); 72 SDK_STATIC_ETABLE_START =.; 73 EXCEPTION 74 SDK_STATIC_ETABLE_END =.; 75 . = ALIGN(4); 76 * (.init) 77 . = ALIGN(4); 78 * (.rodata) 79 . = ALIGN(4); 80 81 SDK_STATIC_SINIT_START =.; 82 #:::::::::: ctor 83 * (.ctor) 84 * (.sinit) 85 WRITEW 0; 86 #:::::::::: ctor 87 SDK_STATIC_SINIT_END =.; 88 89 #:::::::::: text/rodata 90 . = ALIGN(32); 91 SDK_STATIC_TEXT_END =.; 92 93 # 94 # DATA BLOCK: READ WRITE 95 # 96 SDK_STATIC_DATA_START =.; 97 #:::::::::: Data 98 * (.sdata) 99 . = ALIGN(4); 100 * (.data) 101 . = ALIGN(4); 102 SDK_OVERLAY_DIGEST =.; 103 # NO DIGEST 104 SDK_OVERLAY_DIGEST_END =.; 105 #:::::::::: Data 106 . = ALIGN(32); 107 SDK_STATIC_DATA_END =.; 108 SDK_STATIC_END =.; 109 110 SDK_STATIC_TEXT_SIZE = SDK_STATIC_TEXT_END - SDK_STATIC_TEXT_START; 111 SDK_STATIC_DATA_SIZE = SDK_STATIC_DATA_END - SDK_STATIC_DATA_START; 112 SDK_STATIC_SIZE = SDK_STATIC_END - SDK_STATIC_START; 113 __sinit__ = SDK_STATIC_SINIT_START; # For static initializer 114 __exception_table_start__ = SDK_STATIC_ETABLE_START; # For exception table 115 __exception_table_end__ = SDK_STATIC_ETABLE_END; # For exception table 116 } > main 117 118 .main.bss: 119 { 120 ALIGNALL(4); . = ALIGN(32); 121 122 # 123 # BSS BLOCK 124 # 125 SDK_STATIC_BSS_START =.; 126 #:::::::::: bss 127 * (.sbss) 128 . = ALIGN(4); 129 * (.bss) 130 . = ALIGN(4); 131 #:::::::::: bss 132 . = ALIGN(32); 133 SDK_STATIC_BSS_END = .; 134 SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START; 135 136 } >> main 137 138 139 ############################ AUTOLOADS ############################## 140 SDK_AUTOLOAD.ITCM.START = 0x01ff8000; 141 SDK_AUTOLOAD.ITCM.END = SDK_AUTOLOAD.ITCM.START; 142 SDK_AUTOLOAD.ITCM.BSS_END = SDK_AUTOLOAD.ITCM.START; 143 SDK_AUTOLOAD.ITCM.SIZE = 0; 144 SDK_AUTOLOAD.ITCM.BSS_SIZE = 0; 145 SDK_AUTOLOAD.DTCM.START = 0x027e0000; 146 SDK_AUTOLOAD.DTCM.END = SDK_AUTOLOAD.DTCM.START; 147 SDK_AUTOLOAD.DTCM.BSS_END = SDK_AUTOLOAD.DTCM.START; 148 SDK_AUTOLOAD.DTCM.SIZE = 0; 149 SDK_AUTOLOAD.DTCM.BSS_SIZE = 0; 150 SDK_AUTOLOAD_START = SDK_STATIC_END; 151 SDK_AUTOLOAD_SIZE = 0; 152 SDK_AUTOLOAD_NUMBER = 0; 153 154 155 SDK_AUTOLOAD_ITCM_START = SDK_AUTOLOAD.ITCM.START; 156 SDK_AUTOLOAD_ITCM_END = SDK_AUTOLOAD.ITCM.END; 157 SDK_AUTOLOAD_ITCM_BSS_END = SDK_AUTOLOAD.ITCM.BSS_END; 158 SDK_AUTOLOAD_ITCM_SIZE = SDK_AUTOLOAD.ITCM.SIZE; 159 SDK_AUTOLOAD_ITCM_BSS_SIZE = SDK_AUTOLOAD.ITCM.BSS_SIZE; 160 SDK_AUTOLOAD_DTCM_START = SDK_AUTOLOAD.DTCM.START; 161 SDK_AUTOLOAD_DTCM_END = SDK_AUTOLOAD.DTCM.END; 162 SDK_AUTOLOAD_DTCM_BSS_END = SDK_AUTOLOAD.DTCM.BSS_END; 163 SDK_AUTOLOAD_DTCM_SIZE = SDK_AUTOLOAD.DTCM.SIZE; 164 SDK_AUTOLOAD_DTCM_BSS_SIZE = SDK_AUTOLOAD.DTCM.BSS_SIZE; 165 166 ############################ AUTOLOAD_INFO ########################## 167 .binary.AUTOLOAD_INFO: 168 { 169 } > binary.AUTOLOAD_INFO 170 171 SDK_AUTOLOAD_LIST = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE; 172 SDK_AUTOLOAD_LIST_END = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); 173 SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); 174 175 ############################ STATIC_FOOTER ########################## 176 .binary.STATIC_FOOTER: 177 { 178 WRITEW 0xdec00621; # LE(0x2106C0DE) = NITRO CODE 179 WRITEW _start_ModuleParams - ADDR(.main); 180 WRITEW 0; # NO DIGEST 181 } > binary.STATIC_FOOTER 182 183 ############################ OVERLAYS ############################### 184 SDK_OVERLAY_NUMBER = 0; 185 186 187 ############################ MAIN EX ################################## 188 # MAIN EX Area 189 .dummy.MAIN_EX: 190 { 191 . = ALIGN(32); 192 } > dummy.MAIN_EX 193 194 ############################ ARENA ################################## 195 .arena.MAIN: 196 { 197 . = ALIGN(32); 198 SDK_SECTION_ARENA_START =.; 199 } > arena.MAIN 200 201 .arena.MAIN_EX: 202 { 203 . = ALIGN(32); 204 SDK_SECTION_ARENA_EX_START =.; 205 } > arena.MAIN_EX 206 207 .arena.ITCM: 208 { 209 . = ALIGN(32); 210 SDK_SECTION_ARENA_ITCM_START =.; 211 } > arena.ITCM 212 213 .arena.DTCM: 214 { 215 . = ALIGN(32); 216 SDK_SECTION_ARENA_DTCM_START =.; 217 } > arena.DTCM 218 219 ############################ OVERLAYDEFS ############################ 220 .main_defs: 221 { 222 ### main module information 223 WRITEW ADDR(.main); # Load address 224 WRITEW _start; # Entry address 225 WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE; # Size of module 226 WRITEW _start_AutoloadDoneCallback; # Callback autoload done 227 228 ### overlay filename 229 230 } > main_defs 231 232 233 ############################ OVERLAYTABLE ########################### 234 .main_table: 235 { 236 237 } > main_table 238 239 240 ############################ OTHERS ################################# 241 SDK_MAIN_ARENA_LO = SDK_SECTION_ARENA_START; 242 SDK_IRQ_STACKSIZE = 1024; # Allocated in DTCM 243 SDK_SYS_STACKSIZE = 0; # When 0 means all remains of DTCM 244 245 # Module filelist 246 .binary.MODULE_FILES: 247 { 248 WRITES ("main.sbin"); 249 WRITES ("main_defs.sbin"); 250 WRITES ("main_table.sbin"); 251 } > binary.MODULE_FILES 252 253 # ITCM/DTCM size checker => check AUTOLOAD_ITCM/DTCM 254 .check.ITCM: 255 { 256 . = . + SDK_AUTOLOAD_ITCM_SIZE + SDK_AUTOLOAD_ITCM_BSS_SIZE; 257 } > check.ITCM 258 259 SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1; 260 .check.DTCM: 261 { 262 . = . + SDK_AUTOLOAD_DTCM_SIZE + SDK_AUTOLOAD_DTCM_BSS_SIZE; 263 . = . + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN; 264 } > check.DTCM 265 266} 267