| 
									
										
										
										
											2021-09-17 17:56:24 +08:00
										 |  |  | /** | 
					
						
							|  |  |  |  * \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 | 
					
						
							|  |  |  |   ram      (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* The stack size used by the application. NOTE: you need to adjust according to your application. */ | 
					
						
							| 
									
										
										
										
											2024-04-24 11:24:27 +07:00
										 |  |  | STACK_SIZE = DEFINED(__stack_size__) ? __stack_size__ : 0x2000; | 
					
						
							| 
									
										
										
										
											2021-09-17 17:56:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | ENTRY(Reset_Handler) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* 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(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 = . ; | 
					
						
							|  |  |  | } |