mbed library sources. Supersedes mbed-src.

Fork of mbed-dev by mbed official

Committer:
fwndz
Date:
Thu Dec 22 05:12:40 2016 +0000
Revision:
153:9398a535854b
Parent:
150:02e0a0aed4ec
device target maximize

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 150:02e0a0aed4ec 1 /* Linker script for Silicon Labs EFM32WG devices */
<> 150:02e0a0aed4ec 2 /* */
<> 150:02e0a0aed4ec 3 /* This file is subject to the license terms as defined in ARM's */
<> 150:02e0a0aed4ec 4 /* CMSIS END USER LICENSE AGREEMENT.pdf, governing the use of */
<> 150:02e0a0aed4ec 5 /* Example Code. */
<> 150:02e0a0aed4ec 6 /* */
<> 150:02e0a0aed4ec 7 /* Silicon Laboratories, Inc. 2015 */
<> 150:02e0a0aed4ec 8 /* */
<> 150:02e0a0aed4ec 9 /* Version 4.2.0 */
<> 150:02e0a0aed4ec 10 /* */
<> 150:02e0a0aed4ec 11
<> 150:02e0a0aed4ec 12 MEMORY
<> 150:02e0a0aed4ec 13 {
<> 150:02e0a0aed4ec 14 FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 262144
<> 150:02e0a0aed4ec 15 RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 32768
<> 150:02e0a0aed4ec 16 }
<> 150:02e0a0aed4ec 17
<> 150:02e0a0aed4ec 18 /* MBED: mbed needs to be able to dynamically set the interrupt vector table.
<> 150:02e0a0aed4ec 19 * We make room for the table at the very beginning of RAM, i.e. at
<> 150:02e0a0aed4ec 20 * 0x20000000. We need (16+40) * sizeof(uint32_t) = 224 bytes for EFM32WG */
<> 150:02e0a0aed4ec 21 __vector_size = 0xE0;
<> 150:02e0a0aed4ec 22
<> 150:02e0a0aed4ec 23 /* Linker script to place sections and symbol values. Should be used together
<> 150:02e0a0aed4ec 24 * with other linker script that defines memory regions FLASH and RAM.
<> 150:02e0a0aed4ec 25 * It references following symbols, which must be defined in code:
<> 150:02e0a0aed4ec 26 * Reset_Handler : Entry of reset handler
<> 150:02e0a0aed4ec 27 *
<> 150:02e0a0aed4ec 28 * It defines following symbols, which code can use without definition:
<> 150:02e0a0aed4ec 29 * __exidx_start
<> 150:02e0a0aed4ec 30 * __exidx_end
<> 150:02e0a0aed4ec 31 * __copy_table_start__
<> 150:02e0a0aed4ec 32 * __copy_table_end__
<> 150:02e0a0aed4ec 33 * __zero_table_start__
<> 150:02e0a0aed4ec 34 * __zero_table_end__
<> 150:02e0a0aed4ec 35 * __etext
<> 150:02e0a0aed4ec 36 * __data_start__
<> 150:02e0a0aed4ec 37 * __preinit_array_start
<> 150:02e0a0aed4ec 38 * __preinit_array_end
<> 150:02e0a0aed4ec 39 * __init_array_start
<> 150:02e0a0aed4ec 40 * __init_array_end
<> 150:02e0a0aed4ec 41 * __fini_array_start
<> 150:02e0a0aed4ec 42 * __fini_array_end
<> 150:02e0a0aed4ec 43 * __data_end__
<> 150:02e0a0aed4ec 44 * __bss_start__
<> 150:02e0a0aed4ec 45 * __bss_end__
<> 150:02e0a0aed4ec 46 * __end__
<> 150:02e0a0aed4ec 47 * end
<> 150:02e0a0aed4ec 48 * __HeapLimit
<> 150:02e0a0aed4ec 49 * __StackLimit
<> 150:02e0a0aed4ec 50 * __StackTop
<> 150:02e0a0aed4ec 51 * __stack
<> 150:02e0a0aed4ec 52 * __Vectors_End
<> 150:02e0a0aed4ec 53 * __Vectors_Size
<> 150:02e0a0aed4ec 54 */
<> 150:02e0a0aed4ec 55 ENTRY(Reset_Handler)
<> 150:02e0a0aed4ec 56
<> 150:02e0a0aed4ec 57 SECTIONS
<> 150:02e0a0aed4ec 58 {
<> 150:02e0a0aed4ec 59 .text :
<> 150:02e0a0aed4ec 60 {
<> 150:02e0a0aed4ec 61 KEEP(*(.vectors))
<> 150:02e0a0aed4ec 62 __Vectors_End = .;
<> 150:02e0a0aed4ec 63 __Vectors_Size = __Vectors_End - __Vectors;
<> 150:02e0a0aed4ec 64 __end__ = .;
<> 150:02e0a0aed4ec 65
<> 150:02e0a0aed4ec 66 *(.text*)
<> 150:02e0a0aed4ec 67
<> 150:02e0a0aed4ec 68 KEEP(*(.init))
<> 150:02e0a0aed4ec 69 KEEP(*(.fini))
<> 150:02e0a0aed4ec 70
<> 150:02e0a0aed4ec 71 /* .ctors */
<> 150:02e0a0aed4ec 72 *crtbegin.o(.ctors)
<> 150:02e0a0aed4ec 73 *crtbegin?.o(.ctors)
<> 150:02e0a0aed4ec 74 *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
<> 150:02e0a0aed4ec 75 *(SORT(.ctors.*))
<> 150:02e0a0aed4ec 76 *(.ctors)
<> 150:02e0a0aed4ec 77
<> 150:02e0a0aed4ec 78 /* .dtors */
<> 150:02e0a0aed4ec 79 *crtbegin.o(.dtors)
<> 150:02e0a0aed4ec 80 *crtbegin?.o(.dtors)
<> 150:02e0a0aed4ec 81 *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
<> 150:02e0a0aed4ec 82 *(SORT(.dtors.*))
<> 150:02e0a0aed4ec 83 *(.dtors)
<> 150:02e0a0aed4ec 84
<> 150:02e0a0aed4ec 85 *(.rodata*)
<> 150:02e0a0aed4ec 86
<> 150:02e0a0aed4ec 87 KEEP(*(.eh_frame*))
<> 150:02e0a0aed4ec 88 } > FLASH
<> 150:02e0a0aed4ec 89
<> 150:02e0a0aed4ec 90 .ARM.extab :
<> 150:02e0a0aed4ec 91 {
<> 150:02e0a0aed4ec 92 *(.ARM.extab* .gnu.linkonce.armextab.*)
<> 150:02e0a0aed4ec 93 } > FLASH
<> 150:02e0a0aed4ec 94
<> 150:02e0a0aed4ec 95 __exidx_start = .;
<> 150:02e0a0aed4ec 96 .ARM.exidx :
<> 150:02e0a0aed4ec 97 {
<> 150:02e0a0aed4ec 98 *(.ARM.exidx* .gnu.linkonce.armexidx.*)
<> 150:02e0a0aed4ec 99 } > FLASH
<> 150:02e0a0aed4ec 100 __exidx_end = .;
<> 150:02e0a0aed4ec 101
<> 150:02e0a0aed4ec 102 /* To copy multiple ROM to RAM sections,
<> 150:02e0a0aed4ec 103 * uncomment .copy.table section and,
<> 150:02e0a0aed4ec 104 * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */
<> 150:02e0a0aed4ec 105 /*
<> 150:02e0a0aed4ec 106 .copy.table :
<> 150:02e0a0aed4ec 107 {
<> 150:02e0a0aed4ec 108 . = ALIGN(4);
<> 150:02e0a0aed4ec 109 __copy_table_start__ = .;
<> 150:02e0a0aed4ec 110 LONG (__etext)
<> 150:02e0a0aed4ec 111 LONG (__data_start__)
<> 150:02e0a0aed4ec 112 LONG (__data_end__ - __data_start__)
<> 150:02e0a0aed4ec 113 LONG (__etext2)
<> 150:02e0a0aed4ec 114 LONG (__data2_start__)
<> 150:02e0a0aed4ec 115 LONG (__data2_end__ - __data2_start__)
<> 150:02e0a0aed4ec 116 __copy_table_end__ = .;
<> 150:02e0a0aed4ec 117 } > FLASH
<> 150:02e0a0aed4ec 118 */
<> 150:02e0a0aed4ec 119
<> 150:02e0a0aed4ec 120 /* To clear multiple BSS sections,
<> 150:02e0a0aed4ec 121 * uncomment .zero.table section and,
<> 150:02e0a0aed4ec 122 * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */
<> 150:02e0a0aed4ec 123 /*
<> 150:02e0a0aed4ec 124 .zero.table :
<> 150:02e0a0aed4ec 125 {
<> 150:02e0a0aed4ec 126 . = ALIGN(4);
<> 150:02e0a0aed4ec 127 __zero_table_start__ = .;
<> 150:02e0a0aed4ec 128 LONG (__bss_start__)
<> 150:02e0a0aed4ec 129 LONG (__bss_end__ - __bss_start__)
<> 150:02e0a0aed4ec 130 LONG (__bss2_start__)
<> 150:02e0a0aed4ec 131 LONG (__bss2_end__ - __bss2_start__)
<> 150:02e0a0aed4ec 132 __zero_table_end__ = .;
<> 150:02e0a0aed4ec 133 } > FLASH
<> 150:02e0a0aed4ec 134 */
<> 150:02e0a0aed4ec 135
<> 150:02e0a0aed4ec 136 __etext = .;
<> 150:02e0a0aed4ec 137
<> 150:02e0a0aed4ec 138 .data : AT (__etext)
<> 150:02e0a0aed4ec 139 {
<> 150:02e0a0aed4ec 140 __data_start__ = .;
<> 150:02e0a0aed4ec 141 *("dma")
<> 150:02e0a0aed4ec 142 PROVIDE( __start_vector_table__ = .);
<> 150:02e0a0aed4ec 143 . += __vector_size;
<> 150:02e0a0aed4ec 144 PROVIDE( __end_vector_table__ = .);
<> 150:02e0a0aed4ec 145 *(vtable)
<> 150:02e0a0aed4ec 146 *(.data*)
<> 150:02e0a0aed4ec 147 . = ALIGN (4);
<> 150:02e0a0aed4ec 148 *(.ram)
<> 150:02e0a0aed4ec 149
<> 150:02e0a0aed4ec 150 . = ALIGN(4);
<> 150:02e0a0aed4ec 151 /* preinit data */
<> 150:02e0a0aed4ec 152 PROVIDE_HIDDEN (__preinit_array_start = .);
<> 150:02e0a0aed4ec 153 KEEP(*(.preinit_array))
<> 150:02e0a0aed4ec 154 PROVIDE_HIDDEN (__preinit_array_end = .);
<> 150:02e0a0aed4ec 155
<> 150:02e0a0aed4ec 156 . = ALIGN(4);
<> 150:02e0a0aed4ec 157 /* init data */
<> 150:02e0a0aed4ec 158 PROVIDE_HIDDEN (__init_array_start = .);
<> 150:02e0a0aed4ec 159 KEEP(*(SORT(.init_array.*)))
<> 150:02e0a0aed4ec 160 KEEP(*(.init_array))
<> 150:02e0a0aed4ec 161 PROVIDE_HIDDEN (__init_array_end = .);
<> 150:02e0a0aed4ec 162
<> 150:02e0a0aed4ec 163 . = ALIGN(4);
<> 150:02e0a0aed4ec 164 /* finit data */
<> 150:02e0a0aed4ec 165 PROVIDE_HIDDEN (__fini_array_start = .);
<> 150:02e0a0aed4ec 166 KEEP(*(SORT(.fini_array.*)))
<> 150:02e0a0aed4ec 167 KEEP(*(.fini_array))
<> 150:02e0a0aed4ec 168 PROVIDE_HIDDEN (__fini_array_end = .);
<> 150:02e0a0aed4ec 169
<> 150:02e0a0aed4ec 170 KEEP(*(.jcr*))
<> 150:02e0a0aed4ec 171 . = ALIGN(4);
<> 150:02e0a0aed4ec 172 /* All data end */
<> 150:02e0a0aed4ec 173 __data_end__ = .;
<> 150:02e0a0aed4ec 174
<> 150:02e0a0aed4ec 175 } > RAM
<> 150:02e0a0aed4ec 176
<> 150:02e0a0aed4ec 177 .bss :
<> 150:02e0a0aed4ec 178 {
<> 150:02e0a0aed4ec 179 . = ALIGN(4);
<> 150:02e0a0aed4ec 180 __bss_start__ = .;
<> 150:02e0a0aed4ec 181 *(.bss*)
<> 150:02e0a0aed4ec 182 *(COMMON)
<> 150:02e0a0aed4ec 183 . = ALIGN(4);
<> 150:02e0a0aed4ec 184 __bss_end__ = .;
<> 150:02e0a0aed4ec 185 } > RAM
<> 150:02e0a0aed4ec 186
<> 150:02e0a0aed4ec 187 .heap (COPY):
<> 150:02e0a0aed4ec 188 {
<> 150:02e0a0aed4ec 189 __HeapBase = .;
<> 150:02e0a0aed4ec 190 __end__ = .;
<> 150:02e0a0aed4ec 191 end = __end__;
<> 150:02e0a0aed4ec 192 _end = __end__;
<> 150:02e0a0aed4ec 193 KEEP(*(.heap*))
<> 150:02e0a0aed4ec 194 __HeapLimit = .;
<> 150:02e0a0aed4ec 195 } > RAM
<> 150:02e0a0aed4ec 196
<> 150:02e0a0aed4ec 197 /* .stack_dummy section doesn't contains any symbols. It is only
<> 150:02e0a0aed4ec 198 * used for linker to calculate size of stack sections, and assign
<> 150:02e0a0aed4ec 199 * values to stack symbols later */
<> 150:02e0a0aed4ec 200 .stack_dummy (COPY):
<> 150:02e0a0aed4ec 201 {
<> 150:02e0a0aed4ec 202 KEEP(*(.stack*))
<> 150:02e0a0aed4ec 203 } > RAM
<> 150:02e0a0aed4ec 204
<> 150:02e0a0aed4ec 205 /* Set stack top to end of RAM, and stack limit move down by
<> 150:02e0a0aed4ec 206 * size of stack_dummy section */
<> 150:02e0a0aed4ec 207 __StackTop = ORIGIN(RAM) + LENGTH(RAM);
<> 150:02e0a0aed4ec 208 __StackLimit = __StackTop - SIZEOF(.stack_dummy);
<> 150:02e0a0aed4ec 209 PROVIDE(__stack = __StackTop);
<> 150:02e0a0aed4ec 210
<> 150:02e0a0aed4ec 211 /* Check if data + heap + stack exceeds RAM limit */
<> 150:02e0a0aed4ec 212 ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
<> 150:02e0a0aed4ec 213
<> 150:02e0a0aed4ec 214 /* Check if FLASH usage exceeds FLASH size */
<> 150:02e0a0aed4ec 215 ASSERT( LENGTH(FLASH) >= (__etext + SIZEOF(.data)), "FLASH memory overflowed !")
<> 150:02e0a0aed4ec 216 }