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.