|  | @@ -0,0 +1,221 @@
 | 
	
		
			
				|  |  | +/*
 | 
	
		
			
				|  |  | +** ###################################################################
 | 
	
		
			
				|  |  | +**     Processors:          MCXA153VFM
 | 
	
		
			
				|  |  | +**                          MCXA153VFT
 | 
	
		
			
				|  |  | +**                          MCXA153VLH
 | 
	
		
			
				|  |  | +**
 | 
	
		
			
				|  |  | +**     Compiler:            GNU C Compiler
 | 
	
		
			
				|  |  | +**     Reference manual:    MCXA1 User manual
 | 
	
		
			
				|  |  | +**     Version:             rev. 1.0, 2022-03-29
 | 
	
		
			
				|  |  | +**     Build:               b230411
 | 
	
		
			
				|  |  | +**
 | 
	
		
			
				|  |  | +**     Abstract:
 | 
	
		
			
				|  |  | +**         Linker file for the GNU C Compiler
 | 
	
		
			
				|  |  | +**
 | 
	
		
			
				|  |  | +**     Copyright 2016 Freescale Semiconductor, Inc.
 | 
	
		
			
				|  |  | +**     Copyright 2016-2023 NXP
 | 
	
		
			
				|  |  | +**     SPDX-License-Identifier: BSD-3-Clause
 | 
	
		
			
				|  |  | +**
 | 
	
		
			
				|  |  | +**     http:                 www.nxp.com
 | 
	
		
			
				|  |  | +**     mail:                 support@nxp.com
 | 
	
		
			
				|  |  | +**
 | 
	
		
			
				|  |  | +** ###################################################################
 | 
	
		
			
				|  |  | +*/
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/* Entry Point */
 | 
	
		
			
				|  |  | +ENTRY(Reset_Handler)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +HEAP_SIZE  = DEFINED(__heap_size__)  ? __heap_size__  : 0x0400;
 | 
	
		
			
				|  |  | +STACK_SIZE = DEFINED(__stack_size__) ? __stack_size__ : 0x0800;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/* Specify the memory areas */
 | 
	
		
			
				|  |  | +MEMORY
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +  m_interrupts          (RX)  : ORIGIN = 0x00000000, LENGTH = 0x00000200
 | 
	
		
			
				|  |  | +  m_text                (RX)  : ORIGIN = 0x00000200, LENGTH = 0x0001FE00
 | 
	
		
			
				|  |  | +  m_data                (RW)  : ORIGIN = 0x20000000, LENGTH = 0x00006000
 | 
	
		
			
				|  |  | +  m_sramx0              (RW)  : ORIGIN = 0x04000000, LENGTH = 0x00002000
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/* Define output sections */
 | 
	
		
			
				|  |  | +SECTIONS
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +  /* The startup code goes first into internal flash */
 | 
	
		
			
				|  |  | +  .interrupts :
 | 
	
		
			
				|  |  | +  {
 | 
	
		
			
				|  |  | +    . = ALIGN(4);
 | 
	
		
			
				|  |  | +    KEEP(*(.isr_vector))     /* Startup code */
 | 
	
		
			
				|  |  | +    . = ALIGN(4);
 | 
	
		
			
				|  |  | +  } > m_interrupts
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /* The program code and other data goes into internal flash */
 | 
	
		
			
				|  |  | +  .text :
 | 
	
		
			
				|  |  | +  {
 | 
	
		
			
				|  |  | +    . = ALIGN(4);
 | 
	
		
			
				|  |  | +    *(.text)                 /* .text sections (code) */
 | 
	
		
			
				|  |  | +    *(.text*)                /* .text* sections (code) */
 | 
	
		
			
				|  |  | +    *(.rodata)               /* .rodata sections (constants, strings, etc.) */
 | 
	
		
			
				|  |  | +    *(.rodata*)              /* .rodata* sections (constants, strings, etc.) */
 | 
	
		
			
				|  |  | +    *(.glue_7)               /* glue arm to thumb code */
 | 
	
		
			
				|  |  | +    *(.glue_7t)              /* glue thumb to arm code */
 | 
	
		
			
				|  |  | +    *(.eh_frame)
 | 
	
		
			
				|  |  | +    KEEP (*(.init))
 | 
	
		
			
				|  |  | +    KEEP (*(.fini))
 | 
	
		
			
				|  |  | +    . = ALIGN(4);
 | 
	
		
			
				|  |  | +  } > m_text
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  .rtt_const_tables :
 | 
	
		
			
				|  |  | +  {
 | 
	
		
			
				|  |  | +     /* section information for finsh shell */
 | 
	
		
			
				|  |  | +     . = ALIGN(4);
 | 
	
		
			
				|  |  | +     __fsymtab_start = .;
 | 
	
		
			
				|  |  | +     KEEP(*(FSymTab))
 | 
	
		
			
				|  |  | +     __fsymtab_end = .;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +     . = ALIGN(4);
 | 
	
		
			
				|  |  | +     __vsymtab_start = .;
 | 
	
		
			
				|  |  | +     KEEP(*(VSymTab))
 | 
	
		
			
				|  |  | +     __vsymtab_end = .;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /* section information for initial. */
 | 
	
		
			
				|  |  | +    . = ALIGN(4);
 | 
	
		
			
				|  |  | +    __rt_init_start = .;
 | 
	
		
			
				|  |  | +    KEEP(*(SORT(.rti_fn*)))
 | 
	
		
			
				|  |  | +    __rt_init_end = .;
 | 
	
		
			
				|  |  | +  } > m_text
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  .ARM.extab :
 | 
	
		
			
				|  |  | +  {
 | 
	
		
			
				|  |  | +    *(.ARM.extab* .gnu.linkonce.armextab.*)
 | 
	
		
			
				|  |  | +  } > m_text
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  .ARM :
 | 
	
		
			
				|  |  | +  {
 | 
	
		
			
				|  |  | +    __exidx_start = .;
 | 
	
		
			
				|  |  | +    *(.ARM.exidx*)
 | 
	
		
			
				|  |  | +    __exidx_end = .;
 | 
	
		
			
				|  |  | +  } > m_text
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | + .ctors :
 | 
	
		
			
				|  |  | +  {
 | 
	
		
			
				|  |  | +    __CTOR_LIST__ = .;
 | 
	
		
			
				|  |  | +    /* gcc uses crtbegin.o to find the start of
 | 
	
		
			
				|  |  | +       the constructors, so we make sure it is
 | 
	
		
			
				|  |  | +       first.  Because this is a wildcard, it
 | 
	
		
			
				|  |  | +       doesn't matter if the user does not
 | 
	
		
			
				|  |  | +       actually link against crtbegin.o; the
 | 
	
		
			
				|  |  | +       linker won't look for a file to match a
 | 
	
		
			
				|  |  | +       wildcard.  The wildcard also means that it
 | 
	
		
			
				|  |  | +       doesn't matter which directory crtbegin.o
 | 
	
		
			
				|  |  | +       is in.  */
 | 
	
		
			
				|  |  | +    KEEP (*crtbegin.o(.ctors))
 | 
	
		
			
				|  |  | +    KEEP (*crtbegin?.o(.ctors))
 | 
	
		
			
				|  |  | +    /* We don't want to include the .ctor section from
 | 
	
		
			
				|  |  | +       from the crtend.o file until after the sorted ctors.
 | 
	
		
			
				|  |  | +       The .ctor section from the crtend file contains the
 | 
	
		
			
				|  |  | +       end of ctors marker and it must be last */
 | 
	
		
			
				|  |  | +    KEEP (*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors))
 | 
	
		
			
				|  |  | +    KEEP (*(SORT(.ctors.*)))
 | 
	
		
			
				|  |  | +    KEEP (*(.ctors))
 | 
	
		
			
				|  |  | +    __CTOR_END__ = .;
 | 
	
		
			
				|  |  | +  } > m_text
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  .dtors :
 | 
	
		
			
				|  |  | +  {
 | 
	
		
			
				|  |  | +    __DTOR_LIST__ = .;
 | 
	
		
			
				|  |  | +    KEEP (*crtbegin.o(.dtors))
 | 
	
		
			
				|  |  | +    KEEP (*crtbegin?.o(.dtors))
 | 
	
		
			
				|  |  | +    KEEP (*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors))
 | 
	
		
			
				|  |  | +    KEEP (*(SORT(.dtors.*)))
 | 
	
		
			
				|  |  | +    KEEP (*(.dtors))
 | 
	
		
			
				|  |  | +    __DTOR_END__ = .;
 | 
	
		
			
				|  |  | +  } > m_text
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  .preinit_array :
 | 
	
		
			
				|  |  | +  {
 | 
	
		
			
				|  |  | +    PROVIDE_HIDDEN (__preinit_array_start = .);
 | 
	
		
			
				|  |  | +    KEEP (*(.preinit_array*))
 | 
	
		
			
				|  |  | +    PROVIDE_HIDDEN (__preinit_array_end = .);
 | 
	
		
			
				|  |  | +  } > m_text
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  .init_array :
 | 
	
		
			
				|  |  | +  {
 | 
	
		
			
				|  |  | +    PROVIDE_HIDDEN (__init_array_start = .);
 | 
	
		
			
				|  |  | +    KEEP (*(SORT(.init_array.*)))
 | 
	
		
			
				|  |  | +    KEEP (*(.init_array*))
 | 
	
		
			
				|  |  | +    PROVIDE_HIDDEN (__init_array_end = .);
 | 
	
		
			
				|  |  | +  } > m_text
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  .fini_array :
 | 
	
		
			
				|  |  | +  {
 | 
	
		
			
				|  |  | +    PROVIDE_HIDDEN (__fini_array_start = .);
 | 
	
		
			
				|  |  | +    KEEP (*(SORT(.fini_array.*)))
 | 
	
		
			
				|  |  | +    KEEP (*(.fini_array*))
 | 
	
		
			
				|  |  | +    PROVIDE_HIDDEN (__fini_array_end = .);
 | 
	
		
			
				|  |  | +  } > m_text
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  __etext = .;    /* define a global symbol at end of code */
 | 
	
		
			
				|  |  | +  __DATA_ROM = .; /* Symbol is used by startup for data initialization */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  .data : AT(__DATA_ROM)
 | 
	
		
			
				|  |  | +  {
 | 
	
		
			
				|  |  | +    . = ALIGN(4);
 | 
	
		
			
				|  |  | +    __DATA_RAM = .;
 | 
	
		
			
				|  |  | +    __data_start__ = .;      /* create a global symbol at data start */
 | 
	
		
			
				|  |  | +    *(.ramfunc*)             /* for functions in ram */
 | 
	
		
			
				|  |  | +    *(.data)                 /* .data sections */
 | 
	
		
			
				|  |  | +    *(.data*)                /* .data* sections */
 | 
	
		
			
				|  |  | +    KEEP(*(.jcr*))
 | 
	
		
			
				|  |  | +    . = ALIGN(4);
 | 
	
		
			
				|  |  | +    __data_end__ = .;        /* define a global symbol at data end */
 | 
	
		
			
				|  |  | +  } > m_data
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  __DATA_END = __DATA_ROM + (__data_end__ - __data_start__);
 | 
	
		
			
				|  |  | +  text_end = ORIGIN(m_text) + LENGTH(m_text);
 | 
	
		
			
				|  |  | +  ASSERT(__DATA_END <= text_end, "region m_text overflowed with text and data")
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /* Uninitialized data section */
 | 
	
		
			
				|  |  | +  .bss :
 | 
	
		
			
				|  |  | +  {
 | 
	
		
			
				|  |  | +    /* This is used by the startup in order to initialize the .bss section */
 | 
	
		
			
				|  |  | +    . = ALIGN(4);
 | 
	
		
			
				|  |  | +    __START_BSS = .;
 | 
	
		
			
				|  |  | +    __bss_start__ = .;
 | 
	
		
			
				|  |  | +    *(.bss)
 | 
	
		
			
				|  |  | +    *(.bss*)
 | 
	
		
			
				|  |  | +    *(COMMON)
 | 
	
		
			
				|  |  | +    . = ALIGN(4);
 | 
	
		
			
				|  |  | +    __bss_end__ = .;
 | 
	
		
			
				|  |  | +    __END_BSS = .;
 | 
	
		
			
				|  |  | +  } > m_data
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  .heap :
 | 
	
		
			
				|  |  | +  {
 | 
	
		
			
				|  |  | +    . = ALIGN(8);
 | 
	
		
			
				|  |  | +    __end__ = .;
 | 
	
		
			
				|  |  | +    PROVIDE(end = .);
 | 
	
		
			
				|  |  | +    __HeapBase = .;
 | 
	
		
			
				|  |  | +    . += HEAP_SIZE;
 | 
	
		
			
				|  |  | +    __HeapLimit = .;
 | 
	
		
			
				|  |  | +    __heap_limit = .; /* Add for _sbrk */
 | 
	
		
			
				|  |  | +  } > m_data
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  .stack :
 | 
	
		
			
				|  |  | +  {
 | 
	
		
			
				|  |  | +    . = ALIGN(8);
 | 
	
		
			
				|  |  | +    . += STACK_SIZE;
 | 
	
		
			
				|  |  | +  } > m_data
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /* Initializes stack on the end of block */
 | 
	
		
			
				|  |  | +  __StackTop   = ORIGIN(m_data) + LENGTH(m_data);
 | 
	
		
			
				|  |  | +  __StackLimit = __StackTop - STACK_SIZE;
 | 
	
		
			
				|  |  | +  PROVIDE(__stack = __StackTop);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  .ARM.attributes 0 : { *(.ARM.attributes) }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  ASSERT(__StackLimit >= __HeapLimit, "region m_data overflowed with stack and heap")
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 |