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 ;
							 | 
						||
| 
								 | 
							
								}
							 |