Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ cflow(CP) — OpenDesktop Software Development System 3.0.0

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

as(CP)

cc(CP)

cpp(CP)

lex(CP)

nm(CP)

pr(C)

yacc(CP)


 cflow(CP)                      6 January 1993                      cflow(CP)


 Name

    cflow - generate C flowgraph

 Syntax

    cflow [ -dnum ] [ -ix ] [ -i ] [ -nfunction ] [ -r] files

 Description

    The cflow command analyzes a collection of C, yacc, lex, assembler, and
    object files and attempts to build a graph charting the external refer-
    ences.  Files suffixed with .y, .l, and .c are ``yacc'ed,'' ``lex'ed,''
    and C-preprocessed as appropriate.  Files suffixed with .i are processed
    by the first pass of cc.  Files suffixed with .s are assembled.  Assem-
    bled files, and files suffixed with .o, have information extracted from
    their symbol tables.  The results are collected and turned into a graph
    of external references which is displayed upon the standard output.

    Each line of output begins with a reference number, followed by a number
    of tabs indicating the level, then the name of the global symbol followed
    by a colon and its definition.  Normally only function names that do not
    begin with an underscore are listed (see the -i options below).  For in-
    formation extracted from C source files, the definition consists of an
    abstract type declaration (for example, char *), and, delimited by angle
    brackets, the name of the source file and the line number where the
    definition was found.

    Definitions extracted from object files indicate the file name and loca-
    tion counter under which the symbol appeared (for example, text).  Lead-
    ing underscores in C-style external names are deleted.

    Once a definition of a name has been printed, subsequent references to
    that name contain only the reference number of the line where the defini-
    tion may be found.  For undefined references, only <> is printed.

    As an example, given the following in file.c:

       int     i;

       main()
       {
               f();
               g();
               f();
       }

       f()
       {
               i = h();
       }

    the command

       cflow -ix file.c

    produces the output

       1        main: int(), <file.c 4>
       2                f: int(), <file.c 11>
       3                        h: <>
       4                        i: int, <file.c 1>
       5                g: <>


    When the nesting level becomes too deep, the output of cflow can be piped
    to pr(C), using the -e option, to compress tab expansion to less than
    eight spaces.

    In addition to the -D, -I, and -U options (which are interpreted just as
    they are by cc(CP) and cpp(CP)), the following options are interpreted by
    cflow:

    -dnum  The num decimal integer indicates the depth at which the flowgraph
           is cut off.  By default this is a very large number.  Attempts to
           set the cutoff depth to a nonpositive integer will be ignored.

    -ix    Include external and static data symbols.  The default is to
           include only functions in the flowgraph.

    -i    Include names that begin with an underscore.  The default is to
           exclude these functions (and data if -ix is used).

    -nfunction
           Generate a flowgraph from function on to the end of the file.

    -r     Reverse the ``caller:callee'' relationship, producing an inverted
           listing showing the callers of each function.  The listing is also
           sorted in lexicographical order by callee.

 Warning

    This utility does not support code containing function prototypes.

 Diagnostics

    cflow complains about bad options.  It also complains about multiple
    definitions and only accepts the first one.  Other messages may come from
    the various programs used (for example, the C-preprocessor).

 Notes

    Files produced by lex(CP) and yacc(CP) cause the reordering of line num-
    ber declarations which can confuse cflow.  To get proper results, feed
    cflow the yacc or lex input.

 See also

    as(CP), cc(CP), cpp(CP), lex(CP), nm(CP), pr(C), yacc(CP)

 Standards conformance

    cflow is conformant with:
    AT&T SVID Issue 2;
    and X/Open Portability Guide, Issue 3, 1989.


Typewritten Software • bear@typewritten.org • Edmonds, WA 98026