MEMORY { RAM (wx) : ORIGIN = 0x0, LENGTH = 128K } SECTIONS { .text : { *(.text*) *(.rodata*) } > RAM .data : { *(.data*) } > RAM .bss : { *(.bss*) *(COMMON) } > RAM /* Add stack at the end of RAM */ . = ALIGN(4); _end = .; PROVIDE(end = .); /* Define stack size and location */ _stack_size = 0x4000; /* Example stack size: 16KB */ _stack_end = ORIGIN(RAM) + LENGTH(RAM); /* End of RAM */ _stack_start = _stack_end - _stack_size; /* Calculate start of the stack */ .stack (NOLOAD) : { . = ALIGN(4); . = . + _stack_size; . = ALIGN(4); _sp = .; } > RAM PROVIDE(__stack = _sp); }