语言兼容
GNU C, C++, Fortran 和 Java ABI 规范包括了:
调用约定。规定了函数参数和返回值是如何传递的。
寄存器使用。规定了寄存器时如何分配和使用的。
目标文件格式。规定了目标文件的表示。
数据类型的大小、布局和对齐。规定了数据是如何放在内存中的。
运行时环境接口。
除了 C ABI 外,GNU C++ 还需要规定:
名字重整和反重整。
创建和传播异常。
格式化运行时类型信息。
构造函数和析构函数。
类和派生类的布局、对齐和 padding。
虚函数实现细节。
GNU C++ 默认使用 Itanium C++ ABI。
通用编译选项
记录编译命令
使用 -frecord-gcc-switches
可以记录编译目标文件时的编译选项。例如:
$ gcc -frecord-gcc-switches -O3 -Wall hello.c -o hello
$ readelf --string-dump=.GCC.command.line hello
String dump of section '.GCC.command.line':
[ 0] hello.c
[ 8] -mtune=generic
[ 17] -O3
[ 1b] -Wall
[ 21] -frecord-gcc-switches