/* ---------------------------------------------------------------------------- * SAM Software Package License * ---------------------------------------------------------------------------- * Copyright (c) 2015, Atmel Corporation * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the disclaimer below. * * Atmel's name may not be used to endorse or promote products derived from * this software without specific prior written permission. * * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ---------------------------------------------------------------------------- */ /*------------------------------------------------------------------------------ * Linker script for running in internal DDRAM on the SAMA5-MIURA *----------------------------------------------------------------------------*/ OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") OUTPUT_ARCH(arm) ENTRY(entry) SEARCH_DIR(.) /* Memory Spaces Definitions */ MEMORY { sram (W!RX) : ORIGIN = 0x200000, LENGTH = 128K /* sram */ ddr (W!RX) : ORIGIN = 0x20000000, LENGTH = 64M /* ddr */ ddr_nocache (RWX) : ORIGIN = 0x24000000, LENGTH = 16M /* ddr (non-cached) */ } /* Sizes of the stacks used by the application. NOTE: you need to adjust */ C_STACK_SIZE = 0x3000; IRQ_STACK_SIZE = 0x60; FIQ_STACK_SIZE = 0x60; SYS_STACK_SIZE = 0x40; ABT_STACK_SIZE = 0x40; UND_STACK_SIZE = 0x40; HEAP_SIZE = 0x200; /* Section Definitions */ SECTIONS { .fixed0 : { . = ALIGN(4); _sfixed = .; *(.textEntry) *(.text .text.* .gnu.linkonce.t.*) *(.glue_7t) *(.glue_7) *(.cp15_*) *(.rodata .rodata* .gnu.linkonce.r.*) *(.ARM.extab* .gnu.linkonce.armextab.*) /* Support C constructors, and C destructors in both user code and the C library. This also provides support for C++ code. */ . = ALIGN(4); KEEP(*(.init)) . = ALIGN(4); __preinit_array_start = .; KEEP (*(.preinit_array)) __preinit_array_end = .; . = ALIGN(4); __init_array_start = .; KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array)) __init_array_end = .; . = ALIGN(0x4); KEEP (*crtbegin.o(.ctors)) KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*crtend.o(.ctors)) . = ALIGN(4); KEEP(*(.fini)) . = ALIGN(4); __fini_array_start = .; KEEP (*(.fini_array)) KEEP (*(SORT(.fini_array.*))) __fini_array_end = .; KEEP (*crtbegin.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*crtend.o(.dtors)) *(.data .data.*); . = ALIGN(4); _efixed = .; /* End of text section */ } >ddr /* .ARM.exidx is sorted, so has to go in its own output section. */ PROVIDE_HIDDEN (__exidx_start = .); .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >ddr PROVIDE_HIDDEN (__exidx_end = .); /* _etext must be just before .relocate section */ . = ALIGN(4); _etext = .; .relocate : { . = ALIGN(4); _srelocate = .; *(.vectors); *(.ramfunc) . = ALIGN(4); _erelocate = .; } >sram AT>ddr .region_sram (NOLOAD) : { . = ALIGN(4); *(.region_sram) } >sram .region_ddr (NOLOAD) : { . = ALIGN(4); *(.region_ddr) } >ddr .region_ddr_nocache (NOLOAD) : { . = ALIGN(4); *(.region_ddr_nocache) } >ddr_nocache /* .bss section which is used for uninitialized data */ .bss (NOLOAD) : { . = ALIGN(4); _sbss = . ; _szero = .; *(.bss .bss.*) *(COMMON) . = ALIGN(4); _ebss = . ; _ezero = .; } >ddr .stack (NOLOAD) : { __stack_start__ = . ; . += IRQ_STACK_SIZE; . = ALIGN (4); _irqstack = . ; . += FIQ_STACK_SIZE; . = ALIGN (4); _fiqstack = . ; . += ABT_STACK_SIZE; . = ALIGN (4); _abtstack = . ; . += UND_STACK_SIZE; . = ALIGN (4); _undstack = . ; . += SYS_STACK_SIZE; . = ALIGN (4); _sysstack = . ; . += C_STACK_SIZE; . = ALIGN (4); _cstack = . ; . += HEAP_SIZE; . = ALIGN (4); _heap = . ; __stack_end__ = .; } >ddr }