Next: Instruction Output, Previous: Initialization, Up: Assembler Format
这里是控制编译器如何处理初始化和终止函数的宏:
如果定义,为一个C字符串常量,包括空格, 用于将随后的数据作为初始化代码的汇编操作。如果没有定义, GCC将假设这样的section不存在。当你使用用于初始化和终止函数的特定的section时, 该宏还控制crtstuff.c和libgcc2.c如何运行初始化函数。
如果定义,
main
将不会调用__main
。对于控制起始代码, 像OSF/1这样的系统,应该定义该宏, 对于支持INIT_SECTION_ASM_OP
的系统不应该显式的定义。
如果定义,为一条C语句,其将写一个在加载共享库时可以被自动调用的函数。 函数应该调用func,其不接受任何参数。如果没有定义, 并且目标格式要求显示的初始化函数,则将会生成一个叫做
_GLOBAL__DI
的函数。该函数和下面的一个,被collect2使用,用于连接一个需要构造者或者析构者, 或者代码中具有DWARF2异常表嵌入的共享库的时候。
如果定义,为一条C语句,其将写一个在卸载共享库时可以被自动调用的函数。 函数应该调用func,其不接受任何参数。如果没有定义, 并且目标格式要求显示的初始化函数,则将会生成一个叫做
_GLOBAL__DD
的函数。
如果定义,
main
将调用__main
, 而不管INIT_SECTION_ASM_OP
的存在。对于init section不被自动运行, 但是仍可以用于搜集构建者和析构者列表的系统,该宏应该被定义。
如果非零,则支持C++
init_priority
属性, 并且编译器应该生成指令来控制对象初始化的顺序。 如果为0,编译器遇到init_priority
属性时,将产生一条错误信息。
该值为真,如果target支持一些搜集构造者和析构者在起始和退出时运行的本地方法。 如果我们必须使用collect2,则为假。
如果定义,为一个函数,输出汇编代码来调用在初始化时symbol引用的函数。
假定symbol为一个没有参数并没有返回值的函数的
SYMBOL_REF
。 如果target支持初始化优先级, priority为一个0到MAX_INIT_PRIORITY
之间的值; 否则,其必须为DEFAULT_INIT_PRIORITY
。如果该宏没有被taret定义,则一个适当的缺省将被选择, 如果(1)target支持任意section名, (2)target定义了
CTORS_SECTION_ASM_OP
, 或者(3)没有定义USE_COLLECT2
。
类似于
TARGET_ASM_CONSTRUCTOR
,不过用于终止函数,而不是初始化函数。
如果TARGET_HAVE_CTORS_DTORS
为真,
对于生成的目标文件的初始化例程将具有静态连接。
如果你的系统使用collec2作为处理构造者的方法, 则那个程序通常使用nm来扫描目标文件,寻找被调用的构造者。
在一些特定的系统上,你可以定义该宏,使得collect2工作的更快。
定义该宏,如果系统使用COFF(Common Object File Format)目标文件, 这样collect2能够假设为该格式,并扫描直接目标文件的构造/析构函数。
该宏只有在本地编译器上才有效率; 对于交叉编译器,collect2总是使用nm。
定义该宏为一个C字符串常量,包含用来执行nm的文件名。 缺省为搜索通常的路径。
如果你的系统支持共享库,并具有一个程序能够列出给定库或可执行程序的动态依赖, 你可以定义这些宏使得能够运行共享库中的初始化和终止函数。