17.21.3 Output of Uninitialized Variables

Each of the macros in this section is used to do the whole job of
outputting a single uninitialized variable.

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

A C statement (sans semicolon) to output to the stdio stream
stream the assembler definition of a common-label named
name whose size is size bytes. The variable rounded
is the size rounded up to whatever alignment the caller wants.

Use the expression assemble_name (stream, name) to
output the name itself; before and after that, output the additional
assembler syntax for defining the name, and a newline.

This macro controls how the assembler definitions of uninitialized
common global variables are output.

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

Like ASM_OUTPUT_COMMON except takes the required alignment as a
separate, explicit argument. If you define this macro, it is used in
place of ASM_OUTPUT_COMMON, and gives you more flexibility in
handling the required alignment of the variable. The alignment is specified
as the number of bits.

Like ASM_OUTPUT_ALIGNED_COMMON except that decl of the
variable to be output, if there is one, or NULL_TREE if there
is no corresponding variable. If you define this macro, GCC will use it
in place of both ASM_OUTPUT_COMMON and
ASM_OUTPUT_ALIGNED_COMMON. Define this macro when you need to see
the variable's decl in order to chose what to output.

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

A C statement (sans semicolon) to output to the stdio stream
stream the assembler definition of uninitialized global decl named
name whose size is size bytes. The variable rounded
is the size rounded up to whatever alignment the caller wants.

Try to use function asm_output_bss defined in varasm.c when
defining this macro. If unable, use the expression
assemble_name (stream, name) to output the name itself;
before and after that, output the additional assembler syntax for defining
the name, and a newline.

There are two ways of handling global BSS. One is to define either
this macro or its aligned counterpart, ASM_OUTPUT_ALIGNED_BSS.
The other is to have TARGET_ASM_SELECT_SECTION return a
switchable BSS section (see TARGET_HAVE_SWITCHABLE_BSS_SECTIONS).
You do not need to do both.

Some languages do not have common data, and require a
non-common form of global BSS in order to handle uninitialized globals
efficiently. C++ is one example of this. However, if the target does
not support global BSS, the front end may choose to make globals
common in order to save space in the object file.

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

Like ASM_OUTPUT_BSS except takes the required alignment as a
separate, explicit argument. If you define this macro, it is used in
place of ASM_OUTPUT_BSS, and gives you more flexibility in
handling the required alignment of the variable. The alignment is specified
as the number of bits.

Try to use function asm_output_aligned_bss defined in file
varasm.c when defining this macro.

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

A C statement (sans semicolon) to output to the stdio stream
stream the assembler definition of a local-common-label named
name whose size is size bytes. The variable rounded
is the size rounded up to whatever alignment the caller wants.

Use the expression assemble_name (stream, name) to
output the name itself; before and after that, output the additional
assembler syntax for defining the name, and a newline.

This macro controls how the assembler definitions of uninitialized
static variables are output.

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

Like ASM_OUTPUT_LOCAL except takes the required alignment as a
separate, explicit argument. If you define this macro, it is used in
place of ASM_OUTPUT_LOCAL, and gives you more flexibility in
handling the required alignment of the variable. The alignment is specified
as the number of bits.

Like ASM_OUTPUT_ALIGNED_DECL except that decl of the
variable to be output, if there is one, or NULL_TREE if there
is no corresponding variable. If you define this macro, GCC will use it
in place of both ASM_OUTPUT_DECL and
ASM_OUTPUT_ALIGNED_DECL. Define this macro when you need to see
the variable's decl in order to chose what to output.