as: Comm
7.11 '.comm SYMBOL , LENGTH '
=============================
'.comm' declares a common symbol named SYMBOL. When linking, a common
symbol in one object file may be merged with a defined or common symbol
of the same name in another object file. If 'ld' does not see a
definition for the symbol-just one or more common symbols-then it will
allocate LENGTH bytes of uninitialized memory. LENGTH must be an
absolute expression. If 'ld' sees multiple common symbols with the same
name, and they do not all have the same size, it will allocate space
using the largest size.
When using ELF or (as a GNU extension) PE, the '.comm' directive
takes an optional third argument. This is the desired alignment of the
symbol, specified for ELF as a byte boundary (for example, an alignment
of 16 means that the least significant 4 bits of the address should be
zero), and for PE as a power of two (for example, an alignment of 5
means aligned to a 32-byte boundary). The alignment must be an absolute
expression, and it must be a power of two. If 'ld' allocates
uninitialized memory for the common symbol, it will use the alignment
when placing the symbol. If no alignment is specified, 'as' will set
the alignment to the largest power of two less than or equal to the size
of the symbol, up to a maximum of 16 on ELF, or the default section
alignment of 4 on PE(1).
The syntax for '.comm' differs slightly on the HPPA. The syntax is
'SYMBOL .comm, LENGTH'; SYMBOL is optional.
---------- Footnotes ----------
(1) This is not the same as the executable image file alignment
controlled by 'ld''s '--section-alignment' option; image file sections
in PE are aligned to multiples of 4096, which is far too large an
alignment for ordinary variables. It is rather the default alignment
for (non-debug) sections within object ('*.o') files, which are less
strictly aligned.