Next: , Previous: Data Output, Up: Assembler Format


17.21.3 未初始化变量的输出

这一节的每个宏都是用于输出单个未初始化变量的整个工作中。

— Macro: ASM_OUTPUT_COMMON (stream, name, size, rounded)

一条C语句(没有分号),用来将大小为size, 名字为name的通用标号的汇编定义,输出到stdio流stream中。 变量rounded为调用者想要对齐而舍入的大小。

使用表达式assemble_name (stream, name)来输出name本身; 在这之前和之后,输出额外的定义name的汇编语法,以及换行。

该宏控制如何输出未初始化的通用全局变量的汇编定义。

— Macro: ASM_OUTPUT_ALIGNED_COMMON (stream, name, size, alignment)

类似ASM_OUTPUT_COMMON,除了其接受一个alignment,作为独立,显式的参数。 如果你定义了该宏,其被用于替换ASM_OUTPUT_COMMON, 使得你在处理变量对齐方面变得更加灵活。aligment被指定为位的数目。

— Macro: ASM_OUTPUT_ALIGNED_DECL_COMMON (stream, decl, name, size, alignment)

类似ASM_OUTPUT_ALIGNED_COMMON,除了要被输出的变量的decl, 如果存在的话,或者为NULL_TREE如果没有相应的变量。如果你定义了该宏, GCC将替换ASM_OUTPUT_COMMONASM_OUTPUT_ALIGNED_COMMON。 当你需要看到变量的decl,以便选择如何输出时,可以定义该宏。

— Macro: ASM_OUTPUT_BSS (stream, decl, name, size, rounded)

一条C语句(没有分号),用来将名字为name, 大小为size个字节的未初始化的全局decl的汇编定义输出到stdio流 stream中。变量rounded为调用者想要对齐而舍入的大小。

当定义该宏时,可以尝试使用varasm.c中定义的asm_output_bss。 如果不行, 使用表达式assemble_name (stream, name)来输出name本身; 在此之前和之后,输出额外的定义name的汇编语法,以及换行。

有两种方式来处理全局BSS。一种是定义该宏或者它的对齐副本, ASM_OUTPUT_ALIGNED_BSS。 另一种是让TARGET_ASM_SELECT_SECTION返回一个可切换的BSS section (参见 TARGET_HAVE_SWITCHABLE_BSS_SECTIONS)。你不需要两者都做。

一些语言不具有common数据,并且要求全局BSS为non-common的, 以便高效的处理未初始化全局变量。C++就是这样的例子。然而, 如果target不支持全局BSS,则前端可以选择生成全局common, 以便在目标文件中节省空间。

— Macro: ASM_OUTPUT_ALIGNED_BSS (stream, decl, name, size, alignment)

类似ASM_OUTPUT_BSS,除了其接受需要的aligment作为单独,显式的参数。 如果你定义了该宏,其被用于替换ASM_OUTPUT_BSS, 这使得你在处理变量所需的对齐方面更加灵活。aligment被指定为位数。

当定义该宏时, 尝试使用在文件varasm.c中定义的函数asm_output_aligned_bssvarasm.c when defining this macro.

— Macro: ASM_OUTPUT_LOCAL (stream, name, size, rounded)

一条C语句(没有分号),用来将名字为name, 大小为size个字节的local-common标号的汇编定义输出到stdio流stream中。 变量rounded为调用者想要对齐而舍入的大小。

使用表达式assemble_name (stream, name)来输出name本身; 在此之前和之后,输出额外的定义name的汇编语法,以及换行。

该宏控制如何输出未初始化的静态变量的汇编定义。

— Macro: ASM_OUTPUT_ALIGNED_LOCAL (stream, name, size, alignment)

类似ASM_OUTPUT_LOCAL,除了其接受需要的aligment作为单独,显式的参数。 如果你定义了该宏,其被用于替换ASM_OUTPUT_LOCAL, 这使得你在处理变量所需的对齐方面更加灵活。aligment被指定为位数。

— Macro: ASM_OUTPUT_ALIGNED_DECL_LOCAL (stream, decl, name, size, alignment)

类似ASM_OUTPUT_ALIGNED_DECL,除了要被输出的变量的decl, 如果存在的话,或者为NULL_TREE如果没有相应的变量。如果你定义了该宏, GCC将替换ASM_OUTPUT_DECLASM_OUTPUT_ALIGNED_DECL。 当你需要看到变量的decl,以便选择如何输出时,可以定义该宏。