1OUTPUT_ARCH( "riscv" ) 2ENTRY(_start) 3 4#ifdef LOSCFG_DEBUG_KASAN 5#define MAX_BIN_SIZE 3M 6#else 7#define MAX_BIN_SIZE 2M 8#endif 9 10#ifdef HI_BOARD_ASIC 11#ifdef HI_ON_FLASH 12 13#ifdef CONFIG_CHIP_PKT_48K 14#define RAM_SIZE 264K /* PKT_B:48K */ 15#define RAM_START 0x000dc000 /* PKT_B:48K */ 16#else 17#define RAM_SIZE 280K /* PKT_B:32K*/ 18#define RAM_START 0x000d8000 /* PKT_B:32K */ 19#endif 20 21#else 22#define RAM_SIZE 248K /* PKT_B:64K + NO DC */ 23#define RAM_START 0x000e0000 /* PKT_B:64K */ 24#endif 25#else 26#ifdef HI_ON_FLASH 27#ifdef LOSCFG_DEBUG_KASAN 28#define RAM_SIZE 896K 29#else 30#define RAM_SIZE 1M 31#endif 32#define RAM_START 0x00100000 33#else 34#define RAM_SIZE 248K /* PKT_B:64K + NO DC */ 35#define RAM_START 0x000e0000 /* PKT_B:64K */ 36#endif 37#endif 38 39#ifdef LOSCFG_DEBUG_KASAN 40#define FLASH_SIZE 3M 41#else 42#define FLASH_SIZE 2M 43#endif 44 45#ifdef CONFIG_FLASH_ENCRYPT_SUPPORT 46#define CRYPTO_RAM_LEN 4096 47#endif 48 49STACK_SIZE = 2k; /* needs to be calculated for your application */ 50IRQ_STACK_SIZE = 3K; 51EXC_STACK_SIZE = 2K; 52#if (defined CONFIG_TEE_HUKS_SUPPORT) || (defined CONFIG_TARGET_SIG_RSA_V15) || (defined CONFIG_TARGET_SIG_RSA_PSS) || (defined CONFIG_TARGET_SIG_ECC) 53NMI_STACK_SIZE = 2K; 54#else 55NMI_STACK_SIZE = 0K; 56#endif 57DOWNLOAD_STACK_SIZE = 4K; 58DOWNLOAD_IRQ_STACK_SIZE = 2K; 59 60/* actually rom data0 size is 944 byte, when rom fixed, may all data can be placed in rom. */ 61#define ROM_DATA0_LEN 32 /* 32 bytes align */ 62 63#ifdef LOSCFG_DEBUG_KASAN 64#define ROM_DATA1_LEN 5056 /* 32 bytes align */ 65#else 66#define ROM_DATA1_LEN 2016 /* 32 bytes align */ 67#endif 68 69#define ROM_BSS_LEN 11776 /* 32 bytes align */ 70#define PATCH_BSS_LEN 1024 /* 1024 bytes align */ 71 72#ifdef HI_ON_FLASH 73#define SECURE_HEAD 0 /* iot has no Signature head */ 74#else 75#define SECURE_HEAD 0x5A0 /* non-iot Signature lenth */ 76#endif 77 78#define ROM_TEXT_LEN (278K - ROM_DATA0_LEN) 79#define CHECK_INFO_LEN 0x40 80#if (defined HI_BOARD_ASIC) || (!defined HI_ON_FLASH) 81#define STACK_LEN (STACK_SIZE + IRQ_STACK_SIZE + EXC_STACK_SIZE + NMI_STACK_SIZE) 82#endif 83 84#define ROM_RAM_LEN (ROM_DATA0_LEN + ROM_DATA1_LEN + ROM_BSS_LEN + CHECK_INFO_LEN) 85#define ROM_RAM_START (0x11DFFF - ROM_RAM_LEN + 1) 86#define ROM_START 0x003b8000 87#define FLASH_START 0x00400000 88#define BIN_START FLASH_FIRM_START /* The value of <FLASH_FIRM_START> macro is transfered by scons. And the value varies with the signature. */ 89 90#ifndef HI_BOARD_ASIC 91/* only use in FPGA. */ 92#define RAM_FPGA_START 0x11E000 93#define RAM_FPGA_LEN (1M - 120K) 94#endif 95 96#if defined(ROM_BIN_TEST) 97#define TEST_OFFSET 7 98#else 99#define TEST_OFFSET 0 100#endif 101 102#define ROM_TEXT_VMA ROM_START 103 104#define ROM_BSS_VMA ROM_RAM_START 105#define ROM_DATA0_VMA (ROM_RAM_START + ROM_BSS_LEN) 106#define ROM_DATA1_VMA (ROM_DATA0_VMA + ROM_DATA0_LEN) 107#define CHECK_INFO_VMA (ROM_DATA1_VMA + ROM_DATA1_LEN) 108#define PATCH_BSS_START RAM_START 109#ifdef CONFIG_FLASH_ENCRYPT_SUPPORT 110#define CRYPTO_RAM_START (PATCH_BSS_START + PATCH_BSS_LEN + SECURE_HEAD) 111#define NON_ROM_RAM_START (CRYPTO_RAM_START + CRYPTO_RAM_LEN) 112#else 113#define NON_ROM_RAM_START (PATCH_BSS_START + PATCH_BSS_LEN + SECURE_HEAD) 114#endif 115#if (defined HI_BOARD_ASIC) || (!defined HI_ON_FLASH) 116#define STACK_VMA ROM_RAM_START - STACK_LEN 117#endif 118 119#define ROM_TEXT_LMA (BIN_START - ROM_TEXT_LEN - ROM_DATA0_LEN) 120#define ROM_DATA0_LMA (ROM_TEXT_LMA + ROM_TEXT_LEN) 121 122#ifdef HI_ON_FLASH 123#define NON_ROM_TEXT_REGION FLASH 124#else 125#define NON_ROM_TEXT_REGION RAM 126#endif 127 128#ifdef CONFIG_FLASH_ENCRYPT_SUPPORT 129#define RAM_CRYPTO_TEXT_LMA (ROM_DATA0_LMA + ROM_DATA0_LEN) 130#define NON_ROM_TEXT_LMA (RAM_CRYPTO_TEXT_LMA + CRYPTO_RAM_LEN) 131#else 132#define NON_ROM_TEXT_LMA (ROM_DATA0_LMA + ROM_DATA0_LEN) 133#endif 134 135#define ZINIT_NO_ROM_TEXT_LMA ((NON_ROM_TEXT_LMA + SIZEOF (.text_non_rom) + (0x20) - 1) & ~ ((0x20) - 1)) 136#define RAM_TEXT_LMA ((ZINIT_NO_ROM_TEXT_LMA + SIZEOF (.zInit) + (0x20) - 1) & ~ ((0x20) - 1)) 137#define NON_ROM_DATA_LMA ((RAM_TEXT_LMA + SIZEOF (.ram_text) + (0x20) -1) & ~ ((0x20) - 1)) 138#define ROM_DATA1_LMA ((NON_ROM_DATA_LMA + SIZEOF(.data) + (0x20) - 1) & ~ ((0x20) - 1)) 139 140#if (defined HI_BOARD_ASIC) || (!defined HI_ON_FLASH) 141 142#ifdef CONFIG_FLASH_ENCRYPT_SUPPORT 143#define RAM_LEN (RAM_SIZE - ROM_RAM_LEN - PATCH_BSS_LEN - STACK_LEN- SECURE_HEAD - CRYPTO_RAM_LEN) 144#else 145#define RAM_LEN (RAM_SIZE - ROM_RAM_LEN - PATCH_BSS_LEN - STACK_LEN - SECURE_HEAD) 146#endif 147 148#else 149#define RAM_LEN (RAM_SIZE - ROM_RAM_LEN - PATCH_BSS_LEN - SECURE_HEAD) 150#endif 151 152#define KEEP_SORT_GCC_TEXT(obj) KEEP(SORT(*libgcc.a:obj)(.text*)) 153#define KEEP_SORT_GCC_RODATA(obj) KEEP(SORT(*libgcc.a:obj)(.rodata*)) 154#define KEEP_SORT_GCC_DATA(obj) KEEP(SORT(*libgcc.a:obj)(.data*)) 155#define KEEP_SORT_GCC_BSS(obj) KEEP(SORT(*libgcc.a:obj)(.bss*)) 156#define LIBGCC_ROM_FUN(func) func(save-restore.o) func(_clzsi2.o) func(_umoddi3.o) func(_clz.o) func(_ashldi3.o) func(_lshrdi3.o) func(fixdfsi.o) func(_udivdi3.o) 157 158MEMORY 159{ 160 BIN(rx) : ORIGIN = BIN_START, LENGTH = MAX_BIN_SIZE 161 ROM_TEXT(rx) : ORIGIN = ROM_TEXT_VMA, LENGTH = ROM_TEXT_LEN /* code and rodata of download,kernel,lib,bsp,wifi... */ 162 ROM_DATA0(rwx) : ORIGIN = ROM_DATA0_VMA, LENGTH = ROM_DATA0_LEN /* data used by download rom code */ 163 ROM_DATA1(rwx) : ORIGIN = ROM_DATA1_VMA, LENGTH = 1768 /* data used by other rom code:1768 byte */ 164 ROM_BSS(rwx) : ORIGIN = ROM_BSS_VMA, LENGTH = ROM_BSS_LEN /* bss used by rom code */ 165#if (defined HI_BOARD_ASIC) || (!defined HI_ON_FLASH) 166 STACK(rw) : ORIGIN = STACK_VMA, LENGTH = STACK_LEN /* stack */ 167#endif 168 CHECK_INFO(rw) : ORIGIN = CHECK_INFO_VMA, LENGTH = CHECK_INFO_LEN /* check info used by rom code */ 169#ifdef CONFIG_FLASH_ENCRYPT_SUPPORT 170 FLASH(rwx) : ORIGIN = FLASH_FIRM_START + CRYPTO_RAM_LEN, LENGTH = FLASH_START + FLASH_SIZE - FLASH_FIRM_START - CRYPTO_RAM_LEN 171#else 172 FLASH(rwx) : ORIGIN = FLASH_FIRM_START, LENGTH = FLASH_START + FLASH_SIZE - FLASH_FIRM_START 173#endif 174 PATCH_BSS(rwx) : ORIGIN = PATCH_BSS_START, LENGTH = PATCH_BSS_LEN /* flash patch remap */ 175#ifdef CONFIG_FLASH_ENCRYPT_SUPPORT 176 CRYPTO_RAM(rwx) : ORIGIN = CRYPTO_RAM_START, LENGTH = CRYPTO_RAM_LEN /* 4K kernel crypto */ 177#endif 178 RAM(rwx) : ORIGIN = NON_ROM_RAM_START, LENGTH = RAM_LEN /* non rom data,bss,stack,heap */ 179 EXTERN_ROM_DATA1_BSS(rwx) : ORIGIN = 0x11dec8, LENGTH = ROM_DATA1_LEN-1768 /* use extern rom data 1 as non_rom bss */ 180#if (defined HI_BOARD_FPGA) && (defined HI_ON_FLASH) 181 RAM_FPGA(rwx) : ORIGIN = RAM_FPGA_START, LENGTH = RAM_FPGA_LEN /* FPGA stack and heap */ 182#endif 183} 184 185SECTIONS 186{ 187 .text_rom : AT (ROM_TEXT_LMA) 188 { 189 . = ALIGN(0x20); 190 __rom_text_begin__ = .; 191 __text_cache_start1_ = .; 192 _rom_size_download_start = .; 193 KEEP(SORT(*)(.text.download_entry)) 194 . = ALIGN(0x4); 195 KEEP(SORT(*)(.text.trap_download_vector)) 196 KEEP(SORT(*)(.text.download_assemble)) 197 . = ALIGN(0x4); 198 _rom_size_download_end = .; 199 _rom_size_download = _rom_size_download_end - _rom_size_download_start; 200 KEEP(SORT(libwifi_base.o)(.text*)) 201 KEEP(SORT(*)(.wifi.rom.text*)) 202 . = ALIGN(0x20); 203 _rom_wifi_rom_end = .; 204 _rom_size_libwifi = _rom_wifi_rom_end - _rom_size_download; 205 KEEP(SORT(libbsp_base.o)(.text*)) 206 _rom_bsp_rom_end = .; 207 _rom_size_libbsp = _rom_bsp_rom_end - _rom_wifi_rom_end; 208 KEEP(SORT(liblitekernel_base.o)(.text*)) 209 _rom_kernel_rom_end = .; 210 _rom_size_kernel = _rom_kernel_rom_end - _rom_bsp_rom_end; 211 LIBGCC_ROM_FUN(KEEP_SORT_GCC_TEXT) 212 _rom_libgcc_end = .; 213 _rom_size_libgcc = _rom_libgcc_end - _rom_kernel_rom_end; 214 KEEP(SORT(libc_base.o)(.text*)) 215 _rom_libc_rom_end = .; 216 _rom_size_libc = _rom_libc_rom_end - _rom_libgcc_end; 217 KEEP(SORT(libsec_base.o)(.text*)) 218 _rom_sec_rom_end = .; 219 _rom_size_libsec = _rom_sec_rom_end - _rom_libc_rom_end; 220 __text_cache_end1_ = .; 221 KEEP(SORT(libwifi_base.o)(.rodata*)) 222 KEEP(SORT(*)(.wifi.rom.rodata*)) 223 . = ALIGN(0x4); 224 _rom_hi1131_wifi_rom_rodata_end = .; 225 _rom_size_rodata_wifi = _rom_hi1131_wifi_rom_rodata_end - _rom_sec_rom_end; 226 KEEP(SORT(libbsp_base.o)(.rodata*)) 227 KEEP(SORT(*)(.bsp.rom.rodata)) 228 _rom_libbsp_rom_rodata_end = .; 229 _rom_size_rodata_bsp = _rom_libbsp_rom_rodata_end - _rom_hi1131_wifi_rom_rodata_end; 230 KEEP(SORT(liblitekernel_base.o)(.rodata*)) 231 _rom_litekenel_rom_rodata_end = .; 232 _rom_size_rodata_kernel = _rom_litekenel_rom_rodata_end - _rom_size_rodata_bsp; 233 LIBGCC_ROM_FUN(KEEP_SORT_GCC_RODATA) 234 _rom_libgcc_rodata_end = .; 235 _rom_size_rodata_libgcc = _rom_libgcc_rodata_end - _rom_litekenel_rom_rodata_end; 236 KEEP(SORT(libc_base.o)(.rodata*)) 237 _rom_libcrom_rodata_end = .; 238 _rom_size_rodata_libc = _rom_libcrom_rodata_end - _rom_libgcc_rodata_end; 239 KEEP(SORT(libsec_base.o)(.rodata*)) 240 _rom_libsec_rom_rodata_end = .; 241 _rom_size_rodata_sec = _rom_libsec_rom_rodata_end - _rom_libcrom_rodata_end; 242 __rom_text_end__ = .; 243 } > ROM_TEXT 244 __rom_text_size__ = __rom_text_end__ - __rom_text_begin__; 245 246 .data_rom0 : AT (ROM_DATA0_LMA) 247 { 248 . = ALIGN(0x20); 249 __rom_data0_begin__ = .; 250 KEEP(SORT(liblitekernel_base.o) (.data.kernel.rom*)) 251 KEEP(SORT(*)(.bsp.rom.data0)) 252 . = ALIGN(0x4); 253 __rom_data0_end__ = .; 254 } > ROM_DATA0 255 __rom_data0_size__ = __rom_data0_end__ - __rom_data0_begin__; 256 _rom_size_total = __rom_data0_size__ + __rom_text_size__; 257 __rom_data0_load = ROM_TEXT_VMA + ROM_TEXT_LEN; 258 259#if defined(CONFIG_FLASH_ENCRYPT_SUPPORT) 260 .crypto_ram_text : AT (RAM_CRYPTO_TEXT_LMA) 261 { 262 __crypto_ram_text_load = LOADADDR(.crypto_ram_text); 263 __crypto_ram_text_start = .; 264 . = ALIGN(0x20); 265 KEEP(*(.crypto.ram.text)) 266 . = ALIGN(0x20); 267 __crypto_ram_text_end = .; 268 } > CRYPTO_RAM 269 __crypto_ram_text_size = __crypto_ram_text_end - __crypto_ram_text_start; 270#endif 271 272 .text_non_rom : AT (NON_ROM_TEXT_LMA) 273 { 274 . = ALIGN(0x20); 275 __text_cache_start2_ = .; 276 KEEP(*(.entry.text)) 277 . = ALIGN(0x20); 278 #if defined(ROM_BIN_TEST) 279 . += TEST_OFFSET; 280 #endif 281 SORT(*)(.init*) 282 SORT(*)(.rom.text.patch) 283 SORT(*)(EXCLUDE_FILE(*libasm_flash.o) .text*) 284 /* temply add the following for hks. */ 285 SORT(*)(EXCLUDE_FILE(*libasm_flash.o) .got*) 286 . = ALIGN(0x20); 287 __text_cache_end2_ = .; 288 SORT(*)(.rodata*) 289 . = ALIGN(0x20); 290 __text_rodata_end_ = .; 291 . = ALIGN(0x20); 292 } > NON_ROM_TEXT_REGION 293 294 /* zInit code and data - will be freed after init */ 295 .zInit : AT (ADDR(.text_non_rom) + SIZEOF(.text_non_rom)) 296 { 297 __zinitcall_bsp_start = .; 298 KEEP (*(.zinitcall.bsp0.init)) 299 KEEP (*(.zinitcall.bsp1.init)) 300 KEEP (*(.zinitcall.bsp2.init)) 301 KEEP (*(.zinitcall.bsp3.init)) 302 KEEP (*(.zinitcall.bsp4.init)) 303 __zinitcall_bsp_end = .; 304 __zinitcall_device_start = .; 305 KEEP (*(.zinitcall.device0.init)) 306 KEEP (*(.zinitcall.device1.init)) 307 KEEP (*(.zinitcall.device2.init)) 308 KEEP (*(.zinitcall.device3.init)) 309 KEEP (*(.zinitcall.device4.init)) 310 __zinitcall_device_end = .; 311 __zinitcall_core_start = .; 312 KEEP (*(.zinitcall.core0.init)) 313 KEEP (*(.zinitcall.core1.init)) 314 KEEP (*(.zinitcall.core2.init)) 315 KEEP (*(.zinitcall.core3.init)) 316 KEEP (*(.zinitcall.core4.init)) 317 __zinitcall_core_end = .; 318 __zinitcall_sys_service_start = .; 319 KEEP (*(.zinitcall.sys.service0.init)) 320 KEEP (*(.zinitcall.sys.service1.init)) 321 KEEP (*(.zinitcall.sys.service2.init)) 322 KEEP (*(.zinitcall.sys.service3.init)) 323 KEEP (*(.zinitcall.sys.service4.init)) 324 __zinitcall_sys_service_end = .; 325 __zinitcall_sys_feature_start = .; 326 KEEP (*(.zinitcall.sys.feature0.init)) 327 KEEP (*(.zinitcall.sys.feature1.init)) 328 KEEP (*(.zinitcall.sys.feature2.init)) 329 KEEP (*(.zinitcall.sys.feature3.init)) 330 KEEP (*(.zinitcall.sys.feature4.init)) 331 __zinitcall_sys_feature_end = .; 332 __zinitcall_run_start = .; 333 KEEP (*(.zinitcall.run0.init)) 334 KEEP (*(.zinitcall.run1.init)) 335 KEEP (*(.zinitcall.run2.init)) 336 KEEP (*(.zinitcall.run3.init)) 337 KEEP (*(.zinitcall.run4.init)) 338 __zinitcall_run_end = .; 339 __zinitcall_app_service_start = .; 340 KEEP (*(.zinitcall.app.service0.init)) 341 KEEP (*(.zinitcall.app.service1.init)) 342 KEEP (*(.zinitcall.app.service2.init)) 343 KEEP (*(.zinitcall.app.service3.init)) 344 KEEP (*(.zinitcall.app.service4.init)) 345 __zinitcall_app_service_end = .; 346 __zinitcall_app_feature_start = .; 347 KEEP (*(.zinitcall.app.feature0.init)) 348 KEEP (*(.zinitcall.app.feature1.init)) 349 KEEP (*(.zinitcall.app.feature2.init)) 350 KEEP (*(.zinitcall.app.feature3.init)) 351 KEEP (*(.zinitcall.app.feature4.init)) 352 __zinitcall_app_feature_end = .; 353 __zinitcall_test_start = .; 354 KEEP (*(.zinitcall.test0.init)) 355 KEEP (*(.zinitcall.test1.init)) 356 KEEP (*(.zinitcall.test2.init)) 357 KEEP (*(.zinitcall.test3.init)) 358 KEEP (*(.zinitcall.test4.init)) 359 __zinitcall_test_end = .; 360 __zinitcall_exit_start = .; 361 KEEP (*(.zinitcall.exit0.init)) 362 KEEP (*(.zinitcall.exit1.init)) 363 KEEP (*(.zinitcall.exit2.init)) 364 KEEP (*(.zinitcall.exit3.init)) 365 KEEP (*(.zinitcall.exit4.init)) 366 __zinitcall_exit_end = .; 367 } > NON_ROM_TEXT_REGION 368 369 .ram_text : AT (RAM_TEXT_LMA) 370 { 371 __ram_text_load = LOADADDR(.ram_text); 372 __ram_text_start = .; 373 . = ALIGN(0x20); 374 #if defined(ROM_BIN_TEST) 375 . += TEST_OFFSET; 376 #endif 377 #if defined(HI1131TEST) 378 KEEP(*(.trap_vector.text)) 379 KEEP(*(.kernel.ram.text)) 380 KEEP(*(.ram.kernel)) 381 KEEP(*(.bsp.ram.text)) 382 KEEP(SORT(libasm_flash.o)(.text*)) 383 #else 384 SORT(*)(.trap_vector.text) 385 SORT(*)(.kernel.ram.text) 386 SORT(*)(.ram.kernel) 387 SORT(*)(.bsp.ram.text) 388 SORT(libasm_flash.o)(.text*) 389 #endif 390 . = ALIGN(0x20); 391 __ram_text_end = .; 392 } > RAM 393 __ram_text_size = __ram_text_end - __ram_text_start; 394 395 /* data section */ 396 .data : AT (NON_ROM_DATA_LMA) 397 { 398#if defined(HI_ON_FLASH) 399 __data_load = LOADADDR(.data); 400#else 401 __data_load = LOADADDR(.data) - ORIGIN(FLASH) + ORIGIN(RAM); 402#endif 403 . = ALIGN(0x20); 404 __data_start = .; 405 #if defined(ROM_BIN_TEST) 406 . += TEST_OFFSET; 407 #endif 408 SORT(*)(EXCLUDE_FILE(*liblitekernel_base.o *libc_base.o *libsec_base.o *libwifi_base.o *libbsp_base.o) .data*) 409 SORT(*)(EXCLUDE_FILE(*.o) .wifi.rom.data*) 410 SORT(*)(EXCLUDE_FILE(*.o) .data.system.rom*) 411 SORT(*)(.rom.data.patch) 412 SORT(*)(.sdata*) 413 . = ALIGN(4); 414 INCLUDE system_config.ld 415 . = ALIGN(0x20); 416 __data_end = .; 417 } > RAM 418 __data_size = __data_end - __data_start; 419 420 .data_rom1 : AT (ROM_DATA1_LMA) 421 { 422#if defined(HI_ON_FLASH) 423 __rom_data1_load = LOADADDR(.data_rom1); 424#else 425 __rom_data1_load = LOADADDR(.data_rom1) - ORIGIN(FLASH) + ORIGIN(RAM); 426#endif 427 . = ALIGN(0x20); 428 __rom_data1_begin__ = .; 429 LIBGCC_ROM_FUN(KEEP_SORT_GCC_DATA) 430 KEEP(SORT(liblitekernel_base.o) (.data*)) 431 KEEP(SORT(libbsp_base.o) (.data*)) 432 KEEP(SORT(*)(.data.system.rom*)) 433 KEEP(SORT(libc_base.o) (.data*)) 434 KEEP(SORT(libsec_base.o) (.data*)) 435 KEEP(SORT(libwifi_base.o) (.data*)) 436 KEEP(SORT(*)(.wifi.rom.data*)) 437 . = ALIGN(4); 438 __rom_data1_end__ = .; 439 } > ROM_DATA1 440 __rom_data1_size__ = __rom_data1_end__ - __rom_data1_begin__; 441 442 /* used for fpb remap table g_fpbRemap declaration in los_fpb.c */ 443 .patch_bss (NOLOAD) : 444 { 445 __patch_bss_start = .; 446 KEEP(SORT(*)(.fpb.remap)) 447 . = ALIGN(4); 448 __patch_bss_end__ = .; 449 } > PATCH_BSS 450 451 .bss_rom (NOLOAD) : 452 { 453 . = ALIGN(0x20); 454 __rom_bss_begin__ = .; 455 __global_pointer$ = .; 456 LIBGCC_ROM_FUN(KEEP_SORT_GCC_BSS) 457 KEEP(SORT(liblitekernel_base.o )(.bss*)) 458 KEEP(SORT(libc_base.o)(.bss*)) 459 KEEP(SORT(libsec_base.o)(.bss*)) 460 KEEP(SORT(libbsp_base.o)(.bss*)) 461 KEEP(SORT(libwifi_base.o) (.bss*)) 462 KEEP(SORT(*)(.wifi.rom.bss*)) 463 . = ALIGN(4); 464 __rom_bss_end__ = .; 465 /* ԭrom_bssδװ����������ӷ�rom bss(1568 byte:1.53K) */ 466 SORT(*)(.extern.rom.bss*) 467 . = ALIGN(4); 468 __extern_rom_bss_end__ = .; 469 } > ROM_BSS 470 __rom_bss_size__ = __extern_rom_bss_end__ - __rom_bss_begin__; 471 472 /* rom_data_extern1 section */ 473 .extern_rom_data1_bss (NOLOAD) : 474 { 475 . = ALIGN(0x20); 476 __extern_rom_data1_bss_begin__ = .; 477 #if defined(ROM_BIN_TEST) 478 . += TEST_OFFSET; 479 #endif 480 SORT(*)(.extern.rom.data1.bss*) 481 . = ALIGN(4); 482 __extern_rom_data1_bss_end__ = .; 483 } > EXTERN_ROM_DATA1_BSS 484 __extern_rom_data1_bss_size__ = __extern_rom_data1_bss_end__ - __extern_rom_data1_bss_begin__; 485 486 __RAM_BEGIN__ = ORIGIN(RAM); 487 __RAM_SIZE__ = LENGTH(RAM); 488 __DOWNLOAD_IRQ_STACK = ORIGIN(ROM_BSS) - DOWNLOAD_STACK_SIZE; /* overlap with STACK*/ 489 __DOWNLOAD_STACK_END = ORIGIN(ROM_BSS); /* relate to KERNEL_MALLOC_STAR_ADDR and KERNEL_MALLOC_END_ADDR */ 490 491 /* bss section */ 492#ifdef LOSCFG_DEBUG_KASAN 493 .bss (NOLOAD) : ALIGN(0x20) 494 { 495 . = ALIGN(0x20); 496 __bss_begin = .; 497 #if defined(ROM_BIN_TEST) 498 . += TEST_OFFSET; 499 #endif 500 SORT(*)(.bss*) 501 SORT(*)(.rom.bss.patch) 502 SORT(*)(.sbss*) 503 . = ALIGN(0x20); 504 __bss_end = .; 505 } > RAM_FPGA 506#else 507 .bss (NOLOAD) : ALIGN(0x20) 508 { 509 . = ALIGN(0x20); 510 __bss_begin = .; 511 #if defined(ROM_BIN_TEST) 512 . += TEST_OFFSET; 513 #endif 514 SORT(*)(.bss*) 515 SORT(*)(.rom.bss.patch) 516 SORT(*)(.sbss*) 517 . = ALIGN(0x20); 518 __bss_end = .; 519 } > RAM 520#endif 521 __bss_size__ = __bss_end - __bss_begin; 522 523 /* End of uninitialized data segment */ 524 _end = .; 525#if (defined HI_BOARD_ASIC) || (!defined HI_ON_FLASH) 526 .heap (NOLOAD) : 527 { 528 . = ALIGN(64); 529 __HEAP_BEGIN__ = ABSOLUTE(.); 530 } > RAM 531 __HEAP_SIZE__ = (__RAM_BEGIN__ + __RAM_SIZE__) - __HEAP_BEGIN__; 532 533 .stack (NOLOAD) : ALIGN(0x20) 534 { 535 __SYSTEM_STACK_BEGIN__ = .; 536 . += STACK_SIZE; 537 __SYSTEM_STACK_END__ = .; 538 . = ALIGN(0x20); 539 __irq_stack_bottom = .; 540 . += IRQ_STACK_SIZE; 541 __irq_stack_top = .; 542 . = ALIGN(0x20); 543 __nmi_stack_bottom = .; 544 . += NMI_STACK_SIZE; 545 __nmi_stack_top = .; 546 . = ALIGN(0x20); 547 __exc_stack_bottom = .; 548 . += EXC_STACK_SIZE; 549 __exc_stack_top = .; 550 } > STACK 551 __SYSTEM_STACK_SIZE__ = __SYSTEM_STACK_END__ - __SYSTEM_STACK_BEGIN__; 552 553 .check_info (NOLOAD) : 554 { 555 __check_info_addr = .; 556 KEEP(SORT(*)(.lowpower.ram.bss*)) 557 } > CHECK_INFO 558#else 559 .stack (NOLOAD) : ALIGN(0x20) 560 { 561 __SYSTEM_STACK_BEGIN__ = .; 562 . += STACK_SIZE; 563 __SYSTEM_STACK_END__ = .; 564 . = ALIGN(0x20); 565 __irq_stack_bottom = .; 566 . += IRQ_STACK_SIZE; 567 __irq_stack_top = .; 568 . = ALIGN(0x20); 569 __nmi_stack_bottom = .; 570 . += NMI_STACK_SIZE; 571 __nmi_stack_top = .; 572 __exc_stack_bottom = .; 573 . += EXC_STACK_SIZE; 574 __exc_stack_top = .; 575 . = ALIGN(0x20); 576 } > RAM_FPGA 577 __SYSTEM_STACK_SIZE__ = __SYSTEM_STACK_END__ - __SYSTEM_STACK_BEGIN__; 578 579 .heap (NOLOAD) : 580 { 581 . = ALIGN(64); 582 __HEAP_BEGIN__ = ABSOLUTE(.); 583 } > RAM_FPGA 584 __HEAP_SIZE__ = (RAM_FPGA_START + RAM_FPGA_LEN) - __HEAP_BEGIN__; 585 586 .check_info (NOLOAD) : 587 { 588 __check_info_addr = .; 589 KEEP(SORT(*)(.lowpower.ram.bss*)) 590 } > CHECK_INFO 591#endif 592 __ram_start = RAM_START; 593 __ram_end = RAM_START + RAM_SIZE; 594 . = ALIGN(4); 595 end = . ; 596} 597 598