Fix declaration_specifiers() handling of typedef name shadowed by NS_SYMBOL
[smatch.git] / gdbhelpers
blob7223ffd0f92f5d2ba47a78bde090f7566ad49462
2 # Don't forget to rebuild sparse with uncommented debug options
3 # in the Makefile. Also, gcc 3 is known to screw up with the
4 # cpp macros in the debugging info.
7 # If a gdb_show_* function is running at a non-zero recursion
8 # level, only a short summary is shown, preventing further
9 # recursion. Also note that gdb has only one, global, scope
10 # for variables, so we need to be careful with recursions.
13 set $showing_token = 0
14 set $showing_ident = 0
15 set $showing_symbol = 0
17 set $ntabs = 0
19 define gdb_tabs
20         set $tmp = $ntabs
21         while ($tmp--)
22                 printf "\t"
23         end
24 end
27 # Ptr list handling
28 define ptr_entry
29         set $ptr = $arg0
30         set $index = $arg1
31         set $entry = &($arg2)
33         set *($entry) = (void *) (~3UL & (unsigned long)$ptr->list[$index])
34 end
37 # Ptr list looping skeleton
38 define gdb_ptr_list_for_each
40         set $my_head = (struct ptr_list *) $arg0
41         set $my_list = $my_head
44         if ($my_head)
45                 while (1)
46                         set $my_nr = 0
47                         while ($my_nr < $my_list->nr)
49                                 # Put your iterator code here
50                                 set $my_nr++
51                         end
53                         if (($my_list = $my_list->next) == $my_head)
54                                 loop_break
55                         end
56                 end
57         end
58 end
60 # Show symbols in a symbol_list. Non-recursive
61 define gdb_ptr_list_for_each_show_symbol
63         set $my_head = (struct ptr_list *) $arg0
64         set $my_list = $my_head
67         if ($my_head)
68                 while (1)
69                         set $my_nr = 0
70                         while ($my_nr < ($my_list)->nr)
71                                 set $my_symbol = (struct symbol *) ((~3UL) & (unsigned long)($my_list)->list[$my_nr])
72                                 gdb_show_symbol($my_symbol)
74                                 set $my_nr++
75                         end
77                         set $my_list = ($my_list)->next
78                         if ($my_list == $my_head)
79                                 loop_break
80                         end
81                 end
82         end
83 end
86 #define gdb_show_statement
89 # Recursive
90 define gdb_show_ctype
91         printf "modifiers: "
92         if ($arg0->modifiers & MOD_AUTO)
93                 printf "MOD_AUTO "
94         end
95         if ($arg0->modifiers & MOD_REGISTER)
96                 printf "MOD_REGISTER "
97         end
98         if ($arg0->modifiers & MOD_STATIC)
99                 printf "MOD_STATIC "
100         end
101         if ($arg0->modifiers & MOD_EXTERN)
102                 printf "MOD_EXTERN "
103         end
104         if ($arg0->modifiers & MOD_CONST)
105                 printf "MOD_CONST "
106         end
107         if ($arg0->modifiers & MOD_VOLATILE)
108                 printf "MOD_VOLATILE "
109         end
110         if ($arg0->modifiers & MOD_SIGNED)
111                 printf "MOD_SIGNED "
112         end
113         if ($arg0->modifiers & MOD_UNSIGNED)
114                 printf "MOD_UNSIGNED "
115         end
116         if ($arg0->modifiers & MOD_CHAR)
117                 printf "MOD_CHAR "
118         end
119         if ($arg0->modifiers & MOD_SHORT)
120                 printf "MOD_SHORT "
121         end
122         if ($arg0->modifiers & MOD_LONG)
123                 printf "MOD_LONG "
124         end
125         if ($arg0->modifiers & MOD_LONGLONG)
126                 printf "MOD_LONGLONG "
127         end
128         if ($arg0->modifiers & MOD_TYPEDEF)
129                 printf "MOD_TYPEDEF "
130         end
131         if ($arg0->modifiers & MOD_INLINE)
132                 printf "MOD_INLINE "
133         end
134         if ($arg0->modifiers & MOD_ADDRESSABLE)
135                 printf "MOD_ADDRESSABLE "
136         end
137         if ($arg0->modifiers & MOD_NOCAST)
138                 printf "MOD_NOCAST "
139         end
140         if ($arg0->modifiers & MOD_NODEREF)
141                 printf "MOD_NODEREF "
142         end
143         if ($arg0->modifiers & MOD_ACCESSED)
144                 printf "MOD_ACCESSED "
145         end
146         if ($arg0->modifiers & MOD_TOPLEVEL)
147                 printf "MOD_TOPLEVEL "
148         end
149         if ($arg0->modifiers & MOD_LABEL)
150                 printf "MOD_LABEL "
151         end
152         if ($arg0->modifiers & MOD_ASSIGNED)
153                 printf "MOD_ASSIGNED "
154         end
155         if ($arg0->modifiers & MOD_TYPE)
156                 printf "MOD_TYPE "
157         end
158         if ($arg0->modifiers & MOD_SAFE)
159                 printf "MOD_SAFE "
160         end
161         if ($arg0->modifiers & MOD_USERTYPE)
162                 printf "MOD_USERTYPE "
163         end
164         if ($arg0->modifiers & MOD_FORCE)
165                 printf "MOD_FORCE "
166         end
167         if ($arg0->modifiers & MOD_EXPLICITLY_SIGNED)
168                 printf "MOD_EXPLICITLY_SIGNED"
169         end
170         if ($arg0->modifiers & MOD_BITWISE)
171                 printf "MOD_BITWISE "
172         end
173         if (!$arg0->modifiers)
174                 printf "0"
175         end
177         printf ", alignment = %d", $arg0->alignment
178         if ($arg0->as)
179                 printf ", address_space = %d", $arg0->as
180         end
181         printf "\n"
184         set $ntabs++
185         if ($arg0->base_type)
186                 gdb_tabs
187                 printf "base_type = "
188                 gdb_show_symbol($arg0->base_type)
189         end
191         set $ntabs--
196 define gdb_show_symbol
197         printf "(%x) type = ", $arg0
198         output $arg0->type
199         printf ", namespace = "
200         output $arg0->namespace
201         if ($arg0->ident)
202                 printf ", ident = %s\n", show_ident($arg0->ident)
203         else
204                 printf ", ident = NULL\n"
205         end
207 #       print "zz"
209         gdb_tabs
210         printf "dump:\n"
211         call show_symbol($arg0)
213         set $ntabs++
214         if ($arg0->namespace == NS_SYMBOL)
215                 gdb_tabs
216                 printf "ctype = "
217                 gdb_show_ctype(&($arg0->ctype))
218         end
219         set $ntabs--
223 # non-recursive
224 define gdb_show_symbols_next_id
225         set $sym = $arg0
226         printf "{\n"
227         set $ntabs++
228         while ($sym)
229                 gdb_tabs
230                 printf "symbol = "
231                 gdb_show_symbol($sym)
232                 set $sym = $sym->next_id
233         end
234         set $ntabs--
235         gdb_tabs
236         printf "}\n"
239 define gdb_show_ident
240         if ($arg0)
241                 printf "(%p) '%s'\n", $arg0, show_ident($arg0)
242         else
243                 printf "NULL\n"
244         end
246         if (! $showing_ident)
247                 set $showing_ident = 1
248                 set $ntabs++
250                 set $ident = $arg0
252                 if ($ident->symbols)
253                         gdb_tabs
254                         printf "symbols = "
255                         gdb_show_symbols_next_id($ident->symbols)
256                 end
258                 set $ntabs--
259                 set $showing_ident = 0
260         end
263 define gdb_show_token
264         printf "%p: '%s', type = ", $arg0, show_token($arg0)
265         output (enum token_type) ($arg0)->pos.type
266         printf "\n"
268         if (! $showing_token)
269                 set $showing_token = 1
270                 set $ntabs++
272                 set $token = $arg0
274                 if ($token->pos.type == TOKEN_IDENT)
275                         gdb_tabs
276                         printf "ident = "
277                         gdb_show_ident $token.ident
278                 end
280                 if ($token->pos.type == TOKEN_MACRO_ARGUMENT)
281                         gdb_tabs
282                         printf "argnum = %d\n", $token->argnum
283                 end
285                 if ($token->pos.type == TOKEN_SPECIAL)
286                         gdb_tabs
287                         printf "special = \"%s\"\n", show_special($token.special)
288                 end
290                 set $ntabs--
291                 set $showing_token = 0
292         end
295 # non-recursive
296 define gdb_show_tokens
297         set $t = $arg0
298         printf "{\n"
299         set $ntabs++
300         while ($t != &eof_token_entry)
301                 gdb_tabs
302                 printf "token = "
303                 gdb_show_token($t)
304                 set $t = ($t)->next
305         end
306         set $ntabs--
307         gdb_tabs
308         printf "}\n"