首页 > 其他分享 >MPC5744P flash linker

MPC5744P flash linker

时间:2023-02-27 09:46:22浏览次数:44  
标签:__ linker end text ALIGN flash KEEP start MPC5744P

  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 }

 

标签:__,linker,end,text,ALIGN,flash,KEEP,start,MPC5744P
From: https://www.cnblogs.com/kunshanpipixia/p/17158619.html

相关文章

  • 图解基于UDS的Flash BootLoader
    图解基于UDS的FlashBootLoader​​一、为什么要搞Bootloader?为什么要基于UDS搞Bootloader​​​​二、Bootloader应支持的UDS服务​​​​三、Bootloader——三段式​​​......
  • P5842 [SCOI2012]Blinker 的仰慕者 题解
    题意简述:求\([l,r]\)内各个数位积为\(k\)的数的和。解:在看题解前,请先确认自己是否精通了数位dp模板题,否则会很难理解。对于朴素的数位dp,我们可以记录\(f_{i,j......
  • struts2 swfupload 上传文件 flash多文件上传
    这个是转的,直接看demo吧上传不上去的原因的是没有新建一个文件夹upload可以用的!​​swfupload.rar​​(3.4MB)下载次数:111......
  • 《DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南》第十三章 QSPI Flash读写测试实验​
    QSPIFlash读写测试实验​PS的输入/输出外设(IOP)有两个具有不同功能特性和IO接口性能的QSPI控制器。它们共享相同的APB从接口和MIO引脚。一次只能使用控制器中的一个。QSPI......
  • 如何使用c#.net以Flash视频格式直播IP摄像头流到网站上
    如何使用c#.net以Flash视频格式直播IP摄像头流到网站上IntroductiontoIPsurveillancesystems介绍IP监测系统Seeingtoday’ssurveillancetecnologies,itcanbe......
  • 如何固化ZYNQ PL端程序到FLASH?
    ZYNQ7000板子上,PL端逻辑烧写到FLASH里面。怎么办?前言本操作如何固化ZYNQPL端程序到FLASH分享---基于广州星嵌电子科技有限公司设计研发的Zynq7015平台。 FLASH型号......
  • 华大电子MCU CIU32L061x8存储器(Flash)一
    5、Flash存储器(Flash)5.1简介Flash存储器连接在AHB总线上,由Flash控制器统一管理,可对存储器执行取指、读取、编程和擦除操作,并具有安全访问机制和读写保护等功能......
  • 自实现linker加固so防dump
    对于自定义linker加固so而言,为了防止整体dump并对修复重定位表的脱壳方式(upx的脱壳),可以将一些重要的结构信息在内存中进行抹去和移动。抹去ELF文件头再so文件加载后就不......
  • Flash ExternalInterface API All In One
    FlashExternalInterfaceAPIAllInOneflash过时了呀......
  • 自实现linker加固so
    其实自实现linker加固so与之前研究windows平台的PE文件的加密壳原理很相似。主要就是自定义文件格式加密so,然后壳代码实现将加密的so文件加载,链接重定位并修正soinfo(三部曲......