11bd4fe43Sopenharmony_ciOUTPUT_ARCH( "riscv" )
21bd4fe43Sopenharmony_ciENTRY(_start)
31bd4fe43Sopenharmony_ci
41bd4fe43Sopenharmony_ci#ifdef LOSCFG_DEBUG_KASAN
51bd4fe43Sopenharmony_ci#define MAX_BIN_SIZE           3M
61bd4fe43Sopenharmony_ci#else
71bd4fe43Sopenharmony_ci#define MAX_BIN_SIZE           2M
81bd4fe43Sopenharmony_ci#endif
91bd4fe43Sopenharmony_ci
101bd4fe43Sopenharmony_ci#ifdef HI_BOARD_ASIC
111bd4fe43Sopenharmony_ci#ifdef HI_ON_FLASH
121bd4fe43Sopenharmony_ci
131bd4fe43Sopenharmony_ci#ifdef CONFIG_CHIP_PKT_48K
141bd4fe43Sopenharmony_ci#define RAM_SIZE               264K /* PKT_B:48K */
151bd4fe43Sopenharmony_ci#define RAM_START              0x000dc000 /* PKT_B:48K */
161bd4fe43Sopenharmony_ci#else
171bd4fe43Sopenharmony_ci#define RAM_SIZE               280K /* PKT_B:32K*/
181bd4fe43Sopenharmony_ci#define RAM_START              0x000d8000 /* PKT_B:32K */
191bd4fe43Sopenharmony_ci#endif
201bd4fe43Sopenharmony_ci
211bd4fe43Sopenharmony_ci#else
221bd4fe43Sopenharmony_ci#define RAM_SIZE               248K /* PKT_B:64K + NO DC */
231bd4fe43Sopenharmony_ci#define RAM_START              0x000e0000 /* PKT_B:64K */
241bd4fe43Sopenharmony_ci#endif
251bd4fe43Sopenharmony_ci#else
261bd4fe43Sopenharmony_ci#ifdef HI_ON_FLASH
271bd4fe43Sopenharmony_ci#ifdef LOSCFG_DEBUG_KASAN
281bd4fe43Sopenharmony_ci#define RAM_SIZE               896K
291bd4fe43Sopenharmony_ci#else
301bd4fe43Sopenharmony_ci#define RAM_SIZE               1M
311bd4fe43Sopenharmony_ci#endif
321bd4fe43Sopenharmony_ci#define RAM_START              0x00100000
331bd4fe43Sopenharmony_ci#else
341bd4fe43Sopenharmony_ci#define RAM_SIZE               248K /* PKT_B:64K + NO DC */
351bd4fe43Sopenharmony_ci#define RAM_START              0x000e0000 /* PKT_B:64K */
361bd4fe43Sopenharmony_ci#endif
371bd4fe43Sopenharmony_ci#endif
381bd4fe43Sopenharmony_ci
391bd4fe43Sopenharmony_ci#ifdef LOSCFG_DEBUG_KASAN
401bd4fe43Sopenharmony_ci#define FLASH_SIZE             3M
411bd4fe43Sopenharmony_ci#else
421bd4fe43Sopenharmony_ci#define FLASH_SIZE             2M
431bd4fe43Sopenharmony_ci#endif
441bd4fe43Sopenharmony_ci
451bd4fe43Sopenharmony_ci#ifdef CONFIG_FLASH_ENCRYPT_SUPPORT
461bd4fe43Sopenharmony_ci#define CRYPTO_RAM_LEN         4096
471bd4fe43Sopenharmony_ci#endif
481bd4fe43Sopenharmony_ci
491bd4fe43Sopenharmony_ciSTACK_SIZE      = 2k;               /* needs to be calculated for your application */
501bd4fe43Sopenharmony_ciIRQ_STACK_SIZE  = 3K;
511bd4fe43Sopenharmony_ciEXC_STACK_SIZE  = 2K;
521bd4fe43Sopenharmony_ci#if (defined CONFIG_TEE_HUKS_SUPPORT) || (defined CONFIG_TARGET_SIG_RSA_V15) || (defined CONFIG_TARGET_SIG_RSA_PSS) || (defined CONFIG_TARGET_SIG_ECC)
531bd4fe43Sopenharmony_ciNMI_STACK_SIZE  = 2K;
541bd4fe43Sopenharmony_ci#else
551bd4fe43Sopenharmony_ciNMI_STACK_SIZE  = 0K;
561bd4fe43Sopenharmony_ci#endif
571bd4fe43Sopenharmony_ciDOWNLOAD_STACK_SIZE = 4K;
581bd4fe43Sopenharmony_ciDOWNLOAD_IRQ_STACK_SIZE = 2K;
591bd4fe43Sopenharmony_ci
601bd4fe43Sopenharmony_ci/* actually rom data0 size is 944 byte, when rom fixed, may all data can be placed in rom. */
611bd4fe43Sopenharmony_ci#define ROM_DATA0_LEN          32     /* 32 bytes align */
621bd4fe43Sopenharmony_ci
631bd4fe43Sopenharmony_ci#ifdef LOSCFG_DEBUG_KASAN
641bd4fe43Sopenharmony_ci#define ROM_DATA1_LEN          5056   /* 32 bytes align */
651bd4fe43Sopenharmony_ci#else
661bd4fe43Sopenharmony_ci#define ROM_DATA1_LEN          2016   /* 32 bytes align */
671bd4fe43Sopenharmony_ci#endif
681bd4fe43Sopenharmony_ci
691bd4fe43Sopenharmony_ci#define ROM_BSS_LEN            11776  /* 32 bytes align */
701bd4fe43Sopenharmony_ci#define PATCH_BSS_LEN          1024   /* 1024 bytes align */
711bd4fe43Sopenharmony_ci
721bd4fe43Sopenharmony_ci#ifdef HI_ON_FLASH
731bd4fe43Sopenharmony_ci#define SECURE_HEAD            0  /* iot has no Signature head */
741bd4fe43Sopenharmony_ci#else
751bd4fe43Sopenharmony_ci#define SECURE_HEAD            0x5A0  /* non-iot Signature lenth */
761bd4fe43Sopenharmony_ci#endif
771bd4fe43Sopenharmony_ci
781bd4fe43Sopenharmony_ci#define ROM_TEXT_LEN           (278K - ROM_DATA0_LEN)
791bd4fe43Sopenharmony_ci#define CHECK_INFO_LEN         0x40
801bd4fe43Sopenharmony_ci#if (defined HI_BOARD_ASIC) || (!defined HI_ON_FLASH)
811bd4fe43Sopenharmony_ci#define STACK_LEN              (STACK_SIZE + IRQ_STACK_SIZE + EXC_STACK_SIZE + NMI_STACK_SIZE)
821bd4fe43Sopenharmony_ci#endif
831bd4fe43Sopenharmony_ci
841bd4fe43Sopenharmony_ci#define ROM_RAM_LEN            (ROM_DATA0_LEN + ROM_DATA1_LEN + ROM_BSS_LEN + CHECK_INFO_LEN)
851bd4fe43Sopenharmony_ci#define ROM_RAM_START          (0x11DFFF - ROM_RAM_LEN + 1)
861bd4fe43Sopenharmony_ci#define ROM_START              0x003b8000
871bd4fe43Sopenharmony_ci#define FLASH_START            0x00400000
881bd4fe43Sopenharmony_ci#define BIN_START              FLASH_FIRM_START /* The value of <FLASH_FIRM_START> macro is transfered by scons. And the value varies with the signature. */
891bd4fe43Sopenharmony_ci
901bd4fe43Sopenharmony_ci#ifndef HI_BOARD_ASIC
911bd4fe43Sopenharmony_ci/* only use in FPGA. */
921bd4fe43Sopenharmony_ci#define RAM_FPGA_START         0x11E000
931bd4fe43Sopenharmony_ci#define RAM_FPGA_LEN           (1M - 120K)
941bd4fe43Sopenharmony_ci#endif
951bd4fe43Sopenharmony_ci
961bd4fe43Sopenharmony_ci#if defined(ROM_BIN_TEST)
971bd4fe43Sopenharmony_ci#define TEST_OFFSET            7
981bd4fe43Sopenharmony_ci#else
991bd4fe43Sopenharmony_ci#define TEST_OFFSET            0
1001bd4fe43Sopenharmony_ci#endif
1011bd4fe43Sopenharmony_ci
1021bd4fe43Sopenharmony_ci#define ROM_TEXT_VMA           ROM_START
1031bd4fe43Sopenharmony_ci
1041bd4fe43Sopenharmony_ci#define ROM_BSS_VMA            ROM_RAM_START
1051bd4fe43Sopenharmony_ci#define ROM_DATA0_VMA          (ROM_RAM_START + ROM_BSS_LEN)
1061bd4fe43Sopenharmony_ci#define ROM_DATA1_VMA          (ROM_DATA0_VMA + ROM_DATA0_LEN)
1071bd4fe43Sopenharmony_ci#define CHECK_INFO_VMA         (ROM_DATA1_VMA + ROM_DATA1_LEN)
1081bd4fe43Sopenharmony_ci#define PATCH_BSS_START        RAM_START
1091bd4fe43Sopenharmony_ci#ifdef CONFIG_FLASH_ENCRYPT_SUPPORT
1101bd4fe43Sopenharmony_ci#define CRYPTO_RAM_START       (PATCH_BSS_START + PATCH_BSS_LEN + SECURE_HEAD)
1111bd4fe43Sopenharmony_ci#define NON_ROM_RAM_START      (CRYPTO_RAM_START + CRYPTO_RAM_LEN)
1121bd4fe43Sopenharmony_ci#else
1131bd4fe43Sopenharmony_ci#define NON_ROM_RAM_START      (PATCH_BSS_START + PATCH_BSS_LEN + SECURE_HEAD)
1141bd4fe43Sopenharmony_ci#endif
1151bd4fe43Sopenharmony_ci#if (defined HI_BOARD_ASIC) || (!defined HI_ON_FLASH)
1161bd4fe43Sopenharmony_ci#define STACK_VMA              ROM_RAM_START - STACK_LEN
1171bd4fe43Sopenharmony_ci#endif
1181bd4fe43Sopenharmony_ci
1191bd4fe43Sopenharmony_ci#define ROM_TEXT_LMA           (BIN_START - ROM_TEXT_LEN - ROM_DATA0_LEN)
1201bd4fe43Sopenharmony_ci#define ROM_DATA0_LMA          (ROM_TEXT_LMA + ROM_TEXT_LEN)
1211bd4fe43Sopenharmony_ci
1221bd4fe43Sopenharmony_ci#ifdef HI_ON_FLASH
1231bd4fe43Sopenharmony_ci#define NON_ROM_TEXT_REGION     FLASH
1241bd4fe43Sopenharmony_ci#else
1251bd4fe43Sopenharmony_ci#define NON_ROM_TEXT_REGION     RAM
1261bd4fe43Sopenharmony_ci#endif
1271bd4fe43Sopenharmony_ci
1281bd4fe43Sopenharmony_ci#ifdef CONFIG_FLASH_ENCRYPT_SUPPORT
1291bd4fe43Sopenharmony_ci#define RAM_CRYPTO_TEXT_LMA     (ROM_DATA0_LMA + ROM_DATA0_LEN)
1301bd4fe43Sopenharmony_ci#define NON_ROM_TEXT_LMA        (RAM_CRYPTO_TEXT_LMA + CRYPTO_RAM_LEN)
1311bd4fe43Sopenharmony_ci#else
1321bd4fe43Sopenharmony_ci#define NON_ROM_TEXT_LMA        (ROM_DATA0_LMA + ROM_DATA0_LEN)
1331bd4fe43Sopenharmony_ci#endif
1341bd4fe43Sopenharmony_ci
1351bd4fe43Sopenharmony_ci#define ZINIT_NO_ROM_TEXT_LMA   ((NON_ROM_TEXT_LMA + SIZEOF (.text_non_rom) + (0x20) - 1) & ~ ((0x20) - 1))
1361bd4fe43Sopenharmony_ci#define RAM_TEXT_LMA            ((ZINIT_NO_ROM_TEXT_LMA + SIZEOF (.zInit) + (0x20) - 1) & ~ ((0x20) - 1))
1371bd4fe43Sopenharmony_ci#define NON_ROM_DATA_LMA        ((RAM_TEXT_LMA + SIZEOF (.ram_text) + (0x20) -1) & ~ ((0x20) - 1))
1381bd4fe43Sopenharmony_ci#define ROM_DATA1_LMA           ((NON_ROM_DATA_LMA + SIZEOF(.data) + (0x20) - 1) & ~ ((0x20) - 1))
1391bd4fe43Sopenharmony_ci
1401bd4fe43Sopenharmony_ci#if (defined HI_BOARD_ASIC) || (!defined HI_ON_FLASH)
1411bd4fe43Sopenharmony_ci
1421bd4fe43Sopenharmony_ci#ifdef CONFIG_FLASH_ENCRYPT_SUPPORT
1431bd4fe43Sopenharmony_ci#define RAM_LEN (RAM_SIZE - ROM_RAM_LEN - PATCH_BSS_LEN - STACK_LEN- SECURE_HEAD - CRYPTO_RAM_LEN)
1441bd4fe43Sopenharmony_ci#else
1451bd4fe43Sopenharmony_ci#define RAM_LEN (RAM_SIZE - ROM_RAM_LEN - PATCH_BSS_LEN - STACK_LEN - SECURE_HEAD)
1461bd4fe43Sopenharmony_ci#endif
1471bd4fe43Sopenharmony_ci
1481bd4fe43Sopenharmony_ci#else
1491bd4fe43Sopenharmony_ci#define RAM_LEN (RAM_SIZE - ROM_RAM_LEN - PATCH_BSS_LEN - SECURE_HEAD)
1501bd4fe43Sopenharmony_ci#endif
1511bd4fe43Sopenharmony_ci
1521bd4fe43Sopenharmony_ci#define KEEP_SORT_GCC_TEXT(obj) KEEP(SORT(*libgcc.a:obj)(.text*))
1531bd4fe43Sopenharmony_ci#define KEEP_SORT_GCC_RODATA(obj) KEEP(SORT(*libgcc.a:obj)(.rodata*))
1541bd4fe43Sopenharmony_ci#define KEEP_SORT_GCC_DATA(obj) KEEP(SORT(*libgcc.a:obj)(.data*))
1551bd4fe43Sopenharmony_ci#define KEEP_SORT_GCC_BSS(obj) KEEP(SORT(*libgcc.a:obj)(.bss*))
1561bd4fe43Sopenharmony_ci#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)
1571bd4fe43Sopenharmony_ci
1581bd4fe43Sopenharmony_ciMEMORY
1591bd4fe43Sopenharmony_ci{
1601bd4fe43Sopenharmony_ci    BIN(rx) :          ORIGIN = BIN_START,           LENGTH = MAX_BIN_SIZE
1611bd4fe43Sopenharmony_ci    ROM_TEXT(rx) :     ORIGIN = ROM_TEXT_VMA,        LENGTH = ROM_TEXT_LEN        /* code and rodata of download,kernel,lib,bsp,wifi... */
1621bd4fe43Sopenharmony_ci    ROM_DATA0(rwx) :   ORIGIN = ROM_DATA0_VMA,       LENGTH = ROM_DATA0_LEN       /* data used by download rom code */
1631bd4fe43Sopenharmony_ci    ROM_DATA1(rwx) :   ORIGIN = ROM_DATA1_VMA,       LENGTH = 1768                /* data used by other rom code:1768 byte */
1641bd4fe43Sopenharmony_ci    ROM_BSS(rwx) :     ORIGIN = ROM_BSS_VMA,         LENGTH = ROM_BSS_LEN         /* bss used by rom code */
1651bd4fe43Sopenharmony_ci#if (defined HI_BOARD_ASIC) || (!defined HI_ON_FLASH)
1661bd4fe43Sopenharmony_ci    STACK(rw) :        ORIGIN = STACK_VMA,           LENGTH = STACK_LEN           /* stack */
1671bd4fe43Sopenharmony_ci#endif
1681bd4fe43Sopenharmony_ci    CHECK_INFO(rw) :   ORIGIN = CHECK_INFO_VMA,      LENGTH = CHECK_INFO_LEN      /* check info used by rom code */
1691bd4fe43Sopenharmony_ci#ifdef CONFIG_FLASH_ENCRYPT_SUPPORT
1701bd4fe43Sopenharmony_ci    FLASH(rwx) :       ORIGIN = FLASH_FIRM_START + CRYPTO_RAM_LEN,    LENGTH = FLASH_START + FLASH_SIZE - FLASH_FIRM_START - CRYPTO_RAM_LEN
1711bd4fe43Sopenharmony_ci#else
1721bd4fe43Sopenharmony_ci    FLASH(rwx) :       ORIGIN = FLASH_FIRM_START,    LENGTH = FLASH_START + FLASH_SIZE - FLASH_FIRM_START
1731bd4fe43Sopenharmony_ci#endif
1741bd4fe43Sopenharmony_ci    PATCH_BSS(rwx) :   ORIGIN = PATCH_BSS_START,     LENGTH = PATCH_BSS_LEN       /* flash patch remap */
1751bd4fe43Sopenharmony_ci#ifdef CONFIG_FLASH_ENCRYPT_SUPPORT
1761bd4fe43Sopenharmony_ci    CRYPTO_RAM(rwx) :  ORIGIN = CRYPTO_RAM_START,    LENGTH = CRYPTO_RAM_LEN      /* 4K kernel crypto */
1771bd4fe43Sopenharmony_ci#endif
1781bd4fe43Sopenharmony_ci    RAM(rwx) :         ORIGIN = NON_ROM_RAM_START,   LENGTH = RAM_LEN             /* non rom data,bss,stack,heap */
1791bd4fe43Sopenharmony_ci    EXTERN_ROM_DATA1_BSS(rwx) :        ORIGIN = 0x11dec8,   LENGTH = ROM_DATA1_LEN-1768    /* use extern rom data 1 as non_rom bss */
1801bd4fe43Sopenharmony_ci#if (defined HI_BOARD_FPGA) && (defined HI_ON_FLASH)
1811bd4fe43Sopenharmony_ci    RAM_FPGA(rwx) :    ORIGIN = RAM_FPGA_START,      LENGTH = RAM_FPGA_LEN        /* FPGA stack and heap */
1821bd4fe43Sopenharmony_ci#endif
1831bd4fe43Sopenharmony_ci}
1841bd4fe43Sopenharmony_ci
1851bd4fe43Sopenharmony_ciSECTIONS
1861bd4fe43Sopenharmony_ci{
1871bd4fe43Sopenharmony_ci    .text_rom : AT (ROM_TEXT_LMA)
1881bd4fe43Sopenharmony_ci    {
1891bd4fe43Sopenharmony_ci        . = ALIGN(0x20);
1901bd4fe43Sopenharmony_ci        __rom_text_begin__ = .;
1911bd4fe43Sopenharmony_ci        __text_cache_start1_ = .;
1921bd4fe43Sopenharmony_ci        _rom_size_download_start = .;
1931bd4fe43Sopenharmony_ci        KEEP(SORT(*)(.text.download_entry))
1941bd4fe43Sopenharmony_ci        . = ALIGN(0x4);
1951bd4fe43Sopenharmony_ci        KEEP(SORT(*)(.text.trap_download_vector))
1961bd4fe43Sopenharmony_ci        KEEP(SORT(*)(.text.download_assemble))
1971bd4fe43Sopenharmony_ci        . = ALIGN(0x4);
1981bd4fe43Sopenharmony_ci        _rom_size_download_end = .;
1991bd4fe43Sopenharmony_ci        _rom_size_download = _rom_size_download_end - _rom_size_download_start;
2001bd4fe43Sopenharmony_ci        KEEP(SORT(libwifi_base.o)(.text*))
2011bd4fe43Sopenharmony_ci        KEEP(SORT(*)(.wifi.rom.text*))
2021bd4fe43Sopenharmony_ci        . = ALIGN(0x20);
2031bd4fe43Sopenharmony_ci        _rom_wifi_rom_end = .;
2041bd4fe43Sopenharmony_ci        _rom_size_libwifi = _rom_wifi_rom_end - _rom_size_download;
2051bd4fe43Sopenharmony_ci        KEEP(SORT(libbsp_base.o)(.text*))
2061bd4fe43Sopenharmony_ci        _rom_bsp_rom_end = .;
2071bd4fe43Sopenharmony_ci        _rom_size_libbsp = _rom_bsp_rom_end - _rom_wifi_rom_end;
2081bd4fe43Sopenharmony_ci        KEEP(SORT(liblitekernel_base.o)(.text*))
2091bd4fe43Sopenharmony_ci        _rom_kernel_rom_end = .;
2101bd4fe43Sopenharmony_ci        _rom_size_kernel = _rom_kernel_rom_end - _rom_bsp_rom_end;
2111bd4fe43Sopenharmony_ci        LIBGCC_ROM_FUN(KEEP_SORT_GCC_TEXT)
2121bd4fe43Sopenharmony_ci        _rom_libgcc_end = .;
2131bd4fe43Sopenharmony_ci        _rom_size_libgcc = _rom_libgcc_end - _rom_kernel_rom_end;
2141bd4fe43Sopenharmony_ci        KEEP(SORT(libc_base.o)(.text*))
2151bd4fe43Sopenharmony_ci        _rom_libc_rom_end = .;
2161bd4fe43Sopenharmony_ci        _rom_size_libc = _rom_libc_rom_end - _rom_libgcc_end;
2171bd4fe43Sopenharmony_ci        KEEP(SORT(libsec_base.o)(.text*))
2181bd4fe43Sopenharmony_ci        _rom_sec_rom_end = .;
2191bd4fe43Sopenharmony_ci        _rom_size_libsec = _rom_sec_rom_end - _rom_libc_rom_end;
2201bd4fe43Sopenharmony_ci        __text_cache_end1_ = .;
2211bd4fe43Sopenharmony_ci        KEEP(SORT(libwifi_base.o)(.rodata*))
2221bd4fe43Sopenharmony_ci        KEEP(SORT(*)(.wifi.rom.rodata*))
2231bd4fe43Sopenharmony_ci        . = ALIGN(0x4);
2241bd4fe43Sopenharmony_ci        _rom_hi1131_wifi_rom_rodata_end = .;
2251bd4fe43Sopenharmony_ci        _rom_size_rodata_wifi = _rom_hi1131_wifi_rom_rodata_end - _rom_sec_rom_end;
2261bd4fe43Sopenharmony_ci        KEEP(SORT(libbsp_base.o)(.rodata*))
2271bd4fe43Sopenharmony_ci        KEEP(SORT(*)(.bsp.rom.rodata))
2281bd4fe43Sopenharmony_ci        _rom_libbsp_rom_rodata_end = .;
2291bd4fe43Sopenharmony_ci        _rom_size_rodata_bsp = _rom_libbsp_rom_rodata_end - _rom_hi1131_wifi_rom_rodata_end;
2301bd4fe43Sopenharmony_ci        KEEP(SORT(liblitekernel_base.o)(.rodata*))
2311bd4fe43Sopenharmony_ci        _rom_litekenel_rom_rodata_end = .;
2321bd4fe43Sopenharmony_ci        _rom_size_rodata_kernel = _rom_litekenel_rom_rodata_end - _rom_size_rodata_bsp;
2331bd4fe43Sopenharmony_ci        LIBGCC_ROM_FUN(KEEP_SORT_GCC_RODATA)
2341bd4fe43Sopenharmony_ci        _rom_libgcc_rodata_end = .;
2351bd4fe43Sopenharmony_ci        _rom_size_rodata_libgcc = _rom_libgcc_rodata_end - _rom_litekenel_rom_rodata_end;
2361bd4fe43Sopenharmony_ci        KEEP(SORT(libc_base.o)(.rodata*))
2371bd4fe43Sopenharmony_ci        _rom_libcrom_rodata_end = .;
2381bd4fe43Sopenharmony_ci        _rom_size_rodata_libc = _rom_libcrom_rodata_end - _rom_libgcc_rodata_end;
2391bd4fe43Sopenharmony_ci        KEEP(SORT(libsec_base.o)(.rodata*))
2401bd4fe43Sopenharmony_ci        _rom_libsec_rom_rodata_end = .;
2411bd4fe43Sopenharmony_ci        _rom_size_rodata_sec = _rom_libsec_rom_rodata_end - _rom_libcrom_rodata_end;
2421bd4fe43Sopenharmony_ci        __rom_text_end__ = .;
2431bd4fe43Sopenharmony_ci    } > ROM_TEXT
2441bd4fe43Sopenharmony_ci    __rom_text_size__ = __rom_text_end__ - __rom_text_begin__;
2451bd4fe43Sopenharmony_ci
2461bd4fe43Sopenharmony_ci    .data_rom0 : AT (ROM_DATA0_LMA)
2471bd4fe43Sopenharmony_ci    {
2481bd4fe43Sopenharmony_ci        . = ALIGN(0x20);
2491bd4fe43Sopenharmony_ci        __rom_data0_begin__ = .;
2501bd4fe43Sopenharmony_ci        KEEP(SORT(liblitekernel_base.o) (.data.kernel.rom*))
2511bd4fe43Sopenharmony_ci        KEEP(SORT(*)(.bsp.rom.data0))
2521bd4fe43Sopenharmony_ci        . = ALIGN(0x4);
2531bd4fe43Sopenharmony_ci        __rom_data0_end__ = .;
2541bd4fe43Sopenharmony_ci    } > ROM_DATA0
2551bd4fe43Sopenharmony_ci    __rom_data0_size__ = __rom_data0_end__ - __rom_data0_begin__;
2561bd4fe43Sopenharmony_ci    _rom_size_total = __rom_data0_size__ + __rom_text_size__;
2571bd4fe43Sopenharmony_ci    __rom_data0_load = ROM_TEXT_VMA + ROM_TEXT_LEN;
2581bd4fe43Sopenharmony_ci
2591bd4fe43Sopenharmony_ci#if defined(CONFIG_FLASH_ENCRYPT_SUPPORT)
2601bd4fe43Sopenharmony_ci    .crypto_ram_text : AT (RAM_CRYPTO_TEXT_LMA)
2611bd4fe43Sopenharmony_ci    {
2621bd4fe43Sopenharmony_ci        __crypto_ram_text_load = LOADADDR(.crypto_ram_text);
2631bd4fe43Sopenharmony_ci        __crypto_ram_text_start = .;
2641bd4fe43Sopenharmony_ci        . = ALIGN(0x20);
2651bd4fe43Sopenharmony_ci        KEEP(*(.crypto.ram.text))
2661bd4fe43Sopenharmony_ci        . = ALIGN(0x20);
2671bd4fe43Sopenharmony_ci        __crypto_ram_text_end = .;
2681bd4fe43Sopenharmony_ci    } > CRYPTO_RAM
2691bd4fe43Sopenharmony_ci    __crypto_ram_text_size = __crypto_ram_text_end - __crypto_ram_text_start;
2701bd4fe43Sopenharmony_ci#endif
2711bd4fe43Sopenharmony_ci
2721bd4fe43Sopenharmony_ci    .text_non_rom : AT (NON_ROM_TEXT_LMA)
2731bd4fe43Sopenharmony_ci    {
2741bd4fe43Sopenharmony_ci        . = ALIGN(0x20);
2751bd4fe43Sopenharmony_ci        __text_cache_start2_ = .;
2761bd4fe43Sopenharmony_ci        KEEP(*(.entry.text))
2771bd4fe43Sopenharmony_ci        . = ALIGN(0x20);
2781bd4fe43Sopenharmony_ci        #if defined(ROM_BIN_TEST)
2791bd4fe43Sopenharmony_ci        . += TEST_OFFSET;
2801bd4fe43Sopenharmony_ci        #endif
2811bd4fe43Sopenharmony_ci        SORT(*)(.init*)
2821bd4fe43Sopenharmony_ci        SORT(*)(.rom.text.patch)
2831bd4fe43Sopenharmony_ci        SORT(*)(EXCLUDE_FILE(*libasm_flash.o) .text*)
2841bd4fe43Sopenharmony_ci        /* temply add the following for hks. */
2851bd4fe43Sopenharmony_ci        SORT(*)(EXCLUDE_FILE(*libasm_flash.o) .got*)
2861bd4fe43Sopenharmony_ci        . = ALIGN(0x20);
2871bd4fe43Sopenharmony_ci        __text_cache_end2_ = .;
2881bd4fe43Sopenharmony_ci        SORT(*)(.rodata*)
2891bd4fe43Sopenharmony_ci        . = ALIGN(0x20);
2901bd4fe43Sopenharmony_ci        __text_rodata_end_ = .;
2911bd4fe43Sopenharmony_ci        . = ALIGN(0x20);
2921bd4fe43Sopenharmony_ci    } > NON_ROM_TEXT_REGION
2931bd4fe43Sopenharmony_ci
2941bd4fe43Sopenharmony_ci    /* zInit code and data - will be freed after init */
2951bd4fe43Sopenharmony_ci    .zInit : AT (ADDR(.text_non_rom) + SIZEOF(.text_non_rom))
2961bd4fe43Sopenharmony_ci    {
2971bd4fe43Sopenharmony_ci       __zinitcall_bsp_start = .;
2981bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.bsp0.init))
2991bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.bsp1.init))
3001bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.bsp2.init))
3011bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.bsp3.init))
3021bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.bsp4.init))
3031bd4fe43Sopenharmony_ci       __zinitcall_bsp_end = .;
3041bd4fe43Sopenharmony_ci       __zinitcall_device_start = .;
3051bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.device0.init))
3061bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.device1.init))
3071bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.device2.init))
3081bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.device3.init))
3091bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.device4.init))
3101bd4fe43Sopenharmony_ci       __zinitcall_device_end = .;
3111bd4fe43Sopenharmony_ci       __zinitcall_core_start = .;
3121bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.core0.init))
3131bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.core1.init))
3141bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.core2.init))
3151bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.core3.init))
3161bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.core4.init))
3171bd4fe43Sopenharmony_ci       __zinitcall_core_end = .;
3181bd4fe43Sopenharmony_ci       __zinitcall_sys_service_start = .;
3191bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.sys.service0.init))
3201bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.sys.service1.init))
3211bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.sys.service2.init))
3221bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.sys.service3.init))
3231bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.sys.service4.init))
3241bd4fe43Sopenharmony_ci       __zinitcall_sys_service_end = .;
3251bd4fe43Sopenharmony_ci       __zinitcall_sys_feature_start = .;
3261bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.sys.feature0.init))
3271bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.sys.feature1.init))
3281bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.sys.feature2.init))
3291bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.sys.feature3.init))
3301bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.sys.feature4.init))
3311bd4fe43Sopenharmony_ci       __zinitcall_sys_feature_end = .;
3321bd4fe43Sopenharmony_ci       __zinitcall_run_start = .;
3331bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.run0.init))
3341bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.run1.init))
3351bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.run2.init))
3361bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.run3.init))
3371bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.run4.init))
3381bd4fe43Sopenharmony_ci       __zinitcall_run_end = .;
3391bd4fe43Sopenharmony_ci       __zinitcall_app_service_start = .;
3401bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.app.service0.init))
3411bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.app.service1.init))
3421bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.app.service2.init))
3431bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.app.service3.init))
3441bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.app.service4.init))
3451bd4fe43Sopenharmony_ci       __zinitcall_app_service_end = .;
3461bd4fe43Sopenharmony_ci       __zinitcall_app_feature_start = .;
3471bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.app.feature0.init))
3481bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.app.feature1.init))
3491bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.app.feature2.init))
3501bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.app.feature3.init))
3511bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.app.feature4.init))
3521bd4fe43Sopenharmony_ci       __zinitcall_app_feature_end = .;
3531bd4fe43Sopenharmony_ci       __zinitcall_test_start = .;
3541bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.test0.init))
3551bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.test1.init))
3561bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.test2.init))
3571bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.test3.init))
3581bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.test4.init))
3591bd4fe43Sopenharmony_ci       __zinitcall_test_end = .;
3601bd4fe43Sopenharmony_ci       __zinitcall_exit_start = .;
3611bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.exit0.init))
3621bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.exit1.init))
3631bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.exit2.init))
3641bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.exit3.init))
3651bd4fe43Sopenharmony_ci       KEEP (*(.zinitcall.exit4.init))
3661bd4fe43Sopenharmony_ci       __zinitcall_exit_end = .;
3671bd4fe43Sopenharmony_ci    } > NON_ROM_TEXT_REGION
3681bd4fe43Sopenharmony_ci
3691bd4fe43Sopenharmony_ci    .ram_text : AT (RAM_TEXT_LMA)
3701bd4fe43Sopenharmony_ci    {
3711bd4fe43Sopenharmony_ci        __ram_text_load = LOADADDR(.ram_text);
3721bd4fe43Sopenharmony_ci        __ram_text_start = .;
3731bd4fe43Sopenharmony_ci        . = ALIGN(0x20);
3741bd4fe43Sopenharmony_ci        #if defined(ROM_BIN_TEST)
3751bd4fe43Sopenharmony_ci        . += TEST_OFFSET;
3761bd4fe43Sopenharmony_ci        #endif
3771bd4fe43Sopenharmony_ci        #if defined(HI1131TEST)
3781bd4fe43Sopenharmony_ci        KEEP(*(.trap_vector.text))
3791bd4fe43Sopenharmony_ci        KEEP(*(.kernel.ram.text))
3801bd4fe43Sopenharmony_ci        KEEP(*(.ram.kernel))
3811bd4fe43Sopenharmony_ci        KEEP(*(.bsp.ram.text))
3821bd4fe43Sopenharmony_ci        KEEP(SORT(libasm_flash.o)(.text*))
3831bd4fe43Sopenharmony_ci        #else
3841bd4fe43Sopenharmony_ci        SORT(*)(.trap_vector.text)
3851bd4fe43Sopenharmony_ci        SORT(*)(.kernel.ram.text)
3861bd4fe43Sopenharmony_ci        SORT(*)(.ram.kernel)
3871bd4fe43Sopenharmony_ci        SORT(*)(.bsp.ram.text)
3881bd4fe43Sopenharmony_ci        SORT(libasm_flash.o)(.text*)
3891bd4fe43Sopenharmony_ci        #endif
3901bd4fe43Sopenharmony_ci        . = ALIGN(0x20);
3911bd4fe43Sopenharmony_ci        __ram_text_end = .;
3921bd4fe43Sopenharmony_ci    } > RAM
3931bd4fe43Sopenharmony_ci    __ram_text_size = __ram_text_end - __ram_text_start;
3941bd4fe43Sopenharmony_ci
3951bd4fe43Sopenharmony_ci    /* data section */
3961bd4fe43Sopenharmony_ci    .data : AT (NON_ROM_DATA_LMA)
3971bd4fe43Sopenharmony_ci    {
3981bd4fe43Sopenharmony_ci#if defined(HI_ON_FLASH)
3991bd4fe43Sopenharmony_ci        __data_load = LOADADDR(.data);
4001bd4fe43Sopenharmony_ci#else
4011bd4fe43Sopenharmony_ci        __data_load = LOADADDR(.data) - ORIGIN(FLASH) + ORIGIN(RAM);
4021bd4fe43Sopenharmony_ci#endif
4031bd4fe43Sopenharmony_ci       . = ALIGN(0x20);
4041bd4fe43Sopenharmony_ci        __data_start = .;
4051bd4fe43Sopenharmony_ci        #if defined(ROM_BIN_TEST)
4061bd4fe43Sopenharmony_ci        . += TEST_OFFSET;
4071bd4fe43Sopenharmony_ci        #endif
4081bd4fe43Sopenharmony_ci        SORT(*)(EXCLUDE_FILE(*liblitekernel_base.o *libc_base.o *libsec_base.o *libwifi_base.o *libbsp_base.o) .data*)
4091bd4fe43Sopenharmony_ci        SORT(*)(EXCLUDE_FILE(*.o) .wifi.rom.data*)
4101bd4fe43Sopenharmony_ci        SORT(*)(EXCLUDE_FILE(*.o) .data.system.rom*)
4111bd4fe43Sopenharmony_ci        SORT(*)(.rom.data.patch)
4121bd4fe43Sopenharmony_ci        SORT(*)(.sdata*)
4131bd4fe43Sopenharmony_ci        . = ALIGN(4);
4141bd4fe43Sopenharmony_ci        INCLUDE system_config.ld
4151bd4fe43Sopenharmony_ci        . = ALIGN(0x20);
4161bd4fe43Sopenharmony_ci        __data_end = .;
4171bd4fe43Sopenharmony_ci    } > RAM
4181bd4fe43Sopenharmony_ci    __data_size = __data_end - __data_start;
4191bd4fe43Sopenharmony_ci
4201bd4fe43Sopenharmony_ci    .data_rom1 : AT (ROM_DATA1_LMA)
4211bd4fe43Sopenharmony_ci    {
4221bd4fe43Sopenharmony_ci#if defined(HI_ON_FLASH)
4231bd4fe43Sopenharmony_ci        __rom_data1_load = LOADADDR(.data_rom1);
4241bd4fe43Sopenharmony_ci#else
4251bd4fe43Sopenharmony_ci        __rom_data1_load = LOADADDR(.data_rom1) - ORIGIN(FLASH) + ORIGIN(RAM);
4261bd4fe43Sopenharmony_ci#endif
4271bd4fe43Sopenharmony_ci        . = ALIGN(0x20);
4281bd4fe43Sopenharmony_ci        __rom_data1_begin__ = .;
4291bd4fe43Sopenharmony_ci        LIBGCC_ROM_FUN(KEEP_SORT_GCC_DATA)
4301bd4fe43Sopenharmony_ci        KEEP(SORT(liblitekernel_base.o) (.data*))
4311bd4fe43Sopenharmony_ci        KEEP(SORT(libbsp_base.o) (.data*))
4321bd4fe43Sopenharmony_ci        KEEP(SORT(*)(.data.system.rom*))
4331bd4fe43Sopenharmony_ci        KEEP(SORT(libc_base.o) (.data*))
4341bd4fe43Sopenharmony_ci        KEEP(SORT(libsec_base.o) (.data*))
4351bd4fe43Sopenharmony_ci        KEEP(SORT(libwifi_base.o) (.data*))
4361bd4fe43Sopenharmony_ci        KEEP(SORT(*)(.wifi.rom.data*))
4371bd4fe43Sopenharmony_ci        . = ALIGN(4);
4381bd4fe43Sopenharmony_ci        __rom_data1_end__ = .;
4391bd4fe43Sopenharmony_ci    } > ROM_DATA1
4401bd4fe43Sopenharmony_ci    __rom_data1_size__ = __rom_data1_end__ - __rom_data1_begin__;
4411bd4fe43Sopenharmony_ci
4421bd4fe43Sopenharmony_ci    /* used for fpb remap table g_fpbRemap declaration in los_fpb.c */
4431bd4fe43Sopenharmony_ci    .patch_bss (NOLOAD) :
4441bd4fe43Sopenharmony_ci    {
4451bd4fe43Sopenharmony_ci        __patch_bss_start = .;
4461bd4fe43Sopenharmony_ci        KEEP(SORT(*)(.fpb.remap))
4471bd4fe43Sopenharmony_ci        . = ALIGN(4);
4481bd4fe43Sopenharmony_ci        __patch_bss_end__ = .;
4491bd4fe43Sopenharmony_ci    } > PATCH_BSS
4501bd4fe43Sopenharmony_ci
4511bd4fe43Sopenharmony_ci    .bss_rom (NOLOAD) :
4521bd4fe43Sopenharmony_ci    {
4531bd4fe43Sopenharmony_ci        . = ALIGN(0x20);
4541bd4fe43Sopenharmony_ci        __rom_bss_begin__ = .;
4551bd4fe43Sopenharmony_ci        __global_pointer$ = .;
4561bd4fe43Sopenharmony_ci        LIBGCC_ROM_FUN(KEEP_SORT_GCC_BSS)
4571bd4fe43Sopenharmony_ci        KEEP(SORT(liblitekernel_base.o )(.bss*))
4581bd4fe43Sopenharmony_ci        KEEP(SORT(libc_base.o)(.bss*))
4591bd4fe43Sopenharmony_ci        KEEP(SORT(libsec_base.o)(.bss*))
4601bd4fe43Sopenharmony_ci        KEEP(SORT(libbsp_base.o)(.bss*))
4611bd4fe43Sopenharmony_ci        KEEP(SORT(libwifi_base.o) (.bss*))
4621bd4fe43Sopenharmony_ci        KEEP(SORT(*)(.wifi.rom.bss*))
4631bd4fe43Sopenharmony_ci        . = ALIGN(4);
4641bd4fe43Sopenharmony_ci        __rom_bss_end__ = .;
4651bd4fe43Sopenharmony_ci        /* ԭrom_bssδװ����������ӷ�rom bss(1568 byte:1.53K) */
4661bd4fe43Sopenharmony_ci        SORT(*)(.extern.rom.bss*)
4671bd4fe43Sopenharmony_ci        . = ALIGN(4);
4681bd4fe43Sopenharmony_ci        __extern_rom_bss_end__ = .;
4691bd4fe43Sopenharmony_ci    } > ROM_BSS
4701bd4fe43Sopenharmony_ci    __rom_bss_size__ = __extern_rom_bss_end__ - __rom_bss_begin__;
4711bd4fe43Sopenharmony_ci
4721bd4fe43Sopenharmony_ci    /* rom_data_extern1 section */
4731bd4fe43Sopenharmony_ci    .extern_rom_data1_bss (NOLOAD) :
4741bd4fe43Sopenharmony_ci    {
4751bd4fe43Sopenharmony_ci	   . = ALIGN(0x20);
4761bd4fe43Sopenharmony_ci       __extern_rom_data1_bss_begin__ = .;
4771bd4fe43Sopenharmony_ci        #if defined(ROM_BIN_TEST)
4781bd4fe43Sopenharmony_ci        . += TEST_OFFSET;
4791bd4fe43Sopenharmony_ci        #endif
4801bd4fe43Sopenharmony_ci        SORT(*)(.extern.rom.data1.bss*)
4811bd4fe43Sopenharmony_ci        . = ALIGN(4);
4821bd4fe43Sopenharmony_ci        __extern_rom_data1_bss_end__ = .;
4831bd4fe43Sopenharmony_ci    } > EXTERN_ROM_DATA1_BSS
4841bd4fe43Sopenharmony_ci    __extern_rom_data1_bss_size__ = __extern_rom_data1_bss_end__ - __extern_rom_data1_bss_begin__;
4851bd4fe43Sopenharmony_ci
4861bd4fe43Sopenharmony_ci    __RAM_BEGIN__ = ORIGIN(RAM);
4871bd4fe43Sopenharmony_ci    __RAM_SIZE__ = LENGTH(RAM);
4881bd4fe43Sopenharmony_ci    __DOWNLOAD_IRQ_STACK = ORIGIN(ROM_BSS) - DOWNLOAD_STACK_SIZE; /* overlap with STACK*/
4891bd4fe43Sopenharmony_ci    __DOWNLOAD_STACK_END = ORIGIN(ROM_BSS); /* relate to KERNEL_MALLOC_STAR_ADDR and KERNEL_MALLOC_END_ADDR */
4901bd4fe43Sopenharmony_ci
4911bd4fe43Sopenharmony_ci    /* bss section */
4921bd4fe43Sopenharmony_ci#ifdef LOSCFG_DEBUG_KASAN
4931bd4fe43Sopenharmony_ci    .bss (NOLOAD) : ALIGN(0x20)
4941bd4fe43Sopenharmony_ci    {
4951bd4fe43Sopenharmony_ci        . = ALIGN(0x20);
4961bd4fe43Sopenharmony_ci        __bss_begin = .;
4971bd4fe43Sopenharmony_ci        #if defined(ROM_BIN_TEST)
4981bd4fe43Sopenharmony_ci        . += TEST_OFFSET;
4991bd4fe43Sopenharmony_ci        #endif
5001bd4fe43Sopenharmony_ci        SORT(*)(.bss*)
5011bd4fe43Sopenharmony_ci        SORT(*)(.rom.bss.patch)
5021bd4fe43Sopenharmony_ci        SORT(*)(.sbss*)
5031bd4fe43Sopenharmony_ci        . = ALIGN(0x20);
5041bd4fe43Sopenharmony_ci        __bss_end = .;
5051bd4fe43Sopenharmony_ci    } > RAM_FPGA
5061bd4fe43Sopenharmony_ci#else
5071bd4fe43Sopenharmony_ci    .bss (NOLOAD) : ALIGN(0x20)
5081bd4fe43Sopenharmony_ci    {
5091bd4fe43Sopenharmony_ci        . = ALIGN(0x20);
5101bd4fe43Sopenharmony_ci        __bss_begin = .;
5111bd4fe43Sopenharmony_ci        #if defined(ROM_BIN_TEST)
5121bd4fe43Sopenharmony_ci        . += TEST_OFFSET;
5131bd4fe43Sopenharmony_ci        #endif
5141bd4fe43Sopenharmony_ci        SORT(*)(.bss*)
5151bd4fe43Sopenharmony_ci        SORT(*)(.rom.bss.patch)
5161bd4fe43Sopenharmony_ci        SORT(*)(.sbss*)
5171bd4fe43Sopenharmony_ci        . = ALIGN(0x20);
5181bd4fe43Sopenharmony_ci        __bss_end = .;
5191bd4fe43Sopenharmony_ci    } > RAM
5201bd4fe43Sopenharmony_ci#endif
5211bd4fe43Sopenharmony_ci    __bss_size__ = __bss_end - __bss_begin;
5221bd4fe43Sopenharmony_ci
5231bd4fe43Sopenharmony_ci    /* End of uninitialized data segment */
5241bd4fe43Sopenharmony_ci    _end = .;
5251bd4fe43Sopenharmony_ci#if (defined HI_BOARD_ASIC) || (!defined HI_ON_FLASH)
5261bd4fe43Sopenharmony_ci    .heap (NOLOAD) :
5271bd4fe43Sopenharmony_ci    {
5281bd4fe43Sopenharmony_ci        . = ALIGN(64);
5291bd4fe43Sopenharmony_ci        __HEAP_BEGIN__ = ABSOLUTE(.);
5301bd4fe43Sopenharmony_ci    } > RAM
5311bd4fe43Sopenharmony_ci    __HEAP_SIZE__  = (__RAM_BEGIN__ + __RAM_SIZE__) - __HEAP_BEGIN__;
5321bd4fe43Sopenharmony_ci
5331bd4fe43Sopenharmony_ci    .stack (NOLOAD) : ALIGN(0x20)
5341bd4fe43Sopenharmony_ci    {
5351bd4fe43Sopenharmony_ci        __SYSTEM_STACK_BEGIN__ = .;
5361bd4fe43Sopenharmony_ci        . += STACK_SIZE;
5371bd4fe43Sopenharmony_ci        __SYSTEM_STACK_END__ = .;
5381bd4fe43Sopenharmony_ci        . = ALIGN(0x20);
5391bd4fe43Sopenharmony_ci        __irq_stack_bottom = .;
5401bd4fe43Sopenharmony_ci        . += IRQ_STACK_SIZE;
5411bd4fe43Sopenharmony_ci        __irq_stack_top = .;
5421bd4fe43Sopenharmony_ci	. = ALIGN(0x20);
5431bd4fe43Sopenharmony_ci        __nmi_stack_bottom = .;
5441bd4fe43Sopenharmony_ci        . += NMI_STACK_SIZE;
5451bd4fe43Sopenharmony_ci        __nmi_stack_top = .;
5461bd4fe43Sopenharmony_ci        . = ALIGN(0x20);
5471bd4fe43Sopenharmony_ci        __exc_stack_bottom = .;
5481bd4fe43Sopenharmony_ci        . += EXC_STACK_SIZE;
5491bd4fe43Sopenharmony_ci        __exc_stack_top = .;
5501bd4fe43Sopenharmony_ci    } > STACK
5511bd4fe43Sopenharmony_ci    __SYSTEM_STACK_SIZE__ = __SYSTEM_STACK_END__ - __SYSTEM_STACK_BEGIN__;
5521bd4fe43Sopenharmony_ci
5531bd4fe43Sopenharmony_ci    .check_info (NOLOAD) :
5541bd4fe43Sopenharmony_ci    {
5551bd4fe43Sopenharmony_ci        __check_info_addr = .;
5561bd4fe43Sopenharmony_ci        KEEP(SORT(*)(.lowpower.ram.bss*))
5571bd4fe43Sopenharmony_ci    } > CHECK_INFO
5581bd4fe43Sopenharmony_ci#else
5591bd4fe43Sopenharmony_ci    .stack (NOLOAD) : ALIGN(0x20)
5601bd4fe43Sopenharmony_ci    {
5611bd4fe43Sopenharmony_ci        __SYSTEM_STACK_BEGIN__ = .;
5621bd4fe43Sopenharmony_ci        . += STACK_SIZE;
5631bd4fe43Sopenharmony_ci        __SYSTEM_STACK_END__ = .;
5641bd4fe43Sopenharmony_ci        . = ALIGN(0x20);
5651bd4fe43Sopenharmony_ci        __irq_stack_bottom = .;
5661bd4fe43Sopenharmony_ci        . += IRQ_STACK_SIZE;
5671bd4fe43Sopenharmony_ci        __irq_stack_top = .;
5681bd4fe43Sopenharmony_ci        . = ALIGN(0x20);
5691bd4fe43Sopenharmony_ci        __nmi_stack_bottom = .;
5701bd4fe43Sopenharmony_ci        . += NMI_STACK_SIZE;
5711bd4fe43Sopenharmony_ci        __nmi_stack_top = .;
5721bd4fe43Sopenharmony_ci        __exc_stack_bottom = .;
5731bd4fe43Sopenharmony_ci        . += EXC_STACK_SIZE;
5741bd4fe43Sopenharmony_ci        __exc_stack_top = .;
5751bd4fe43Sopenharmony_ci        . = ALIGN(0x20);
5761bd4fe43Sopenharmony_ci    } > RAM_FPGA
5771bd4fe43Sopenharmony_ci    __SYSTEM_STACK_SIZE__ = __SYSTEM_STACK_END__ - __SYSTEM_STACK_BEGIN__;
5781bd4fe43Sopenharmony_ci
5791bd4fe43Sopenharmony_ci    .heap (NOLOAD) :
5801bd4fe43Sopenharmony_ci    {
5811bd4fe43Sopenharmony_ci        . = ALIGN(64);
5821bd4fe43Sopenharmony_ci        __HEAP_BEGIN__ = ABSOLUTE(.);
5831bd4fe43Sopenharmony_ci    } > RAM_FPGA
5841bd4fe43Sopenharmony_ci    __HEAP_SIZE__  = (RAM_FPGA_START + RAM_FPGA_LEN) - __HEAP_BEGIN__;
5851bd4fe43Sopenharmony_ci
5861bd4fe43Sopenharmony_ci    .check_info (NOLOAD) :
5871bd4fe43Sopenharmony_ci    {
5881bd4fe43Sopenharmony_ci        __check_info_addr = .;
5891bd4fe43Sopenharmony_ci        KEEP(SORT(*)(.lowpower.ram.bss*))
5901bd4fe43Sopenharmony_ci    } > CHECK_INFO
5911bd4fe43Sopenharmony_ci#endif
5921bd4fe43Sopenharmony_ci    __ram_start = RAM_START;
5931bd4fe43Sopenharmony_ci    __ram_end = RAM_START + RAM_SIZE;
5941bd4fe43Sopenharmony_ci    . = ALIGN(4);
5951bd4fe43Sopenharmony_ci    end = . ;
5961bd4fe43Sopenharmony_ci}
5971bd4fe43Sopenharmony_ci
598