| /* ---------------------------------------------------------------------------- |
| * ATMEL Microcontroller Software Support |
| * ---------------------------------------------------------------------------- |
| * Copyright (c) 2009, 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 FLASH on the ATSAM3S1 |
| *----------------------------------------------------------------------------*/ |
| |
| OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") |
| OUTPUT_ARCH(arm) |
| SEARCH_DIR(.) |
| |
| /* Memory Spaces Definitions */ |
| MEMORY |
| { |
| rom (rx) : ORIGIN = 0x00400000, LENGTH = 0x00010000 /* Flash, 64K */ |
| ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 /* sram, 16K */ |
| } |
| |
| /* 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 = .; |
| /* we must make sure the .dfudata is linked to start of RAM */ |
| *(.dfudata .dfudata.*); |
| *(.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); |
| *(.stack .stack.*) |
| } > ram |
| |
| . = ALIGN(4); |
| _end = . ; |
| } |