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