cflow(1) cflow(1)
NAME
cflow - generate C flowgraph
SYNOPSIS
cflow [-dnum] [-i] [-ix] [-r] files
DESCRIPTION
cflow analyzes a collection of C, yacc, lex, assembler, and
object files and attempts to build a graph charting the
external references. Files suffixed in .y, .l, .c, and .i
are yacc'd, lex'd, and C-preprocessed (bypassed for .i
files) as appropriate and then run through the first pass of
lint(1). (The -I, -D, and -U flag options of the C-
preprocessor are also understood.) Files suffixed with .s
are assembled and information is extracted (as in .o files)
from the symbol table. The output 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
function not defined as an external or beginning with an
underscore; see below for the -i inclusion flag option) a
colon and its definition. For information extracted from C
source, the definition consists 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. Definitions extracted from
object files indicate the file name and location 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.
When the nesting level becomes too deep, the -e flag option
of pr(1) can be used to compress the tab expansion to
something less than every eight spaces.
The following flag options are interpreted by cflow:
-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.
Page 1 (last mod. 1/16/87)
cflow(1) cflow(1)
-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
nonpositive integer will be met with contempt.
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: <>
DIAGNOSTICS
Complains about bad flag options. Complains about multiple
definitions and only believes the first. Other messages may
come from the various programs used (e.g., the C-
preprocessor).
FILES
/usr/bin/cflow
SEE ALSO
as(1), cc(1), cpp(1), lex(1), lint(1), nm(1), pr(1),
yacc(1).
BUGS
Page 2 (last mod. 1/16/87)
cflow(1) cflow(1)
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.
Page 3 (last mod. 1/16/87)