mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Revision:
173:e131a1973e81
Child:
174:b96e65c34a4d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/TOOLCHAIN_GCC_ARM/rtl8195a.ld	Fri Sep 15 14:59:18 2017 +0100
@@ -0,0 +1,237 @@
+/*
+ * Copyright (c) 2013-2016 Realtek Semiconductor Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+INCLUDE "rtl8195a_rom.h"
+/* DATA_RAM: We cannot put Code(.text) in DATA_RAM, this region is reserved for Image1(boot loader).
+   But we can put .data/.bss of Image2 in this region */
+MEMORY
+{
+  TCM (rwx)        : ORIGIN = 0x1FFF0000, LENGTH = 0x00010000
+  DATA_RAM (rwx)   : ORIGIN = 0x10002100, LENGTH = 0x10007000 - 0x10002100
+  SRAM1 (rwx)      : ORIGIN = 0x10007000, LENGTH = 0x10070000 - 0x10007000
+  SRAM2 (rwx)      : ORIGIN = 0x30000000, LENGTH = 2M
+}
+
+/* Stack sizes: */
+StackSize = 0x1000;
+
+/* Linker script to place sections and symbol values. Should be used together
+ * with other linker script that defines memory regions FLASH and RAM.
+ * It references following symbols, which must be defined in code:
+ * _reset_init : Entry of reset handler
+ *
+ * It defines following symbols, which code can use without definition:
+ * __exidx_start
+ * __exidx_end
+ * __etext
+ * __data_start__
+ * __preinit_array_start
+ * __preinit_array_end
+ * __init_array_start
+ * __init_array_end
+ * __fini_array_start
+ * __fini_array_end
+ * __data_end__
+ * __bss_start__
+ * __bss_end__
+ * __end__
+ * end
+ * __HeapLimit
+ * __StackLimit
+ * __StackTop
+ * __stack
+ */
+ENTRY(Reset_Handler)
+
+SECTIONS
+{
+    .image2.table :
+    {
+        KEEP(*(SORT(.image2.ram.data*)))
+        KEEP(*(.image2.validate.rodata*))
+    } > SRAM2
+
+    .text.sram1 :
+    {
+        . = ALIGN(4);
+        *rtl8195a_crypto.o (.text* .rodata*)
+        *mbedtls*.o (.text* .rodata*)
+        *libc.a: (.text* .rodata*)
+        *Ticker.o (.text*)
+        *Timeout.o (.text*)
+        *TimerEvent.o (.text*)
+        *mbed_ticker_api.o (.text*)
+        *mbed_critical.o (.text*)
+        *us_ticker.o (.text*)
+        
+        *lib_peripheral_mbed_gcc.a: (.text*)
+        
+    } > SRAM1
+
+    .text.sram2 :
+    {
+        . = ALIGN(4);
+        *(.mon.ram.text*)
+        *(.hal.flash.text*)
+        *(.hal.sdrc.text*)
+        *(.hal.gpio.text*)
+        *(.text*)
+
+        KEEP(*(.init))
+        KEEP(*(.fini))
+
+        /* .ctors */
+        *crtbegin.o(.ctors)
+        *crtbegin?.o(.ctors)
+        *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
+        *(SORT(.ctors.*))
+        *(.ctors)
+
+        /* .dtors */
+        *crtbegin.o(.dtors)
+        *crtbegin?.o(.dtors)
+        *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
+        *(SORT(.dtors.*))
+        *(.dtors)
+
+        *(.rodata*)
+
+        KEEP(*(.eh_frame*))
+    } > SRAM2
+    __etext = .;
+
+    __data_start__ = .;
+
+    .data.sram1 :
+    {
+        . = ALIGN(4);
+        __sram_data_start__ = .;
+        *rtl8195a_crypto*.o (.data*)
+        *mbedtls*.o (.data*)
+        __sram_data_end__ = .;
+    } > SRAM1
+
+    .data.sram2 :
+    {
+        __sdram_data_start__ = .;
+        *(vtable)
+        *(.data*)
+        *(.sdram.data*)
+
+        . = ALIGN(4);
+        /* preinit data */
+        PROVIDE (__preinit_array_start = .);
+        KEEP(*(.preinit_array))
+        PROVIDE (__preinit_array_end = .);
+
+        . = ALIGN(4);
+        /* init data */
+        PROVIDE (__init_array_start = .);
+        KEEP(*(SORT(.init_array.*)))
+        KEEP(*(.init_array))
+        PROVIDE (__init_array_end = .);
+
+        . = ALIGN(4);
+        /* finit data */
+        PROVIDE (__fini_array_start = .);
+        KEEP(*(SORT(.fini_array.*)))
+        KEEP(*(.fini_array))
+        PROVIDE (__fini_array_end = .);
+
+        . = ALIGN(4);
+
+        __sdram_data_end__ = .;
+        /* All data end */
+    } > SRAM2
+    __data_end__ = .;
+    __image2_end__ = .;
+
+    .ARM.extab :
+    {
+        *(.ARM.extab* .gnu.linkonce.armextab.*)
+    } > SRAM2
+
+    __exidx_start = .;
+    .ARM.exidx :
+    {
+        *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+    } > SRAM2
+    __exidx_end = .;
+
+    .bss.sram1 (NOLOAD) :
+    {
+        __bss_sram_start__ = .;
+        *rtl8195a_crypto.o (.bss* COMMON)
+        *mbedtls*.o (.bss* COMMON)
+        *(.bss.thread_stack_main)
+        __bss_sram_end__ = .;
+    } > SRAM1
+
+    .bss.sram2 (NOLOAD) :
+    {
+        __bss_start__ = .;
+        __bss_dram_start__ = .;
+        *(.bss*)
+        *(COMMON)
+        *(.bdsram.data*)
+        __bss_dram_end__ = .;
+        __bss_end__ = .;
+    } > SRAM2
+
+    .bf_data :
+    {
+        __buffer_data_start__ = .;
+        *(.bfsram.data*)
+        __buffer_data_end__ = .;
+    } > SRAM2
+
+    .heap (NOLOAD):
+    {
+        __end__ = .;
+        end = __end__;
+        *(.heap*)
+    . = ORIGIN(SRAM1) + LENGTH(SRAM1) - StackSize;
+        __HeapLimit = .;
+    } > SRAM1
+    
+    .TCM_overlay :
+    {
+        __bss_dtcm_start__ = .;
+        *lwip_mem.o (.bss*)
+        *lwip_memp.o (.bss*)
+        *(.tcm.heap*)
+        __bss_dtcm_end__ = .;
+    } > TCM
+    
+    /* .stack_dummy section doesn't contains any symbols. It is only
+     * used for linker to calculate size of stack sections, and assign
+     * values to stack symbols later */
+    .stack_dummy (NOLOAD):
+    {
+        __StackLimit = .;
+        *(.stack)
+    . += StackSize - (. - __StackLimit);
+    } > SRAM1
+
+    /* Set stack top to end of RAM, and stack limit move down by
+     * size of stack_dummy section */
+    __StackTop = ORIGIN(SRAM1) + LENGTH(SRAM1);
+    __StackLimit = __StackTop - SIZEOF(.stack_dummy);
+    PROVIDE(__stack = __StackTop);
+
+    /* Check if data + heap + stack exceeds RAM limit */
+    ASSERT(__StackLimit >= __HeapLimit, "region RAM exceeds ram limit")
+}