Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
.TH CALLS 1
2
.SH NAME
3
calls \- print static call graph of a C program
4
.SH SYNOPSIS
5
.B calls
6
[
7
.B \-ptv
8
] [
9
.B \-f
10
.I function
11
] [
12
.B \-w
13
.I width
14
\&...
15
] [
16
.B \-D
17
.I def
18
] [
19
.B \-U
20
.I def
21
] [
22
.B \-I
23
.I dir
24
] [
25
file ...
26
]
27
.SH DESCRIPTION
28
.I Calls
29
reads
30
.IR file s,
31
which should be the source of C programs,
32
and writes the analysed calling pattern to standard output.
33
If no file names are given,
34
standard input will be read.
35
.I Calls
36
is intended to help analyse the flow of a program by laying out the
37
functions called in the hierarchical manner used in
38
.I "Software Tools"
39
by
40
B. Kernighan and P. Plauger.
41
.PP
42
All input is first filtered through
43
.IR cpp (1).
44
Functions called but not defined within the source
45
.IR file s
46
are shown as:
47
.PP
48
.RS
49
function
50
.B [external]
51
.RE
52
.PP
53
Recursive references are shown as:
54
.PP
55
.RS
56
.B <<<
57
function
58
.RE
59
.PP
60
Options are:
61
.TP 0.6i
62
.B \-f
63
Add
64
.I function
65
as a root of a call graph to be printed.
66
.TP
67
.B -p
68
Make
69
.I cpp
70
search the APE
71
.I include
72
directories.
73
.TP
74
.B \-t
75
Provides a terse form of output,
76
in which the calling pattern for any
77
function is printed only once on the first occurrence of the function.
78
Subsequent occurrences output the function name and a notation
79
.IP "" 1i
80
\&...
81
.BI "[see line " xx ]
82
.IP "" 0.6i
83
This is the default case.
84
.TP 0.6i
85
.B \-v
86
Full output of function calling patterns on every occurrence.
87
.TP
88
.BI \-w n
89
Set the output width to
90
.IR n .
91
The default is 80 columns.
92
.TP
93
.BI \-D name
94
.PD 0
95
.TP
96
.PD 0.4v
97
.BI \-D name=defn
98
Define the
99
.I name
100
for
101
.IR cpp ,
102
as if by
103
.BR #define .
104
If no definition is given, the name is defined as 1.
105
.TP
106
.BI \-U name
107
Remove any initial definition of
108
.IR name ,
109
where
110
.I name
111
is a reserved symbol that is predefined by
112
.IR cpp .
113
.TP
114
.BI \-I dir
115
Change the algorithm for searching for
116
.B #include
117
files whose names do not begin with
118
.B /
119
to look in
120
.I dir
121
before looking in the directories on the standard list.
122
.SH EXAMPLES
123
What does
124
.I cat
125
call?
126
.IP
127
.EX
128
% calls -f main /sys/src/cmd/cat.c
129
1   main
130
2       cat
131
3               read [external]
132
4               write [external]
133
5               sysfatal [external]
134
6       open [external]
135
7       sysfatal [external]
136
8       close [external]
137
9       exits [external]
138
.EE
139
.br
140
.ne 7
141
.PP
142
What internal functions does
143
.I dd
144
call?
145
.IP
146
.EX
147
% calls -f main /sys/src/cmd/dd.c | grep -v '\e[external\e]'
148
1   main
149
5       number
150
6               <<< number
151
9       match
152
17      flsh
153
21              term
154
22                      stats
155
25      term ... [see line 21]
156
26      stats ... [see line 22]
157
.EE
158
.PP
159
Note the recursion in
160
.IR number .
161
.PP
162
Generate the PC kernel's internal call graph.
163
.IP
164
.EX
165
cd /sys/src/9/pc
166
calls -f main -I../port -I. ../port/*.c ../ip/*.c *.c |
167
	grep -v external
168
.EE
169
.SH BUGS
170
Forward declared functions defined within a function body which are not
171
subsequently used within that function body will be listed as having been
172
called.
173
.PP
174
Does not understand calls through function pointers.
175
.PP
176
Does not understand the restricted scope of
177
.I static
178
functions.