IAR工具内部自定义section列表以及说明

浏览:3737来源:本站时间:2021-01-29

背景介绍

我们在使用IAR EWARM开发环境是经常会使用的各种程序存放的段和块。

IAR生成工具使用的ELF段和块

说明


.bss

存放零初始化的静态和全局变量。

CSTACK

存放CC++程序使用的堆栈。

.data

存放静态和全局初始化变量。

.data_init

当使用链接器指令初始化时,存放.data段的初始值。

.exc.text

存放与异常相关的代码。

HEAP

存放用于动态分配数据的堆。

__iar_tls.$$DATA

存放TLS变量的初始值。

.iar.dynexit

存放退出时调用的表。

.init_array

存放一张动态初始化函数表。

.intvec

存放复位向量表。

IRQ_STACK

存放中断请求,IRQ和异常的堆栈。

.noinit

存放用__no_init指示的静态和全局变量。

.preinit_array

存放一张动态预初始化函数表。

.prepreinit_array

存放一预处理动态预初始化函数表。

.rodata

存放常量数据。

.text

存放程序代码。

.textrw

存放以__ramfunc声明的程序代码。

.textrw_init

存放以.textrw声明部分的初始化程序。

Veneer$$CMSE

存放安全网关虚表。


除了用于您的应用程序的ELF部分之外,这些工具还出于多种目的使用许多其他ELF段:


● 以.debug开头的段通常包含DWARF格式的调试信息。

● 以.iar.debug开头的段包含IAR格式的补充调试信息

● 以.comment开头的段包含用于构建文件的工具和命令行

● 以.rel.rela开头的段包含ELF重定位信息

● 以.symtab开头的段包含文件的符号表

● 以.strtab开头的段包含符号表中符号的名称

● 以.shstrtab开头的段包含各段的名称。

段和块的详细说明

.bss

描述:存放零初始化的静态和全局变量。

存储器放置:此段可以放在存储器中的任何位置。


CSTACK

描述:保存内部数据堆栈的块。

存储器放置:该块可以放置在存储器中的任何位置。


.data

描述:存放静态和全局初始化变量。 在目标文件中,这包括初始值。 当使用链接器指令初始化时,将为每个.data段创建一个对应的.data_init段,其中存放可能已压缩的初始值。

存储器放置:此段可以放置在存储器中的任何位置。


.data_init

描述:存放.data段的可能压缩的初始值。 如果使用链接器初始化指令,则此部分由链接器创建。

存储器放置:此段可以放置在存储器中的任何位置。


.exc.text

描述:存放仅在您的应用程序处理异常时,才执行的代码。

存储器放置:与.text在同一存储器中。


HEAP

描述:存放用于在内存中动态分配数据的堆,换句话说,由在C语言中mallocfree分配的数据,在C++语言中newdelete分配的数据。

存储器放置:此段可以放置在存储器中的任何位置。


__iar_tls.$$DATA

描述:存放TLS变量的初始值。 如果使用链接器选项--threaded_lib,则此段由链接器创建。

存储器放置:此段可以放置在存储器中的任何位置。


.iar.dynexit

描述:存放退出时调用的表。

存储器放置:此段可以放置在存储器中的任何位置。


.init_array

描述:存放指向例程的指针,用于初始化带有静态存储持续时间的一个或多个C++对象。

存储器放置:此段可以放置在存储器中的任何位置。


.intvec

描述:保存复位向量表和异常向量,其中包含指向cstartup的分支指令、中断服务例程等。

存储器放置:本段的存放位置取决于设备。 请参阅制造商的硬件手册。


IRQ_STACK

描述:存放为IRQ异常提供服务时使用的堆栈。 可以根据需要添加其他堆栈来服务其它异常类型:FIQSVCABTUND。 为了初始化使用的异常堆栈指针,必须修改cstartup.s文件。注意Cortex-M类处理器编译时,不使用此部分。

存储器放置:此段可以放置在存储器中的任何位置。


.noinit

描述:存放用__no_init指示的静态和全局变量。

存储器放置:此段可以放置在存储器中的任何位置。


.preinit_array

描述:类似于.init_array,但库使用它来使某些C++初始化先于其它初始化。

存储器放置:此段可以放置在存储器中的任何位置。


.prepreinit_array

描述:类似于.init_array,但是它是在C静态初始化重写为动态初始化时使用。 在所有C++动态初始化之前执行。

存储器放置:此段可以放置在存储器中的任何位置。


.rodata

描述:存放常量数据。 这可以包括常量变量,字符串和聚合文字等。

存储器放置:此段可以放置在存储器中的任何位置。


.text

描述:存放程序代码,包括用于系统初始化的代码。

存储器放置:此段可以放置在存储器中的任何位置。


.textrw

描述:存放以ramfunc声明的程序代码。

存储器放置:此段可以放置在存储器中的任何位置。


.textrw_init

描述:存放.textrw声明的段的初始化程序。

存储器放置:此段可以放置在存储器中的任何位置。


Veneer$$CMSE

描述:本段包含链接器为每个入口函数自动创建的安全网关虚表,由扩展关键字__cmse_nonsecure_entry确定。

存储器放置:此部分应放在NSC(非安全可调用)存储区域中。 可以使用SAU(安全属性单元)或IDAU(实现定义的属性单元)对NSC区域进行编程。 有关如何对SAUIDAU进行编程的信息,请参阅Armv8-M内核的文档。

附录

本文译自IAR EWARM_DevelopmentGuide.ENU.pdf手册。

京ICP备:京ICP备05011254号-1 版权归北京麦克泰软件技术有限公司所有
北京麦克泰软件技术有限公司