/** * @file linker_script.ld * @brief Linker script for STM32F407VG */ /* Entry Point */ ENTRY(Reset_Handler) /* Memory Map */ MEMORY { FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1024K CCMRAM (rw) : ORIGIN = 0x10000000, LENGTH = 64K RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K } /* Stack Configuration */ _estack = ORIGIN(RAM) + LENGTH(RAM); /* End of RAM */ _min_stack_size = 0x400; /* 1KB minimum stack */ _min_heap_size = 0x200; /* 512B minimum heap */ /* Sections */ SECTIONS { /* Interrupt Vector Table */ .isr_vector : { . = ALIGN(4); KEEP(*(.isr_vector)) . = ALIGN(4); } >FLASH /* Program Code */ .text : { . = ALIGN(4); *(.text) *(.text*) *(.glue_7) *(.glue_7t) *(.eh_frame) KEEP(*(.init)) KEEP(*(.fini)) . = ALIGN(4); _etext = .; } >FLASH /* Constant Data */ .rodata : { . = ALIGN(4); *(.rodata) *(.rodata*) . = ALIGN(4); } >FLASH /* ARM Extensions */ .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH .ARM : { __exidx_start = .; *(.ARM.exidx*) __exidx_end = .; } >FLASH /* Pre-initialization Array */ .preinit_array : { PROVIDE_HIDDEN(__preinit_array_start = .); KEEP(*(.preinit_array*)) PROVIDE_HIDDEN(__preinit_array_end = .); } >FLASH /* Initialization Array */ .init_array : { PROVIDE_HIDDEN(__init_array_start = .); KEEP(*(SORT(.init_array.*))) KEEP(*(.init_array*)) PROVIDE_HIDDEN(__init_array_end = .); } >FLASH /* Finalization Array */ .fini_array : { PROVIDE_HIDDEN(__fini_array_start = .); KEEP(*(SORT(.fini_array.*))) KEEP(*(.fini_array*)) PROVIDE_HIDDEN(__fini_array_end = .); } >FLASH /* Used by startup to initialize data */ _sidata = LOADADDR(.data); /* Initialized Data */ .data : { . = ALIGN(4); _sdata = .; *(.data) *(.data*) . = ALIGN(4); _edata = .; } >RAM AT> FLASH /* Uninitialized Data */ .bss : { . = ALIGN(4); _sbss = .; __bss_start__ = _sbss; *(.bss) *(.bss*) *(COMMON) . = ALIGN(4); _ebss = .; __bss_end__ = _ebss; } >RAM /* CCMRAM Section */ .ccmram : { . = ALIGN(4); _sccmram = .; *(.ccmram) *(.ccmram*) . = ALIGN(4); _eccmram = .; } >CCMRAM /* Heap Section */ ._user_heap_stack : { . = ALIGN(8); PROVIDE(end = .); PROVIDE(_end = .); . = . + _min_heap_size; . = . + _min_stack_size; . = ALIGN(8); } >RAM /* Remove information from standard libraries */ /DISCARD/ : { libc.a(*) libm.a(*) libgcc.a(*) } .ARM.attributes 0 : { *(.ARM.attributes) } }