initial commit
This commit is contained in:
		
						commit
						7df819dfee
					
				
					 13 changed files with 1558 additions and 0 deletions
				
			
		
							
								
								
									
										292
									
								
								myapps/blinky-old-32mg/linker_script/efr32mg21.ld
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										292
									
								
								myapps/blinky-old-32mg/linker_script/efr32mg21.ld
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,292 @@ | |||
| /***************************************************************************//** | ||||
|  * @file     gcc_EFR32MG21.ld | ||||
|  * @brief    GNU Linker Script for Cortex-M based device | ||||
|  * @version  V2.2.0 | ||||
|  * @date     16. December 2020 | ||||
|  * Linker script for Silicon Labs EFR32MG21 devices | ||||
|  ******************************************************************************* | ||||
|  * # License | ||||
|  * <b>Copyright 2024 Silicon Laboratories, Inc. www.silabs.com </b> | ||||
|  ******************************************************************************* | ||||
|  * | ||||
|  * SPDX-License-Identifier: Zlib | ||||
|  * | ||||
|  * The licensor of this software is Silicon Laboratories Inc. | ||||
|  * | ||||
|  * This software is provided 'as-is', without any express or implied | ||||
|  * warranty. In no event will the authors be held liable for any damages | ||||
|  * arising from the use of this software. | ||||
|  * | ||||
|  * Permission is granted to anyone to use this software for any purpose, | ||||
|  * including commercial applications, and to alter it and redistribute it | ||||
|  * freely, subject to the following restrictions: | ||||
|  * | ||||
|  * 1. The origin of this software must not be misrepresented; you must not | ||||
|  *    claim that you wrote the original software. If you use this software | ||||
|  *    in a product, an acknowledgment in the product documentation would be | ||||
|  *    appreciated but is not required. | ||||
|  * 2. Altered source versions must be plainly marked as such, and must not be | ||||
|  *    misrepresented as being the original software. | ||||
|  * 3. This notice may not be removed or altered from any source distribution. | ||||
|  * | ||||
|  ******************************************************************************/ | ||||
| 
 | ||||
| MEMORY | ||||
| { | ||||
|   FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 1024K | ||||
|   RAM (rwx)  : ORIGIN = 0x20000000, LENGTH = 96K | ||||
| } | ||||
| 
 | ||||
| /* Linker script to place sections and symbol values. Should be used together | ||||
|  * with other linker script that defines memory regions FLASH and RAM. | ||||
|  * It references following symbols, which must be defined in code: | ||||
|  *   Reset_Handler : Entry of reset handler | ||||
|  * | ||||
|  * It defines following symbols, which code can use without definition: | ||||
|  *   __exidx_start | ||||
|  *   __exidx_end | ||||
|  *   __copy_table_start__ | ||||
|  *   __copy_table_end__ | ||||
|  *   __zero_table_start__ | ||||
|  *   __zero_table_end__ | ||||
|  *   __etext | ||||
|  *   __data_start__ | ||||
|  *   __preinit_array_start | ||||
|  *   __preinit_array_end | ||||
|  *   __init_array_start | ||||
|  *   __init_array_end | ||||
|  *   __fini_array_start | ||||
|  *   __fini_array_end | ||||
|  *   __data_end__ | ||||
|  *   __bss_start__ | ||||
|  *   __bss_end__ | ||||
|  *   __end__ | ||||
|  *   end | ||||
|  *   __HeapLimit | ||||
|  *   __StackLimit | ||||
|  *   __StackTop | ||||
|  *   __stack | ||||
|  *   __StackSeal      (only if ARMv8-M stack sealing is used) | ||||
|  */ | ||||
| 
 | ||||
| ENTRY(Reset_Handler) | ||||
| 
 | ||||
| SECTIONS | ||||
| { | ||||
|   .text : | ||||
|   { | ||||
|     KEEP(*(.vectors)) | ||||
|     *(.text*) | ||||
| 
 | ||||
|     KEEP(*(.init)) | ||||
|     KEEP(*(.fini)) | ||||
| 
 | ||||
|     /* .ctors */ | ||||
|     *crtbegin.o(.ctors) | ||||
|     *crtbegin?.o(.ctors) | ||||
|     *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) | ||||
|     *(SORT(.ctors.*)) | ||||
|     *(.ctors) | ||||
| 
 | ||||
|     /* .dtors */ | ||||
|     *crtbegin.o(.dtors) | ||||
|     *crtbegin?.o(.dtors) | ||||
|     *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) | ||||
|     *(SORT(.dtors.*)) | ||||
|     *(.dtors) | ||||
| 
 | ||||
