meh

Fork of mbed by mbed official

Committer:
bogdanm
Date:
Fri Sep 12 16:41:52 2014 +0100
Revision:
89:552587b429a1
Release 89 of the mbed library

Main changes:

- low power optimizations for Nordic targets
- code structure changes for Freescale K64F targets
- bug fixes in various backends

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bogdanm 89:552587b429a1 1 /* Linker script for STM32F407 */
bogdanm 89:552587b429a1 2
bogdanm 89:552587b429a1 3 /* Linker script to configure memory regions. */
bogdanm 89:552587b429a1 4 MEMORY
bogdanm 89:552587b429a1 5 {
bogdanm 89:552587b429a1 6 FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1024K
bogdanm 89:552587b429a1 7 CCM (rwx) : ORIGIN = 0x10000000, LENGTH = 64K
bogdanm 89:552587b429a1 8 RAM (rwx) : ORIGIN = 0x20000188, LENGTH = 128k - 0x188
bogdanm 89:552587b429a1 9 }
bogdanm 89:552587b429a1 10
bogdanm 89:552587b429a1 11 /* Linker script to place sections and symbol values. Should be used together
bogdanm 89:552587b429a1 12 * with other linker script that defines memory regions FLASH and RAM.
bogdanm 89:552587b429a1 13 * It references following symbols, which must be defined in code:
bogdanm 89:552587b429a1 14 * Reset_Handler : Entry of reset handler
bogdanm 89:552587b429a1 15 *
bogdanm 89:552587b429a1 16 * It defines following symbols, which code can use without definition:
bogdanm 89:552587b429a1 17 * __exidx_start
bogdanm 89:552587b429a1 18 * __exidx_end
bogdanm 89:552587b429a1 19 * __etext
bogdanm 89:552587b429a1 20 * __data_start__
bogdanm 89:552587b429a1 21 * __preinit_array_start
bogdanm 89:552587b429a1 22 * __preinit_array_end
bogdanm 89:552587b429a1 23 * __init_array_start
bogdanm 89:552587b429a1 24 * __init_array_end
bogdanm 89:552587b429a1 25 * __fini_array_start
bogdanm 89:552587b429a1 26 * __fini_array_end
bogdanm 89:552587b429a1 27 * __data_end__
bogdanm 89:552587b429a1 28 * __bss_start__
bogdanm 89:552587b429a1 29 * __bss_end__
bogdanm 89:552587b429a1 30 * __end__
bogdanm 89:552587b429a1 31 * end
bogdanm 89:552587b429a1 32 * __HeapLimit
bogdanm 89:552587b429a1 33 * __StackLimit
bogdanm 89:552587b429a1 34 * __StackTop
bogdanm 89:552587b429a1 35 * __stack
bogdanm 89:552587b429a1 36 */
bogdanm 89:552587b429a1 37 ENTRY(Reset_Handler)
bogdanm 89:552587b429a1 38
bogdanm 89:552587b429a1 39 SECTIONS
bogdanm 89:552587b429a1 40 {
bogdanm 89:552587b429a1 41 .text :
bogdanm 89:552587b429a1 42 {
bogdanm 89:552587b429a1 43 KEEP(*(.isr_vector))
bogdanm 89:552587b429a1 44 *(.text*)
bogdanm 89:552587b429a1 45 /* KEEP(.ioview) */
bogdanm 89:552587b429a1 46 KEEP(*(.init))
bogdanm 89:552587b429a1 47 KEEP(*(.fini))
bogdanm 89:552587b429a1 48
bogdanm 89:552587b429a1 49 /* .ctors */
bogdanm 89:552587b429a1 50 *crtbegin.o(.ctors)
bogdanm 89:552587b429a1 51 *crtbegin?.o(.ctors)
bogdanm 89:552587b429a1 52 *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
bogdanm 89:552587b429a1 53 *(SORT(.ctors.*))
bogdanm 89:552587b429a1 54 *(.ctors)
bogdanm 89:552587b429a1 55
bogdanm 89:552587b429a1 56 /* .dtors */
bogdanm 89:552587b429a1 57 *crtbegin.o(.dtors)
bogdanm 89:552587b429a1 58 *crtbegin?.o(.dtors)
bogdanm 89:552587b429a1 59 *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
bogdanm 89:552587b429a1 60 *(SORT(.dtors.*))
bogdanm 89:552587b429a1 61 *(.dtors)
bogdanm 89:552587b429a1 62
bogdanm 89:552587b429a1 63 *(.rodata*)
bogdanm 89:552587b429a1 64
bogdanm 89:552587b429a1 65 KEEP(*(.eh_frame*))
bogdanm 89:552587b429a1 66 } > FLASH
bogdanm 89:552587b429a1 67
bogdanm 89:552587b429a1 68 .ARM.extab :
bogdanm 89:552587b429a1 69 {
bogdanm 89:552587b429a1 70 *(.ARM.extab* .gnu.linkonce.armextab.*)
bogdanm 89:552587b429a1 71 } > FLASH
bogdanm 89:552587b429a1 72
bogdanm 89:552587b429a1 73 __exidx_start = .;
bogdanm 89:552587b429a1 74 .ARM.exidx :
bogdanm 89:552587b429a1 75 {
bogdanm 89:552587b429a1 76 *(.ARM.exidx* .gnu.linkonce.armexidx.*)
bogdanm 89:552587b429a1 77 } > FLASH
bogdanm 89:552587b429a1 78 __exidx_end = .;
bogdanm 89:552587b429a1 79
bogdanm 89:552587b429a1 80 __etext = .;
bogdanm 89:552587b429a1 81 _sidata = .;
bogdanm 89:552587b429a1 82
bogdanm 89:552587b429a1 83 .data : AT (__etext)
bogdanm 89:552587b429a1 84 {
bogdanm 89:552587b429a1 85 __data_start__ = .;
bogdanm 89:552587b429a1 86 _sdata = .;
bogdanm 89:552587b429a1 87 *(vtable)
bogdanm 89:552587b429a1 88 *(.data*)
bogdanm 89:552587b429a1 89
bogdanm 89:552587b429a1 90 . = ALIGN(4);
bogdanm 89:552587b429a1 91 /* preinit data */
bogdanm 89:552587b429a1 92 PROVIDE_HIDDEN (__preinit_array_start = .);
bogdanm 89:552587b429a1 93 KEEP(*(.preinit_array))
bogdanm 89:552587b429a1 94 PROVIDE_HIDDEN (__preinit_array_end = .);
bogdanm 89:552587b429a1 95
bogdanm 89:552587b429a1 96 . = ALIGN(4);
bogdanm 89:552587b429a1 97 /* init data */
bogdanm 89:552587b429a1 98 PROVIDE_HIDDEN (__init_array_start = .);
bogdanm 89:552587b429a1 99 KEEP(*(SORT(.init_array.*)))
bogdanm 89:552587b429a1 100 KEEP(*(.init_array))
bogdanm 89:552587b429a1 101 PROVIDE_HIDDEN (__init_array_end = .);
bogdanm 89:552587b429a1 102
bogdanm 89:552587b429a1 103
bogdanm 89:552587b429a1 104 . = ALIGN(4);
bogdanm 89:552587b429a1 105 /* finit data */
bogdanm 89:552587b429a1 106 PROVIDE_HIDDEN (__fini_array_start = .);
bogdanm 89:552587b429a1 107 KEEP(*(SORT(.fini_array.*)))
bogdanm 89:552587b429a1 108 KEEP(*(.fini_array))
bogdanm 89:552587b429a1 109 PROVIDE_HIDDEN (__fini_array_end = .);
bogdanm 89:552587b429a1 110
bogdanm 89:552587b429a1 111 KEEP(*(.jcr*))
bogdanm 89:552587b429a1 112 . = ALIGN(4);
bogdanm 89:552587b429a1 113 /* All data end */
bogdanm 89:552587b429a1 114 __data_end__ = .;
bogdanm 89:552587b429a1 115 _edata = .;
bogdanm 89:552587b429a1 116
bogdanm 89:552587b429a1 117 } > RAM
bogdanm 89:552587b429a1 118
bogdanm 89:552587b429a1 119 .bss :
bogdanm 89:552587b429a1 120 {
bogdanm 89:552587b429a1 121 . = ALIGN(4);
bogdanm 89:552587b429a1 122 __bss_start__ = .;
bogdanm 89:552587b429a1 123 _sbss = .;
bogdanm 89:552587b429a1 124 *(.bss*)
bogdanm 89:552587b429a1 125 *(COMMON)
bogdanm 89:552587b429a1 126 . = ALIGN(4);
bogdanm 89:552587b429a1 127 __bss_end__ = .;
bogdanm 89:552587b429a1 128 _ebss = .;
bogdanm 89:552587b429a1 129 } > RAM
bogdanm 89:552587b429a1 130
bogdanm 89:552587b429a1 131 .heap (COPY):
bogdanm 89:552587b429a1 132 {
bogdanm 89:552587b429a1 133 __end__ = .;
bogdanm 89:552587b429a1 134 end = __end__;
bogdanm 89:552587b429a1 135 *(.heap*)
bogdanm 89:552587b429a1 136 __HeapLimit = .;
bogdanm 89:552587b429a1 137 } > RAM
bogdanm 89:552587b429a1 138
bogdanm 89:552587b429a1 139 /* .stack_dummy section doesn't contains any symbols. It is only
bogdanm 89:552587b429a1 140 * used for linker to calculate size of stack sections, and assign
bogdanm 89:552587b429a1 141 * values to stack symbols later */
bogdanm 89:552587b429a1 142 .stack_dummy (COPY):
bogdanm 89:552587b429a1 143 {
bogdanm 89:552587b429a1 144 *(.stack*)
bogdanm 89:552587b429a1 145 } > RAM
bogdanm 89:552587b429a1 146
bogdanm 89:552587b429a1 147 /* Set stack top to end of RAM, and stack limit move down by
bogdanm 89:552587b429a1 148 * size of stack_dummy section */
bogdanm 89:552587b429a1 149 __StackTop = ORIGIN(RAM) + LENGTH(RAM);
bogdanm 89:552587b429a1 150 _estack = __StackTop;
bogdanm 89:552587b429a1 151 __StackLimit = __StackTop - SIZEOF(.stack_dummy);
bogdanm 89:552587b429a1 152 PROVIDE(__stack = __StackTop);
bogdanm 89:552587b429a1 153
bogdanm 89:552587b429a1 154 /* Check if data + heap + stack exceeds RAM limit */
bogdanm 89:552587b429a1 155 ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
bogdanm 89:552587b429a1 156 }
bogdanm 89:552587b429a1 157