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+0x150, LENGTH = 32K-0x150-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 = 0x150 181bd4fe43Sopenharmony_ci /* ram for flashboot */ 191bd4fe43Sopenharmony_ci FLASH_BOOT(rx): ORIGIN = 0x100000+40K+0x150,LENGTH = 80K-0x150 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