|     *(.rodata*) | ||||
| 
 | ||||
|     KEEP(*(.eh_frame*)) | ||||
|   } > FLASH | ||||
|   /* | ||||
|    * SG veneers: | ||||
|    * All SG veneers are placed in the special output section .gnu.sgstubs. Its start address | ||||
|    * must be set, either with the command line option ‘--section-start’ or in a linker script, | ||||
|    * to indicate where to place these veneers in memory. | ||||
|    */ | ||||
| /* | ||||
|   .gnu.sgstubs : ALIGN(32) | ||||
|   { | ||||
|     . = ALIGN(32); | ||||
|     linker_sg_begin = .; | ||||
|     KEEP(*(.gnu.sgstubs*)) | ||||
|     . = ALIGN(32); | ||||
|   } > FLASH | ||||
|   linker_sg_end = linker_sg_begin + SIZEOF(.gnu.sgstubs); | ||||
| */ | ||||
|   .ARM.extab : | ||||
|   { | ||||
|     *(.ARM.extab* .gnu.linkonce.armextab.*) | ||||
|   } > FLASH | ||||
| 
 | ||||
|   __exidx_start = .; | ||||
|   .ARM.exidx : | ||||
|   { | ||||
|     *(.ARM.exidx* .gnu.linkonce.armexidx.*) | ||||
|   } > FLASH | ||||
|   __exidx_end = .; | ||||
| 
 | ||||
|   .copy.table : | ||||
|   { | ||||
|     . = ALIGN(4); | ||||
|     __copy_table_start__ = .; | ||||
| 
 | ||||
|     LONG (__etext) | ||||
|     LONG (__data_start__) | ||||
|     LONG ((__data_end__ - __data_start__) / 4) | ||||
| 
 | ||||
|     /* Add each additional data section here */ | ||||
| /* | ||||
|     LONG (__etext2) | ||||
|     LONG (__data2_start__) | ||||
|     LONG ((__data2_end__ - __data2_start__) / 4) | ||||
| */ | ||||
|     __copy_table_end__ = .; | ||||
|   } > FLASH | ||||
| 
 | ||||
|   .zero.table : | ||||
|   { | ||||
|     . = ALIGN(4); | ||||
|     __zero_table_start__ = .; | ||||
|     /* Add each additional bss section here */ | ||||
| /* | ||||
|     LONG (__bss2_start__) | ||||
|     LONG ((__bss2_end__ - __bss2_start__) / 4) | ||||
| */ | ||||
|     __zero_table_end__ = .; | ||||
|     __etext = ALIGN(4); | ||||
|   } > FLASH | ||||
| 
 | ||||
|   .data : AT (__etext) | ||||
|   { | ||||
|     __data_start__ = .; | ||||
|     *(vtable) | ||||
|     *(.data*) | ||||
|     . = ALIGN (4); | ||||
|     PROVIDE (__ram_func_section_start = .); | ||||
|     *(.ram) | ||||
|     PROVIDE (__ram_func_section_end = .); | ||||
| 
 | ||||
|     . = ALIGN(4); | ||||
|     /* preinit data */ | ||||
|     PROVIDE_HIDDEN (__preinit_array_start = .); | ||||
|     KEEP(*(.preinit_array)) | ||||
|     PROVIDE_HIDDEN (__preinit_array_end = .); | ||||
| 
 | ||||
|     . = ALIGN(4); | ||||
|     /* init data */ | ||||
|     PROVIDE_HIDDEN (__init_array_start = .); | ||||
|     KEEP(*(SORT(.init_array.*))) | ||||
|     KEEP(*(.init_array)) | ||||
|     PROVIDE_HIDDEN (__init_array_end = .); | ||||
| 
 | ||||
|     . = ALIGN(4); | ||||
|     /* finit data */ | ||||
|     PROVIDE_HIDDEN (__fini_array_start = .); | ||||
|     KEEP(*(SORT(.fini_array.*))) | ||||
|     KEEP(*(.fini_array)) | ||||
|     PROVIDE_HIDDEN (__fini_array_end = .); | ||||
| 
 | ||||
|     KEEP(*(.jcr*)) | ||||
|     . = ALIGN(4); | ||||
|     /* All data end */ | ||||
|     __data_end__ = .; | ||||
| 
 | ||||
|   } > RAM | ||||
| 
 | ||||
