Provided by: pcc_1.2.0~DEVEL+20220331-1_amd64 bug

NAME

       ccom — C compiler

SYNOPSIS

       ccom  [-gkpsv]  [-f  features]  [-m  options]  [-W warnings] [-X flags] [-x settings] [-Z flags] [infile]
            [outfile]

DESCRIPTION

       The ccom utility provides a C compiler.  The frontend is usually pcc(1).  It is not intended  to  be  run
       directly.   ccom  reads  the  C  source  from infile or standard input and writes the assembler source to
       outfile or to standard output.

       The options are as follows:

       -f feature
               Enable language features.   Multiple  -f  options  can  be  given,  the  following  features  are
               supported:

               stack-protector
                       Enable stack smashing protection.  Currently the same as stack-protector-all.

               stack-protector-all
                       Enable stack smashing protection for all functions.

               pack-struct[=n]
                       Specify  maximum  alignment for structure members, similar to a #pragma pack statement at
                       the start of the file.  If no value is given, the default is 1.

               freestanding
                       Emit code for a freestanding environment.  Currently not implemented.

       -g      Include debugging information in the output code for use by symbolic and source-level  debuggers.
               Currently this uses the stabs format, encoding information in symbol table entries.

       -k      Generate PIC code.

       -m option
               Target-specific  options,  used in machine-dependent code.  Multiple -m options can be given, the
               following options are supported:

               AMD64

               ARM      little-endian,  big-endian,  fpe=fpa,  fpe=vpf,  soft-float,   arch=armv1,   arch=armv2,
                        arch=armv2a,    arch=armv3,    arch=armv4,   arch=armv4t,   arch=armv4tej,   arch=armv5,
                        arch=armv5te,  arch=armv5tej,  arch=armv6,  arch=armv6t2,  arch=armv6kz,  arch=armv6k  &
                        arch=armv7.

               HPPA

               i386

               M16C

               MIPS     little-endian & big-endian.

               NOVA

               PDP-10

               PDP-11

               PowerPC  little-endian, big-endian, soft-float & hard-float.

               Sparc64

               VAX

       -p      Generate profiling code.

       -s      Print statistics to standard error when complete.  This includes: name table entries, name string
               size,  permanent allocated memory, temporary allocated memory, lost memory, argument list unions,
               dimension/function unions, struct/union/enum blocks, inline node count,  inline  control  blocks,
               and permanent symtab entries.

       -v      Display version.

       -W warning
               Do  some  basic checks and emit warnings about possible coding problems.  Multiple -W options can
               be given, the following warnings are supported:

               error[=warning]
                       Enable warning, and treat it as an error condition.  If a specific warning is not  given,
                       producing any warning will cause an error.

               attributes
                       Warn when unsupported attributes are used.  This warning is enabled by default.

               deprecated-declarations
                       Report whenever a symbol marked with the ‘deprecated’ attribute is used.  This warning is
                       enabled by default.

               implicit-function-declaration
                       (TODO) Require explicit prototypes for all called functions.

               implicit-int
                       (TODO) Warn when a function declaration lacks a type.

               missing-prototypes
                       Require explicit prototypes for all global function definitions.

               pointer-sign
                       Warn when pointer operations are done with mismatched signed and unsigned values.

               sign-compare
                       (TODO) Warn about comparisons between signed and unsigned values.

               strict-prototypes
                       (TODO) Require that function prototypes are strictly C99.

               shadow  Report when a local variable shadows something from a higher scope.

               truncate
                       Report when integer values may be implicitly truncated to fit a smaller type.

               uninitialized
                       A variable is read before being written.

               unknown-pragmas
                       Report unhandled pragma statements.

               unreachable-code
                       Report statements that cannot be executed.

               Any of the above may be prefixed with “no-” in order to disable the effect.

       -X flags
               C specific debugging where flags is one or more of the following:

               b       Building of parse trees
               d       Declarations (using multiple d flags gives more output)
               e       Pass1 trees at exit
               i       Initializations
               n       Memory allocations
               o       Turn off optimisations
               p       Prototypes
               s       Inlining
               t       Type conversions
               x       Target-specific flag, used in machine-dependent code

       -x setting
               Enable  setting  in  the  compiler.  Multiple -x options can be given, the following settings are
               supported:

               ccp     Apply sparse conditional constant propagation techniques for optimization.  Currently not
                       implemented.

               dce     Do dead code elimination.

               deljumps
                       Delete redundant jumps and dead code.

               gnu89

               gnu99   Use GNU C semantics rather than C99 for some things.  Currently only inline.

               inline  Replace calls to functions marked with an inline specifier with  a  copy  of  the  actual
                       function.

               ssa     Convert  statements  into  static  single  assignment  form  for  optimization.   Not yet
                       finished.

               tailcall
                       Enable optimization of tail-recursion functions.  Currently not implemented.

               temps   Locate automatic variables into registers where possible, for further optimization by the
                       register allocator.

               uchar   Treat character constants as unsigned values.

       -Z flags
               Code generator (pass2) specific debugging where flags is one or more of the following:

               b       Basic block and SSA building
               c       Code printout
               e       Trees when entering pass2
               f       Instruction matcher, may provide much output
               g       Print flow graphs
               n       Memory allocation
               o       Instruction generator
               r       Register allocator
               s       Shape matching in instruction generator
               t       Type matching in instruction generator
               u       Sethi-Ullman computations
               x       Target-specific flag, used in machine-dependent code

