GNU cflow. A sample flowchart.

 [image of the Head of a GNU]


The following flowchart shows call tree in GNU cflow.

Recursive calls are marked with (R). Clicking on this marker will bring you to the call that caused recursion. Such calls are marked with text (recursive, see LINE). Again, clicking on this marker will bring you back to the recursion root call.

A marker [see LINE] indicates that the expansion of the current node is available on line LINE. These markers are clickable as well.

Enjoy!

[ Return to cflow home page ]

1 main() <int main (int argc,char **argv) at main.c:627>:
2     register_output() <int register_output (const char *name,int (*handler)(cflow_output_command cmd,FILE *outfile,int line,void *data,void *handler_data),void *handler_data) at output.c:74>:
3         abort()
4         strdup()
5         handler()
6     gnu_output_handler() <int gnu_output_handler (cflow_output_command cmd,FILE *outfile,int line,void *data,void *handler_data) at gnu.c:63>:
7         fprintf()
8     posix_output_handler() <int posix_output_handler (cflow_output_command cmd,FILE *outfile,int line,void *data,void *handler_data) at posix.c:74>:
9         fprintf()
10     xstrdup()
11     sourcerc() <void sourcerc (int *argc_ptr,char ***argv_ptr) at rc.c:86>:
12         xmalloc()
13         getenv()
14         argcv_get()
15         free()
16         parse_rc() <void parse_rc (int *argc_ptr,char ***argv_ptr,char *name) at rc.c:43>:
17             malloc()
18             error()
19             fopen()
20             fread()
21             fclose()
22             strtok()
23             argcv_get()
24             free()
25         strlen()
26         malloc()
27         strcpy()
28     argp_parse()
29     exit()
30     error()
31     init() <void init () at main.c:611>:
32         init_lex() <void init_lex (int debug_level) at c.l:186>:
33             xmalloc()
34             free()
35             install() <Symbol *install (char *name) at symbol.c:52>:
36                 xmalloc()
37                 memset()
38                 strcmp()
39                 hash_initialize()
40                 hash_insert()
41                 xalloc_die() <void xalloc_die (void) at main.c:605>:
42                     error()
43                 free()
44         init_parse() <void init_parse () at parser.c:212>:
45             xmalloc()
46             free()
47             clearstack() <void clearstack () at parser.c:167>:
48     pp_option() <void pp_option (const char *arg) at c.l:246>:
49         xmalloc()
50         free()
51         strlen()
52         memcpy()
53     source() <int source (char *name) at c.l:318>:
54         fopen()
55         error()
56         fclose()
57         strlen()
58         memcpy()
59         yyrestart() <void yyrestart (FILE *input_file) at c.c:1620>:
60             yy_create_buffer() <YY_BUFFER_STATE yy_create_buffer (FILE *file,int size) at c.c:1678>:
61                 yy_init_buffer() <void yy_init_buffer (YY_BUFFER_STATE b,FILE *file) at c.c:1735>:
62                     yy_flush_buffer() <void yy_flush_buffer (YY_BUFFER_STATE b) at c.c:1762>:
63                         yy_load_buffer_state() <void yy_load_buffer_state (void) at c.c:1665>:
64                     isatty()
65                     fileno()
66             yy_init_buffer() <void yy_init_buffer (YY_BUFFER_STATE b,FILE *file) at c.c:1735>: [see 61]
67             yy_load_buffer_state() <void yy_load_buffer_state (void) at c.c:1665>: [see 63]
68     yyparse() <int yyparse () at parser.c:286>:
69         clearstack() <void clearstack () at parser.c:167>: [see 47]
70         nexttoken() <int nexttoken () at parser.c:184>:
71             yylex() <int yylex (void) at c.c:749>:
72                 yy_create_buffer() <YY_BUFFER_STATE yy_create_buffer (FILE *file,int size) at c.c:1678>: [see 60]
73                 yy_load_buffer_state() <void yy_load_buffer_state (void) at c.c:1665>: [see 63]
74                 fprintf()
75                 ident() <int ident () at c.l:218>:
76                     lookup() <Symbol *lookup (char *name) at symbol.c:42>:
77                         hash_lookup()
78                     memcpy()
79                 memcpy()
80                 error_at_line()
81                 yywrap() <int yywrap () at c.l:309>:
82                     delete_statics() <void delete_statics () at symbol.c:121>:
83                         globals_only() <int globals_only () at main.c:573>:
84                             included_char() <int included_char (int c) at main.c:566>:
85                                 strchr()
86                         hash_do_for_each()
87                 yyrestart() <void yyrestart (FILE *input_file) at c.c:1620>: [see 59]
88             tokpush() <void tokpush (int type,int line,char *token) at parser.c:142>:
89                 xrealloc()
90         parse_typedef() <void parse_typedef () at parser.c:654>:
91             nexttoken() <int nexttoken () at parser.c:184>: [see 70]
92             fake_struct() <int fake_struct (Ident *ident) at parser.c:437>:
93                 mark() <void mark (Stackpos pos) at parser.c:128>:
94                 ident() <int ident () at c.l:218>: [see 75]
95                 nexttoken() <int nexttoken () at parser.c:184>: [see 70]
96                 putback() <int putback () at parser.c:198>:
97                     error()
98                 skip_struct() <void skip_struct () at parser.c:625>:
99                     nexttoken() <int nexttoken () at parser.c:184>: [see 70]
100                 restore() <void restore (Stackpos pos) at parser.c:134>:
101                 tokpush() <void tokpush (int type,int line,char *token) at parser.c:142>: [see 88]
102             putback() <int putback () at parser.c:198>: [see 96]
103             dcl() <int dcl (Ident *idptr) at parser.c:692> (R)
104                 nexttoken() <int nexttoken () at parser.c:184>: [see 70]
105                 putback() <int putback () at parser.c:198>: [see 96]
106                 dirdcl() <int dirdcl (Ident *idptr) at parser.c:720> (R)
107                     dcl() <int dcl (Ident *idptr) at parser.c:692> (recursive: see 103) [see 103]
108                     nexttoken() <int nexttoken () at parser.c:184>: [see 70]
109                     putback() <int putback () at parser.c:198>: [see 96]
110                     skip_to() <void skip_to (int c) at parser.c:277>:
111                         nexttoken() <int nexttoken () at parser.c:184>: [see 70]
112                     maybe_parm_list() <void maybe_parm_list (int *parm_cnt_return) at parser.c:786> (R)
113                         nexttoken() <int nexttoken () at parser.c:184>: [see 70]
114                         putback() <int putback () at parser.c:198>: [see 96]
115                         parmdcl() <int parmdcl (Ident *idptr) at parser.c:761> (R)
116                             nexttoken() <int nexttoken () at parser.c:184>: [see 70]
117                             putback() <int putback () at parser.c:198>: [see 96]
118                             dirdcl() <int dirdcl (Ident *idptr) at parser.c:720> (recursive: see 106) [see 106]
119             declare_type() <void declare_type (Ident *ident) at parser.c:905>:
120                 finish_save() <void finish_save () at parser.c:270>:
121                 lookup() <Symbol *lookup (char *name) at symbol.c:42>: [see 76]
122                 ident() <int ident () at c.l:218>: [see 75]
123                 install() <Symbol *install (char *name) at symbol.c:52>: [see 35]
124                 printf()
125         parse_declaration() <void parse_declaration (Ident *ident) at parser.c:341> (R)
126             parse_function_declaration() <void parse_function_declaration (Ident *ident) at parser.c:412> (R)
127                 ident() <int ident () at c.l:218>: [see 75]
128                 parse_knr_dcl() <void parse_knr_dcl (Ident *ident) at parser.c:568>:
129                     ident() <int ident () at c.l:218>: [see 75]
130                     parse_dcl() <void parse_dcl (Ident *ident) at parser.c:679>:
131                         ident() <int ident () at c.l:218>: [see 75]
132                         putback() <int putback () at parser.c:198>: [see 96]
133                         dcl() <int dcl (Ident *idptr) at parser.c:692> (R): [see 103]
134                         save_stack() <void save_stack () at parser.c:260>:
135                             save_token() <void save_token (TOKSTK *tokptr) at parser.c:220>:
136                                 strlen()
137                                 memcpy()
138                         declare() <void declare (Ident *ident) at parser.c:857>:
139                             finish_save() <void finish_save () at parser.c:270>: [see 120]
140                             ident() <int ident () at c.l:218>: [see 75]
141                             install() <Symbol *install (char *name) at symbol.c:52>: [see 35]
142                             get_symbol() <Symbol *get_symbol (char *name) at parser.c:929>:
143                                 lookup() <Symbol *lookup (char *name) at symbol.c:42>: [see 76]
144                                 strcmp()
145                                 install() <Symbol *install (char *name) at symbol.c:52>: [see 35]
146                             error_at_line()
147                             printf()
148                     mark() <void mark (Stackpos pos) at parser.c:128>: [see 93]
149                     nexttoken() <int nexttoken () at parser.c:184>: [see 70]
150                     putback() <int putback () at parser.c:198>: [see 96]
151                     dcl() <int dcl (Ident *idptr) at parser.c:692> (R): [see 103]
152                     restore() <void restore (Stackpos pos) at parser.c:134>: [see 100]
153                 lookup() <Symbol *lookup (char *name) at symbol.c:42>: [see 76]
154                 func_body() <void func_body () at parser.c:808> (R)
155                     cleanup_stack() <void cleanup_stack () at parser.c:155>:
156                         memmove()
157                     nexttoken() <int nexttoken () at parser.c:184>: [see 70]
158                     expression() <void expression () at parser.c:351>:
159                         putback() <int putback () at parser.c:198>: [see 96]
160                         nexttoken() <int nexttoken () at parser.c:184>: [see 70]
161                         call() <void call (char *name,int line) at parser.c:971>:
162                             add_reference() <Symbol *add_reference (char *name,int line) at parser.c:955>:
163                                 get_symbol() <Symbol *get_symbol (char *name) at parser.c:929>: [see 142]
164                                 xmalloc()
165                                 append_to_list() <Consptr append_to_list (Consptr *root_ptr,void *car) at symbol.c:283>:
166                                     alloc_cons() <Consptr alloc_cons () at symbol.c:260>:
167                                         alloc_cons_from_bucket() <Consptr alloc_cons_from_bucket () at symbol.c:252>:
168                                         alloc_new_bucket() <void alloc_new_bucket () at symbol.c:234>:
169                                             malloc()
170                                         error()
171                             symbol_in_list() <int symbol_in_list (Symbol *sym,Consptr list) at symbol.c:306>:
172                             append_to_list() <Consptr append_to_list (Consptr *root_ptr,void *car) at symbol.c:283>: [see 165]
173                         reference() <void reference (char *name,int line) at parser.c:989>:
174                             add_reference() <Symbol *add_reference (char *name,int line) at parser.c:955>: [see 162]
175                             symbol_in_list() <int symbol_in_list (Symbol *sym,Consptr list) at symbol.c:306>: [see 171]
176                             append_to_list() <Consptr append_to_list (Consptr *root_ptr,void *car) at symbol.c:283>: [see 165]
177                         skip_to() <void skip_to (int c) at parser.c:277>: [see 110]
178                     parse_variable_declaration() <void parse_variable_declaration (Ident *ident) at parser.c:472> (R)
179                         mark() <void mark (Stackpos pos) at parser.c:128>: [see 93]
180                         ident() <int ident () at c.l:218>: [see 75]
181                         nexttoken() <int nexttoken () at parser.c:184>: [see 70]
182                         putback() <int putback () at parser.c:198>: [see 96]
183                         skip_struct() <void skip_struct () at parser.c:625>: [see 98]
184                         restore() <void restore (Stackpos pos) at parser.c:134>: [see 100]
185                         tokpush() <void tokpush (int type,int line,char *token) at parser.c:142>: [see 88]
186                         parse_dcl() <void parse_dcl (Ident *ident) at parser.c:679>: [see 130]
187                         initializer_list() <void initializer_list () at parser.c:538>:
188                             nexttoken() <int nexttoken () at parser.c:184>: [see 70]
189                             expression() <void expression () at parser.c:351>: [see 158]
190                         expression() <void expression () at parser.c:351>: [see 158]
191                         func_body() <void func_body () at parser.c:808> (recursive: see 154) [see 154]
192                     parse_declaration() <void parse_declaration (Ident *ident) at parser.c:341> (recursive: see 125) [see 125]
193                     delete_autos() <void delete_autos (int level) at symbol.c:142>:
194                         hash_do_for_each()
195                         auto_processor() <_Bool auto_processor (void *data,void *proc_data) at symbol.c:130>:
196             ident() <int ident () at c.l:218>: [see 75]
197             parse_variable_declaration() <void parse_variable_declaration (Ident *ident) at parser.c:472> (R): [see (R)
198         cleanup_stack() <void cleanup_stack () at parser.c:155>: [see 155]
199     cleanup() <void cleanup () at symbol.c:178>:
200         hash_do_for_each()
201     output() <void output () at output.c:393>:
202         strcmp()
203         fopen()
204         error()
205         xmalloc()
206         xref_output() <void xref_output () at output.c:230>:
207             collect_symbols() <int collect_symbols (Symbol ***return_sym,int (*sel)(Symbol *p)) at symbol.c:205>:
208                 hash_do_for_each()
209                 calloc()
210                 xalloc_die() <void xalloc_die (void) at main.c:605>: [see 41]
211             qsort()
212             free()
213         fclose()

[ Return to cflow home page ]