CFLOW(1) DOMAIN/IX SYS5 CFLOW(1)
NAME
cflow- generate C flow graph
USAGE
cflow [-r] [-ix] [-i_] [ -dnum ] files
DESCRIPTION
Cflow analyzes a collection of files created by C, yacc(1),
and lex(1) in an attempt to build a graph charting the
external references. (Note that DOMAIN/IX does not
currently support cflow analysis of assembler and object
files, although some other systems do.)
Files suffixed in .y, .l, .c, and .i are passed through
lex(1) and the C preprocessor (bypassed for .i files) as
appropriate. They are then run through the first pass of
lint(1). The -I, -D, and -U options of the C preprocessor
are also understood. The output of all this nontrivial pro-
cessing is collected and turned into a graph of external
references, which is displayed upon the standard output.
Each line of output begins with a reference (i.e., line)
number, followed by a suitable number of tabs indicating the
level. Then the name of the global (normally only a func-
tion not defined as an external or beginning with an under-
score; see below for the -i inclusion option), a colon, and
its definition.
For information extracted from C source, the definition con-
sists of an abstract type declaration (e.g., char *), and,
delimited by angle brackets, the name of the source file,
and the line number where the definition was found. Defini-
tions extracted from object files indicate the filename and
location counter under which the symbol appeared (e.g.,
text). Leading underscores in C-style external names are
deleted.
Once the 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.
OPTIONS
-r Reverse the ``caller:callee'' relationship produc-
ing an inverted listing showing the callers of
each function. The listing is also sorted in lex-
icographical order by callee.
-ix Include external and static data symbols. The
default is to include only functions in the flow
Printed 12/4/86 CFLOW-1
CFLOW(1) DOMAIN/IX SYS5 CFLOW(1)
graph.
-i_ Include names beginning with an underscore. The
default is to exclude these functions (and data if
-ix is used).
-dnum Use the num decimal integer to indicate the depth
at which the flow graph is cut off. By default
this is a very large number. You may not set the
cut-off depth to a nonpositive integer.
CFLOW-2 Printed 12/4/86
CFLOW(1) DOMAIN/IX SYS5 CFLOW(1)
EXAMPLE
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 -e option of
pr(1) can be used to compress the tab expansion to something
less than every eight spaces.
CAUTIONS
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.
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 preproces-
sor).
RELATED INFORMATION
cc(1), cpp(1), lex(1), lint(1), pr(1), yacc(1).
Printed 12/4/86 CFLOW-3