我们在使用MSP430单片机进行项目开发的时候,会遇到两种映像文件的输出格式(如下图所示):legacy COFF和eabi(ELF),本文从此话题进行展开,引出COFF ABI和EABI两种应用程序二进制接口,使开发者能够从low-level对MSP430有一个新的认识。
1、 映像文件输出格式
MSP430的编译器可以输出两种格式的映像文件:
a、COFF object files
COFF是英文Common object file format的缩写,翻译成中文的意思是“通用对象文件格式”,它是一种广泛存在的对象文件格式,这里不直接说成目标文件格式的原因在于,这种格式不仅应用与目标文件中,而在其它文件中也有广泛的应用,例如:可执行文件。Windows操作系统上的大部分可执行文件都采用这种格式。它具有分别编译,重定位等多种特性。如上图所示TI公司在这种文件格式的前面加入英文legacy(遗留的),原文如下:COFF
is a legacy format; it will continue to be supported, but support for some modern language features will not be added.(COFF是一种遗留的格式,它将被持续支持,但是现在编程语言的一些特性将不再被加入。)
b、ELF object files
ELF是英文Executable
and linking format的缩写,翻译成中文的意思是“执行链接格式”,它是TI今后将持续支持的文件格式,编程语言的新的特性将不断的被加入,例如最近才出现的关于C++语言的template instantiation(模板实体化)和exporting
inline functions(出口内联函数)都已被支持。
C、如何决定映像文件输出格式
映像文件的输出格式由选择的ABI决定,原文如下:The object files
created by the assembler and linker conform to either the ELF or COFF binary formats, depending on the ABI selected when building your program. When using the EABI mode, the ELF format is used. For the older COFF ABI mode, the legacy COFF format is used.(汇编和连接将按照ELF和COFF两种格式中的一种建立对象文件,它依赖于我们在生成应用程序时所选择的ABI接口。当我们选择EABI接口时,ELF格式将被使用。当我们选择旧的COFF
ABI接口时,遗留的COFF格式将被使用。)
2、ABI概述
ABI是英文Application Binary Interface的缩写,翻译成中文的意思是“应用程序二进制接口”,它定义了对象文件(如果只针对于MSP430系统,我们也可以将其称为目标文件)之间的底层接口。ABI允许符合ABI接口的对象文件链接在一起,而不需要考虑它们的源文件,而且它允许已存在的符合ABI接口的可执行文件运行在任何支持ABI接口的系统中。
遵从不同ABI接口的对象文件是不能链接在一起的,当前MSP430的编译器支持两种ABI:COFF
ABI和EABI。我们可以使用“--abi”链接选项进行选择COFF ABI (--abi=coffabi)和MSP430
EABI (--abi=eabi)。下图指明了当前系统中使用的ABI接口是EABI。
ABI接口到底起到什么作用呢,我们可以看一下以下原文:An
ABI defines how functions that are compiled or assembled separately can work together. This involves standardizing the data type representation, register conventions, and function structure and calling conventions. It defines linkname generation from C symbol
names. It defines the object file format and the debug format. It defines how the system is initialized. In the case of C++ it defines C++ name mangling and exception handling support.(ABI接口定义了不同编译器编译或汇编器汇编的函数是如何工作在一起的。这些包括数据类型表现的标准化,寄存器的使用规范,以及函数结构和调用的规范。它定义了由C语言符号名产生的链接名、目标文件格式、调试文件格式以及系统如何被初始化等等。以C++语言为例来说,ABI接口定义了C++名字的压缩方式以及对异常处理的支持。)
总结:MSP430能够输出两种映像文件格式,分别为:legacy COFF和eabi(ELF),这实际上是对应的两种ABI接口,分别为COFF
ABI和EABI。ABI的作用是使符合ABI接口的不同的目标文件(哪怕是不同编译器编译出来的)能够很好的链接在一起进行工作(不需要程序的源文件)TI虽然继续支持COFF ABI,但不会再将编程语言的新的特性添加进来。我们现在应当把注意力放在EABI上,它是TI公司将持续进行功能延伸。下编日志就将对EABI进行深入探讨。
原创性文章,转载请注明出处 http://user.qzone.qq.com/2756567163。
版权声明:本文为博主原创文章,未经博主允许不得转载。