-
Notifications
You must be signed in to change notification settings - Fork 106
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added test application for SAME51 port
- Loading branch information
1 parent
656e925
commit 0d03293
Showing
189 changed files
with
49,099 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,274 @@ | ||
/*-------------------------------------------------------------------------- | ||
* MPLAB XC32 Compiler - ATSAME51J20A linker script | ||
* | ||
* Copyright (c) 2023, Microchip Technology Inc. and its subsidiaries ("Microchip") | ||
* All rights reserved. | ||
* | ||
* This software is developed by Microchip Technology Inc. and its | ||
* subsidiaries ("Microchip"). | ||
* | ||
* Redistribution and use in source and binary forms, with or without | ||
* modification, are permitted provided that the following conditions are | ||
* met: | ||
* | ||
* 1. Redistributions of source code must retain the above copyright | ||
* notice, this list of conditions and the following disclaimer. | ||
* 2. Redistributions in binary form must reproduce the above | ||
* copyright notice, this list of conditions and the following | ||
* disclaimer in the documentation and/or other materials provided | ||
* with the distribution. | ||
* 3. Microchip's name may not be used to endorse or promote products | ||
* derived from this software without specific prior written | ||
* permission. | ||
* | ||
* THIS SOFTWARE IS PROVIDED BY MICROCHIP "AS IS" AND ANY EXPRESS OR IMPLIED | ||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
* MERCHANTABILITY AND FITNESS FOR PURPOSE ARE DISCLAIMED. IN NO EVENT | ||
* SHALL MICROCHIP BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING BUT NOT LIMITED TO | ||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA OR PROFITS; | ||
* OR BUSINESS INTERRUPTION) HOWSOEVER CAUSED AND ON ANY THEORY OF LIABILITY, | ||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR | ||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | ||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
* | ||
*/ | ||
|
||
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") | ||
OUTPUT_ARCH(arm) | ||
SEARCH_DIR(.) | ||
|
||
/* | ||
* Define the __XC32_RESET_HANDLER_NAME macro on the command line when you | ||
* want to use a different name for the Reset Handler function. | ||
*/ | ||
#ifndef __XC32_RESET_HANDLER_NAME | ||
#define __XC32_RESET_HANDLER_NAME Reset_Handler | ||
#endif /* __XC32_RESET_HANDLER_NAME */ | ||
|
||
/* Set the entry point in the ELF file. Once the entry point is in the ELF | ||
* file, you can then use the --write-sla option to xc32-bin2hex to place | ||
* the address into the hex file using the SLA field (RECTYPE 5). This hex | ||
* record may be useful for a bootloader that needs to determine the entry | ||
* point to the application. | ||
*/ | ||
ENTRY(__XC32_RESET_HANDLER_NAME) | ||
|
||
/************************************************************************* | ||
* Memory-Region Macro Definitions | ||
* The XC32 linker preprocesses linker scripts. You may define these | ||
* macros in the MPLAB X project properties or on the command line when | ||
* calling the linker via the xc32-gcc shell. | ||
*************************************************************************/ | ||
|
||
#ifndef ROM_ORIGIN | ||
# define ROM_ORIGIN 0x8000 + 0x200 | ||
#endif | ||
#ifndef ROM_LENGTH | ||
# define ROM_LENGTH 0x100000 | ||
#elif (ROM_LENGTH > 0x100000) | ||
# error ROM_LENGTH is greater than the max size of 0x100000 | ||
#endif | ||
#ifndef RAM_ORIGIN | ||
# define RAM_ORIGIN 0x20000000 | ||
#endif | ||
#ifndef RAM_LENGTH | ||
# define RAM_LENGTH 0x40000 | ||
#elif (RAM_LENGTH > 0x40000) | ||
# error RAM_LENGTH is greater than the max size of 0x40000 | ||
#endif | ||
#ifndef TCM_ORIGIN | ||
# define TCM_ORIGIN 0x3000000 | ||
#endif | ||
#ifndef __XC32_TCM_LENGTH | ||
# define __XC32_TCM_LENGTH 0x0 | ||
#elif (defined(__XC32_TCM_LENGTH) && __XC32_TCM_LENGTH != 0x0 && __XC32_TCM_LENGTH != 0x800 && __XC32_TCM_LENGTH != 0xc00 && __XC32_TCM_LENGTH != 0x1000) | ||
# warning Non-standard ITCM length, using default 0x1000 | ||
# undef __XC32_TCM_LENGTH | ||
# define __XC32_TCM_LENGTH 0x1000 | ||
#endif | ||
#ifndef BKUPRAM_ORIGIN | ||
# define BKUPRAM_ORIGIN 0x47000000 | ||
#endif | ||
#ifndef BKUPRAM_LENGTH | ||
# define BKUPRAM_LENGTH 0x2000 | ||
#elif (BKUPRAM_LENGTH > 0x2000) | ||
# error BKUPRAM_LENGTH is greater than the max size of 0x2000 | ||
#endif | ||
|
||
|
||
|
||
/************************************************************************* | ||
* Memory-Region Definitions | ||
* The MEMORY command describes the location and size of blocks of memory | ||
* on the target device. The command below uses the macros defined above. | ||
*************************************************************************/ | ||
MEMORY | ||
{ | ||
rom (LRX) : ORIGIN = ROM_ORIGIN, LENGTH = ROM_LENGTH | ||
ram (WX!R) : ORIGIN = RAM_ORIGIN, LENGTH = RAM_LENGTH | ||
tcm (WX) : ORIGIN = TCM_ORIGIN, LENGTH = __XC32_TCM_LENGTH | ||
bkupram : ORIGIN = BKUPRAM_ORIGIN, LENGTH = BKUPRAM_LENGTH | ||
config_00804000 : ORIGIN = 0x00804000, LENGTH = 0x4 | ||
config_00804004 : ORIGIN = 0x00804004, LENGTH = 0x4 | ||
config_00804008 : ORIGIN = 0x00804008, LENGTH = 0x4 | ||
|
||
} | ||
/************************************************************************* | ||
* Output region definitions. | ||
* CODE_REGION defines the output region for .text/.rodata. | ||
* DATA_REGION defines the output region for .data/.bss | ||
* VECTOR_REGION defines the output region for .vectors. | ||
* | ||
* CODE_REGION defaults to 'rom', if rom is present (non-zero length), | ||
* and 'ram' otherwise. | ||
* N.B. The BFA will still allocate code to any MEMORY named 'rom' regardless | ||
* of CODE_REGION's value. If you wish to use rom for something else please | ||
* rename the MEMORY entry. | ||
* DATA_REGION defaults to 'ram', which must be present. | ||
* VECTOR_REGION defaults to CODE_REGION, unless 'boot_rom' is present. | ||
*/ | ||
#ifndef CODE_REGION | ||
# if ROM_LENGTH > 0 | ||
# define CODE_REGION rom | ||
# else | ||
# define CODE_REGION ram | ||
# endif | ||
#endif | ||
#ifndef DATA_REGION | ||
# define DATA_REGION ram | ||
#endif | ||
#ifndef VECTOR_REGION | ||
# define VECTOR_REGION CODE_REGION | ||
#endif | ||
|
||
__rom_end = ORIGIN(rom) + LENGTH(rom); | ||
__ram_end = ORIGIN(ram) + LENGTH(ram); | ||
|
||
/************************************************************************* | ||
* Section Definitions - Map input sections to output sections | ||
*************************************************************************/ | ||
SECTIONS | ||
{ | ||
.config_00804000 : { | ||
KEEP(*(.config_00804000)) | ||
} > config_00804000 | ||
.config_00804004 : { | ||
KEEP(*(.config_00804004)) | ||
} > config_00804004 | ||
.config_00804008 : { | ||
KEEP(*(.config_00804008)) | ||
} > config_00804008 | ||
|
||
/* | ||
* The linker moves the .vectors section into itcm when itcm is | ||
* enabled via the -mitcm option, but only when this .vectors output | ||
* section exists in the linker script. | ||
*/ | ||
.vectors : | ||
{ | ||
. = ALIGN(4); | ||
_sfixed = .; | ||
KEEP(*(.vectors .vectors.* .vectors_default .vectors_default.*)) | ||
KEEP(*(.isr_vector)) | ||
KEEP(*(.reset*)) | ||
KEEP(*(.after_vectors)) | ||
} > VECTOR_REGION | ||
/* | ||
* Code Sections - Note that standard input sections such as | ||
* *(.text), *(.text.*), *(.rodata), & *(.rodata.*) | ||
* are not mapped here. The best-fit allocator locates them, | ||
* so that input sections may flow around absolute sections | ||
* as needed. | ||
*/ | ||
.text : | ||
{ | ||
. = ALIGN(4); | ||
*(.glue_7t) *(.glue_7) | ||
*(.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 */ | ||
} > CODE_REGION | ||
|
||
/* .ARM.exidx is sorted, so has to go in its own output section. */ | ||
PROVIDE_HIDDEN (__exidx_start = .); | ||
.ARM.exidx : | ||
{ | ||
*(.ARM.exidx* .gnu.linkonce.armexidx.*) | ||
} > CODE_REGION | ||
PROVIDE_HIDDEN (__exidx_end = .); | ||
|
||
. = ALIGN(4); | ||
_etext = .; | ||
|
||
|
||
/* | ||
* Align here to ensure that the .bss section occupies space up to | ||
* _end. Align after .bss to ensure correct alignment even if the | ||
* .bss section disappears because there are no input sections. | ||
* | ||
* Note that input sections named .bss* are no longer mapped here. | ||
* The best-fit allocator locates them, so that they may flow | ||
* around absolute sections as needed. | ||
*/ | ||
.bss (NOLOAD) : | ||
{ | ||
. = ALIGN(4); | ||
__bss_start__ = .; | ||
_sbss = . ; | ||
_szero = .; | ||
*(COMMON) | ||
. = ALIGN(4); | ||
__bss_end__ = .; | ||
_ebss = . ; | ||
_ezero = .; | ||
} > DATA_REGION | ||
|
||
. = ALIGN(4); | ||
_end = . ; | ||
_ram_end_ = ORIGIN(ram) + LENGTH(ram) -1 ; | ||
|
||
.bkupram_bss : | ||
{ | ||
*(.bkupram_bss .bkupram_bss.*) | ||
*(.pbss .pbss.*) | ||
} > bkupram | ||
} | ||
|
Oops, something went wrong.