Print this page
new smatch
Split |
Close |
Expand all |
Collapse all |
--- old/usr/src/tools/smatch/src/test-dissect.c
+++ new/usr/src/tools/smatch/src/test-dissect.c
1 1 #include "dissect.h"
2 2
3 3 static unsigned dotc_stream;
4 4
5 5 static inline char storage(struct symbol *sym)
6 6 {
7 7 int t = sym->type;
8 8 unsigned m = sym->ctype.modifiers;
9 9
10 10 if (m & MOD_INLINE || t == SYM_STRUCT || t == SYM_UNION /*|| t == SYM_ENUM*/)
11 11 return sym->pos.stream == dotc_stream ? 's' : 'g';
12 12
13 13 return (m & MOD_STATIC) ? 's' : (m & MOD_NONLOCAL) ? 'g' : 'l';
14 14 }
15 15
16 16 static inline const char *show_mode(unsigned mode)
17 17 {
18 18 static char str[3];
19 19
20 20 if (mode == -1)
21 21 return "def";
22 22
23 23 #define U(u_r) "-rwm"[(mode / u_r) & 3]
24 24 str[0] = U(U_R_AOF);
25 25 str[1] = U(U_R_VAL);
26 26 str[2] = U(U_R_PTR);
27 27 #undef U
28 28
29 29 return str;
30 30 }
31 31
32 32 static void print_usage(struct position *pos, struct symbol *sym, unsigned mode)
33 33 {
34 34 static unsigned curr_stream = -1;
35 35
36 36 if (curr_stream != pos->stream) {
37 37 curr_stream = pos->stream;
38 38 printf("\nFILE: %s\n\n", stream_name(curr_stream));
39 39 }
40 40
41 41 printf("%4d:%-3d %c %-5.3s",
42 42 pos->line, pos->pos, storage(sym), show_mode(mode));
43 43 }
44 44
45 45 static void r_symbol(unsigned mode, struct position *pos, struct symbol *sym)
46 46 {
47 47 print_usage(pos, sym, mode);
48 48
49 49 if (!sym->ident)
50 50 sym->ident = built_in_ident("__asm__");
51 51
52 52 printf("%-32.*s %s\n",
53 53 sym->ident->len, sym->ident->name,
54 54 show_typename(sym->ctype.base_type));
55 55 }
56 56
57 57 static void r_member(unsigned mode, struct position *pos, struct symbol *sym, struct symbol *mem)
58 58 {
59 59 struct ident *ni, *si, *mi;
60 60
61 61 print_usage(pos, sym, mode);
62 62
63 63 ni = built_in_ident("?");
64 64 si = sym->ident ?: ni;
65 65 /* mem == NULL means entire struct accessed */
66 66 mi = mem ? (mem->ident ?: ni) : built_in_ident("*");
67 67
68 68 printf("%.*s.%-*.*s %s\n",
69 69 si->len, si->name,
70 70 32-1 - si->len, mi->len, mi->name,
71 71 show_typename(mem ? mem->ctype.base_type : sym));
72 72 }
73 73
74 74 static void r_symdef(struct symbol *sym)
75 75 {
76 76 r_symbol(-1, &sym->pos, sym);
77 77 }
78 78
79 79 int main(int argc, char **argv)
80 80 {
↓ open down ↓ |
80 lines elided |
↑ open up ↑ |
81 81 static struct reporter reporter = {
82 82 .r_symdef = r_symdef,
83 83 .r_symbol = r_symbol,
84 84 .r_member = r_member,
85 85 };
86 86 struct string_list *filelist = NULL;
87 87 char *file;
88 88
89 89 sparse_initialize(argc, argv, &filelist);
90 90
91 - FOR_EACH_PTR_NOTAG(filelist, file) {
91 + FOR_EACH_PTR(filelist, file) {
92 92 dotc_stream = input_stream_nr;
93 93 dissect(__sparse(file), &reporter);
94 - } END_FOR_EACH_PTR_NOTAG(file);
94 + } END_FOR_EACH_PTR(file);
95 95
96 96 return 0;
97 97 }
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX