第11章 ARM连接器.ppt_第1页
第11章 ARM连接器.ppt_第2页
第11章 ARM连接器.ppt_第3页
第11章 ARM连接器.ppt_第4页
第11章 ARM连接器.ppt_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 第11章ARM连接器 11 1ARM映像文件ARM中各种源文件 包括汇编程序 C语言程序以及C 程序 经过ARM编译器编译后生成ELF格式的目标文件 这些目标文件和相应的C C 运行时库经过ARM连接器处理后 生成ELF格式的映像文件 image 这种ELF格式的映像文件可以被写入嵌入设备的ROM中 本节介绍这种ELF格式的映像文件的结构 2 11 1 1ARM映像文件的组成 本小节介绍ARM映像文件的组成部分 以及这些组成部分的地址映射方式 1 ARM映像文件的组成部分2 ARM映像文件各组成部分的地址映射 3 11 1 2ARM映像文件的入口点 1 ARM映像文件中的两类入口点2 定义初始入口点3 普通入口点的用法 4 11 1 3输入段的排序规则 通常情况下 一个输出段中各输入段的排列顺序是由下面几个因素决定的 用户也可以通过连接选项 first和 last来改变这些规则 输入段的属性 输入段的名称 各输入段在连接命令行的输入段列表中的排列顺序 按照输入段的属性 其排列顺序如下所示 只读的代码段 只读的数据段 可读写的代码段 其他已经初始化的数据段 未初始化的数据 5 11 2ARM连接器介绍 ARM开发包中包含了连接器armlink 它将编译得到的ELF格式的目标文件以及相关的C C 运行时库进行连接 生成相应的结果文件 具体来说 armlink可以完成以下操作 连接编译后得到的目标文件和相应的C C 运行时库 生成可执行的映像文件 将一些目标文件进行连接 生成一个新的目标文件 供将来进一步连接时使用 这成为部分连接 指定代码和数据在内存中的位置 生成被连接文件的调试信息和相互间的引用信息 6 11 2ARM连接器介绍 Armlink在进行完全连接生成可执行的映像文件时执行下面的操作 解析输入的目标文件之间的符号引用关系 根据输入目标文件对C C 函数的调用关系 从C C 运行时库中提取相应模块 将个输入段排序 组成相应的输出段 删除重复的调试信息段 根据用户指定的分组和定位信息 建立映像文件的地址映射关系 重定位需要重定位的值 生成可执行的映像文件 Armlink在进行部分连接生成新的目标文件时执行下面的操作 删除重复的调试信息段 最小化符号表的大小 保留那些未被解析的符号 生成新的目标文件 7 11 3ARM连接器生成的符号 ARM连接器定义了一些符号 这些符号中都包含字符 ARM连接器在生成映像文件时 用它们来代表映像文件中各域的起始地址以及存储区域界限 各输出段的起始地址以及存储区域界限 各输入段的起始地址以及存储区域界限 比如 Load region name Base代表域region name加载时的起始地址 image region name Base代表域region name运行时的起始地址 这些符号可以被汇编程序引用 用于地址重定位 这些符号可以被C程序作为外部符号引用 所有这些符号 只有在其被应用程序引用时 ARM连接器才会生成该符号 8 11 3 1连接器生成的与域相关的符号 连接器生成的与域相关的符号如表11 1所示 各符号的命名规则是 如果使用了地址映射配置文件 scatter文件 该文件规定了映像文件中各域的名称 如果未使用地址映射配置文件 scatter文件 连接器按照下面的规则确定各符号中的region name 对于只读的域 使用名称ER RO 对于可读写的域 使用名称ER RW 对于使用0初始化的域 使用名称ER ZI 9 11 3 2连接器生成的与输出段相关的符号 如果未使用地址映射配置文件 scatter文件 连接器生成的与输出段相关的符号如表11 3所示 如果使用了地址映射配置文件 scatter文件 表11 3中所列的符号没有意义 如果应用程序使用了这些符号将可能得到错误的结果 这时应该使用上一小节中介绍的与域相关的符号 10 11 3 3连接器生成的与输入段相关的符号 ARM连接器为映像文件中的每一个输入段生成两个符号 如表11 4所示 11 11 4连接器的优化功能 ARM连接器的优化功能主要包括删除映像文件中重复的部分以及插入小代码段实现ARM状态到Thumb状态的转换以及长距离跳转 具体介绍如下 1 删除重复的调试信息段2 删除重复的代码段3 删除未使用的段4 生成小代码段 veneer 12 11 5运行时库的使用 ARM连接器使用C C 运行时库的基本步骤如下 ARM连接器根据一定的规则确定需要使用哪些C C 运行时库 具体的规则在11 5 1小节中介绍 从各搜索路径中查找相应的C C 运行时库 参见11 5 2小节中介绍 选择合适种类的C C 运行时库 适应于不同的编译选项和连接选项 各C C 运行时库具有不同的种类 参见11 5 3小节中介绍 重复扫描各C C 运行时库 解析各符号 参见11 5 4小节中介绍 13 11 5 1C C 运行时库与目标文件 ARM中C C 运行时库就是一些ELF格式的目标文件的集合 这些目标文件是按照ar格式组织在一起的 ARM连接器在使用一般目标文件和C C 运行时库时有所不同 其主要区别如下所示 在ARM连接器的输入列表中的所用目标文件将被无条件地包含到输出的映像文件中 而不论该目标文件是否被其他的目标文件引用 而连接器在使用C C 运行时库时 有所不同 主要遵守下面的规则 如果在连接器的输入列表中显式地指定了C C 运行时库的某成员 则该成员将被无条件地包含到输出的映像文件中 而不论该成员是否被其他的目标文件引用 如果C C 运行时库中某成员被其他的目标文件按nonweak方式引用 或者被其他已经被包含的C C 运行时库中的成员按nonweak方式引用 则该C C 运行时库中的成员将会被包含到输出的映像文件中 被按weak方式引用的C C 运行时库中的成员不会被包含到输出的映像文件中 14 11 5 2查找需要的C C 运行时库 可以通过下面3种方法来指定ARM标准C C 运行时库的路径 其中连接选项 libpath指定的ARM标准C C 运行时库的路径优先级高于使用环境变量ARMLIB指定的ARM标准C C 运行时库的路径 使用连接选项 libpath来指定ARM标准C C 运行时库的路径 这时指定的是包含路径armlib和cpplib的父路径 使用CodeWarriorIDE中关于连接选项的控制面板来指定ARM标准C C 运行时库的路径 使用环境变量ARMLIB来指定ARM标准C C 运行时库的路径 这时ARMLIB被设置成包含路径armlib和cpplib的父路径 15 11 5 3选择合适种类的C C 运行时库 适应于不同的编译选项和连接选项 各C C 运行时库具有不同的种类 各种不同种类的C C 运行时库是依靠其名称来识别的 C C 运行时库的命名格式如下所示 root 16 11 5 4扫描C C 运行时库 在从上面的操作中得到需要使用的C C 运行时库 ARM连接器扫描这些C C 运行时库 加载相应的对象 解析各目标文件中的符号 具体操作步骤如下 ARM连接器按顺序扫描各C C 运行时库 以完成所有的nonweak方式的引用关系 这样 如果有多个目标可以满足引用关系 在排在前面的库被使用 这是一个必须注意的特点 如果某个库的成员满足引用要求 该成员被加载 从而解析了相应的符号 该成员函数的引入也可能实现了weak方式的引用 在引入某个成员后 在解析了一些符号同时 可能带来新的需要解析的符号 这种解析过程重复进行 直到解析完所有的符号 或者确定某些符号不能被解析为止 17 11 6从一个映像文件中使用另一个映像文件中的符号 在ARM中 从一个映像文件中访问另一个映像文件中的符号是通过symdefs文件实现的 本节介绍这些相关的技术 18 11 6 1symdefs文件 symdefs文件是一种目标文件 与普通的目标文件不同的是 其中只包含了符号和其对应的数值 没有包含代码和数据 一个symdefs文件通常包括3部分 一个标识符 可选的注释部分 包含符号和其对应的数值的部分 下面是一个symdefs文件的简单例子 它包括了一个symdefs文件通常包含的3部分 标识符 注释 valuetypename thisisanaddedcomment1 标识符字符串2 注释3 符号及其对应的值 19 11 6 2建立symdefs文件 在完成所有的其他连接操作后 ARM连接器可以生成一个symdefs文件 对于部分连接和失败的连接操作 ARM连接器不会产生symdefs文件 使用连接选项 symdefsfilename生成相应的symdefs文件时可以有下面两种情况 如果连接选项中指定的文件filename不存在 在ARM连接器生成包括所有全局符号的symdefs文件 如果连接选项中指定的文件filename已存在 则该文件的内容将限制ARM连接器生成的symdefs文件中包括那些符号 20 11 6 3symdefs文件的使用 使用symdefs文件的方法和使用普通的目标文件相同 将其作为输入文件 ARM连接器从symdefs文件中提取需要的符号及其相关信息 将这些信息加入到输出符号表中 这些符号具有ABSOLUTE和GLOBAL属性 ARM连接器像对待从其他目标文件中提取的符号一样对待这些符号 在从symdefs文件中提取符号及其相关信息时 在下列情况下 ARM连接器认为该符号为非法符号 将产生错误信息 该符号的某一列信息为空时 该符号的某一列具有非法的数值时 21 11 7隐藏或者重命名全局符号 本节介绍如何将输出文件中的符号隐藏或者重命名 这样可以避免全局符号名称冲突 ARM提供的steering格式的文件就是用于这一目的 22 11 7 1steering文件的格式 steering文件是一个文本文件 其格式如下 第1个非空格字符为字符 或者 的行是注释行 注释行是被作为空行来对待的 其中可以包含空行 以提高可读性 空行将被ARM连接器忽略 既非空行 也非注释行的行 可以是一个完整的命令 也可以是一个命令的一部分 因为一个命令可以跨多个行 一个命令行的最后一个非空格字符如果为字符 表示下面的一行是本命令的续行部分 23 11 7 2steering文件中的命令 steering文件中的命令有操作码和操作数组成 其中 操作码是大小写无关的 操作数是大小写相关的 这些命令只对全局符号有效 对于局部符号是无效的 steering文件中的命令包括 RENAME 重命名 命令 HIDE 隐藏符号 命令和SHOW 显示符号 命令 24 11 8ARM连接器命令行选项 ARM连接器的命令行格式如下所示 armlink help vsn partial outputfile elf ro baseaddress ropi rw baseaddress rwpi split scatterfile debug nodebug remove RO RW ZI noremove entrylocation keepsection id firstsection id lastsection id libpathpathlist scanlib noscanlib locals nolocals callgraph infotopics map symbols symdefsfile editfile xref xreffromobject section xreftoobject section errorsfile listfile verbose unmangled mangled viafile strict unresolvedsymbol input file list 25 11 8ARM连接器命令行选项 其中选项的含义及用法如下所示 1 help2 vsn3 partial4 outputfile5 elf6 ro baseaddress7 ropi8 rw baseaddress9 rwpi10 split11 scatterfile12 debug13 nodebug14 remove RW RO ZI 15 unremove16 entrylocation17 keepsection id18 firstsection id19 lastsection id 26 11 8ARM连接器命令行选项 20 libpathpathlist21 scanlib22 noscanlib23 locals24 nolocals25 callgraph26 infotopics27 map28 symbols29 symdefsfile30 editfile31 xref32 xreffromobject section 33 xreftoobject section 34 errorsfile35 listfile36 verbose37 unmangled38 mangled39 viafile40 strict41 unresolvedsymbol42 input file list 27 11 9使用scatter文件定义映像文件的地址映射 每个域可以包括多达3个输出段 每个输出段是由具有相同属性的若干输入段组成 这样在生成映像文件时 ARM连接器就需要知道下述的信息

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论