CALLS(1)CALLS(1)NAMEcalls - print static call graph of a C program
SYNOPSIScalls [ -ptv ] [ -f function ] [ -w width ... ] [ -D def ] [ -U def ]
[ -I dir ] [ file ... ]
Calls reads files, which should be the source of C programs, and writes
the analysed calling pattern to standard output. If no file names are
given, standard input will be read. Calls is intended to help analyse
the flow of a program by laying out the functions called in the hierar‐
chical manner used in Software Tools by B. Kernighan and P. Plauger.
All input is first filtered through cpp(1). Functions called but not
defined within the source files are shown as:
Recursive references are shown as:
-f Add function as a root of a call graph to be printed.
-p Make cpp search the APE include directories.
-t Provides a terse form of output, in which the calling pattern for
any function is printed only once on the first occurrence of the
function. Subsequent occurrences output the function name and a
... [see line xx]
This is the default case.
-v Full output of function calling patterns on every occurrence.
-wn Set the output width to n. The default is 80 columns.
Define the name for cpp, as if by #define. If no definition is
given, the name is defined as 1.
Remove any initial definition of name, where name is a reserved
symbol that is predefined by cpp.
-Idir Change the algorithm for searching for #include files whose names
do not begin with / to look in dir before looking in the directo‐
ries on the standard list.
What does cat call?
% calls-f main /sys/src/cmd/cat.c
3 read [external]
4 write [external]
5 sysfatal [external]
6 open [external]
7 sysfatal [external]
8 close [external]
9 exits [external]
What internal functions does dd call?
% calls-f main /sys/src/cmd/dd.c | grep -v '\[external\]'
6 <<< number
25 term ... [see line 21]
26 stats ... [see line 22]
Note the recursion in number.
Generate the PC kernel's internal call graph.
calls-f main -I../port -I. ../port/*.c ../ip/*.c *.c |
grep -v external
Forward declared functions defined within a function body which are not
subsequently used within that function body will be listed as having
Does not understand calls through function pointers.
Does not understand the restricted scope of static functions.