/* Linker script for ATSAMD21G17D – with 8KB bootloader (flash starts at 0x2000) */ OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") OUTPUT_ARCH(arm) SEARCH_DIR(.) MEMORY { rom (rx) : ORIGIN = 0x00002000, LENGTH = 0x0001E000 /* 120K (128K - 8K bootloader) */ ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 /* 16K */ } __StackTop = ORIGIN(ram) + LENGTH(ram); __StackLimit = __StackTop - 0x1000; SECTIONS { .text : { __text_start__ = .; . = ALIGN(4); KEEP(*(.isr_vector)) KEEP(*(.vectors .vectors.*)) *(.text .text.* .gnu.linkonce.t.*) *(.glue_7t) *(.glue_7) *(.rodata .rodata* .gnu.linkonce.r.*) *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); KEEP(*(.init)) __preinit_array_start = .; KEEP(*(.preinit_array)) __preinit_array_end = .; __init_array_start = .; KEEP(*(SORT(.init_array.*))) KEEP(*(.init_array)) __init_array_end = .; KEEP(*crtbegin.o(.ctors)) KEEP(*(EXCLUDE_FILE(*crtend.o) .ctors)) KEEP(*(SORT(.ctors.*))) KEEP(*crtend.o(.ctors)) . = ALIGN(4); KEEP(*(.fini)) __fini_array_start = .; KEEP(*(.fini_array)) KEEP(*(SORT(.fini_array.*))) __fini_array_end = .; KEEP(*crtbegin.o(.dtors)) KEEP(*(EXCLUDE_FILE(*crtend.o) .dtors)) KEEP(*(SORT(.dtors.*))) KEEP(*crtend.o(.dtors)) . = ALIGN(4); } > rom PROVIDE_HIDDEN(__exidx_start = .); .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } > rom PROVIDE_HIDDEN(__exidx_end = .); . = ALIGN(4); __etext = .; _etext = .; .data : AT(__etext) { . = ALIGN(4); __data_start__ = .; _srelocate = .; *(.ramfunc .ramfunc.*); *(.data .data.*); . = ALIGN(4); __data_end__ = .; _erelocate = .; } > ram .bss (NOLOAD) : { . = ALIGN(4); __bss_start__ = .; _sbss = .; _szero = .; *(.bss .bss.*) *(COMMON) . = ALIGN(4); __bss_end__ = .; _ebss = .; _ezero = .; } > ram . = ALIGN(4); end = .; _end = .; }