mirror of
https://github.com/hathach/tinyusb.git
synced 2025-01-17 05:32:55 +08:00
8e143fc962
This adds source files that allow to run TinyUSB stack on DA1469x-dk-pro board. Source files .c .S and .ld are taken from Apache Mynewt repository. Those files were stripped to allow starting board without Mynewt os.
229 lines
5.4 KiB
Plaintext
229 lines
5.4 KiB
Plaintext
/* Linker script for Dialog DA1469x devices
|
|
*
|
|
* Version: Sourcery G++ 4.5-1
|
|
* Support: https://support.codesourcery.com/GNUToolchain/
|
|
*
|
|
* Copyright (c) 2007, 2008, 2009, 2010 CodeSourcery, Inc.
|
|
*
|
|
* The authors hereby grant permission to use, copy, modify, distribute,
|
|
* and license this software and its documentation for any purpose, provided
|
|
* that existing copyright notices are retained in all copies and that this
|
|
* notice is included verbatim in any distributions. No written agreement,
|
|
* license, or royalty fee is required for any of the authorized uses.
|
|
* Modifications to this software may be copyrighted by their authors
|
|
* and need not follow the licensing terms described here, provided that
|
|
* the new terms are clearly indicated on the first page of each file where
|
|
* they apply.
|
|
*/
|
|
OUTPUT_FORMAT ("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
|
|
|
|
/* 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_Handler : 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__
|
|
* __HeapBase
|
|
* __HeapLimit
|
|
* __StackLimit
|
|
* __StackTop
|
|
* __stack
|
|
* __bssnz_start__
|
|
* __bssnz_end__
|
|
*/
|
|
ENTRY(Reset_Handler)
|
|
|
|
SECTIONS
|
|
{
|
|
.imghdr (NOLOAD):
|
|
{
|
|
. = . + _imghdr_size;
|
|
} > FLASH
|
|
|
|
__text = .;
|
|
|
|
.text :
|
|
{
|
|
__isr_vector_start = .;
|
|
KEEP(*(.isr_vector))
|
|
/* ISR vector shall have exactly 512 bytes */
|
|
. = __isr_vector_start + 0x200;
|
|
__isr_vector_end = .;
|
|
|
|
*(.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*)
|
|
|
|
*(.eh_frame*)
|
|
. = ALIGN(4);
|
|
} > FLASH
|
|
|
|
.ARM.extab :
|
|
{
|
|
*(.ARM.extab* .gnu.linkonce.armextab.*)
|
|
. = ALIGN(4);
|
|
} > FLASH
|
|
|
|
__exidx_start = .;
|
|
.ARM.exidx :
|
|
{
|
|
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
|
|
. = ALIGN(4);
|
|
} > FLASH
|
|
__exidx_end = .;
|
|
|
|
.intvect :
|
|
{
|
|
. = ALIGN(4);
|
|
__intvect_start__ = .;
|
|
. = . + (__isr_vector_end - __isr_vector_start);
|
|
. = ALIGN(4);
|
|
} > RAM
|
|
|
|
.sleep_state (NOLOAD) :
|
|
{
|
|
. = ALIGN(4);
|
|
*(sleep_state)
|
|
} > RAM
|
|
|
|
/* This section will be zeroed by RTT package init */
|
|
.rtt (NOLOAD):
|
|
{
|
|
. = ALIGN(4);
|
|
*(.rtt)
|
|
. = ALIGN(4);
|
|
} > RAM
|
|
|
|
__text_ram_addr = LOADADDR(.text_ram);
|
|
|
|
.text_ram :
|
|
{
|
|
. = ALIGN(4);
|
|
__text_ram_start__ = .;
|
|
*(.text_ram*)
|
|
. = ALIGN(4);
|
|
__text_ram_end__ = .;
|
|
} > RAM AT > FLASH
|
|
|
|
__etext = LOADADDR(.data);
|
|
|
|
.data :
|
|
{
|
|
__data_start__ = .;
|
|
*(vtable)
|
|
*(.data*)
|
|
|
|
. = ALIGN(4);
|
|
/* preinit data */
|
|
PROVIDE_HIDDEN (__preinit_array_start = .);
|
|
*(.preinit_array)
|
|
PROVIDE_HIDDEN (__preinit_array_end = .);
|
|
|
|
. = ALIGN(4);
|
|
/* init data */
|
|
PROVIDE_HIDDEN (__init_array_start = .);
|
|
*(SORT(.init_array.*))
|
|
*(.init_array)
|
|
PROVIDE_HIDDEN (__init_array_end = .);
|
|
|
|
|
|
. = ALIGN(4);
|
|
/* finit data */
|
|
PROVIDE_HIDDEN (__fini_array_start = .);
|
|
*(SORT(.fini_array.*))
|
|
*(.fini_array)
|
|
PROVIDE_HIDDEN (__fini_array_end = .);
|
|
|
|
*(.jcr)
|
|
. = ALIGN(4);
|
|
/* All data end */
|
|
__data_end__ = .;
|
|
} > RAM AT > FLASH
|
|
|
|
.bssnz :
|
|
{
|
|
. = ALIGN(4);
|
|
__bssnz_start__ = .;
|
|
*(.bss.core.nz*)
|
|
. = ALIGN(4);
|
|
__bssnz_end__ = .;
|
|
} > RAM
|
|
|
|
.bss :
|
|
{
|
|
. = ALIGN(4);
|
|
__bss_start__ = .;
|
|
*(.bss*)
|
|
*(COMMON)
|
|
. = ALIGN(4);
|
|
__bss_end__ = .;
|
|
} > RAM
|
|
|
|
.cmac (NOLOAD) :
|
|
{
|
|
. = ALIGN(0x400);
|
|
*(.libcmac.ram)
|
|
} > RAM
|
|
|
|
/* Heap starts after BSS */
|
|
. = ALIGN(8);
|
|
__HeapBase = .;
|
|
|
|
/* .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 (COPY):
|
|
{
|
|
*(.stack*)
|
|
} > RAM
|
|
|
|
_ram_start = ORIGIN(RAM);
|
|
|
|
/* Set stack top to end of RAM, and stack limit move down by
|
|
* size of stack_dummy section */
|
|
__StackTop = ORIGIN(RAM) + LENGTH(RAM);
|
|
__StackLimit = __StackTop - SIZEOF(.stack_dummy);
|
|
PROVIDE(__stack = __StackTop);
|
|
|
|
/* Top of head is the bottom of the stack */
|
|
__HeapLimit = __StackLimit;
|
|
|
|
/* Check if data + heap + stack exceeds RAM limit */
|
|
ASSERT(__HeapBase <= __HeapLimit, "region RAM overflowed with stack")
|
|
|
|
/* Check that intvect is at the beginning of RAM */
|
|
ASSERT(__intvect_start__ == ORIGIN(RAM), "intvect is not at beginning of RAM")
|
|
}
|
|
|