ABI Specifications 相关链接

来源:互联网 发布:mac的finder边栏没了 编辑:程序博客网 时间:2024/06/07 00:29
Itanium C++ ABI ($Revision: 1.86 $)
http://www.codesourcery.com/cxx-abi/abi.html

C++ ABI Summary
http://www.codesourcery.com/cxx-abi/

C++ ABI for IA-64: Code and Implementation Examples
http://www.codesourcery.com/cxx-abi/abi-examples.html

C++ Vtable Example
http://www.codesourcery.com/cxx-abi/cxx-vtable-ex.html

Intel® Itanium® Processor-specific Application Binary Interface (ABI)
http://developer.intel.com/design/itanium/downloads/245370.htm
C++ ABI参数
— Target Hook: tree TARGET_CXX_GUARD_TYPE (void)

定义该钩子来覆盖用于guard变量的整数类型。这些被用于实现静态对象的一次构建。缺省为long_long_integer_type_node。

— Target Hook: bool TARGET_CXX_GUARD_MASK_BIT (void)

该钩子确定如何使用guard变量。如果第一个字节应该被使用,则应该返回假(缺省)。返回值为真表明应该使用最低有效位。

— Target Hook: tree TARGET_CXX_GET_COOKIE_SIZE (tree type)

该钩子返回cookie的大小,其中cookie为当分配一个数组其元素具有type类型,所使用的cookie。假设已经知道需要一个cookie。缺省为max(sizeof (size_t), alignof(type)),在2.7节IA64/Generic C++ ABI中定义。

— Target Hook: bool TARGET_CXX_COOKIE_HAS_SIZE (void)

该钩子应该返回真,如果元素大小应该被存放在数组cookie中。缺省为返回假。

— Target Hook: int TARGET_CXX_IMPORT_EXPORT_CLASS (tree type, int import_export)

如果后端定义了该钩子,则允许覆盖对导出类type的决定。import_export将包含1,如果类将被导出,-1如果其将被导入,否则为0.该函数应该返回修改后的值,并执行其它需要的操作来支持后端的操作系统。

— Target Hook: bool TARGET_CXX_CDTOR_RETURNS_THIS (void)

该钩子应该返回真,如果构造者和析构者返回创建/销毁对象的地址。缺省为返回假。

— Target Hook: bool TARGET_CXX_KEY_METHOD_MAY_BE_INLINE (void)

该钩子返回真,如果类的关键方法(即,如果方法在当前转换单元中定义,其使得虚拟表被输出)可以为内联函数。对于标准的Itanium C++ ABI,关键方法可以为内联函数,只要函数不在类定义中声明为内联的。其它ABI的变体中,内联函数不能为关键方法。缺省为返回真。

— Target Hook: void TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY (tree decl)

decl为虚拟表,类型信息对象,或其它类似的隐含类数据对象,其将在该转换单元中作为外部链接被输出。ELF的可视性不会被显示的指定。如果target需要指定可视性,可以使用该钩子来设置DECL_VISIBILITY 和 DECL_VISIBILITY_SPECIFIED。

— Target Hook: bool TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT (void)

该钩子返回真(缺省情况)如果虚拟表和其它类似的隐式类数据对象总是为COMDAT,如果它们具有外部连接。如果该钩子返回假,则只在一个转换单元中被输出的虚拟表的类的类数据将不是COMDAT。

— Target Hook: bool TARGET_CXX_LIBRARY_RTTI_COMDAT (void)

该钩子返回真(缺省情况),如果在C++运行时定义的基本类型的RTTI信息应该总是为COMDAT,否则为假。

— Target Hook: bool TARGET_CXX_USE_AEABI_ATEXIT (void)

该钩子返回真,如果__aeabi_atexit(如被ARM EABI定义)应该用于注册静态析构者,当-fuse-cxa-atexit为有效时。缺省是返回假,使用__cxa_atexit。

— Target Hook: bool TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT (void)

该钩子返回真,如果target的atexit函数可以跟__cxa_atexit一样被用于注册静态析构者。这要求在共享库中atexit注册的函数要按照正确的顺序运行,当库被卸载时。缺省为返回假。

— Target Hook: void TARGET_CXX_ADJUST_CLASS_AT_DEFINITION (tree type)

