1OUTPUT_FORMAT("elf32-littleriscv", "elf32-littleriscv", "elf32-littleriscv") 2OUTPUT_ARCH("riscv") 3ENTRY(_start) 4 5RAM_ADDR_START = 0x80000000; 6RAM_ADDR_SIZE = 128M; 7FLASH_LOAD_START = RAM_ADDR_START; 8FLASH_LOAD_SIZE = RAM_ADDR_SIZE; 9EXCEPT_STACK_SIZE = 2K; 10NMI_STACK_SIZE = 1K; 11START_AND_IRQ_STACK_SIZE = 8K; 12 13MEMORY 14{ 15 ram(rwx) : ORIGIN = RAM_ADDR_START, LENGTH = RAM_ADDR_SIZE 16 flash(rwx) : ORIGIN = FLASH_LOAD_START, LENGTH = FLASH_LOAD_SIZE 17} 18SECTIONS 19{ 20 .text : ALIGN(0x20) 21 { 22 __text_start = .; 23 . = ALIGN(0x10); 24 *(.start.text) 25 *(.interrupt.*) 26 *(.text.*) 27 . = ALIGN(0x20); 28 __rodata_start = .; 29 . = ALIGN(0x10); 30 *(.rodata.* .srodata.*) 31 . = ALIGN(0x20); 32 __text_end = .; 33 _hdf_drivers_start = .; 34 KEEP(*(.hdf.driver)) 35 _hdf_drivers_end = .; 36 } > ram AT > flash 37 .data : ALIGN(0x20) 38 { 39 __global_pointer$ = . + 0x800; 40 __data_load_start = LOADADDR(.data); 41 __data_start = .; 42 . = ALIGN(0x10); 43 *(.data.* .sdata.*) 44 . = ALIGN(0x20); 45 __data_end = .; 46 _edata = .; 47 } > ram AT > flash 48 __data_load_size = SIZEOF(.data); 49 .bss (NOLOAD): ALIGN(0x20) 50 { 51 __bss_start = .; 52 . = ALIGN(0x10); 53 *(.kernel.bss*) 54 *(.bss.* .sbss.*) 55 . = ALIGN(0x20); 56 __bss_end = .; 57 } > ram 58 .stack (NOLOAD): ALIGN(0x40) 59 { 60 __stack_bootom = .; 61 . += EXCEPT_STACK_SIZE; 62 __except_stack_top = .; 63 . += START_AND_IRQ_STACK_SIZE; 64 __start_and_irq_stack_top = .; 65 } > ram 66 67 .heap (NOLOAD): ALIGN(0x40) 68 { 69 __heap_start = .; 70 } > ram 71 72 __heap_size = RAM_ADDR_SIZE - (__heap_start - __text_start); 73 _end = .; 74 end = .; 75} 76