MPC5744P flash linker

  1 /*
  2 ** ###################################################################
  3 **     Processor:           MPC5744P with 384 KB SRAM
  4 **     Compiler:            GNU C Compiler
  5 **
  6 **     Abstract:
  7 **         Linker file for the GNU C Compiler
  8 **
  9 **     Copyright 2017-2019 NXP
 10 **     All rights reserved.
 11 **
 12 **     THIS SOFTWARE IS PROVIDED BY NXP "AS IS" AND ANY EXPRESSED OR
 13 **     IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 14 **     OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 15 **     IN NO EVENT SHALL NXP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 16 **     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 17 **     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 18 **     SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 19 **     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 20 **     STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
 21 **     IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 22 **     THE POSSIBILITY OF SUCH DAMAGE.
 23 **
 24 **     http:                 www.nxp.com
 25 **
 26 ** ###################################################################
 27 */
 28 
 29 /* Entry Point */
 30 ENTRY(_start)
 31 
 32 /* define heap and stack size */
 33 __HEAP_SIZE = DEFINED(__heap_size__) ? __heap_size__ : 0x00000000;
 34 __STACK_SIZE = DEFINED(__stack_size__) ? __stack_size__ : 0x00001000;
 35 
 36 /* Define FLASH */
 37 FLASH_BASE_ADDR = DEFINED(__flash_base_addr__) ? __flash_base_addr__ : 0x01000000;
 38 FLASH_SIZE =  DEFINED(__flash_size__) ? __flash_size__ : 2048K;
 39 
 40 /* Define SRAM */
 41 SRAM_BASE_ADDR = DEFINED(__sram_base_addr__) ? __sram_base_addr__ : 0x40000000;
 42 SRAM_SIZE = DEFINED(__sram_size__) ? __sram_size__ : 384K;
 43 
 44 /* Define local data memory */
 45 LOCAL_DMEM_BASE_ADDR = DEFINED(__local_dmem_base_addr__) ? __local_dmem_base_addr__ : 0x50800000;
 46 LOCAL_DMEM_SIZE =  DEFINED(__local_dmem_size__) ? __local_dmem_size__ : 64K;
 47 
 48 MEMORY
 49 {
 50     flash_rchw : org = 0x00FA0000, len = 0x4
 51     cpu0_reset_vec : org = 0x00FA0000+0x04, len = 0x4
 52 
 53     m_text : org = FLASH_BASE_ADDR, len = FLASH_SIZE
 54     m_data : org = SRAM_BASE_ADDR, len = SRAM_SIZE
 55     local_dmem : org = LOCAL_DMEM_BASE_ADDR, len = LOCAL_DMEM_SIZE
 56 }
 57 
 58 
 59 SECTIONS
 60 {
 61     .rchw :
 62     {
 63         KEEP(*(.rchw))
 64     } > flash_rchw
 65 
 66     .cpu0_reset_vector :
 67     {
 68         KEEP(*(.cpu0_reset_vector))
 69     } > cpu0_reset_vec
 70 
 71     /* Note: if you move the 'startup' section shall modify the RCHW2_2 value for the corresponding core in the flashrchw.c file. */
 72     .startup : ALIGN(0x400)
 73     {
 74         __start = .;
 75         *(.startup)
 76     } > m_text
 77 
 78     .core_exceptions_table : ALIGN(4096)
 79     {
 80         __IVPR_VALUE = .;
 81         *(.core_exceptions_table)
 82     } > m_text
 83 
 84     .intc_vector_table : ALIGN(4096)
 85     {
 86         __VECTOR_TABLE = .;
 87         __interrupts_start__ = .;
 88         KEEP(*(.intc_vector_table)) /* Startup code */
 89         __interrupts_end__ = .;
 90     } > m_text
 91     __RAM_VECTOR_TABLE_SIZE = 0xC00;
 92     __VECTOR_TABLE_COPY_END = __VECTOR_TABLE + __RAM_VECTOR_TABLE_SIZE;
 93 
 94     .text :
 95     {
 96         *(.text.startup)
 97         *(.text)
 98         *(.text.*)
 99         KEEP(*(.init))
100         KEEP(*(.fini))
101         . = ALIGN(16);
102     } > m_text
103     .sdata2 :
104     {
105         . = ALIGN(4);
106         __sdata2_start__ = .; /* Create a global symbol at sdata2 start. */
107         *(.sdata2)
108         *(.sdata2.*)
109         . = ALIGN(4);
110         __sdata2_end__ = .; /* Define a global symbol at sdata2 end. */
111     } > m_text
112     .got2 :
113     {
114         *(.got2*)
115     } > m_text
116 /* migration to version v1.2
117    define section PREINIT_ARRAY */
118 
119 .preinit_array :
120   {
121     PROVIDE_HIDDEN (__preinit_array_start = .);
122     KEEP (*(.preinit_array))
123     PROVIDE_HIDDEN (__preinit_array_end = .);
124   } > m_text
125 
126 /* end section PREINIT_ARRAY */
127 /*  migration to version v1.2
128     define section INIT_ARRAY*/
129 
130   .init_array :
131   {
132     PROVIDE_HIDDEN (__init_array_start = .);
133     KEEP (*(SORT(.init_array.*)))
134     KEEP (*(.init_array ))
135     PROVIDE_HIDDEN (__init_array_end = .);
136   } > m_text
137 
138 /* end section INIT_ARRAY */
139 
140 /* migration to version v1.2
141    define section DTORS */
142 
143   .dtors :
144   {
145     KEEP (*crtbegin.o(.dtors))
146     KEEP (*crtbegin?.o(.dtors))
147     KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
148     KEEP (*(SORT(.dtors.*)))
149     KEEP (*(.dtors))
150   } > m_text
151 
152 /* end section DTORS */
153 /* migration to version v1.2
154    define section CTORS */
155 
156   .ctors :
157   {
158     /* gcc uses crtbegin.o to find the start of
159        the constructors, so we make sure it is
160        first.  Because this is a wildcard, it
161        doesn't matter if the user does not
162        actually link against crtbegin.o; the
163        linker won't look for a file to match a
164        wildcard.  The wildcard also means that it
165        doesn't matter which directory crtbegin.o
166        is in.  */
167     KEEP (*crtbegin.o(.ctors))
168     KEEP (*crtbegin?.o(.ctors))
169     /* We don't want to include the .ctor section from
170        the crtend.o file until after the sorted ctors.
171        The .ctor section from the crtend file contains the
172        end of ctors marker and it must be last */
173     KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
174     KEEP (*(SORT(.ctors.*)))
175     KEEP (*(.ctors))
176   } > m_text
177 
178 /* end section CTORS */
179 
180 /* migration to version v1.2
181    define section FINI_ARRAY */
182 
183   .fini_array :
184   {
185     PROVIDE_HIDDEN (__fini_array_start = .);
186     KEEP (*(SORT(.fini_array.*)))
187     KEEP (*(.fini_array ))
188     PROVIDE_HIDDEN (__fini_array_end = .);
189   } > m_text
190 
191 /* end  section FINI_ARRAY */
192 
193     .rodata :
194     {
195         *(.rodata)
196         *(.rodata.*)
197     } > m_text
198 
199     .eh_frame_hdr : { *(.eh_frame_hdr) } > m_text
200     .eh_frame : { KEEP (*(.eh_frame)) } > m_text
201 
202     /* Sections used by startup for data initialization. */
203     .init_table :
204     {
205         . = ALIGN(4);
206         __COPY_TABLE = .;
207         KEEP(*(.init_table))
208     } > m_text
209     .zero_table :
210     {
211         . = ALIGN(4);
212         __ZERO_TABLE = .;
213         KEEP(*(.zero_table))
214     } > m_text
215 
216     __TEXT_END = .; /* Define a global symbol at end of code. */
217 
218     .interrupts_ram : ALIGN(4096)
219     {
220         __VECTOR_RAM = .;
221         *(.m_interrupts_ram)
222         . += __RAM_VECTOR_TABLE_SIZE;
223     } > m_data
224 
225     __CUSTOM_ROM = __TEXT_END; /* Symbol is used by startup for custom initialization. */
226     .customSectionBlock : AT (__CUSTOM_ROM)
227     {
228         . = ALIGN(4);
229         __CUSTOM_RAM = .;
230         __customSectionStart = .;
231         __customSection_start__ = .;
232         KEEP(*(.customSection)) /* Keep section even if not referenced. */
233         . = ALIGN(4);
234         __customSection_end__ = .;
235         __customSectionEnd = .;
236     } > m_data
237     __CUSTOM_END = __CUSTOM_ROM + (__customSection_end__ - __customSection_start__);
238 
239     __DATA_ROM = __CUSTOM_END; /* Symbol is used by startup for data initialization. */
240     .data : AT (__DATA_ROM)
241     {
242         . = ALIGN(4);
243         __DATA_RAM = .;
244         __data_start__ = .; /* Create a global symbol at data start. */
245         *(.data)
246         *(.data.*)
247         . = ALIGN(4);
248         __data_end__ = .; /* Define a global symbol at data end. */
249     } > m_data
250     __DATA_END = __DATA_ROM + (__data_end__ - __data_start__);
251 
252     __SDATA_ROM = __DATA_END; /* Symbol is used by startup for sdata initialization. */
253     .sdata : AT (__SDATA_ROM)
254     {
255         . = ALIGN(4);
256         __SDATA_RAM = .;
257         __sdata_start__ = .; /* Create a global symbol at sdata start. */
258         *(.sdata)
259         *(.sdata.*)
260         . = ALIGN(4);
261         __sdata_end__ = .; /* Define a global symbol at sdata end. */
262     } > m_data
263     __SDATA_END = __SDATA_ROM + (__sdata_end__ - __sdata_start__);
264 
265     .sbss (NOLOAD) :
266     {
267         . = ALIGN(4);
268         __SBSS_START = .;
269         __sbss_start__ = .; /* Create a global symbol at sbss start. */
270         *(.sbss)
271         *(.sbss.*)
272         . = ALIGN(4);
273         __sbss_end__ = .; /* Define a global symbol at sbss end. */
274         __SBSS_END = .;
275     } > m_data
276 
277     .bss (NOLOAD) :
278     {
279         . = ALIGN(4);
280         __BSS_START = .;
281         __bss_start__ = .; /* Create a global symbol at bss start. */
282         *(.bss)
283         *(.bss.*)
284         *(COMMON)
285         . = ALIGN(4);
286         __bss_end__ = .; /* Define a global symbol at bss end. */
287         __BSS_END = .;
288     } > m_data
289 
290     __CODE_ROM = __SDATA_END; /* Symbol is used by code initialization. */
291     .code : AT (__CODE_ROM)
292     {
293         . = ALIGN(4);
294         __CODE_RAM = .;
295         __code_start__ = .; /* Create a global symbol at code start. */
296         __code_ram_start__ = .;
297         KEEP(*(.code_ram)) /* Custom section for storing code in RAM */
298         . = ALIGN(4);
299         __code_ram_end__ = .;
300         __code_end__ = .; /* Define a global symbol at code end. */
301     } > m_data
302     __CODE_END = __CODE_ROM + (__code_end__ - __code_start__);
303 
304     .stack (NOLOAD) : ALIGN(16)
305     {
306         __HEAP = .;
307         PROVIDE (_end = .);
308         PROVIDE (end = .);
309         . += __HEAP_SIZE;
310         __HEAP_END = .;
311         _stack_end = .;
312         . += __STACK_SIZE;
313         . = ALIGN(4);
314         _stack_addr = .;
315         __SP_INIT = .;
316     } > local_dmem
317 
318 /*-------- LABELS USED IN CODE -------------------------------*/
319 
320 /* Labels Used for Initialising SRAM ECC */
321 __SRAM_SIZE = SRAM_SIZE;
322 __SRAM_BASE_ADDR = SRAM_BASE_ADDR;
323 /* Labels Used for Initialising DMEM */
324 __LOCAL_DMEM_SIZE = LOCAL_DMEM_SIZE;
325 __LOCAL_DMEM_BASE_ADDR = LOCAL_DMEM_BASE_ADDR;
326 
327 __BSS_SIZE    = __BSS_END - __BSS_START;
328 
329 }

 

posted @ 2023-02-27 09:35  昆山皮皮虾  阅读(35)  评论(0编辑  收藏  举报