gdb/
[deliverable/binutils-gdb.git] / gdb / mi / mi-cmd-stack.c
1 /* MI Command Set - stack commands.
2 Copyright (C) 2000-2013 Free Software Foundation, Inc.
3 Contributed by Cygnus Solutions (a Red Hat company).
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20 #include "defs.h"
21 #include "target.h"
22 #include "frame.h"
23 #include "value.h"
24 #include "mi-cmds.h"
25 #include "ui-out.h"
26 #include "symtab.h"
27 #include "block.h"
28 #include "stack.h"
29 #include "dictionary.h"
30 #include "gdb_string.h"
31 #include "language.h"
32 #include "valprint.h"
33 #include "exceptions.h"
34 #include "utils.h"
35 #include "mi-getopt.h"
36 #include "python/python.h"
37 #include <ctype.h>
38 #include "mi-parse.h"
39
40 enum what_to_list { locals, arguments, all };
41
42 static void list_args_or_locals (enum what_to_list what,
43 enum print_values values,
44 struct frame_info *fi);
45
46 /* True if we want to allow Python-based frame filters. */
47 static int frame_filters = 0;
48
49 void
50 mi_cmd_enable_frame_filters (char *command, char **argv, int argc)
51 {
52 if (argc != 0)
53 error (_("-enable-frame-filters: no arguments allowed"));
54 frame_filters = 1;
55 }
56
57 /* Parse the --no-frame-filters option in commands where we cannot use
58 mi_getopt. */
59 static int
60 parse_no_frames_option (const char *arg)
61 {
62 if (arg && (strcmp (arg, "--no-frame-filters") == 0))
63 return 1;
64
65 return 0;
66 }
67
68 /* Print a list of the stack frames. Args can be none, in which case
69 we want to print the whole backtrace, or a pair of numbers
70 specifying the frame numbers at which to start and stop the
71 display. If the two numbers are equal, a single frame will be
72 displayed. */
73
74 void
75 mi_cmd_stack_list_frames (char *command, char **argv, int argc)
76 {
77 int frame_low;
78 int frame_high;
79 int i;
80 struct cleanup *cleanup_stack;
81 struct frame_info *fi;
82 enum py_bt_status result = PY_BT_ERROR;
83 int raw_arg = 0;
84 int oind = 0;
85 enum opt
86 {
87 NO_FRAME_FILTERS
88 };
89 static const struct mi_opt opts[] =
90 {
91 {"-no-frame-filters", NO_FRAME_FILTERS, 0},
92 { 0, 0, 0 }
93 };
94
95 /* Parse arguments. In this instance we are just looking for
96 --no-frame-filters. */
97 while (1)
98 {
99 char *oarg;
100 int opt = mi_getopt ("-stack-list-frames", argc, argv,
101 opts, &oind, &oarg);
102 if (opt < 0)
103 break;
104 switch ((enum opt) opt)
105 {
106 case NO_FRAME_FILTERS:
107 raw_arg = oind;
108 break;
109 }
110 }
111
112 /* After the last option is parsed, there should either be low -
113 high range, or no further arguments. */
114 if ((argc - oind != 0) && (argc - oind != 2))
115 error (_("-stack-list-frames: Usage: [--no-frame-filters] [FRAME_LOW FRAME_HIGH]"));
116
117 /* If there is a range, set it. */
118 if (argc - oind == 2)
119 {
120 frame_low = atoi (argv[0 + oind]);
121 frame_high = atoi (argv[1 + oind]);
122 }
123 else
124 {
125 /* Called with no arguments, it means we want the whole
126 backtrace. */
127 frame_low = -1;
128 frame_high = -1;
129 }
130
131 /* Let's position fi on the frame at which to start the
132 display. Could be the innermost frame if the whole stack needs
133 displaying, or if frame_low is 0. */
134 for (i = 0, fi = get_current_frame ();
135 fi && i < frame_low;
136 i++, fi = get_prev_frame (fi));
137
138 if (fi == NULL)
139 error (_("-stack-list-frames: Not enough frames in stack."));
140
141 cleanup_stack = make_cleanup_ui_out_list_begin_end (current_uiout, "stack");
142
143 if (! raw_arg && frame_filters)
144 {
145 int flags = PRINT_LEVEL | PRINT_FRAME_INFO;
146 int py_frame_low = frame_low;
147
148 /* We cannot pass -1 to frame_low, as that would signify a
149 relative backtrace from the tail of the stack. So, in the case
150 of frame_low == -1, assign and increment it. */
151 if (py_frame_low == -1)
152 py_frame_low++;
153
154 result = apply_frame_filter (get_current_frame (), flags,
155 NO_VALUES, current_uiout,
156 py_frame_low, frame_high);
157 }
158
159 /* Run the inbuilt backtrace if there are no filters registered, or
160 if "--no-frame-filters" has been specified from the command. */
161 if (! frame_filters || raw_arg || result == PY_BT_NO_FILTERS)
162 {
163 /* Now let's print the frames up to frame_high, or until there are
164 frames in the stack. */
165 for (;
166 fi && (i <= frame_high || frame_high == -1);
167 i++, fi = get_prev_frame (fi))
168 {
169 QUIT;
170 /* Print the location and the address always, even for level 0.
171 If args is 0, don't print the arguments. */
172 print_frame_info (fi, 1, LOC_AND_ADDRESS, 0 /* args */ );
173 }
174 }
175
176 do_cleanups (cleanup_stack);
177 }
178
179 void
180 mi_cmd_stack_info_depth (char *command, char **argv, int argc)
181 {
182 int frame_high;
183 int i;
184 struct frame_info *fi;
185
186 if (argc > 1)
187 error (_("-stack-info-depth: Usage: [MAX_DEPTH]"));
188
189 if (argc == 1)
190 frame_high = atoi (argv[0]);
191 else
192 /* Called with no arguments, it means we want the real depth of
193 the stack. */
194 frame_high = -1;
195
196 for (i = 0, fi = get_current_frame ();
197 fi && (i < frame_high || frame_high == -1);
198 i++, fi = get_prev_frame (fi))
199 QUIT;
200
201 ui_out_field_int (current_uiout, "depth", i);
202 }
203
204 /* Print a list of the locals for the current frame. With argument of
205 0, print only the names, with argument of 1 print also the
206 values. */
207
208 void
209 mi_cmd_stack_list_locals (char *command, char **argv, int argc)
210 {
211 struct frame_info *frame;
212 int raw_arg = 0;
213 enum py_bt_status result = PY_BT_ERROR;
214 int print_value;
215 int oind = 0;
216
217 if (argc > 1)
218 {
219 int i;
220 enum opt
221 {
222 NO_FRAME_FILTERS
223 };
224 static const struct mi_opt opts[] =
225 {
226 {"-no-frame-filters", NO_FRAME_FILTERS, 0},
227 { 0, 0, 0 }
228 };
229
230 while (1)
231 {
232 char *oarg;
233 /* Don't parse 'print-values' as an option. */
234 int opt = mi_getopt ("-stack-list-locals", argc - 1, argv,
235 opts, &oind, &oarg);
236
237 if (opt < 0)
238 break;
239 switch ((enum opt) opt)
240 {
241 case NO_FRAME_FILTERS:
242 raw_arg = oind;
243 break;
244 }
245 }
246 }
247
248 /* After the last option is parsed, there should be only
249 'print-values'. */
250 if (argc - oind != 1)
251 error (_("-stack-list-locals: Usage: [--no-frame-filters] PRINT_VALUES"));
252
253 frame = get_selected_frame (NULL);
254 print_value = mi_parse_print_values (argv[oind]);
255
256 if (! raw_arg && frame_filters)
257 {
258 int flags = PRINT_LEVEL | PRINT_LOCALS;
259
260 result = apply_frame_filter (frame, flags, print_value,
261 current_uiout, 0, 0);
262 }
263
264 /* Run the inbuilt backtrace if there are no filters registered, or
265 if "--no-frame-filters" has been specified from the command. */
266 if (! frame_filters || raw_arg || result == PY_BT_NO_FILTERS)
267 {
268 list_args_or_locals (locals, print_value, frame);
269 }
270 }
271
272 /* Print a list of the arguments for the current frame. With argument
273 of 0, print only the names, with argument of 1 print also the
274 values. */
275
276 void
277 mi_cmd_stack_list_args (char *command, char **argv, int argc)
278 {
279 int frame_low;
280 int frame_high;
281 int i;
282 struct frame_info *fi;
283 struct cleanup *cleanup_stack_args;
284 enum print_values print_values;
285 struct ui_out *uiout = current_uiout;
286 int raw_arg = 0;
287 enum py_bt_status result = PY_BT_ERROR;
288
289 if (argc > 0)
290 raw_arg = parse_no_frames_option (argv[0]);
291
292 if (argc < 1 || (argc > 3 && ! raw_arg) || (argc == 2 && ! raw_arg))
293 error (_("-stack-list-arguments: Usage: " \
294 "[--no-frame-filters] PRINT_VALUES [FRAME_LOW FRAME_HIGH]"));
295
296 if (argc >= 3)
297 {
298 frame_low = atoi (argv[1 + raw_arg]);
299 frame_high = atoi (argv[2 + raw_arg]);
300 }
301 else
302 {
303 /* Called with no arguments, it means we want args for the whole
304 backtrace. */
305 frame_low = -1;
306 frame_high = -1;
307 }
308
309 print_values = mi_parse_print_values (argv[raw_arg]);
310
311 /* Let's position fi on the frame at which to start the
312 display. Could be the innermost frame if the whole stack needs
313 displaying, or if frame_low is 0. */
314 for (i = 0, fi = get_current_frame ();
315 fi && i < frame_low;
316 i++, fi = get_prev_frame (fi));
317
318 if (fi == NULL)
319 error (_("-stack-list-arguments: Not enough frames in stack."));
320
321 cleanup_stack_args
322 = make_cleanup_ui_out_list_begin_end (uiout, "stack-args");
323
324 if (! raw_arg && frame_filters)
325 {
326 int flags = PRINT_LEVEL | PRINT_ARGS;
327 int py_frame_low = frame_low;
328
329 /* We cannot pass -1 to frame_low, as that would signify a
330 relative backtrace from the tail of the stack. So, in the case
331 of frame_low == -1, assign and increment it. */
332 if (py_frame_low == -1)
333 py_frame_low++;
334
335 result = apply_frame_filter (get_current_frame (), flags,
336 print_values, current_uiout,
337 py_frame_low, frame_high);
338 }
339
340 /* Run the inbuilt backtrace if there are no filters registered, or
341 if "--no-frame-filters" has been specified from the command. */
342 if (! frame_filters || raw_arg || result == PY_BT_NO_FILTERS)
343 {
344 /* Now let's print the frames up to frame_high, or until there are
345 frames in the stack. */
346 for (;
347 fi && (i <= frame_high || frame_high == -1);
348 i++, fi = get_prev_frame (fi))
349 {
350 struct cleanup *cleanup_frame;
351
352 QUIT;
353 cleanup_frame = make_cleanup_ui_out_tuple_begin_end (uiout, "frame");
354 ui_out_field_int (uiout, "level", i);
355 list_args_or_locals (arguments, print_values, fi);
356 do_cleanups (cleanup_frame);
357 }
358 }
359 do_cleanups (cleanup_stack_args);
360 }
361
362 /* Print a list of the local variables (including arguments) for the
363 current frame. ARGC must be 1 and ARGV[0] specify if only the names,
364 or both names and values of the variables must be printed. See
365 parse_print_value for possible values. */
366
367 void
368 mi_cmd_stack_list_variables (char *command, char **argv, int argc)
369 {
370 struct frame_info *frame;
371 int raw_arg = 0;
372 enum py_bt_status result = PY_BT_ERROR;
373 int print_value;
374 int oind = 0;
375
376 if (argc > 1)
377 {
378 int i;
379 enum opt
380 {
381 NO_FRAME_FILTERS
382 };
383 static const struct mi_opt opts[] =
384 {
385 {"-no-frame-filters", NO_FRAME_FILTERS, 0},
386 { 0, 0, 0 }
387 };
388
389 while (1)
390 {
391 char *oarg;
392 /* Don't parse 'print-values' as an option. */
393 int opt = mi_getopt ("-stack-list-variables", argc - 1,
394 argv, opts, &oind, &oarg);
395 if (opt < 0)
396 break;
397 switch ((enum opt) opt)
398 {
399 case NO_FRAME_FILTERS:
400 raw_arg = oind;
401 break;
402 }
403 }
404 }
405
406 /* After the last option is parsed, there should be only
407 'print-values'. */
408 if (argc - oind != 1)
409 error (_("-stack-list-variables: Usage: " \
410 "[--no-frame-filters] PRINT_VALUES"));
411
412 frame = get_selected_frame (NULL);
413 print_value = mi_parse_print_values (argv[oind]);
414
415 if (! raw_arg && frame_filters)
416 {
417 int flags = PRINT_LEVEL | PRINT_ARGS | PRINT_LOCALS;
418
419 result = apply_frame_filter (frame, flags, print_value,
420 current_uiout, 0, 0);
421 }
422
423 /* Run the inbuilt backtrace if there are no filters registered, or
424 if "--no-frame-filters" has been specified from the command. */
425 if (! frame_filters || raw_arg || result == PY_BT_NO_FILTERS)
426 {
427 list_args_or_locals (all, print_value, frame);
428 }
429 }
430
431 /* Print single local or argument. ARG must be already read in. For
432 WHAT and VALUES see list_args_or_locals.
433
434 Errors are printed as if they would be the parameter value. Use
435 zeroed ARG iff it should not be printed according to VALUES. */
436
437 static void
438 list_arg_or_local (const struct frame_arg *arg, enum what_to_list what,
439 enum print_values values)
440 {
441 struct cleanup *old_chain;
442 struct ui_out *uiout = current_uiout;
443 struct ui_file *stb;
444
445 stb = mem_fileopen ();
446 old_chain = make_cleanup_ui_file_delete (stb);
447
448 gdb_assert (!arg->val || !arg->error);
449 gdb_assert ((values == PRINT_NO_VALUES && arg->val == NULL
450 && arg->error == NULL)
451 || values == PRINT_SIMPLE_VALUES
452 || (values == PRINT_ALL_VALUES
453 && (arg->val != NULL || arg->error != NULL)));
454 gdb_assert (arg->entry_kind == print_entry_values_no
455 || (arg->entry_kind == print_entry_values_only
456 && (arg->val || arg->error)));
457
458 if (values != PRINT_NO_VALUES || what == all)
459 make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
460
461 fputs_filtered (SYMBOL_PRINT_NAME (arg->sym), stb);
462 if (arg->entry_kind == print_entry_values_only)
463 fputs_filtered ("@entry", stb);
464 ui_out_field_stream (uiout, "name", stb);
465
466 if (what == all && SYMBOL_IS_ARGUMENT (arg->sym))
467 ui_out_field_int (uiout, "arg", 1);
468
469 if (values == PRINT_SIMPLE_VALUES)
470 {
471 check_typedef (arg->sym->type);
472 type_print (arg->sym->type, "", stb, -1);
473 ui_out_field_stream (uiout, "type", stb);
474 }
475
476 if (arg->val || arg->error)
477 {
478 volatile struct gdb_exception except;
479
480 if (arg->error)
481 except.message = arg->error;
482 else
483 {
484 /* TRY_CATCH has two statements, wrap it in a block. */
485
486 TRY_CATCH (except, RETURN_MASK_ERROR)
487 {
488 struct value_print_options opts;
489
490 get_no_prettyformat_print_options (&opts);
491 opts.deref_ref = 1;
492 common_val_print (arg->val, stb, 0, &opts,
493 language_def (SYMBOL_LANGUAGE (arg->sym)));
494 }
495 }
496 if (except.message)
497 fprintf_filtered (stb, _("<error reading variable: %s>"),
498 except.message);
499 ui_out_field_stream (uiout, "value", stb);
500 }
501
502 do_cleanups (old_chain);
503 }
504
505 /* Print a list of the objects for the frame FI in a certain form,
506 which is determined by VALUES. The objects can be locals,
507 arguments or both, which is determined by WHAT. */
508
509 static void
510 list_args_or_locals (enum what_to_list what, enum print_values values,
511 struct frame_info *fi)
512 {
513 struct block *block;
514 struct symbol *sym;
515 struct block_iterator iter;
516 struct cleanup *cleanup_list;
517 struct type *type;
518 char *name_of_result;
519 struct ui_out *uiout = current_uiout;
520
521 block = get_frame_block (fi, 0);
522
523 switch (what)
524 {
525 case locals:
526 name_of_result = "locals";
527 break;
528 case arguments:
529 name_of_result = "args";
530 break;
531 case all:
532 name_of_result = "variables";
533 break;
534 default:
535 internal_error (__FILE__, __LINE__,
536 "unexpected what_to_list: %d", (int) what);
537 }
538
539 cleanup_list = make_cleanup_ui_out_list_begin_end (uiout, name_of_result);
540
541 while (block != 0)
542 {
543 ALL_BLOCK_SYMBOLS (block, iter, sym)
544 {
545 int print_me = 0;
546
547 switch (SYMBOL_CLASS (sym))
548 {
549 default:
550 case LOC_UNDEF: /* catches errors */
551 case LOC_CONST: /* constant */
552 case LOC_TYPEDEF: /* local typedef */
553 case LOC_LABEL: /* local label */
554 case LOC_BLOCK: /* local function */
555 case LOC_CONST_BYTES: /* loc. byte seq. */
556 case LOC_UNRESOLVED: /* unresolved static */
557 case LOC_OPTIMIZED_OUT: /* optimized out */
558 print_me = 0;
559 break;
560
561 case LOC_ARG: /* argument */
562 case LOC_REF_ARG: /* reference arg */
563 case LOC_REGPARM_ADDR: /* indirect register arg */
564 case LOC_LOCAL: /* stack local */
565 case LOC_STATIC: /* static */
566 case LOC_REGISTER: /* register */
567 case LOC_COMPUTED: /* computed location */
568 if (what == all)
569 print_me = 1;
570 else if (what == locals)
571 print_me = !SYMBOL_IS_ARGUMENT (sym);
572 else
573 print_me = SYMBOL_IS_ARGUMENT (sym);
574 break;
575 }
576 if (print_me)
577 {
578 struct symbol *sym2;
579 struct frame_arg arg, entryarg;
580
581 if (SYMBOL_IS_ARGUMENT (sym))
582 sym2 = lookup_symbol (SYMBOL_LINKAGE_NAME (sym),
583 block, VAR_DOMAIN,
584 NULL);
585 else
586 sym2 = sym;
587 gdb_assert (sym2 != NULL);
588
589 memset (&arg, 0, sizeof (arg));
590 arg.sym = sym2;
591 arg.entry_kind = print_entry_values_no;
592 memset (&entryarg, 0, sizeof (entryarg));
593 entryarg.sym = sym2;
594 entryarg.entry_kind = print_entry_values_no;
595
596 switch (values)
597 {
598 case PRINT_SIMPLE_VALUES:
599 type = check_typedef (sym2->type);
600 if (TYPE_CODE (type) != TYPE_CODE_ARRAY
601 && TYPE_CODE (type) != TYPE_CODE_STRUCT
602 && TYPE_CODE (type) != TYPE_CODE_UNION)
603 {
604 case PRINT_ALL_VALUES:
605 if (SYMBOL_IS_ARGUMENT (sym))
606 read_frame_arg (sym2, fi, &arg, &entryarg);
607 else
608 read_frame_local (sym2, fi, &arg);
609 }
610 break;
611 }
612
613 if (arg.entry_kind != print_entry_values_only)
614 list_arg_or_local (&arg, what, values);
615 if (entryarg.entry_kind != print_entry_values_no)
616 list_arg_or_local (&entryarg, what, values);
617 xfree (arg.error);
618 xfree (entryarg.error);
619 }
620 }
621
622 if (BLOCK_FUNCTION (block))
623 break;
624 else
625 block = BLOCK_SUPERBLOCK (block);
626 }
627 do_cleanups (cleanup_list);
628 }
629
630 void
631 mi_cmd_stack_select_frame (char *command, char **argv, int argc)
632 {
633 if (argc == 0 || argc > 1)
634 error (_("-stack-select-frame: Usage: FRAME_SPEC"));
635
636 select_frame_command (argv[0], 1 /* not used */ );
637 }
638
639 void
640 mi_cmd_stack_info_frame (char *command, char **argv, int argc)
641 {
642 if (argc > 0)
643 error (_("-stack-info-frame: No arguments allowed"));
644
645 print_frame_info (get_selected_frame (NULL), 1, LOC_AND_ADDRESS, 0);
646 }
This page took 0.070173 seconds and 5 git commands to generate.