OUTPUT_ARCH(loongarch) ENTRY(_start) MEMORY { isram (rwxai) : ORIGIN = 0x1c000000, LENGTH = 512K dsram (rwxai) : ORIGIN = 0x1c080000, LENGTH = 512K } SECTIONS { __stack_size = DEFINED(__stack_size) ? __stack_size : 4K; .init : { KEEP(*(SORT_NONE(.init))) } >isram AT>isram . = ALIGN(16); .text : { _ftext = .; *(.text.unlikely .text.unlikely.*) *(.text.startup .text.startup.*) *(.text .text.*) *(.gnu.linkonce.t.*) } >isram AT>isram . = ALIGN(16); .rodata : { *(.rdata) *(.rodata .rodata.*) *(.gnu.linkonce.r.*) *(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata .srodata.*) } >isram AT>isram . = ALIGN(16); PROVIDE(__etext = .); PROVIDE(_etext = .); PROVIDE(etext = .); PROVIDE(_data_lma = .); .data ORIGIN(dsram) : { PROVIDE(_data = .); *(.data .data.*) *(.gnu.linkonce.d.*) . = ALIGN(16); PROVIDE(__global_pointer$ = . + 0x800); *(.sdata .sdata.*) *(.gnu.linkonce.s.*) . = ALIGN(16); PROVIDE(_edata = .); PROVIDE(edata = .); } >dsram AT>isram .bss : { PROVIDE(__bss_start = .); *(.sbss*) *(.sbss.*) *(.dynsbss) *(.scommon) *(.bss) *(.bss.*) *(.dynbss) *(.gnu.linkonce.sb.*) *(.gnu.linkonce.b.*) *(COMMON) . = ALIGN(16); PROVIDE(_end = .); PROVIDE(end = .); } >dsram AT>dsram PROVIDE(__heap_start = _end); .stack ORIGIN(dsram) + LENGTH(dsram) - __stack_size : { PROVIDE(_heap_end = .); PROVIDE(__heap_end = _heap_end); PROVIDE(__heap_size = __heap_end - __heap_start); . = __stack_size; PROVIDE(_stack = .); } >dsram AT>dsram }