1
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.
5
6
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.
11
12
13 set $showing_token = 0
14 set $showing_ident = 0
15 set $showing_symbol = 0
16
17 set $ntabs = 0
18
19 define gdb_tabs
20 set $tmp = $ntabs
21 while ($tmp--)
22 printf "\t"
23 end
24 end
25
26
27 # Ptr list handling
28 define ptr_entry
29 set $ptr = $arg0
30 set $index = $arg1
31 set $entry = &($arg2)
32
33 set *($entry) = (void *) (~3UL & (unsigned long)$ptr->list[$index])
34 end
35
36
37 # Ptr list looping skeleton
38 define gdb_ptr_list_for_each
39
40 set $my_head = (struct ptr_list *) $arg0
41 set $my_list = $my_head
42
43
44 if ($my_head)
45 while (1)
46 set $my_nr = 0
47 while ($my_nr < $my_list->nr)
48
49 # Put your iterator code here
50 set $my_nr++
51 end
52
53 if (($my_list = $my_list->next) == $my_head)
54 loop_break
55 end
56 end
57 end
58 end
59
60 # Show symbols in a symbol_list. Non-recursive
61 define gdb_ptr_list_for_each_show_symbol
62
63 set $my_head = (struct ptr_list *) $arg0
64 set $my_list = $my_head
65
66
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)
73
74 set $my_nr++
75 end
76
77 set $my_list = ($my_list)->next
78 if ($my_list == $my_head)
79 loop_break
80 end
81 end
82 end
83 end
84
85
86 #define gdb_show_statement
87
88
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_RESTRICT)
111 printf "MOD_RESTRICT "
112 end
113 if ($arg0->modifiers & MOD_ATOMIC)
114 printf "MOD_ATOMIC "
115 end
116 if ($arg0->modifiers & MOD_SIGNED)
117 printf "MOD_SIGNED "
118 end
119 if ($arg0->modifiers & MOD_UNSIGNED)
120 printf "MOD_UNSIGNED "
121 end
122 if ($arg0->modifiers & MOD_CHAR)
123 printf "MOD_CHAR "
124 end
125 if ($arg0->modifiers & MOD_SHORT)
126 printf "MOD_SHORT "
127 end
128 if ($arg0->modifiers & MOD_LONG)
129 printf "MOD_LONG "
130 end
131 if ($arg0->modifiers & MOD_LONGLONG)
132 printf "MOD_LONGLONG "
133 end
134 if ($arg0->modifiers & MOD_LONGLONGLONG)
135 printf "MOD_LONGLONGLONG "
136 end
137 if ($arg0->modifiers & MOD_INLINE)
138 printf "MOD_INLINE "
139 end
140 if ($arg0->modifiers & MOD_ADDRESSABLE)
141 printf "MOD_ADDRESSABLE "
142 end
143 if ($arg0->modifiers & MOD_NOCAST)
144 printf "MOD_NOCAST "
145 end
146 if ($arg0->modifiers & MOD_NODEREF)
147 printf "MOD_NODEREF "
148 end
149 if ($arg0->modifiers & MOD_TOPLEVEL)
150 printf "MOD_TOPLEVEL "
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_EXPLICITLY_SIGNED)
165 printf "MOD_EXPLICITLY_SIGNED"
166 end
167 if ($arg0->modifiers & MOD_BITWISE)
168 printf "MOD_BITWISE "
169 end
170 if (!$arg0->modifiers)
171 printf "0"
172 end
173
174 printf ", alignment = %d", $arg0->alignment
175 if ($arg0->as)
176 printf ", address_space = %d", $arg0->as
177 end
178 printf "\n"
179
180
181 set $ntabs++
182 if ($arg0->base_type)
183 gdb_tabs
184 printf "base_type = "
185 gdb_show_symbol($arg0->base_type)
186 end
187
188 set $ntabs--
189
190
191 end
192
193 define gdb_show_symbol
194 printf "(%x) type = ", $arg0
195 output $arg0->type
196 printf ", namespace = "
197 output $arg0->namespace
198 if ($arg0->ident)
199 printf ", ident = %s\n", show_ident($arg0->ident)
200 else
201 printf ", ident = NULL\n"
202 end
203
204 # print "zz"
205
206 gdb_tabs
207 printf "dump:\n"
208 call show_symbol($arg0)
209
210 set $ntabs++
211 if ($arg0->namespace == NS_SYMBOL)
212 gdb_tabs
213 printf "ctype = "
214 gdb_show_ctype(&($arg0->ctype))
215 end
216 set $ntabs--
217 end
218
219
220 # non-recursive
221 define gdb_show_symbols_next_id
222 set $sym = $arg0
223 printf "{\n"
224 set $ntabs++
225 while ($sym)
226 gdb_tabs
227 printf "symbol = "
228 gdb_show_symbol($sym)
229 set $sym = $sym->next_id
230 end
231 set $ntabs--
232 gdb_tabs
233 printf "}\n"
234 end
235
236 define gdb_show_ident
237 if ($arg0)
238 printf "(%p) '%s'\n", $arg0, show_ident($arg0)
239 else
240 printf "NULL\n"
241 end
242
243 if (! $showing_ident)
244 set $showing_ident = 1
245 set $ntabs++
246
247 set $ident = $arg0
248
249 if ($ident->symbols)
250 gdb_tabs
251 printf "symbols = "
252 gdb_show_symbols_next_id($ident->symbols)
253 end
254
255 set $ntabs--
256 set $showing_ident = 0
257 end
258 end
259
260 define gdb_show_token
261 printf "%p: '%s', type = ", $arg0, show_token($arg0)
262 output (enum token_type) ($arg0)->pos.type
263 printf "\n"
264
265 if (! $showing_token)
266 set $showing_token = 1
267 set $ntabs++
268
269 set $token = $arg0
270
271 if ($token->pos.type == TOKEN_IDENT)
272 gdb_tabs
273 printf "ident = "
274 gdb_show_ident $token.ident
275 end
276
277 if ($token->pos.type == TOKEN_MACRO_ARGUMENT)
278 gdb_tabs
279 printf "argnum = %d\n", $token->argnum
280 end
281
282 if ($token->pos.type == TOKEN_SPECIAL)
283 gdb_tabs
284 printf "special = \"%s\"\n", show_special($token.special)
285 end
286
287 set $ntabs--
288 set $showing_token = 0
289 end
290 end
291
292 # non-recursive
293 define gdb_show_tokens
294 set $t = $arg0
295 printf "{\n"
296 set $ntabs++
297 while ($t != &eof_token_entry)
298 gdb_tabs
299 printf "token = "
300 gdb_show_token($t)
301 set $t = ($t)->next
302 end
303 set $ntabs--
304 gdb_tabs
305 printf "}\n"
306 end
307