148 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			148 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | /** | ||
|  |  * \file | ||
|  |  * | ||
|  |  * \brief Linker script for running in internal FLASH on the SAMD21G18A | ||
|  |  * | ||
|  |  * Copyright (c) 2017 Microchip Technology Inc. | ||
|  |  * | ||
|  |  * \asf_license_start | ||
|  |  * | ||
|  |  * \page License | ||
|  |  * | ||
|  |  * SPDX-License-Identifier: Apache-2.0 | ||
|  |  * | ||
|  |  * 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 Licence 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. | ||
|  |  * | ||
|  |  * \asf_license_stop | ||
|  |  * | ||
|  |  */ | ||
|  | 
 | ||
|  | 
 | ||
|  | OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") | ||
|  | OUTPUT_ARCH(arm) | ||
|  | SEARCH_DIR(.) | ||
|  | 
 | ||
|  | /* Memory Spaces Definitions */ | ||
|  | MEMORY | ||
|  | { | ||
|  |   rom      (rx)  : ORIGIN = 0x00000000 + 8K, LENGTH = 0x00040000 - 8K  /* 8K offset to preserve bootloader */ | ||
|  |   ram      (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 | ||
|  | } | ||
|  | 
 | ||
|  | /* 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__ : 0x2000; | ||
|  | 
 | ||
|  | ENTRY(Reset_Handler) | ||
|  | 
 | ||
|  | /* Section Definitions */ | ||
|  | SECTIONS | ||
|  | { | ||
|  |     .text : | ||
|  |     { | ||
|  |         . = ALIGN(4); | ||
|  |         _sfixed = .; | ||
|  |         KEEP(*(.vectors .vectors.*)) | ||
|  |         *(.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(4); | ||
|  |         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 | ||
|  | 
 | ||
|  |     /* stack section */ | ||
|  |     .stack (NOLOAD): | ||
|  |     { | ||
|  |         . = ALIGN(8); | ||
|  |         _sstack = .; | ||
|  |         . = . + STACK_SIZE; | ||
|  |         . = ALIGN(8); | ||
|  |         _estack = .; | ||
|  |     } > ram | ||
|  | 
 | ||
|  |     . = ALIGN(4); | ||
|  |     _end = . ; | ||
|  | } |