mbed official / mbed

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

Committer:
AnnaBridge
Date:
Thu Sep 06 13:39:34 2018 +0100
Revision:
170:e95d10626187
Child:
171:3a7713b1edbc
mbed library. Release version 163

Who changed what in which revision?

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