MEMORY { FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 128K RAM (rwx) : ORIGIN = 0x1FFFE000, LENGTH = 16K } SECTIONS { .text : { . = 0; KEEP(*(.vectors)) *(.startup*) /* TODO: does linker detect startup overflow onto flashconfig? */ . = 0x400; KEEP(*(.flashconfig*)) *(.text*) *(.rodata*) . = ALIGN(4); KEEP(*(.init)) . = ALIGN(4); __preinit_array_start = .; KEEP (*(.preinit_array)) __preinit_array_end = .; __init_array_start = .; KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array)) __init_array_end = .; } > FLASH = 0xFF .ARM.exidx : { __exidx_start = .; *(.ARM.exidx* .gnu.linkonce.armexidx.*) __exidx_end = .; } > FLASH _etext = .; .usbdescriptortable (NOLOAD) : { /* . = ORIGIN(RAM); */ . = ALIGN(512); *(.usbdescriptortable*) } > RAM .usbbuffers (NOLOAD) : { . = ALIGN(4); *(.usbbuffers*) } > RAM .data : AT (_etext) { . = ALIGN(4); _sdata = .; *(.data*) . = ALIGN(4); _edata = .; } > RAM .noinit (NOLOAD) : { *(.noinit*) } > RAM .bss : { . = ALIGN(4); _sbss = .; *(.bss*) *(COMMON) . = ALIGN(4); _ebss = .; } > RAM _estack = ORIGIN(RAM) + LENGTH(RAM); }