Next: Alignment Output, Previous: Dispatch Tables, Up: Assembler Format
这一节描述了标记异常区域的起始和结束的命令。
如果定义,为一个C字符串常量,包含异常处理帧展开信息的section名字。 如果没有定义,GCC将提供一个缺省定义,如果target支持命名section。 crtstuff.c使用该宏来切换到适当的section。
你应该定义该符号,如果你的target支持DWARF2帧展开信息并且缺省定义不工作。
如果定义,DWARF2帧展开信息将被放到data section,即使target支持命名section。 例如当系统连接器进行垃圾搜集并且section不能被标记为不被搜集的时候, 可能需要这样。
不要定义该宏,除非
TARGET_ASM_NAMED_SECTION
也被定义。
定义该宏为1,如果你的target对于没有使用non-PIC代码编码的帧展开信息, 将总是要求运行时重定位, 但是连接器可能不支持将只读和读写section合并到单独的读写section中。
定义该宏为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
的框架将被缺省使用。
该变量应该被设为
true
,如果target ABI即使不使用异常的时候也要求展开表。
该宏只有当
DWARF2_UNWIND_INFO
为运行时变量时才需要被定义。那种情况下, except.h不能正确的确定MUST_USE_SJLJ_EXCEPTIONS
的相应定义, 所以target必须直接提供。
定义该宏为1,如果基于
setjmp
/longjmp
的框架应该使用C库中的setjmp
/longjmp
, 而不是__builtin_setjmp
/__builtin_longjmp
。
该宏只有当target可能会在函数序言中存储寄存器, 并且相对栈指针的偏移量没有对齐于
UNITS_PER_WORD
的时候,才需要被定义。 定义应该为负的最小对齐数,如果STACK_GROWS_DOWNWARD
被定义, 否则为正的最小对齐数。参见SDB and DWARF。 只有当target支持DWARF2帧展开信息的时候才有用。
值为真,如果target应该增加一个0字到Dwarf-2帧信息section的结尾, 当用于异常处理时。缺省值为假,如果
EH_FRAME_SECTION_NAME
被定义,否则为真。
给定一个寄存器,该钩子应该返回一个并行的寄存器,来表示到哪里发现寄存器块。 定义该钩子,如果寄存器和它的机器模式在Dwarf中被表示为非连接的位置, 或者如果在Dwarf中寄存器应该被表示为多于一个寄存器。 否则该钩子应该返回
NULL_RTX
。如果没有定义,缺省为返回NULL_RTX
。
如果一些寄存器在Dwarf-2展开信息中按照多个块来表示, 定义该钩子在运行时来填充信息。 其将被
expand_builtin_init_dwarf_reg_sizes
调用。address为表的地址。