; * ----------------------------------------------------------------------------
; *         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 scatter for running in internal FLASH on the SAMV71
; *----------------------------------------------------------------------------*/

; /* vector is put at very begin adress of FLASH, the preserved size is 0x100 */

LR_IROM1 0x40000000 0x00200000  ; load region size_region
{
	ER_IROM1 0x40000000 0x400 ;0x00200000  ; load address = execution address;
	{
		*.o (vectors, +FIRST)
	}
 	
	ER_IROM2 +0
	{
		*.o
		*(InRoot$$Sections)
   		.ANY (+RO)
	}

	RW_IRAM1 0x20400000 0x0005E000 ; RW data
	{
   		.ANY (+RW +ZI)
  	}

	; Configure Stack and Heap
	ARM_LIB_HEAP 0x2045E000 EMPTY 0x1000
	{
    	}

    	ARM_LIB_STACK 0x20405FFC EMPTY -0x1000
    	{
    	}	
}

