159 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			159 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
/**
 | 
						|
 * \file
 | 
						|
 *
 | 
						|
 * \brief GCC linker script (flash) for ATSAMG55J19
 | 
						|
 *
 | 
						|
 * Copyright (c) 2017 Atmel Corporation, a wholly owned subsidiary of Microchip Technology Inc.
 | 
						|
 *
 | 
						|
 * \license_start
 | 
						|
 *
 | 
						|
 * \page License
 | 
						|
 *
 | 
						|
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
 * you may not use this file except in compliance with the License.
 | 
						|
 * You may obtain a copy of the License at
 | 
						|
 *
 | 
						|
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
 *
 | 
						|
 * Unless required by applicable law or agreed to in writing, software
 | 
						|
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
 * See the License for the specific language governing permissions and
 | 
						|
 * limitations under the License.
 | 
						|
 *
 | 
						|
 * \license_stop
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
/*------------------------------------------------------------------------------
 | 
						|
 *      Linker script for running in internal FLASH on the ATSAMG55J19
 | 
						|
 *----------------------------------------------------------------------------*/
 | 
						|
 | 
						|
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
 | 
						|
OUTPUT_ARCH(arm)
 | 
						|
 | 
						|
/* Memory Spaces Definitions */
 | 
						|
MEMORY
 | 
						|
{
 | 
						|
    rom (rx)    : ORIGIN = 0x00400000, LENGTH = 0x00080000 /* rom, 524288K */
 | 
						|
    ram (rwx)   : ORIGIN = 0x20000000, LENGTH = 0x00028000 /* ram, 163840K */
 | 
						|
}
 | 
						|
 | 
						|
/* The stack size used by the application. NOTE: you need to adjust according to your application. */
 | 
						|
STACK_SIZE = DEFINED(STACK_SIZE) ? STACK_SIZE : DEFINED(__stack_size__) ? __stack_size__ : 0x0400;
 | 
						|
 | 
						|
/* The heapsize used by the application. NOTE: you need to adjust according to your application. */
 | 
						|
HEAP_SIZE = DEFINED(HEAP_SIZE) ? HEAP_SIZE : DEFINED(__heap_size__) ? __heap_size__ : 0x0200;
 | 
						|
 | 
						|
/* 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 = .;
 | 
						|
        end = .;
 | 
						|
    } > ram
 | 
						|
 | 
						|
    /* heap section */
 | 
						|
    .heap (NOLOAD):
 | 
						|
    {
 | 
						|
        . = ALIGN(8);
 | 
						|
         _sheap = .;
 | 
						|
        . = . + HEAP_SIZE;
 | 
						|
        . = ALIGN(8);
 | 
						|
        _eheap = .;
 | 
						|
    } > ram
 | 
						|
 | 
						|
    /* stack section */
 | 
						|
    .stack (NOLOAD):
 | 
						|
    {
 | 
						|
        . = ALIGN(8);
 | 
						|
        _sstack = .;
 | 
						|
        . = . + STACK_SIZE;
 | 
						|
        . = ALIGN(8);
 | 
						|
        _estack = .;
 | 
						|
    } > ram
 | 
						|
 | 
						|
    . = ALIGN(4);
 | 
						|
    _end = . ;
 | 
						|
    _ram_end_ = ORIGIN(ram) + LENGTH(ram) - 1 ;
 | 
						|
}
 |