type为一个刚被定义的C++类(即RECORD_TYPE 或 UNION_TYPE)。使用该钩子来调整类(例如tweak可视性或者执行其它target需要的修改)。

 

 

 

其它参数

2007-11-13 14:07

这些是其它一些参数。

— Macro: HAS_LONG_COND_BRANCH

定义该布尔值的宏用来指示你的体系结构是否具有可以跨越所有内存的条件分支。它用于将可执行程序hot和cold基本块分割到单独的段的优化。如果该宏被设为false,则gcc将任何穿越段的条件分支转换为无条件分支或间接跳转。

— Macro: HAS_LONG_UNCOND_BRANCH

定义该布尔值的宏用来指示你的体系结构是否具有可以跨越所有内存的无条件分支。它用于将可执行程序hot和cold基本块分割到单独的段的优化。如果该宏被设为false,则gcc将任何穿越段的无条件分支转换为间接跳转。

— Macro: CASE_VECTOR_MODE

机器模式名字的一个别名。这是跳转表(jump-table)的元素应该具有的机器模式。

— Macro: CASE_VECTOR_SHORTEN_MODE (min_offset, max_offset, body)

可选的:当最小值和最大值位移已知时,返回addr_diff_vec的首选机器模式。如果定义了该宏,这使得在分支缩短中增加了额外的代码来处理addr_diff_vec。要使其工作,还必须要定义INSN_ALIGN,并且显示的对addr_diff_vec进行对齐。参数body被提供,使得可以更新offset_unsigned和标量标记。

— Macro: CASE_VECTOR_PC_RELATIVE

定义该宏为一个C表达式,来指示跳转表什么时候应该包含相对地址。你不需要定义该宏,如果跳转表从来不包含相对地址,或者跳转表只在-fPIC或者-fPIC有效时才包含相对地址。

— Macro: CASE_VALUES_THRESHOLD

定义其为一个最小差值数,用于选择是使用跳转表来替代条件分支树。缺省为4,对于具有casesi指令的机器,其它的为5。这对大多数机器是最好的。

— Macro: CASE_USE_BIT_TESTS

定义该宏为一个C表达式,来指示C switch语句是否可以通过位测试序列来实现。这在可以通过寄存器中的位数来有效实现左移1位的处理器上很有利,但不适合需要循环的target。缺省下,该宏返回真,如果target定义了ashlsi3指令模式,否则返回假。

— Macro: WORD_REGISTER_OPERATIONS

定义该宏,如果整数机器模式的小于一个字的寄存器间的运算总是在整个寄存器中执行。大多数RISC机器具有这个属性,大多数CISC机器不具有。

— Macro: LOAD_EXTEND_OP (mem_mode)

定义该宏为一个C表达式,指示当insn使用比一个字窄的的整数模式的mem_mode模式读取内存时,将读取的数据的mem_mode外的位进行符号扩展或者零扩展。返回SIGN_EXTEND,对于那些要符号扩展的insn,返回ZERO_EXTEND对那些零扩展的,对于其它的机器模式返回UNKNOWN。

该宏不会被非整型的,或者宽度大于等于BITS_PER_WORD的mem_mode调用,所以对于这种情况你可以返回任何值。如果总是返回UNKNOWN,则不要定义该宏。在定义该宏的机器上,你通常要定义其为常量SIGN_EXTEND或者ZERO_EXTEND。

— Macro: SHORT_IMMEDIATES_SIGN_EXTEND

定义该宏,如果将short立即数加载到寄存器中要进行符号扩展。

— Macro: FIXUNS_TRUNC_LIKE_FIX_TRUNC

定义该宏,如果将浮点数转换为有符号定点数的指令,同样可以有效的转换为无符号的。

— Target Hook: int TARGET_MIN_DIVISIONS_FOR_RECIP_MUL (enum machine_mode mode)

当-ffast-math有效时,GCC尝试使用相同的除数来优化除法,通过将它们转换为乘以倒数的方式。缺省实现返回3,如果机器具有除法指令,否则为2。

— Macro: MOVE_MAX

单个指令可以在内存和寄存器间,或者两个内存位置间快速移动的最大字节数。

— Macro: MAX_MOVE_MAX

单个指令可以在内存和寄存器间,或者两个内存位置间快速移动的最大字节数。如果没有定义,则缺省为MOVE_MAX。否则,其为MOVE_MAX在运行时可以具有的最大常数值。

原创粉丝点击