MEMORY { ram (wxa) : ORIGIN = 0x80000000, LENGTH = 128M } PHDRS { text PT_LOAD; rodata PT_LOAD; data PT_LOAD; bss PT_LOAD; } SECTIONS { .text : ALIGN(4K) { PROVIDE(_text_start = .); *(.text.init); *(.text .text.*); . = ALIGN(4K); PROVIDE(_text_end = .); } >ram AT>ram :text PROVIDE(_global_pointer = .); .rodata : ALIGN(4K) { PROVIDE(_rodata_start = .); *(.rodata .rodata.*); . = ALIGN(4K); PROVIDE(_rodata_end = .); } >ram AT>ram :rodata .data : ALIGN(4K) { PROVIDE(_data_start = .); *(.data .data.*); . = ALIGN(4K); PROVIDE(_data_end = .); } >ram AT>ram :data .bss : ALIGN(4K) { PROVIDE(_bss_start = .); *(.sbss .sbss.*); *(.bss .bss.*); . = ALIGN(4K); PROVIDE(_bss_end = .); } >ram AT>ram :bss . = ALIGN(4K); PROVIDE(_stack_start = .); PROVIDE(_stack_top = _stack_start + 0x100000); PROVIDE(_stack_end = _stack_top); PROVIDE(_ram_start = ORIGIN(ram)); PROVIDE(_ram_end = _ram_start + LENGTH(ram)); PROVIDE(_heap_start = _stack_end); PROVIDE(_heap_size = ORIGIN(ram) + LENGTH(ram) - _heap_start); PROVIDE(_heap_end = _heap_start + _heap_size); }