Linker script
Il file che dice al linker in quale punto della memoria va ogni parte del programma: una nota a piè di pagina su un PC, l'intera mappa nel firmware.
Un sistema operativo carica i programmi dove gli pare. Un microcontrollore non ha sistema operativo, solo la flash a un indirizzo e la RAM a un altro, e il programma deve combaciare esattamente. Il linker script (.ld per GNU ld) dichiara queste regioni in un blocco MEMORY e poi colloca le sezioni: codice e costanti (.text, .rodata) in flash, variabili inizializzate a zero (.bss) in RAM.
Il caso interessante è .data, le variabili inizializzate, che devono stare in RAM ma i cui valori iniziali devono sopravvivere a uno spegnimento. Lo script le dota quindi di due indirizzi, uno in flash e uno in RAM, e il codice di avvio le copia prima di main(). Anche simboli come la cima dello stack sono definiti qui. Quasi tutti prendono il modello del produttore e non lo toccano mai — finché un bootloader non ha bisogno di spazio.