/* ** ################################################################### ** Processors: MIMXRT1021CAF4A ** MIMXRT1021CAG4A ** MIMXRT1021DAF5A ** MIMXRT1021DAG5A ** ** Compiler: GNU C Compiler ** ** Abstract: ** Linker file for the GNU C Compiler ** ** Copyright (c) 2015 Freescale Semiconductor, Inc. ** Copyright 2016-2018 NXP ** All rights reserved. ** ** 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__ : 0x0; STACK_SIZE = DEFINED(__stack_size__) ? __stack_size__ : 0x1800; /* Specify the memory areas */ MEMORY { m_interrupts (RX) : ORIGIN = 0x2020a000, LENGTH = 0x00000400 m_text (RW) : ORIGIN = 0x2020a400, LENGTH = 0x00015c00 m_data (RW) : ORIGIN = 0x20000000, LENGTH = 0x00010000 } GROUP ( libnosys.a libgcc.a libc_nano.a libm.a libcr_newlib_none.a ) /* Define output sections */ SECTIONS { /* The startup code goes first into internal RAM */ .interrupts : { __VECTOR_TABLE = .; __Vectors = .; . = ALIGN(4); KEEP(*(.isr_vector)) /* Startup code */ . = ALIGN(4); } > m_interrupts __VECTOR_RAM = __VECTOR_TABLE; __RAM_VECTOR_TABLE_SIZE_BYTES = 0x0; /* The program code and other data goes into internal RAM */ .text : { . = ALIGN(4); *(.text) /* .text sections (code) */ *(.text*) /* .text* sections (code) */ *(.rodata) /* .rodata sections (constants, strings, etc.) */ *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ . = ALIGN(4); } > m_text .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } > m_text .ARM : { __exidx_start = .; *(.ARM.exidx*) __exidx_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 */ *(.data) /* .data sections */ *(.data*) /* .data* sections */ . = ALIGN(4); __data_end__ = .; /* define a global symbol at data end */ } > m_data __DATA_END = __DATA_ROM + (__data_end__ - __data_start__); /* 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 m_usb_bdt : { . = ALIGN(512); __START_USBGLOBAL = .; *(m_usb_bdt) KEEP(*(m_usb_bdt)) } > m_data m_usb_global : { *(m_usb_global) KEEP(*(m_usb_global)) __END_USBGLOBAL = .; } > m_data .heap : { . = ALIGN(8); __end__ = .; PROVIDE(end = .); __HeapBase = .; _pvHeapStart = .; . += HEAP_SIZE; __HeapLimit = .; } > m_data .stack : { . = ALIGN(8); __StackLimit = .; . += STACK_SIZE; __StackTop = .; __STACK_TOP = .; PROVIDE(__stack = __StackTop); } > m_data .ARM.attributes 0 : { *(.ARM.attributes) } ASSERT(__StackLimit >= __HeapLimit, "region m_data overflowed with stack and heap") }