Next: , Previous: Dispatch Tables, Up: Assembler Format


17.21.9 用于异常区域的汇编命令

这一节描述了标记异常区域的起始和结束的命令。

— Macro: EH_FRAME_SECTION_NAME

如果定义,为一个C字符串常量,包含异常处理帧展开信息的section名字。 如果没有定义,GCC将提供一个缺省定义,如果target支持命名section。 crtstuff.c使用该宏来切换到适当的section。

你应该定义该符号,如果你的target支持DWARF2帧展开信息并且缺省定义不工作。

— Macro: EH_FRAME_IN_DATA_SECTION

如果定义,DWARF2帧展开信息将被放到data section,即使target支持命名section。 例如当系统连接器进行垃圾搜集并且section不能被标记为不被搜集的时候, 可能需要这样。

不要定义该宏,除非TARGET_ASM_NAMED_SECTION也被定义。

— Macro: EH_TABLES_CAN_BE_READ_ONLY

定义该宏为1,如果你的target对于没有使用non-PIC代码编码的帧展开信息, 将总是要求运行时重定位, 但是连接器可能不支持将只读和读写section合并到单独的读写section中。

— Macro: MASK_RETURN_ADDR

一个rtx,用于对通过RETURN_ADDR_RTX发现的返回地址进行掩码操作, 使得其不包含任何无关的位。

— Macro: DWARF2_UNWIND_INFO

定义该宏为0,如果你的target支持DWARF2帧展开信息, 但是其还不能与异常处理一起工作。否则, 如果你的target支持这样的信息(如果定义了‘INCOMING_RETURN_ADDR_RTX’, 并且‘UNALIGNED_INT_ASM_OP’和‘OBJECT_FORMAT_ELF’之一), GCC将提供缺省的定义,1。

如果定义了TARGET_UNWIND_INFO,target特定的展开者将用于所有情况。 定义该宏将使得可以生成DWARF2帧调试信息。

如果没有定义TARGET_UNWIND_INFO,并且该宏被定义为1, 则DWARF2 unwider将为缺省的异常处理机制; 否则基于setjmp/longjmp的框架将被缺省使用。

— Macro: TARGET_UNWIND_INFO

定义该宏,如果你的target具有ABI指定的unwind表。 通常这些将由TARGET_UNWIND_EMIT输出。

— Variable: Target Hook bool TARGET_UNWIND_TABLES_DEFAULT

该变量应该被设为true,如果target ABI即使不使用异常的时候也要求展开表。

— Macro: MUST_USE_SJLJ_EXCEPTIONS

该宏只有当DWARF2_UNWIND_INFO为运行时变量时才需要被定义。那种情况下, except.h不能正确的确定MUST_USE_SJLJ_EXCEPTIONS的相应定义, 所以target必须直接提供。

— Macro: DONT_USE_BUILTIN_SETJMP

定义该宏为1,如果基于setjmp/longjmp的框架应该使用C库中的 setjmp/longjmp, 而不是__builtin_setjmp/__builtin_longjmp

— Macro: DWARF_CIE_DATA_ALIGNMENT

该宏只有当target可能会在函数序言中存储寄存器, 并且相对栈指针的偏移量没有对齐于UNITS_PER_WORD的时候,才需要被定义。 定义应该为负的最小对齐数,如果STACK_GROWS_DOWNWARD被定义, 否则为正的最小对齐数。参见SDB and DWARF。 只有当target支持DWARF2帧展开信息的时候才有用。

— Variable: Target Hook bool TARGET_TERMINATE_DW2_EH_FRAME_INFO

值为真,如果target应该增加一个0字到Dwarf-2帧信息section的结尾, 当用于异常处理时。缺省值为假,如果EH_FRAME_SECTION_NAME被定义,否则为真。

— Target Hook: rtx TARGET_DWARF_REGISTER_SPAN (rtx reg)

给定一个寄存器,该钩子应该返回一个并行的寄存器,来表示到哪里发现寄存器块。 定义该钩子,如果寄存器和它的机器模式在Dwarf中被表示为非连接的位置, 或者如果在Dwarf中寄存器应该被表示为多于一个寄存器。 否则该钩子应该返回NULL_RTX。如果没有定义,缺省为返回NULL_RTX

— Target Hook: void TARGET_INIT_DWARF_REG_SIZES_EXTRA (tree address)

如果一些寄存器在Dwarf-2展开信息中按照多个块来表示, 定义该钩子在运行时来填充信息。 其将被expand_builtin_init_dwarf_reg_sizes调用。address为表的地址。

— Target Hook: bool TARGET_ASM_TTYPE (rtx sym)

该钩子被用于从帧展开表中输出一个引用到由sym标识的type_info对象中。 其应该返回true,如果引用被输出。 返回false将会造成引用使用通常的Dwarf2例程被输出。

— Target Hook: bool TARGET_ARM_EABI_UNWINDER

该钩子应该被设为true,在使用基于ARM EABI的展开库的target上, 并且在其它target上为false。这将影响展开表的格式。缺省为false