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+0x040,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