CFLOW(1-SysV) RISC/os Reference Manual CFLOW(1-SysV)
NAME
cflow - generate C flowgraph
SYNOPSIS
cflow [ -r ] [ -ix ] [ -i_] [ -d num ] [ -g file ] [ -f file
] file...
DESCRIPTION
The cflow command analyzes a collection of C, yacc, lex,
assembler, and object files and attempts to build a graph
charting the external references. Files suffixed with .y,
.l, and .c are yacc, lex, and C-preprocessed as appropriate.
The results of the preprocessed files, and files suffixed
with .i, are then run through the first pass of lint(1).
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 displayed upon
the standard output.
Each line of output begins with a reference number, followed
by a suitable number of tabs indicating the level, then the
name of the global symbol followed by a colon and its defin-
ition. Normally only function names that do not begin with
an underscore are listed (see the -i options below). For
information extracted from C source, the definition consists
of an abstract type declaration (e.g., char *), and, delim-
ited 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 (e.g., 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 definition 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();
Printed 1/15/91 Page 1
CFLOW(1-SysV) RISC/os Reference Manual CFLOW(1-SysV)
}
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(1), 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 inter-
preted just as they are by cc(1) and cpp(1)], the following
options are interpreted by cflow:
-r Reverse the ``caller:callee'' relationship producing
an inverted listing showing the callers of each func-
tion. 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).
-d num 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.
-g file
Use the named file as the temporary file instead of
the default. This is useful when temporary space is
low.
-f file
Use the named language source file as input, but do
not preprocess the file.
DIAGNOSTICS
Complains about bad options. Complains about multiple
definitions and only believes the first. Other messages may
come from the various programs used (e.g., the C-
Page 2 Printed 1/15/91
CFLOW(1-SysV) RISC/os Reference Manual CFLOW(1-SysV)
preprocessor).
SEE ALSO
as(1), cc(1), cpp(1), lex(1), lint(1), nm(1), pr(1),
yacc(1).
BUGS
Files produced by lex(1) and yacc(1) cause the reordering of
line number declarations which can confuse cflow. To get
proper results, feed cflow the yacc or lex input.
Printed 1/15/91 Page 3