The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
Anna Bridge
Date:
Wed Jan 17 16:13:02 2018 +0000
Revision:
160:5571c4ff569f
Parent:
156:ff21514d8981
Child:
171:3a7713b1edbc
mbed library. Release version 158

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 156:ff21514d8981 1 /*
AnnaBridge 156:ff21514d8981 2 * BEETLE CMSIS Library
AnnaBridge 156:ff21514d8981 3 */
AnnaBridge 156:ff21514d8981 4 /*
AnnaBridge 156:ff21514d8981 5 * Copyright (c) 2009-2016 ARM Limited. All rights reserved.
AnnaBridge 156:ff21514d8981 6 *
AnnaBridge 156:ff21514d8981 7 * SPDX-License-Identifier: Apache-2.0
AnnaBridge 156:ff21514d8981 8 *
AnnaBridge 156:ff21514d8981 9 * Licensed under the Apache License, Version 2.0 (the License); you may
AnnaBridge 156:ff21514d8981 10 * not use this file except in compliance with the License.
AnnaBridge 156:ff21514d8981 11 * You may obtain a copy of the License at
AnnaBridge 156:ff21514d8981 12 *
AnnaBridge 156:ff21514d8981 13 * http://www.apache.org/licenses/LICENSE-2.0
AnnaBridge 156:ff21514d8981 14 *
AnnaBridge 156:ff21514d8981 15 * Unless required by applicable law or agreed to in writing, software
AnnaBridge 156:ff21514d8981 16 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
AnnaBridge 156:ff21514d8981 17 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AnnaBridge 156:ff21514d8981 18 * See the License for the specific language governing permissions and
AnnaBridge 156:ff21514d8981 19 * limitations under the License.
AnnaBridge 156:ff21514d8981 20 */
AnnaBridge 156:ff21514d8981 21 /*
AnnaBridge 156:ff21514d8981 22 * This file is derivative of CMSIS V5.00 gcc_arm.ld
AnnaBridge 156:ff21514d8981 23 */
AnnaBridge 156:ff21514d8981 24 /* Linker script for mbed BEETLE SoC */
AnnaBridge 156:ff21514d8981 25
AnnaBridge 156:ff21514d8981 26 /* Linker script to configure memory regions. */
AnnaBridge 156:ff21514d8981 27 MEMORY
AnnaBridge 156:ff21514d8981 28 {
AnnaBridge 156:ff21514d8981 29 VECTORS (rx) : ORIGIN = 0x00000000, LENGTH = 0x00000400
AnnaBridge 156:ff21514d8981 30 FLASH (rx) : ORIGIN = 0x00000400, LENGTH = 0x00040000 - 0x00000400
AnnaBridge 156:ff21514d8981 31 RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00020000
AnnaBridge 156:ff21514d8981 32 }
AnnaBridge 156:ff21514d8981 33
AnnaBridge 156:ff21514d8981 34 /* Linker script to place sections and symbol values. Should be used together
AnnaBridge 156:ff21514d8981 35 * with other linker script that defines memory regions FLASH and RAM.
AnnaBridge 156:ff21514d8981 36 * It references following symbols, which must be defined in code:
AnnaBridge 156:ff21514d8981 37 * Reset_Handler : Entry of reset handler
AnnaBridge 156:ff21514d8981 38 *
AnnaBridge 156:ff21514d8981 39 * It defines following symbols, which code can use without definition:
AnnaBridge 156:ff21514d8981 40 * __exidx_start
AnnaBridge 156:ff21514d8981 41 * __exidx_end
AnnaBridge 156:ff21514d8981 42 * __etext
AnnaBridge 156:ff21514d8981 43 * __data_start__
AnnaBridge 156:ff21514d8981 44 * __preinit_array_start
AnnaBridge 156:ff21514d8981 45 * __preinit_array_end
AnnaBridge 156:ff21514d8981 46 * __init_array_start
AnnaBridge 156:ff21514d8981 47 * __init_array_end
AnnaBridge 156:ff21514d8981 48 * __fini_array_start
AnnaBridge 156:ff21514d8981 49 * __fini_array_end
AnnaBridge 156:ff21514d8981 50 * __data_end__
AnnaBridge 156:ff21514d8981 51 * __bss_start__
AnnaBridge 156:ff21514d8981 52 * __bss_end__
AnnaBridge 156:ff21514d8981 53 * __end__
AnnaBridge 156:ff21514d8981 54 * end
AnnaBridge 156:ff21514d8981 55 * __HeapLimit
AnnaBridge 156:ff21514d8981 56 * __StackLimit
AnnaBridge 156:ff21514d8981 57 * __StackTop
AnnaBridge 156:ff21514d8981 58 * __stack
AnnaBridge 156:ff21514d8981 59 */
AnnaBridge 156:ff21514d8981 60 ENTRY(Reset_Handler)
AnnaBridge 156:ff21514d8981 61
AnnaBridge 156:ff21514d8981 62 /* Heap 1/4 of ram and stack 1/8 */
AnnaBridge 156:ff21514d8981 63 __stack_size__ = 0x4000;
AnnaBridge 156:ff21514d8981 64 __heap_size__ = 0x8000;
AnnaBridge 156:ff21514d8981 65
AnnaBridge 156:ff21514d8981 66 HEAP_SIZE = DEFINED(__heap_size__) ? __heap_size__ : 0x0400;
AnnaBridge 156:ff21514d8981 67 STACK_SIZE = DEFINED(__stack_size__) ? __stack_size__ : 0x0400;
AnnaBridge 156:ff21514d8981 68
AnnaBridge 156:ff21514d8981 69 /* Size of the vector table in SRAM */
AnnaBridge 156:ff21514d8981 70 M_VECTOR_RAM_SIZE = 0x140;
AnnaBridge 156:ff21514d8981 71
AnnaBridge 156:ff21514d8981 72 SECTIONS
AnnaBridge 156:ff21514d8981 73 {
AnnaBridge 156:ff21514d8981 74 .isr_vector :
AnnaBridge 156:ff21514d8981 75 {
AnnaBridge 156:ff21514d8981 76 __vector_table = .;
AnnaBridge 156:ff21514d8981 77 KEEP(*(.vector_table))
AnnaBridge 156:ff21514d8981 78 . = ALIGN(4);
AnnaBridge 156:ff21514d8981 79 } > VECTORS
AnnaBridge 156:ff21514d8981 80
AnnaBridge 156:ff21514d8981 81 /* Note: The uVisor expects this section at a fixed location, as specified
AnnaBridge 156:ff21514d8981 82 by the porting process configuration parameter: FLASH_OFFSET. */
AnnaBridge 156:ff21514d8981 83 __UVISOR_TEXT_OFFSET = 0x0;
AnnaBridge 156:ff21514d8981 84 __UVISOR_TEXT_START = ORIGIN(FLASH) + __UVISOR_TEXT_OFFSET;
AnnaBridge 156:ff21514d8981 85 .text __UVISOR_TEXT_START :
AnnaBridge 156:ff21514d8981 86 {
AnnaBridge 156:ff21514d8981 87 /* uVisor code and data */
AnnaBridge 156:ff21514d8981 88 . = ALIGN(4);
AnnaBridge 156:ff21514d8981 89 __uvisor_main_start = .;
AnnaBridge 156:ff21514d8981 90 *(.uvisor.main)
AnnaBridge 156:ff21514d8981 91 __uvisor_main_end = .;
AnnaBridge 156:ff21514d8981 92
AnnaBridge 156:ff21514d8981 93 *(.text*)
AnnaBridge 156:ff21514d8981 94
AnnaBridge 156:ff21514d8981 95 KEEP(*(.init))
AnnaBridge 156:ff21514d8981 96 KEEP(*(.fini))
AnnaBridge 156:ff21514d8981 97
AnnaBridge 156:ff21514d8981 98 /* .ctors */
AnnaBridge 156:ff21514d8981 99 *crtbegin.o(.ctors)
AnnaBridge 156:ff21514d8981 100 *crtbegin?.o(.ctors)
AnnaBridge 156:ff21514d8981 101 *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
AnnaBridge 156:ff21514d8981 102 *(SORT(.ctors.*))
AnnaBridge 156:ff21514d8981 103 *(.ctors)
AnnaBridge 156:ff21514d8981 104
AnnaBridge 156:ff21514d8981 105 /* .dtors */
AnnaBridge 156:ff21514d8981 106 *crtbegin.o(.dtors)
AnnaBridge 156:ff21514d8981 107 *crtbegin?.o(.dtors)
AnnaBridge 156:ff21514d8981 108 *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
AnnaBridge 156:ff21514d8981 109 *(SORT(.dtors.*))
AnnaBridge 156:ff21514d8981 110 *(.dtors)
AnnaBridge 156:ff21514d8981 111
AnnaBridge 156:ff21514d8981 112 *(.rodata*)
AnnaBridge 156:ff21514d8981 113
AnnaBridge 156:ff21514d8981 114 KEEP(*(.eh_frame*))
AnnaBridge 156:ff21514d8981 115 } > FLASH
AnnaBridge 156:ff21514d8981 116
AnnaBridge 156:ff21514d8981 117 .ARM.extab :
AnnaBridge 156:ff21514d8981 118 {
AnnaBridge 156:ff21514d8981 119 *(.ARM.extab* .gnu.linkonce.armextab.*)
AnnaBridge 156:ff21514d8981 120 } > FLASH
AnnaBridge 156:ff21514d8981 121
AnnaBridge 156:ff21514d8981 122 __exidx_start = .;
AnnaBridge 156:ff21514d8981 123 .ARM.exidx :
AnnaBridge 156:ff21514d8981 124 {
AnnaBridge 156:ff21514d8981 125 *(.ARM.exidx* .gnu.linkonce.armexidx.*)
AnnaBridge 156:ff21514d8981 126 } > FLASH
AnnaBridge 156:ff21514d8981 127 __exidx_end = .;
AnnaBridge 156:ff21514d8981 128
AnnaBridge 156:ff21514d8981 129 .cordio :
AnnaBridge 156:ff21514d8981 130 {
AnnaBridge 156:ff21514d8981 131 *CORDIO_RO_2.1.o
AnnaBridge 156:ff21514d8981 132 *TRIM_2.1.o
AnnaBridge 156:ff21514d8981 133 } > FLASH
AnnaBridge 156:ff21514d8981 134
AnnaBridge 156:ff21514d8981 135 .interrupts_ram :
AnnaBridge 156:ff21514d8981 136 {
AnnaBridge 156:ff21514d8981 137 . = ALIGN(4);
AnnaBridge 156:ff21514d8981 138 __VECTOR_RAM__ = .;
AnnaBridge 156:ff21514d8981 139 __interrupts_ram_start__ = .; /* Create a global symbol at data start */
AnnaBridge 156:ff21514d8981 140 . += M_VECTOR_RAM_SIZE;
AnnaBridge 156:ff21514d8981 141 . = ALIGN(4);
AnnaBridge 156:ff21514d8981 142 __interrupts_ram_end__ = .; /* Define a global symbol at data end */
AnnaBridge 156:ff21514d8981 143 } > RAM
AnnaBridge 156:ff21514d8981 144
AnnaBridge 156:ff21514d8981 145 /* ensure that uvisor bss is at the beginning of memory */
AnnaBridge 156:ff21514d8981 146 /* Note: The uVisor expects this section at a fixed location, as specified by
AnnaBridge 156:ff21514d8981 147 * the porting process configuration parameter: SRAM_OFFSET. */
AnnaBridge 156:ff21514d8981 148 __UVISOR_SRAM_OFFSET = 0x140;
AnnaBridge 156:ff21514d8981 149 __UVISOR_BSS_START = ORIGIN(RAM) + __UVISOR_SRAM_OFFSET;
AnnaBridge 156:ff21514d8981 150 .uvisor.bss __UVISOR_BSS_START (NOLOAD):
AnnaBridge 156:ff21514d8981 151 {
AnnaBridge 156:ff21514d8981 152 . = ALIGN(32);
AnnaBridge 156:ff21514d8981 153 __uvisor_bss_start = .;
AnnaBridge 156:ff21514d8981 154
AnnaBridge 156:ff21514d8981 155 /* protected uvisor main bss */
AnnaBridge 156:ff21514d8981 156 . = ALIGN(32);
AnnaBridge 156:ff21514d8981 157 __uvisor_bss_main_start = .;
AnnaBridge 156:ff21514d8981 158 KEEP(*(.keep.uvisor.bss.main))
AnnaBridge 156:ff21514d8981 159 . = ALIGN(32);
AnnaBridge 156:ff21514d8981 160 __uvisor_bss_main_end = .;
AnnaBridge 156:ff21514d8981 161
AnnaBridge 156:ff21514d8981 162 /* protected uvisor secure boxes bss */
AnnaBridge 156:ff21514d8981 163 . = ALIGN(32);
AnnaBridge 156:ff21514d8981 164 __uvisor_bss_boxes_start = .;
AnnaBridge 156:ff21514d8981 165 KEEP(*(.keep.uvisor.bss.boxes))
AnnaBridge 156:ff21514d8981 166 . = ALIGN(32);
AnnaBridge 156:ff21514d8981 167 __uvisor_bss_boxes_end = .;
AnnaBridge 156:ff21514d8981 168
AnnaBridge 156:ff21514d8981 169 . = ALIGN((1 << LOG2CEIL(LENGTH(RAM))) / 8);
AnnaBridge 156:ff21514d8981 170 __uvisor_bss_end = .;
AnnaBridge 156:ff21514d8981 171 } > RAM
AnnaBridge 156:ff21514d8981 172
AnnaBridge 156:ff21514d8981 173 /* Heap space for the page allocator */
AnnaBridge 156:ff21514d8981 174 .page_heap (NOLOAD) :
AnnaBridge 156:ff21514d8981 175 {
AnnaBridge 156:ff21514d8981 176 . = ALIGN(32);
AnnaBridge 156:ff21514d8981 177 __uvisor_page_start = .;
AnnaBridge 156:ff21514d8981 178 KEEP(*(.keep.uvisor.page_heap))
AnnaBridge 156:ff21514d8981 179 . = ALIGN(32);
AnnaBridge 156:ff21514d8981 180 __uvisor_page_end = .;
AnnaBridge 156:ff21514d8981 181 } > RAM
AnnaBridge 156:ff21514d8981 182
AnnaBridge 156:ff21514d8981 183 .data :
AnnaBridge 156:ff21514d8981 184 {
AnnaBridge 156:ff21514d8981 185 PROVIDE(__etext = LOADADDR(.data));
AnnaBridge 156:ff21514d8981 186 . = ALIGN(4);
AnnaBridge 156:ff21514d8981 187 __data_start__ = .;
AnnaBridge 156:ff21514d8981 188 *(vtable)
AnnaBridge 156:ff21514d8981 189 *(.data)
AnnaBridge 156:ff21514d8981 190 *(.data*)
AnnaBridge 156:ff21514d8981 191
AnnaBridge 156:ff21514d8981 192 . = ALIGN(4);
AnnaBridge 156:ff21514d8981 193 /* preinit data */
AnnaBridge 156:ff21514d8981 194 PROVIDE (__preinit_array_start = .);
AnnaBridge 156:ff21514d8981 195 KEEP(*(.preinit_array))
AnnaBridge 156:ff21514d8981 196 PROVIDE (__preinit_array_end = .);
AnnaBridge 156:ff21514d8981 197
AnnaBridge 156:ff21514d8981 198 . = ALIGN(4);
AnnaBridge 156:ff21514d8981 199 /* init data */
AnnaBridge 156:ff21514d8981 200 PROVIDE (__init_array_start = .);
AnnaBridge 156:ff21514d8981 201 KEEP(*(SORT(.init_array.*)))
AnnaBridge 156:ff21514d8981 202 KEEP(*(.init_array))
AnnaBridge 156:ff21514d8981 203 PROVIDE (__init_array_end = .);
AnnaBridge 156:ff21514d8981 204
AnnaBridge 156:ff21514d8981 205
AnnaBridge 156:ff21514d8981 206 . = ALIGN(4);
AnnaBridge 156:ff21514d8981 207 /* finit data */
AnnaBridge 156:ff21514d8981 208 PROVIDE (__fini_array_start = .);
AnnaBridge 156:ff21514d8981 209 KEEP(*(SORT(.fini_array.*)))
AnnaBridge 156:ff21514d8981 210 KEEP(*(.fini_array))
AnnaBridge 156:ff21514d8981 211 PROVIDE (__fini_array_end = .);
AnnaBridge 156:ff21514d8981 212
AnnaBridge 156:ff21514d8981 213 . = ALIGN(4);
AnnaBridge 156:ff21514d8981 214 /* All data end */
AnnaBridge 156:ff21514d8981 215 __data_end__ = .;
AnnaBridge 156:ff21514d8981 216
AnnaBridge 156:ff21514d8981 217 } > RAM AT > FLASH
AnnaBridge 156:ff21514d8981 218
AnnaBridge 156:ff21514d8981 219 /* uvisor configuration data */
AnnaBridge 156:ff21514d8981 220 .uvisor.secure :
AnnaBridge 156:ff21514d8981 221 {
AnnaBridge 156:ff21514d8981 222 . = ALIGN(32);
AnnaBridge 156:ff21514d8981 223 __uvisor_secure_start = .;
AnnaBridge 156:ff21514d8981 224
AnnaBridge 156:ff21514d8981 225 /* uvisor secure boxes configuration tables */
AnnaBridge 156:ff21514d8981 226 . = ALIGN(32);
AnnaBridge 156:ff21514d8981 227 __uvisor_cfgtbl_start = .;
AnnaBridge 156:ff21514d8981 228 KEEP(*(.keep.uvisor.cfgtbl))
AnnaBridge 156:ff21514d8981 229 . = ALIGN(32);
AnnaBridge 156:ff21514d8981 230 __uvisor_cfgtbl_end = .;
AnnaBridge 156:ff21514d8981 231
AnnaBridge 156:ff21514d8981 232 __uvisor_cfgtbl_ptr_start = .;
AnnaBridge 156:ff21514d8981 233 KEEP(*(.keep.uvisor.cfgtbl_ptr_first))
AnnaBridge 156:ff21514d8981 234 KEEP(*(.keep.uvisor.cfgtbl_ptr))
AnnaBridge 156:ff21514d8981 235 __uvisor_cfgtbl_ptr_end = .;
AnnaBridge 156:ff21514d8981 236
AnnaBridge 156:ff21514d8981 237 /* Pointers to all boxes register gateways. These are grouped here to allow
AnnaBridge 156:ff21514d8981 238 * discoverability and firmware verification. */
AnnaBridge 156:ff21514d8981 239 __uvisor_register_gateway_ptr_start = .;
AnnaBridge 156:ff21514d8981 240 KEEP(*(.keep.uvisor.register_gateway_ptr))
AnnaBridge 156:ff21514d8981 241 __uvisor_register_gateway_ptr_end = .;
AnnaBridge 156:ff21514d8981 242
AnnaBridge 156:ff21514d8981 243 . = ALIGN(32);
AnnaBridge 156:ff21514d8981 244 __uvisor_secure_end = .;
AnnaBridge 156:ff21514d8981 245 } > FLASH
AnnaBridge 156:ff21514d8981 246
AnnaBridge 156:ff21514d8981 247 /* From now on you can insert any other SRAM region. */
AnnaBridge 156:ff21514d8981 248
AnnaBridge 156:ff21514d8981 249 .uninitialized (NOLOAD):
AnnaBridge 156:ff21514d8981 250 {
AnnaBridge 156:ff21514d8981 251 . = ALIGN(32);
AnnaBridge 156:ff21514d8981 252 __uninitialized_start = .;
AnnaBridge 156:ff21514d8981 253 *(.uninitialized)
AnnaBridge 156:ff21514d8981 254 KEEP(*(.keep.uninitialized))
AnnaBridge 156:ff21514d8981 255 . = ALIGN(32);
AnnaBridge 156:ff21514d8981 256 __uninitialized_end = .;
AnnaBridge 156:ff21514d8981 257 } > RAM
AnnaBridge 156:ff21514d8981 258
AnnaBridge 156:ff21514d8981 259 .bss :
AnnaBridge 156:ff21514d8981 260 {
AnnaBridge 156:ff21514d8981 261 . = ALIGN(4);
AnnaBridge 156:ff21514d8981 262 __START_BSS = .;
AnnaBridge 156:ff21514d8981 263 __bss_start__ = .;
AnnaBridge 156:ff21514d8981 264 *(.bss)
AnnaBridge 156:ff21514d8981 265 *(.bss*)
AnnaBridge 156:ff21514d8981 266 *(COMMON)
AnnaBridge 156:ff21514d8981 267 . = ALIGN(4);
AnnaBridge 156:ff21514d8981 268 __bss_end__ = .;
AnnaBridge 156:ff21514d8981 269 __END_BSS = .;
AnnaBridge 156:ff21514d8981 270
AnnaBridge 156:ff21514d8981 271 } > RAM
AnnaBridge 156:ff21514d8981 272
AnnaBridge 156:ff21514d8981 273 bss_size = __bss_end__ - __bss_start__;
AnnaBridge 156:ff21514d8981 274
AnnaBridge 156:ff21514d8981 275 .heap :
AnnaBridge 156:ff21514d8981 276 {
AnnaBridge 156:ff21514d8981 277 . = ALIGN(8);
AnnaBridge 156:ff21514d8981 278 __uvisor_heap_start = .;
AnnaBridge 156:ff21514d8981 279 __end__ = .;
AnnaBridge 156:ff21514d8981 280 PROVIDE(end = .);
AnnaBridge 156:ff21514d8981 281 __HeapBase = .;
AnnaBridge 156:ff21514d8981 282 . += HEAP_SIZE;
AnnaBridge 156:ff21514d8981 283 __HeapLimit = .;
AnnaBridge 156:ff21514d8981 284 __heap_limit = .; /* Add for _sbrk */
AnnaBridge 156:ff21514d8981 285 __uvisor_heap_end = .;
AnnaBridge 156:ff21514d8981 286 } > RAM
AnnaBridge 156:ff21514d8981 287
AnnaBridge 156:ff21514d8981 288 /* Set stack top to end of RAM, and stack limit move down by
AnnaBridge 156:ff21514d8981 289 * size of stack_dummy section */
AnnaBridge 156:ff21514d8981 290 __StackTop = ORIGIN(RAM) + LENGTH(RAM);
AnnaBridge 156:ff21514d8981 291 __StackLimit = __StackTop - STACK_SIZE;
AnnaBridge 156:ff21514d8981 292 PROVIDE(__stack = __StackTop);
AnnaBridge 156:ff21514d8981 293
AnnaBridge 156:ff21514d8981 294 /* Check if data + heap + stack exceeds RAM limit */
AnnaBridge 156:ff21514d8981 295 ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
AnnaBridge 156:ff21514d8981 296 /* Provide physical memory boundaries for uVisor. */
AnnaBridge 156:ff21514d8981 297 __uvisor_flash_start = ORIGIN(VECTORS);
AnnaBridge 156:ff21514d8981 298 __uvisor_flash_end = ORIGIN(FLASH) + LENGTH(FLASH);
AnnaBridge 156:ff21514d8981 299 __uvisor_sram_start = ORIGIN(RAM);
AnnaBridge 156:ff21514d8981 300 __uvisor_sram_end = ORIGIN(RAM) + LENGTH(RAM);
AnnaBridge 156:ff21514d8981 301
AnnaBridge 156:ff21514d8981 302 } /* End of sections */