/* ---------------------------------------------------------------------------- */ | |
/* Atmel Microcontroller Software Support */ | |
/* SAM Software Package License */ | |
/* ---------------------------------------------------------------------------- */ | |
/* Copyright (c) 2014, Atmel Corporation */ | |
/* */ | |
/* All rights reserved. */ | |
/* */ | |
/* Redistribution and use in source and binary forms, with or without */ | |
/* modification, are permitted provided that the following condition is 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. */ | |
/* ---------------------------------------------------------------------------- */ | |
/* Section Definitions */ | |
SECTIONS | |
{ | |
.text : | |
{ | |
. = ALIGN(4); | |
_sfixed = .; | |
KEEP(*(.vectors .vectors.*)) | |
*(.text .text.* .gnu.linkonce.t.*) | |
*(.glue_7t) *(.glue_7) | |
*(.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)) | |
. = ALIGN(4); | |
_efixed = .; /* End of text section */ | |
} > rom | |
/* .ARM.exidx is sorted, so has to go in its own output section. */ | |
PROVIDE_HIDDEN (__exidx_start = .); | |
.ARM.exidx : | |
{ | |
*(.ARM.exidx* .gnu.linkonce.armexidx.*) | |
} > rom | |
PROVIDE_HIDDEN (__exidx_end = .); | |
. = ALIGN(4); | |
_etext = .; | |
.relocate : AT (_etext) | |
{ | |
. = ALIGN(4); | |
_srelocate = .; | |
*(.ramfunc .ramfunc.*); | |
*(.data .data.*); | |
. = ALIGN(4); | |
_erelocate = .; | |
} > ram | |
/* .bss section which is used for uninitialized data */ | |
.bss (NOLOAD) : | |
{ | |
. = ALIGN(4); | |
_sbss = . ; | |
_szero = .; | |
*(.bss .bss.*) | |
*(COMMON) | |
. = ALIGN(4); | |
_ebss = . ; | |
_ezero = .; | |
} > ram | |
/* stack section */ | |
.stack (NOLOAD): | |
{ | |
. = ALIGN(8); | |
_sstack = .; | |
. = . + STACK_SIZE; | |
. = ALIGN(8); | |
_estack = .; | |
} > ram | |
/* heap section */ | |
.heap (NOLOAD): | |
{ | |
. = ALIGN(8); | |
_sheap = .; | |
. = . + HEAP_SIZE; | |
. = ALIGN(8); | |
_eheap = .; | |
} > ram | |
. = ALIGN(4); | |
_end = . ; | |
_ram_end_ = ORIGIN(ram) + LENGTH(ram) -1 ; | |
} |