Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ rcflow(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)

rlint(CP)

yacc(CP)


 rcflow(CP)                     6 January 1993                     rcflow(CP)


 Name

    rcflow - generate C flowgraph

 Syntax

    rcflow [-r] [-ix] [-i ] [-dnum] files

 Description

    The rcflow 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.  The results of the preprocessed
    files, and files suffixed with .i, are then run through the first pass of
    rlint(CP).  Files suffixed with .s are assembled.  Assembled 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 sent to standard output.

    Each line of output begins with a reference number, followed by a suit-
    able 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 -ix and
    -i options below).  For information extracted from C source, the defini-
    tion 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 location counter under which the symbol
    appeared (for example, text).  Leading 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

            rcflow -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  rcflow  can  be
    piped  to  pr(C),  using  the -e option, to compress the tab expansion to
    something less than every 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
    rcflow:

    -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.

    -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).

    -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 non-positive integer will be ignored.

 Diagnostics

    rcflow complains about bad options.  It also complains about multiple
    definitions and only believes 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 re-ordering of line num-
    ber declarations which can confuse rcflow.  To get proper results, feed
    rcflow the yacc or lex input.

 See also

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

 Standards conformance

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


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