Next: Data Output, Up: Assembler Format
将汇编器期望在文件起始处发现的任何文本输出到
asm_out_file
。 缺省行为由两个标志控制,将在下面介绍。除非你target的汇编器十分不常见, 如果你覆盖了缺省,则应该在你的target钩子上的某处调用default_file_start
。 这将让其它target文件依赖于这些变量。
如果该标记为真,则宏
ASM_APP_OFF
的文本将作为汇编文本的第一行被打印, 除非正在使用-fverbose-asm。(如果那个宏被定义为空字符串, 则该变量将不起作用。)对于ASM_APP_OFF
的通常定义, 其效果是告知GNU汇编器不需要费功夫从输入中去除掉注释或额外的空格。 这将使得运行更快些。缺省为假。不要将其设为真,除非你已经核实你的port不会产生任何额外的空格或者注释, 这将使得GAS在NO_APP模式下产生错误。
如果该标记为真,对于主源文件,
output_file_directive
将被调用, 就在打印了ASM_APP_OFF
之后(如果启用了该功能)。 大多数ELF汇编器期望做这件事。缺省为假。
一些系统使用通用的约定,用特定的‘.note.GNU-stack’ section, 来指示一个依赖栈的目标文件是否被执行。如果你的系统使用了该约定, 你应该将
TARGET_ASM_FILE_END
定义为该函数。 如果你需要在钩子中做其它事情,则要在你的钩子函数中调用该函数。
一个C字符串常量,将在每个
asm
语句或者一组连续的asm
语句之前被输出。 通常为"#APP"
,其为一条注释,对于多数汇编器不起作用, 但可以告诉GNU汇编器必须对随后的行检查所有的有效汇编结构。
一个C字符串常量,将在每个
asm
语句或者一组连续的asm
语句之前被输出。 通常为"#NO_APP"
,告诉GNU汇编器继续进行省时的假设, 认为通常的编译器输出是有效的。
一条C语句,输出COFF信息或者DWARF调试信息, 用来指示文件名name为当前的对于标准输入输出流stream的源文件。
该宏不需要被定义,如果输出的标准形式适用于正在使用的文件格式。
Output COFF information or DWARF debugging information which indicates that filename name is the current source file to the stdio stream file.
This target hook need not be defined if the standard form of output for the file format in use is appropriate.
一条C语句,将字符串string输出到stdio流stream中。 如果你不在你的配置文件中调用函数
output_quoted_string
, 则GCC将只调用它来输出文件名到汇编源文件中。 所以你可以使用它来规范使用该宏的文件名的格式。
一条C语句,用来输出一些东西到汇编文件中, 以处理包含文本string的‘#ident’伪指令。如果没有定义该宏, 对于‘#ident’伪指令,将不输出任何东西。
输出汇编伪指令来切换section名字。section应该具有flags指定的属性, 其为output.h中定义的
SECTION_*
标记的位掩码。如果align非零, 则其包含了用于section的对齐字节数,否则将使用target缺省的。 只有那些必须在section伪指令里指定对齐的target才需要关注align — 我们仍然使用ASM_OUTPUT_ALIGN
。
该标记为真,如果我们能够通过切换到BSS section来创建初始化为0的数据, 并且使用
ASM_OUTPUT_SKIP
来分配空间。这在大多数ELF target上为真。
根据变量或函数decl,section名name,和声明的初始化是否可以包含运行时重定位, 来选择供
TARGET_ASM_NAMED_SECTION
使用的section属性集。 decl可以为null,这种情况下,将假设为可读写数据。该函数的缺省版本用来处理选择代码和数据,只读数据和可读写数据, 以及
flag_pic
。 你应该只有在你的target具有通过__attribute__
设置的特定标记时, 才需要覆盖该函数。
使得target能够记录传给编译器的gcc命令行开关,和打开的选项。 参数type指定了要记录的内容。其可以为下面的值:
SWITCH_TYPE_PASSED
- text为用户设置的命令行开关。
SWITCH_TYPE_ENABLED
- text为开启的选项。这可能为命令行开关的直接结果,或者是因为其被缺省打开, 或者因为其被不同的命令行开关的副作用打开。例如, -O2开关打开了各种不同的独立的优化过程。
SWITCH_TYPE_DESCRIPTIVE
- text或者为NULL,或者为一些应该被忽略的描述文本。如果texttext为NULL, 则其被用来警告target钩子记录开始或者结束。第一次, type为SWITCH_TYPE_DESCRIPTIVE并且text为NULL,这是警告记录开始了, 第二次,是警告结束了。该特征可以允许target钩子来做任何需要的准备, 在其开始记录开关的时候,并执行一些比较的整理,在其完成记录开关之后。
SWITCH_TYPE_LINE_START
- 该选项可以被该target钩子忽略掉。
SWITCH_TYPE_LINE_END
- 该选项可以被该target钩子忽略掉。
钩子的返回值必须为0。其它返回值可能在将来被支持。
缺省下,该钩子被设为NULL,但是对于基于ELF的target,有一个实现例子。 叫做elf_record_gcc_switches,其记录了开关, 并作为ASCII文本放在汇编输出文件中一个新的,可以字符串合并的section。 新section的名字由target钩子
TARGET_ASM_RECORD_GCC_SWITCHES_SECTION
提供。