第11章 ARM连接器.ppt

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第11章ARM连接器第11章ARM连接器

第11章 ARM连接器 11.1 ARM映像文件 ARM中各种源文件(包括汇编程序、C语言程序以及C++程序)经过ARM编译器编译后生成ELF格式的目标文件。这些目标文件和相应的C/C++运行时库经过ARM连接器处理后,生成ELF格式的映像文件(image)。这种ELF格式的映像文件可以被写入嵌入设备的ROM中。 本节介绍这种ELF格式的映像文件的结构。 11.1.1 ARM映像文件的组成 本小节介绍ARM映像文件的组成部分,以及这些组成部分的地址映射方式。 1. ARM映像文件的组成部分 2. ARM映像文件各组成部分的地址映射 11.1.2 ARM映像文件的入口点 1. ARM映像文件中的两类入口点 2. 定义初始入口点 3. 普通入口点的用法 11.1.3 输入段的排序规则 通常情况下,一个输出段中各输入段的排列顺序是由下面几个因素决定的。用户也可以通过连接选项-first和-last来改变这些规则。 输入段的属性。 输入段的名称。 各输入段在连接命令行的输入段列表中的排列顺序。 按照输入段的属性,其排列顺序如下所示: 只读的代码段。 只读的数据段。 可读写的代码段。 其他已经初始化的数据段。 未初始化的数据。 11.2 ARM连接器介绍 ARM开发包中包含了连接器armlink,它将编译得到的ELF格式的目标文件以及相关的C/C++运行时库进行连接,生成相应的结果文件。具体来说,armlink可以完成以下操作: 连接编译后得到的目标文件和相应的C/C++运行时库,生成可执行的映像文件。 将一些目标文件进行连接,生成一个新的目标文件,供将来进一步连接时使用,这成为部分连接。 指定代码和数据在内存中的位置。 生成被连接文件的调试信息和相互间的引用信息。 11.2 ARM连接器介绍 Armlink在进行完全连接生成可执行的映像文件时执行下面的操作。 解析输入的目标文件之间的符号引用关系。 根据输入目标文件对C/C++函数的调用关系,从C/C++运行时库中提取相应模块。 将个输入段排序,组成相应的输出段。 删除重复的调试信息段。 根据用户指定的分组和定位信息,建立映像文件的地址映射关系。 重定位需要重定位的值。 生成可执行的映像文件。 Armlink在进行部分连接生成新的目标文件时执行下面的操作。 删除重复的调试信息段。 最小化符号表的大小。 保留那些未被解析的符号。 生成新的目标文件。 11.3 ARM连接器生成的符号 ARM连接器定义了一些符号,这些符号中都包含字符$$。ARM连接器在生成映像文件时,用它们来代表映像文件中各域的起始地址以及存储区域界限、各输出段的起始地址以及存储区域界限、各输入段的起始地址以及存储区域界限。比如,Load$$region_name$$Base代表域region_name加载时的起始地址;image$$region_ name$$Base代表域region_name运行时的起始地址。 这些符号可以被汇编程序引用,用于地址重定位。这些符号可以被C程序作为外部符号引用。 所有这些符号,只有在其被应用程序引用时,ARM连接器才会生成该符号。 11.3.1 连接器生成的与域相关的符号 连接器生成的与域相关的符号如表11.1所示。各符号的命名规则是:如果使用了地址映射配置文件(scatter文件),该文件规定了映像文件中各域的名称;如果未使用地址映射配置文件(scatter文件),连接器按照下面的规则确定各符号中的region_name: 对于只读的域,使用名称ER_RO。 对于可读写的域,使用名称ER_RW。 对于使用0初始化的域,使用名称ER_ZI。 11.3.2 连接器生成的与输出段相关的符号 如果未使用地址映射配置文件(scatter文件),连接器生成的与输出段相关的符号如 表11.3所示;如果使用了地址映射配置文件(scatter文件),表11.3中所列的符号没有意义,如果应用程序使用了这些符号将可能得到错误的结果,这时应该使用上一小节中介绍的与域相关的符号。 11.3.3 连接器生成的与输入段相关的符号 ARM连接器为映像文件中的每一个输入段生成两个符号,如表11.4所示。 11.4 连接器的优化功能 ARM连接器的优化功能主要包括删除映像文件中重复的部分以及插入小代码段实现ARM状态到Thumb状态的转换以及长距离跳转。具体介绍如下。 1. 删除重复的调试信息段 2. 删除重复的代码段 3. 删除未使用的段 4. 生成小代码段(veneer) 11.5 运行时库的使用 ARM连接器使用C/C++运行时库的基本步骤如下: ARM连接器根据一定的规则确定需要使用哪些C/C++运行时库。具体的规则在11.5.1小节中介绍。 从各搜索路径中查找

文档评论(0)

cxiongxchunj + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档