MEMORY { ram: org = 0x0, len = 0x10000 } SECTIONS { /* The first group contains code and constant data */ GROUP : { /* First take all code from all objects and libraries */ .text_vle (TEXT) : { *(.interrupt) *(.text) *(.rodata) *(.rdata) *(.init) *(.fini) *(.eini) . = (.+15) & ~15; } /* Next take all small CONST data */ .sdata2 (TEXT) : {} } > ram /* The second group will allocate space for the initialized data * (.data/.sdata) and the unititialized data (.bss/.sbss) in the "ram" section. */ GROUP : { .data (DATA) : {} /* .sdata contains small address data */ .sdata (DATA) : {} /* This will allocate the the .bss symbols */ .sbss (BSS) : {} .bss (BSS) : {} /* Any space left over will be used as a heap */ } >ram } __SP_INIT = ADDR(ram)+SIZEOF(ram); __DATA_RAM = ADDR(.data); __DATA_ROM = __DATA_RAM; __DATA_END = ADDR(.sdata)+SIZEOF(.sdata); __BSS_START = ADDR(.sbss); __BSS_END = ADDR(.bss)+SIZEOF(.bss);