• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
13set $showing_token = 0
14set $showing_ident = 0
15set $showing_symbol = 0
16
17set $ntabs = 0
18
19define gdb_tabs
20	set $tmp = $ntabs
21	while ($tmp--)
22		printf "\t"
23	end
24end
25
26
27# Ptr list handling
28define 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])
34end
35
36
37# Ptr list looping skeleton
38define 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
58end
59
60# Show symbols in a symbol_list. Non-recursive
61define 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
83end
84
85
86#define gdb_show_statement
87
88
89# Recursive
90define 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_INLINE)
123		printf "MOD_INLINE "
124	end
125	if ($arg0->modifiers & MOD_ADDRESSABLE)
126		printf "MOD_ADDRESSABLE "
127	end
128	if ($arg0->modifiers & MOD_NOCAST)
129		printf "MOD_NOCAST "
130	end
131	if ($arg0->modifiers & MOD_NODEREF)
132		printf "MOD_NODEREF "
133	end
134	if ($arg0->modifiers & MOD_TOPLEVEL)
135		printf "MOD_TOPLEVEL "
136	end
137	if ($arg0->modifiers & MOD_ASSIGNED)
138		printf "MOD_ASSIGNED "
139	end
140	if ($arg0->modifiers & MOD_SAFE)
141		printf "MOD_SAFE "
142	end
143	if ($arg0->modifiers & MOD_USERTYPE)
144		printf "MOD_USERTYPE "
145	end
146	if ($arg0->modifiers & MOD_EXPLICITLY_SIGNED)
147		printf "MOD_EXPLICITLY_SIGNED"
148	end
149	if ($arg0->modifiers & MOD_BITWISE)
150		printf "MOD_BITWISE "
151	end
152	if (!$arg0->modifiers)
153		printf "0"
154	end
155
156	printf ", alignment = %d", $arg0->alignment
157	if ($arg0->as)
158		printf ", address_space = %d", $arg0->as
159	end
160	printf "\n"
161
162
163	set $ntabs++
164	if ($arg0->base_type)
165		gdb_tabs
166		printf "base_type = "
167		gdb_show_symbol($arg0->base_type)
168	end
169
170	set $ntabs--
171
172
173end
174
175define gdb_show_symbol
176	printf "(%x) type = ", $arg0
177	output $arg0->type
178	printf ", namespace = "
179	output $arg0->namespace
180	if ($arg0->ident)
181		printf ", ident = %s\n", show_ident($arg0->ident)
182	else
183		printf ", ident = NULL\n"
184	end
185
186#	print "zz"
187
188	gdb_tabs
189	printf "dump:\n"
190	call show_symbol($arg0)
191
192	set $ntabs++
193	if ($arg0->namespace == NS_SYMBOL)
194		gdb_tabs
195		printf "ctype = "
196		gdb_show_ctype(&($arg0->ctype))
197	end
198	set $ntabs--
199end
200
201
202# non-recursive
203define gdb_show_symbols_next_id
204	set $sym = $arg0
205	printf "{\n"
206	set $ntabs++
207	while ($sym)
208		gdb_tabs
209		printf "symbol = "
210		gdb_show_symbol($sym)
211		set $sym = $sym->next_id
212	end
213	set $ntabs--
214	gdb_tabs
215	printf "}\n"
216end
217
218define gdb_show_ident
219	if ($arg0)
220		printf "(%p) '%s'\n", $arg0, show_ident($arg0)
221	else
222		printf "NULL\n"
223	end
224
225	if (! $showing_ident)
226		set $showing_ident = 1
227		set $ntabs++
228
229		set $ident = $arg0
230
231		if ($ident->symbols)
232			gdb_tabs
233			printf "symbols = "
234			gdb_show_symbols_next_id($ident->symbols)
235		end
236
237		set $ntabs--
238		set $showing_ident = 0
239	end
240end
241
242define gdb_show_token
243	printf "%p: '%s', type = ", $arg0, show_token($arg0)
244	output (enum token_type) ($arg0)->pos.type
245	printf "\n"
246
247	if (! $showing_token)
248		set $showing_token = 1
249		set $ntabs++
250
251		set $token = $arg0
252
253		if ($token->pos.type == TOKEN_IDENT)
254			gdb_tabs
255			printf "ident = "
256			gdb_show_ident $token.ident
257		end
258
259		if ($token->pos.type == TOKEN_MACRO_ARGUMENT)
260			gdb_tabs
261			printf "argnum = %d\n", $token->argnum
262		end
263
264		if ($token->pos.type == TOKEN_SPECIAL)
265			gdb_tabs
266			printf "special = \"%s\"\n", show_special($token.special)
267		end
268
269		set $ntabs--
270		set $showing_token = 0
271	end
272end
273
274# non-recursive
275define gdb_show_tokens
276	set $t = $arg0
277	printf "{\n"
278	set $ntabs++
279	while ($t != &eof_token_entry)
280		gdb_tabs
281		printf "token = "
282		gdb_show_token($t)
283		set $t = ($t)->next
284	end
285	set $ntabs--
286	gdb_tabs
287	printf "}\n"
288end
289
290