PRAGMAS

       Input lines starting with a  “#pragma”  directive  can  be  used  to  modify  behaviour  of  ccom  during
       compilation.   All  tokens  up  to the first unescaped newline are considered part of the pragma command,
       with the following operations being recognized:

       STDC    Standard C99 operator follows.  Currently no C99 operations are implemented, and  any  directives
               starting with this token will be silently ignored.

       GCC diagnostic effect "option"
               GNU  C  compatibility.  Alter the effects of compiler diagnostics.  The required effect should be
               stated as warning, error or ignored, followed by the compiler diagnostic option in double quotes.
               For example, to force unknown pragmas to always  generate  an  error,  a  standard  header  might
               include

                 #pragma GCC diagnostic error "-Wunknown-pragmas"

       GCC poison identifier ...
               GNU  C  compatibility.  Cause an error if any of the following identifiers subsequently appear in
               the code (but not in any macro expansions).  Currently not implemented.

       GCC system_header
               GNU C compatibility.  Currently not implemented.

       GCC visibility
               GNU C compatibility.  Currently not implemented.

       pack([n])
               Set the default maximum alignment for structures and unions, such that members  will  have  their
               natural  alignment  requirements clamped at this value and may be stored misaligned.  If n is not
               given, the alignment is reset to the target default.

       pack(push[, n])
               Push the current pack setting onto an internal stack then, if n  is  given,  change  the  default
               alignment for structures and unions.  Currently not implemented.

       pack(pop)
               Change  the  pack  setting  to  the  most recently pushed value, and remove that setting from the
               stack.  Currently not implemented.

       packed [n]
               Set the maximum alignment for the structure or union defined in the current statement.  If  n  is
               not given, the default value of 1 is used.  (Currently this works except n is not used)

       aligned [n]
               Set the minimum alignment for the structure or union defined in the current statement.

       rename name
               Provide  an  alternative  name which will be used to reference the object declared in the current
               statement.

       weak name[=alias]
               Mark name as a weak rather than a global symbol, to allow its definition to be overridden at link
               time.  If an alias is given, this will be used as the default value of name.

       ident   Currently not implemented.

       and the following target-specific operations are handled by machine-dependent code:

       tls     For AMD64 and i386 targets, the variable declared in the current statement will be referenced via
               the “thread-local storage” mechanism.

       init    For AMD64, ARM, HPPA, i386, MIPS and PowerPC targets, when the current statement  is  a  function
               declaration,  generate  a  reference  in  the  .ctors  section, enabling library code to call the
               function prior to entering main().

       fini    For AMD64, ARM, HPPA, i386, MIPS and PowerPC targets, when the current statement  is  a  function
               declaration,  generate  a  reference  in  the  .dtors  section, enabling library code to call the
               function when main() returns or the exit() function is called.

       section name
               For AMD64, ARM, HPPA and i386 targets, place the subsequent code in the named section.  (This  is
               currently broken).

       alias name
               For  AMD64,  HPPA and i386 targets, emit assembler instructions providing an alias for the symbol
               defined by the current statement.

       stdcall
               For i386 targets, enable “stdcall” semantics during code generation, where function arguments are
               passed on the stack in right-to-left order, and the callee is responsible for adjusting the stack
               pointer before returning.  Any function result is passed in the  EAX  register.   On  win32,  the
               function name is postfixed with an “@” and the size of the stack adjustment.

       cdecl   For  i386  targets, enable “cdecl” semantics during code generation, where function arguments are
               passed on the stack in right-to-left order, and the caller is responsible  for  cleaning  up  the
               stack  after  the  function returns.  Any function result is passed in the EAX register.  This is
               the default.

       fastcall
               For i386-win32 targets, enable “fastcall” semantics during code generation.  (Currently  this  is
               equivalent to stdcall, which is likely wrong).

       dllimport
               For  i386-win32  targets, references to the external symbol defined by the current statement will
               be made via indirect access through a location  identified  by  the  symbol  name  prefixed  with
               “__imp_”.

       dllexport
               For i386-win32 targets, the external symbol declared by the current statement will be exported as
               an  indirect reference to be accessed with dllimport.  The global locator will be the symbol name
               prefixed with “__imp_”.  Currently this is not completely implemented.

       Any unknown “#pragma” directives will be ignored unless the -Wunknown-pragmas diagnostic is in effect.

SEE ALSO

       as(1), cpp(1), pcc(1)

HISTORY

       The ccom compiler is based on the original Portable C Compiler by S. C.  Johnson,  written  in  the  late
       70's.  Even though much of the compiler has been rewritten (about 50% of the frontend code and 80% of the
       backend),  some  of  the basics still remain.  Most is written by Anders Magnusson, with the exception of
       the data-flow analysis part and the SSA conversion code which is written by Peter A Jonsson, and the Mips
       port that were written as part of a project by undergraduate students at Lulea University of Technology.

       This product includes software developed or owned by Caldera International, Inc.

Debian                                           March 22, 2012                                          CCOM(1)