|   /* | ||||
|    * Secondary data section, optional | ||||
|    * | ||||
|    * Remember to add each additional data section | ||||
|    * to the .copy.table above to asure proper | ||||
|    * initialization during startup. | ||||
|    */ | ||||
| /* | ||||
|   __etext2 = ALIGN (4); | ||||
| 
 | ||||
|   .data2 : AT (__etext2) | ||||
|   { | ||||
|     . = ALIGN(4); | ||||
|     __data2_start__ = .; | ||||
|     *(.data2) | ||||
|     *(.data2.*) | ||||
|     . = ALIGN(4); | ||||
|     __data2_end__ = .; | ||||
| 
 | ||||
|   } > RAM2 | ||||
| */ | ||||
|   .bss : | ||||
|   { | ||||
|     . = ALIGN(4); | ||||
|     __bss_start__ = .; | ||||
|     *(.bss) | ||||
|     *(.bss.*) | ||||
|     *(COMMON) | ||||
|     . = ALIGN(4); | ||||
|     __bss_end__ = .; | ||||
|   } > RAM AT > RAM | ||||
| 
 | ||||
|   /* | ||||
|    * Secondary bss section, optional | ||||
|    * | ||||
|    * Remember to add each additional bss section | ||||
|    * to the .zero.table above to asure proper | ||||
|    * initialization during startup. | ||||
|    */ | ||||
| /* | ||||
|   .bss2 : | ||||
|   { | ||||
|     . = ALIGN(4); | ||||
|     __bss2_start__ = .; | ||||
|     *(.bss2) | ||||
|     *(.bss2.*) | ||||
|     . = ALIGN(4); | ||||
|     __bss2_end__ = .; | ||||
|   } > RAM2 AT > RAM2 | ||||
| */ | ||||
| 
 | ||||
|   .heap (COPY): | ||||
|   { | ||||
|     __HeapBase = .; | ||||
|     __end__ = .; | ||||
|     end = __end__; | ||||
|     _end = __end__; | ||||
|     KEEP(*(.heap*)) | ||||
|     __HeapLimit = .; | ||||
|   } > RAM | ||||
|   /* ARMv8-M stack sealing: | ||||
|      to use ARMv8-M stack sealing uncomment '.stackseal' section and KEEP(*(.stackseal*)) | ||||
|      in .stack_dummy section | ||||
|    */ | ||||
| /* | ||||
|   .stackseal (COPY) : | ||||
|   { | ||||
|     . = ALIGN(8); | ||||
|     __StackSeal = .; | ||||
|     . = . + 8; | ||||
|     . = ALIGN(8); | ||||
|   } > RAM | ||||
| */ | ||||
| 
 | ||||
|   /* .stack_dummy section doesn't contains any symbols. It is only | ||||
|    * used for linker to calculate size of stack sections, and assign | ||||
|    * values to stack symbols later */ | ||||
|   .stack_dummy (COPY): | ||||
|   { | ||||
|     KEEP(*(.stack*)) | ||||
|  /* KEEP(*(.stackseal*))*/ | ||||
|   } > RAM | ||||
| 
 | ||||
|   /* Set stack top to end of RAM, and stack limit move down by | ||||
|    * size of stack_dummy section */ | ||||
|   __StackTop = ORIGIN(RAM) + LENGTH(RAM); | ||||
|   __StackLimit = __StackTop - SIZEOF(.stack_dummy); | ||||
|   PROVIDE(__stack = __StackTop); | ||||
| 
 | ||||
|   /* Check if data + heap + stack exceeds RAM limit */ | ||||
|   ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") | ||||
| 
 | ||||
|   /* Check if FLASH usage exceeds FLASH size */ | ||||
|   ASSERT( LENGTH(FLASH) >= (__etext + SIZEOF(.data)), "FLASH memory overflowed !") | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue