FeatherM4CAN to TOOL1RR (linker debug)

Created Diff never expires
The two texts are identical
There is no difference to show between these two texts
0 removals
Lines
Total
Removed
Words
Total
Removed
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
188 lines
0 additions
Lines
Total
Added
Words
Total
Added
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
188 lines
/**
/**
* \file
* \file
*
*
* \brief Linker script for running in internal FLASH on the SAME51N19A
* \brief Linker script for running in internal FLASH on the SAME51N19A
*
*
* Copyright (c) 2017 Microchip Technology Inc.
* Copyright (c) 2017 Microchip Technology Inc.
*
*
* \asf_license_start
* \asf_license_start
*
*
* \page License
* \page License
*
*
* SPDX-License-Identifier: Apache-2.0
* SPDX-License-Identifier: Apache-2.0
*
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* not use this file except in compliance with the License.
* You may obtain a copy of the Licence at
* You may obtain a copy of the Licence at
*
*
* http://www.apache.org/licenses/LICENSE-2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
*
* Unless required by applicable law or agreed to in writing, software
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an AS IS BASIS, WITHOUT
* distributed under the License is distributed on an AS IS BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* See the License for the specific language governing permissions and
* limitations under the License.
* limitations under the License.
*
*
* \asf_license_stop
* \asf_license_stop
*
*
*/
*/




OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
OUTPUT_ARCH(arm)
SEARCH_DIR(.)
SEARCH_DIR(.)


/* Memory Spaces Definitions */
/* Memory Spaces Definitions */
MEMORY
MEMORY
{
{
rom (rx) : ORIGIN = 0x00000000, LENGTH = 0x00080000
rom (rx) : ORIGIN = 0x00000000, LENGTH = 0x00080000
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00030000
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00030000
bkupram (rwx) : ORIGIN = 0x47000000, LENGTH = 0x00002000
bkupram (rwx) : ORIGIN = 0x47000000, LENGTH = 0x00002000
qspi (rwx) : ORIGIN = 0x04000000, LENGTH = 0x01000000
qspi (rwx) : ORIGIN = 0x04000000, LENGTH = 0x01000000
}
}


/* Section Definitions */
/* Section Definitions */
SECTIONS
SECTIONS
{
{
.text :
.text :
{
{
. = ALIGN(4);
. = ALIGN(4);
_sfixed = .;
_sfixed = .;
KEEP(*(.vectors .vectors.*))
KEEP(*(.vectors .vectors.*))
*(.text .text.* .gnu.linkonce.t.*)
*(.text .text.* .gnu.linkonce.t.*)
*(.glue_7t) *(.glue_7)
*(.glue_7t) *(.glue_7)
*(.rodata .rodata* .gnu.linkonce.r.*)
*(.rodata .rodata* .gnu.linkonce.r.*)
*(.ARM.extab* .gnu.linkonce.armextab.*)
*(.ARM.extab* .gnu.linkonce.armextab.*)


/* Support C constructors, and C destructors in both user code
/* Support C constructors, and C destructors in both user code
and the C library. This also provides support for C++ code. */
and the C library. This also provides support for C++ code. */
. = ALIGN(4);
. = ALIGN(4);
KEEP(*(.init))
KEEP(*(.init))
. = ALIGN(4);
. = ALIGN(4);
__preinit_array_start = .;
__preinit_array_start = .;
KEEP (*(.preinit_array))
KEEP (*(.preinit_array))
__preinit_array_end = .;
__preinit_array_end = .;


. = ALIGN(4);
. = ALIGN(4);
__init_array_start = .;
__init_array_start = .;
KEEP (*(SORT(.init_array.*)))
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array))
KEEP (*(.init_array))
__init_array_end = .;
__init_array_end = .;


. = ALIGN(4);
. = ALIGN(4);
KEEP (*crtbegin.o(.ctors))
KEEP (*crtbegin.o(.ctors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(SORT(.ctors.*)))
KEEP (*crtend.o(.ctors))
KEEP (*crtend.o(.ctors))


. = ALIGN(4);
. = ALIGN(4);
KEEP(*(.fini))
KEEP(*(.fini))


. = ALIGN(4);
. = ALIGN(4);
__fini_array_start = .;
__fini_array_start = .;
KEEP (*(.fini_array))
KEEP (*(.fini_array))
KEEP (*(SORT(.fini_array.*)))
KEEP (*(SORT(.fini_array.*)))
__fini_array_end = .;
__fini_array_end = .;


KEEP (*crtbegin.o(.dtors))
KEEP (*crtbegin.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(SORT(.dtors.*)))
KEEP (*crtend.o(.dtors))
KEEP (*crtend.o(.dtors))


. = ALIGN(4);
. = ALIGN(4);
_efixed = .; /* End of text section */
_efixed = .; /* End of text section */
} > rom
} > rom


/* .ARM.exidx is sorted, so has to go in its own output section. */
/* .ARM.exidx is sorted, so has to go in its own output section. */
PROVIDE_HIDDEN (__exidx_start = .);
PROVIDE_HIDDEN (__exidx_start = .);
.ARM.exidx :
.ARM.exidx :
{
{
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
} > rom
} > rom
PROVIDE_HIDDEN (__exidx_end = .);
PROVIDE_HIDDEN (__exidx_end = .);


. = ALIGN(4);
. = ALIGN(4);
_etext = .;
_etext = .;


/* CAN message buffers must be in the first 64K of RAM */
/* CAN message buffers must be in the first 64K of RAM */
.canMessage (NOLOAD) :
.canMessage (NOLOAD) :
{
{
. = ALIGN(4);
. = ALIGN(4);
_sCanMessage = . ;
_sCanMessage = . ;
*(.CanMessage .CanMessage.*)
*(.CanMessage .CanMessage.*)
. = ALIGN(4);
. = ALIGN(4);
_eCanMessage = . ;
_eCanMessage = . ;
} > ram
} > ram


/* DMA programming and write-back memory, here because they are volatile so we must't CRC them when we check for data corruption */
/* DMA programming and write-back memory, here because they are volatile so we must't CRC them when we check for data corruption */
.dmaBuffers (NOLOAD) :
.dmaBuffers (NOLOAD) :
{
{
. = ALIGN(16);
. = ALIGN(16);
_sDmaBuffers = . ;
_sDmaBuffers = . ;
*(.DmaBuffers .DmaBuffers.*)
*(.DmaBuffers .DmaBuffers.*)
. = ALIGN(4);
. = ALIGN(4);
_eDmaBuffers = . ;
_eDmaBuffers = . ;
} > ram
} > ram


.relocate : AT (_etext)
.relocate : AT (_etext)
{
{
. = ALIGN(4);
. = ALIGN(4);
_srelocate = .;
_srelocate = .;
*(.ramfunc .ramfunc.*);
*(.ramfunc .ramfunc.*);
*(.data .data.*);
*(.data .data.*);
. = ALIGN(4);
. = ALIGN(4);
_erelocate = .;
_erelocate = .;
} > ram
} > ram


_firmware_crc = _etext + (_erelocate - _srelocate); /* We append the CRC32 to the binary file. This is its offset in memory. */
_firmware_crc = _etext + (_erelocate - _srelocate); /* We append the CRC32 to the binary file. This is its offset in memory. */


.bkupram (NOLOAD):
.bkupram (NOLOAD):
{
{
. = ALIGN(8);
. = ALIGN(8);
_sbkupram = .;
_sbkupram = .;
*(.bkupram .bkupram.*);
*(.bkupram .bkupram.*);
. = ALIGN(8);
. = ALIGN(8);
_ebkupram = .;
_ebkupram = .;
} > bkupram
} > bkupram


.qspi (NOLOAD):
.qspi (NOLOAD):
{
{
. = ALIGN(8);
. = ALIGN(8);
_sqspi = .;
_sqspi = .;
*(.qspi .qspi.*);
*(.qspi .qspi.*);
. = ALIGN(8);
. = ALIGN(8);
_eqspi = .;
_eqspi = .;
} > qspi
} > qspi


/* .bss section which is used for uninitialized data */
/* .bss section which is used for uninitialized data */
.bss (NOLOAD) :
.bss (NOLOAD) :
{
{
. = ALIGN(4);
. = ALIGN(4);
_sbss = . ;
_sbss = . ;
_szero = .;
_szero = .;
*(.bss .bss.*)
*(.bss .bss.*)
*(COMMON)
*(COMMON)
. = ALIGN(4);
. = ALIGN(4);
_ebss = . ;
_ebss = . ;
_ezero = .;
_ezero = .;
} > ram
} > ram


. = ALIGN(4);
. = ALIGN(4);
_end = . ;
_end = . ;


/* .stack_dummy section doesn't contains any symbols. It is only
/* .stack_dummy section doesn't contains any symbols. It is only
used for linker to calculate size of stack sections, and assign
used for linker to calculate size of stack sections, and assign
values to stack symbols later */
values to stack symbols later */
.stack_dummy :
.stack_dummy :
{
{
*(.stack*)
*(.stack*)
} > ram
} > ram


/* Set stack top to end of ram, and stack limit move down by
/* Set stack top to end of ram, and stack limit move down by
* size of stack_dummy section */
* size of stack_dummy section */
__StackTop = ORIGIN(ram) + LENGTH(ram);
__StackTop = ORIGIN(ram) + LENGTH(ram);
__StackLimit = __StackTop - SIZEOF(.stack_dummy);
__StackLimit = __StackTop - SIZEOF(.stack_dummy);
PROVIDE(_sstack = __StackLimit);
PROVIDE(_sstack = __StackLimit);
PROVIDE(_estack = __StackTop);
PROVIDE(_estack = __StackTop);
}
}