/* !!!!!!!!!!!! STM32Duino default linker script * This script extends the default linker script to add a .noinit * section. This section is just mapped to RAM, but it is emitted * separately from the .data and .bss sections (both of which are * initialized by startup code), so any variables in this section are * untouched on startup (so they survive across resets). * * This script is intended to supplied to the linker's -T / --script * option as the primary linker script. When the linker sees an INSERT * command, this will cause it to *also* read the default linker script * (after reading this script) and then executing the INSERT commands * after both scripts have been read. * * Note that parsing of linker scripts is a bit peculiar, e.g. INSERT * does not textually inserts, it inserts any generated output sections. * Also, because this script is read *first*, we cannot refer to things * in the default script. In particular, it would make sense to add > * RAM to the output section below to ensure that the section is mapped * into RAM, but the RAM region is not defined yet (I think it would * work though, but produces warnings). Instead, we just rely on the * defaults used by the linker: If no region is defined for an output * section, it will just map to first address after the previous section * (.bss in this case, which is fine). */ SECTIONS { /* Define a noinit output section and mark it as NOLOAD to prevent * putting its contents into the resulting .bin file (which is the * default). */ .noinit (NOLOAD) : { /* Ensure output is aligned */ . = ALIGN(4); /* Define a global _snoinit (and _enoinit below) symbol just in case * code wants to iterate over all noinit variables for some reason */ _snoinit = .; /* Actually import the .noinit and .noinit* import sections */ *(.noinit) *(.noinit*) . = ALIGN(4); _enoinit = .; } } INSERT AFTER .bss;