11bd4fe43Sopenharmony_ciOUTPUT_ARCH( "riscv" )
21bd4fe43Sopenharmony_ciENTRY(_start)
31bd4fe43Sopenharmony_ci
41bd4fe43Sopenharmony_ciMEMORY
51bd4fe43Sopenharmony_ci{
61bd4fe43Sopenharmony_ci    /* FlashBoot location on Flash */
71bd4fe43Sopenharmony_ci    FLASH (rwx) : ORIGIN = 0x400000+0x5A0, LENGTH = 32K-0x5A0-0x3C0
81bd4fe43Sopenharmony_ci    /* ram for stack */
91bd4fe43Sopenharmony_ci    STACK(xrw) : ORIGIN = 0x100000,LENGTH = 8K
101bd4fe43Sopenharmony_ci    /* ram for common bss and data */
111bd4fe43Sopenharmony_ci    SRAM(xrw) : ORIGIN = 0x100000+8K,LENGTH = 8K
121bd4fe43Sopenharmony_ci    /* ram for fix rom bss and data */
131bd4fe43Sopenharmony_ci    ROM_BSS_DATA(rx): ORIGIN = 0x100000+16K,LENGTH = 2K
141bd4fe43Sopenharmony_ci    /* ram for code rom bss and data */
151bd4fe43Sopenharmony_ci    CODE_ROM_BSS_DATA(rx): ORIGIN = 0x100000+18K,LENGTH = 2K
161bd4fe43Sopenharmony_ci    /* signature */
171bd4fe43Sopenharmony_ci    SIGN(rx): ORIGIN = 0x100000+40K,LENGTH = 0x5A0
181bd4fe43Sopenharmony_ci    /* ram for flashboot */
191bd4fe43Sopenharmony_ci    FLASH_BOOT(rx): ORIGIN = 0x100000+40K+0x5A0,LENGTH = 80K-0x5A0
201bd4fe43Sopenharmony_ci    /* ram for heap */
211bd4fe43Sopenharmony_ci    HEAP(xrw): ORIGIN = 0xdc000,LENGTH = 144K
221bd4fe43Sopenharmony_ci    /* rom for fixed rom */
231bd4fe43Sopenharmony_ci    FIXED_ROM(rx): ORIGIN = 0x00000000+11K,LENGTH = 21K
241bd4fe43Sopenharmony_ci    /* rom for code rom */
251bd4fe43Sopenharmony_ci    CODE_ROM(rx): ORIGIN = 0x003b8000+278K,LENGTH = 10K
261bd4fe43Sopenharmony_ci}
271bd4fe43Sopenharmony_ci
281bd4fe43Sopenharmony_ciSECTIONS
291bd4fe43Sopenharmony_ci{
301bd4fe43Sopenharmony_ci      /* The startup code goes first into FLASH */
311bd4fe43Sopenharmony_ci    .text.entry : ALIGN(4)
321bd4fe43Sopenharmony_ci    {
331bd4fe43Sopenharmony_ci        KEEP(*(.text.entry))
341bd4fe43Sopenharmony_ci    } > FLASH_BOOT AT>FLASH
351bd4fe43Sopenharmony_ci
361bd4fe43Sopenharmony_ci    .rom.text :
371bd4fe43Sopenharmony_ci    {
381bd4fe43Sopenharmony_ci        . = ALIGN(4);
391bd4fe43Sopenharmony_ci        KEEP(SORT(libbase.o)(.text*))
401bd4fe43Sopenharmony_ci        KEEP(SORT(libbase.o)(.rodata*))
411bd4fe43Sopenharmony_ci        . = ALIGN(4);
421bd4fe43Sopenharmony_ci    } > FIXED_ROM
431bd4fe43Sopenharmony_ci
441bd4fe43Sopenharmony_ci    .rom.code.text :
451bd4fe43Sopenharmony_ci    {
461bd4fe43Sopenharmony_ci        . = ALIGN(4);
471bd4fe43Sopenharmony_ci        KEEP(SORT(libcodebase.o)(.text*))
481bd4fe43Sopenharmony_ci        KEEP(SORT(libcodebase.o)(.rodata*))
491bd4fe43Sopenharmony_ci        . = ALIGN(4);
501bd4fe43Sopenharmony_ci    } > CODE_ROM
511bd4fe43Sopenharmony_ci
521bd4fe43Sopenharmony_ci    /* Stack in SRAM at Highest addresses */
531bd4fe43Sopenharmony_ci    .stacks (NOLOAD) :
541bd4fe43Sopenharmony_ci    {
551bd4fe43Sopenharmony_ci        . = ALIGN(4);
561bd4fe43Sopenharmony_ci        __SYSTEM_STACK_BEGIN__ = ORIGIN(STACK);
571bd4fe43Sopenharmony_ci        KEEP(*(.stacks))
581bd4fe43Sopenharmony_ci        __SYSTEM_STACK_END__ = ORIGIN(STACK) + LENGTH(STACK);
591bd4fe43Sopenharmony_ci    } > STACK
601bd4fe43Sopenharmony_ci    __SYSTEM_STACK_SIZE__ = __SYSTEM_STACK_END__ - __SYSTEM_STACK_BEGIN__;
611bd4fe43Sopenharmony_ci    __stack_top = __SYSTEM_STACK_END__;
621bd4fe43Sopenharmony_ci
631bd4fe43Sopenharmony_ci    .rom.data :
641bd4fe43Sopenharmony_ci    {
651bd4fe43Sopenharmony_ci        . = ALIGN(4);
661bd4fe43Sopenharmony_ci        __rom_copy_start = LOADADDR(.rom.data);
671bd4fe43Sopenharmony_ci        . = ALIGN(4);
681bd4fe43Sopenharmony_ci        __rom_copy_ram_start = .;
691bd4fe43Sopenharmony_ci        __global_pointer$ = .;
701bd4fe43Sopenharmony_ci        KEEP(SORT(libbase.o) (.data*))
711bd4fe43Sopenharmony_ci        . = ALIGN(4);
721bd4fe43Sopenharmony_ci        __rom_copy_ram_end = .;
731bd4fe43Sopenharmony_ci    } > ROM_BSS_DATA AT>FIXED_ROM
741bd4fe43Sopenharmony_ci    __rom_copy_size = __rom_copy_ram_end - __rom_copy_ram_start;
751bd4fe43Sopenharmony_ci
761bd4fe43Sopenharmony_ci    .rom.code.data :
771bd4fe43Sopenharmony_ci    {
781bd4fe43Sopenharmony_ci        . = ALIGN(4);
791bd4fe43Sopenharmony_ci        __code_rom_copy_start = LOADADDR(.rom.code.data);
801bd4fe43Sopenharmony_ci        . = ALIGN(4);
811bd4fe43Sopenharmony_ci        __code_rom_copy_ram_start = .;
821bd4fe43Sopenharmony_ci        KEEP(SORT(libcodebase.o) (.data*))
831bd4fe43Sopenharmony_ci        . = ALIGN(4);
841bd4fe43Sopenharmony_ci        __code_rom_copy_ram_end = .;
851bd4fe43Sopenharmony_ci    }>CODE_ROM_BSS_DATA AT>CODE_ROM
861bd4fe43Sopenharmony_ci    __code_rom_copy_size = __code_rom_copy_ram_end - __code_rom_copy_ram_start;
871bd4fe43Sopenharmony_ci
881bd4fe43Sopenharmony_ci    .rom.bss :
891bd4fe43Sopenharmony_ci    {
901bd4fe43Sopenharmony_ci        . = ALIGN(4);
911bd4fe43Sopenharmony_ci        __rom_bss_start = .;
921bd4fe43Sopenharmony_ci        KEEP(libbase.o (.bss))
931bd4fe43Sopenharmony_ci        KEEP(libbase.o (.bss*))
941bd4fe43Sopenharmony_ci        KEEP(libbase.o (COMMON))
951bd4fe43Sopenharmony_ci        . = ALIGN(4);
961bd4fe43Sopenharmony_ci        __rom_bss_end = .;
971bd4fe43Sopenharmony_ci    } > ROM_BSS_DATA AT>FIXED_ROM
981bd4fe43Sopenharmony_ci
991bd4fe43Sopenharmony_ci    .rom.code.bss :
1001bd4fe43Sopenharmony_ci    {
1011bd4fe43Sopenharmony_ci        . = ALIGN(4);
1021bd4fe43Sopenharmony_ci        __code_rom_bss_start = .;
1031bd4fe43Sopenharmony_ci        KEEP(libcodebase.o (.bss))
1041bd4fe43Sopenharmony_ci        KEEP(libcodebase.o (.bss*))
1051bd4fe43Sopenharmony_ci        KEEP(libcodebase.o (COMMON))
1061bd4fe43Sopenharmony_ci        . = ALIGN(4);
1071bd4fe43Sopenharmony_ci        __code_rom_bss_end = .;
1081bd4fe43Sopenharmony_ci    }>CODE_ROM_BSS_DATA AT>CODE_ROM
1091bd4fe43Sopenharmony_ci
1101bd4fe43Sopenharmony_ci    .text : ALIGN(4)
1111bd4fe43Sopenharmony_ci    {
1121bd4fe43Sopenharmony_ci        __start_addr = .;
1131bd4fe43Sopenharmony_ci        SORT(*)(.boot.data.key)
1141bd4fe43Sopenharmony_ci        *(.text*)
1151bd4fe43Sopenharmony_ci        . = ALIGN(4);
1161bd4fe43Sopenharmony_ci        __rodata_start = .;
1171bd4fe43Sopenharmony_ci        *(.rodata*)
1181bd4fe43Sopenharmony_ci        . = ALIGN(4);
1191bd4fe43Sopenharmony_ci        __rodata_end = .;
1201bd4fe43Sopenharmony_ci        __text_end = .;
1211bd4fe43Sopenharmony_ci    } > FLASH_BOOT AT>FLASH
1221bd4fe43Sopenharmony_ci
1231bd4fe43Sopenharmony_ci    /* data section */
1241bd4fe43Sopenharmony_ci    .data : ALIGN(4)
1251bd4fe43Sopenharmony_ci    {
1261bd4fe43Sopenharmony_ci        __data_load = LOADADDR(.data);
1271bd4fe43Sopenharmony_ci        __data_start = .;
1281bd4fe43Sopenharmony_ci        *(.data*)
1291bd4fe43Sopenharmony_ci        . = ALIGN(4);
1301bd4fe43Sopenharmony_ci        __data_end = .;
1311bd4fe43Sopenharmony_ci    } > FLASH_BOOT AT>FLASH
1321bd4fe43Sopenharmony_ci
1331bd4fe43Sopenharmony_ci    /* bss section */
1341bd4fe43Sopenharmony_ci    .bss (NOLOAD) : ALIGN(4)
1351bd4fe43Sopenharmony_ci    {
1361bd4fe43Sopenharmony_ci        __bss_begin__ = .;
1371bd4fe43Sopenharmony_ci        *(.bss*)
1381bd4fe43Sopenharmony_ci        *(COMMON)
1391bd4fe43Sopenharmony_ci        . = ALIGN(4);
1401bd4fe43Sopenharmony_ci        __bss_end__ = .;
1411bd4fe43Sopenharmony_ci    } > FLASH_BOOT
1421bd4fe43Sopenharmony_ci    __bss_size__ = __bss_end__ - __bss_begin__;
1431bd4fe43Sopenharmony_ci
1441bd4fe43Sopenharmony_ci    .heap (NOLOAD) :
1451bd4fe43Sopenharmony_ci    {
1461bd4fe43Sopenharmony_ci        . = ALIGN(4);
1471bd4fe43Sopenharmony_ci        __heap_begin__ = ORIGIN(HEAP);
1481bd4fe43Sopenharmony_ci        KEEP(*(.heap))
1491bd4fe43Sopenharmony_ci        __heap_end__ =  __heap_begin__ + LENGTH(HEAP);
1501bd4fe43Sopenharmony_ci    } > HEAP
1511bd4fe43Sopenharmony_ci}
152