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.