Change tui_show_symtab_source to be a method
[external/binutils.git] / gdb / mi / mi-cmd-stack.c
1 /* MI Command Set - stack commands.
2    Copyright (C) 2000-2019 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 "language.h"
31 #include "valprint.h"
32 #include "utils.h"
33 #include "mi-getopt.h"
34 #include "extension.h"
35 #include <ctype.h>
36 #include "mi-parse.h"
37 #include "gdbsupport/gdb_optional.h"
38 #include "safe-ctype.h"
39
40 enum what_to_list { locals, arguments, all };
41
42 static void list_args_or_locals (const frame_print_options &fp_opts,
43                                  enum what_to_list what,
44                                  enum print_values values,
45                                  struct frame_info *fi,
46                                  int skip_unavailable);
47
48 /* True if we want to allow Python-based frame filters.  */
49 static int frame_filters = 0;
50
51 void
52 mi_cmd_enable_frame_filters (const char *command, char **argv, int argc)
53 {
54   if (argc != 0)
55     error (_("-enable-frame-filters: no arguments allowed"));
56   frame_filters = 1;
57 }
58
59 /* Like apply_ext_lang_frame_filter, but take a print_values */
60
61 static enum ext_lang_bt_status
62 mi_apply_ext_lang_frame_filter (struct frame_info *frame,
63                                 frame_filter_flags flags,
64                                 enum print_values print_values,
65                                 struct ui_out *out,
66                                 int frame_low, int frame_high)
67 {
68   /* ext_lang_frame_args's MI options are compatible with MI print
69      values.  */
70   return apply_ext_lang_frame_filter (frame, flags,
71                                       (enum ext_lang_frame_args) print_values,
72                                       out,
73                                       frame_low, frame_high);
74 }
75
76 /* Print a list of the stack frames.  Args can be none, in which case
77    we want to print the whole backtrace, or a pair of numbers
78    specifying the frame numbers at which to start and stop the
79    display.  If the two numbers are equal, a single frame will be
80    displayed.  */
81
82 void
83 mi_cmd_stack_list_frames (const char *command, char **argv, int argc)
84 {
85   int frame_low;
86   int frame_high;
87   int i;
88   struct frame_info *fi;
89   enum ext_lang_bt_status result = EXT_LANG_BT_ERROR;
90   int raw_arg = 0;
91   int oind = 0;
92   enum opt
93     {
94       NO_FRAME_FILTERS
95     };
96   static const struct mi_opt opts[] =
97     {
98       {"-no-frame-filters", NO_FRAME_FILTERS, 0},
99       { 0, 0, 0 }
100     };
101
102   /* Parse arguments.  In this instance we are just looking for
103      --no-frame-filters.  */
104   while (1)
105     {
106       char *oarg;
107       int opt = mi_getopt ("-stack-list-frames", argc, argv,
108                            opts, &oind, &oarg);
109       if (opt < 0)
110         break;
111       switch ((enum opt) opt)
112         {
113         case NO_FRAME_FILTERS:
114           raw_arg = oind;
115           break;
116         }
117     }
118
119   /* After the last option is parsed, there should either be low -
120      high range, or no further arguments.  */
121   if ((argc - oind != 0) && (argc - oind != 2))
122     error (_("-stack-list-frames: Usage: [--no-frame-filters] [FRAME_LOW FRAME_HIGH]"));
123
124   /* If there is a range, set it.  */
125   if (argc - oind == 2)
126     {
127       frame_low = atoi (argv[0 + oind]);
128       frame_high = atoi (argv[1 + oind]);
129     }
130   else
131     {
132       /* Called with no arguments, it means we want the whole
133          backtrace.  */
134       frame_low = -1;
135       frame_high = -1;
136     }
137
138   /* Let's position fi on the frame at which to start the
139      display. Could be the innermost frame if the whole stack needs
140      displaying, or if frame_low is 0.  */
141   for (i = 0, fi = get_current_frame ();
142        fi && i < frame_low;
143        i++, fi = get_prev_frame (fi));
144
145   if (fi == NULL)
146     error (_("-stack-list-frames: Not enough frames in stack."));
147
148   ui_out_emit_list list_emitter (current_uiout, "stack");
149
150   if (! raw_arg && frame_filters)
151     {
152       frame_filter_flags flags = PRINT_LEVEL | PRINT_FRAME_INFO;
153       int py_frame_low = frame_low;
154
155       /* We cannot pass -1 to frame_low, as that would signify a
156       relative backtrace from the tail of the stack.  So, in the case
157       of frame_low == -1, assign and increment it.  */
158       if (py_frame_low == -1)
159         py_frame_low++;
160
161       result = apply_ext_lang_frame_filter (get_current_frame (), flags,
162                                             NO_VALUES,  current_uiout,
163                                             py_frame_low, frame_high);
164     }
165
166   /* Run the inbuilt backtrace if there are no filters registered, or
167      if "--no-frame-filters" has been specified from the command.  */
168   if (! frame_filters || raw_arg  || result == EXT_LANG_BT_NO_FILTERS)
169     {
170       /* Now let's print the frames up to frame_high, or until there are
171          frames in the stack.  */
172       for (;
173            fi && (i <= frame_high || frame_high == -1);
174            i++, fi = get_prev_frame (fi))
175         {
176           QUIT;
177           /* Print the location and the address always, even for level 0.
178              If args is 0, don't print the arguments.  */
179           print_frame_info (user_frame_print_options,
180                             fi, 1, LOC_AND_ADDRESS, 0 /* args */, 0);
181         }
182     }
183 }
184
185 void
186 mi_cmd_stack_info_depth (const char *command, char **argv, int argc)
187 {
188   int frame_high;
189   int i;
190   struct frame_info *fi;
191
192   if (argc > 1)
193     error (_("-stack-info-depth: Usage: [MAX_DEPTH]"));
194
195   if (argc == 1)
196     frame_high = atoi (argv[0]);
197   else
198     /* Called with no arguments, it means we want the real depth of
199        the stack.  */
200     frame_high = -1;
201
202   for (i = 0, fi = get_current_frame ();
203        fi && (i < frame_high || frame_high == -1);
204        i++, fi = get_prev_frame (fi))
205     QUIT;
206
207   current_uiout->field_signed ("depth", i);
208 }
209
210 /* Print a list of the locals for the current frame.  With argument of
211    0, print only the names, with argument of 1 print also the
212    values.  */
213
214 void
215 mi_cmd_stack_list_locals (const char *command, char **argv, int argc)
216 {
217   struct frame_info *frame;
218   int raw_arg = 0;
219   enum ext_lang_bt_status result = EXT_LANG_BT_ERROR;
220   enum print_values print_value;
221   int oind = 0;
222   int skip_unavailable = 0;
223
224   if (argc > 1)
225     {
226       enum opt
227       {
228         NO_FRAME_FILTERS,
229         SKIP_UNAVAILABLE,
230       };
231       static const struct mi_opt opts[] =
232         {
233           {"-no-frame-filters", NO_FRAME_FILTERS, 0},
234           {"-skip-unavailable", SKIP_UNAVAILABLE, 0},
235           { 0, 0, 0 }
236         };
237
238       while (1)
239         {
240           char *oarg;
241           /* Don't parse 'print-values' as an option.  */
242           int opt = mi_getopt ("-stack-list-locals", argc - 1, argv,
243                                opts, &oind, &oarg);
244
245           if (opt < 0)
246             break;
247           switch ((enum opt) opt)
248             {
249             case NO_FRAME_FILTERS:
250               raw_arg = oind;
251               break;
252             case SKIP_UNAVAILABLE:
253               skip_unavailable = 1;
254               break;
255             }
256         }
257     }
258
259   /* After the last option is parsed, there should be only
260      'print-values'.  */
261   if (argc - oind != 1)
262     error (_("-stack-list-locals: Usage: [--no-frame-filters] "
263              "[--skip-unavailable] PRINT_VALUES"));
264
265   frame = get_selected_frame (NULL);
266   print_value = mi_parse_print_values (argv[oind]);
267
268    if (! raw_arg && frame_filters)
269      {
270        frame_filter_flags flags = PRINT_LEVEL | PRINT_LOCALS;
271
272        result = mi_apply_ext_lang_frame_filter (frame, flags, print_value,
273                                                 current_uiout, 0, 0);
274      }
275
276    /* Run the inbuilt backtrace if there are no filters registered, or
277       if "--no-frame-filters" has been specified from the command.  */
278    if (! frame_filters || raw_arg  || result == EXT_LANG_BT_NO_FILTERS)
279      {
280        list_args_or_locals (user_frame_print_options,
281                             locals, print_value, frame,
282                             skip_unavailable);
283      }
284 }
285
286 /* Print a list of the arguments for the current frame.  With argument
287    of 0, print only the names, with argument of 1 print also the
288    values.  */
289
290 void
291 mi_cmd_stack_list_args (const char *command, char **argv, int argc)
292 {
293   int frame_low;
294   int frame_high;
295   int i;
296   struct frame_info *fi;
297   enum print_values print_values;
298   struct ui_out *uiout = current_uiout;
299   int raw_arg = 0;
300   int oind = 0;
301   int skip_unavailable = 0;
302   enum ext_lang_bt_status result = EXT_LANG_BT_ERROR;
303   enum opt
304   {
305     NO_FRAME_FILTERS,
306     SKIP_UNAVAILABLE,
307   };
308   static const struct mi_opt opts[] =
309     {
310       {"-no-frame-filters", NO_FRAME_FILTERS, 0},
311       {"-skip-unavailable", SKIP_UNAVAILABLE, 0},
312       { 0, 0, 0 }
313     };
314
315   while (1)
316     {
317       char *oarg;
318       int opt = mi_getopt_allow_unknown ("-stack-list-args", argc, argv,
319                                          opts, &oind, &oarg);
320
321       if (opt < 0)
322         break;
323       switch ((enum opt) opt)
324         {
325         case NO_FRAME_FILTERS:
326           raw_arg = oind;
327           break;
328         case SKIP_UNAVAILABLE:
329           skip_unavailable = 1;
330           break;
331         }
332     }
333
334   if (argc - oind != 1 && argc - oind != 3)
335     error (_("-stack-list-arguments: Usage: "   \
336              "[--no-frame-filters] [--skip-unavailable] "
337              "PRINT_VALUES [FRAME_LOW FRAME_HIGH]"));
338
339   if (argc - oind == 3)
340     {
341       frame_low = atoi (argv[1 + oind]);
342       frame_high = atoi (argv[2 + oind]);
343     }
344   else
345     {
346       /* Called with no arguments, it means we want args for the whole
347          backtrace.  */
348       frame_low = -1;
349       frame_high = -1;
350     }
351
352   print_values = mi_parse_print_values (argv[oind]);
353
354   /* Let's position fi on the frame at which to start the
355      display. Could be the innermost frame if the whole stack needs
356      displaying, or if frame_low is 0.  */
357   for (i = 0, fi = get_current_frame ();
358        fi && i < frame_low;
359        i++, fi = get_prev_frame (fi));
360
361   if (fi == NULL)
362     error (_("-stack-list-arguments: Not enough frames in stack."));
363
364   ui_out_emit_list list_emitter (uiout, "stack-args");
365
366   if (! raw_arg && frame_filters)
367     {
368       frame_filter_flags flags = PRINT_LEVEL | PRINT_ARGS;
369       int py_frame_low = frame_low;
370
371       /* We cannot pass -1 to frame_low, as that would signify a
372       relative backtrace from the tail of the stack.  So, in the case
373       of frame_low == -1, assign and increment it.  */
374       if (py_frame_low == -1)
375         py_frame_low++;
376
377       result = mi_apply_ext_lang_frame_filter (get_current_frame (), flags,
378                                                print_values, current_uiout,
379                                                py_frame_low, frame_high);
380     }
381
382      /* Run the inbuilt backtrace if there are no filters registered, or
383       if "--no-frame-filters" has been specified from the command.  */
384    if (! frame_filters || raw_arg  || result == EXT_LANG_BT_NO_FILTERS)
385      {
386       /* Now let's print the frames up to frame_high, or until there are
387          frames in the stack.  */
388       for (;
389            fi && (i <= frame_high || frame_high == -1);
390            i++, fi = get_prev_frame (fi))
391         {
392           QUIT;
393           ui_out_emit_tuple tuple_emitter (uiout, "frame");
394           uiout->field_signed ("level", i);
395           list_args_or_locals (user_frame_print_options,
396                                arguments, print_values, fi, skip_unavailable);
397         }
398     }
399 }
400
401 /* Print a list of the local variables (including arguments) for the 
402    current frame.  ARGC must be 1 and ARGV[0] specify if only the names,
403    or both names and values of the variables must be printed.  See 
404    parse_print_value for possible values.  */
405
406 void
407 mi_cmd_stack_list_variables (const char *command, char **argv, int argc)
408 {
409   struct frame_info *frame;
410   int raw_arg = 0;
411   enum ext_lang_bt_status result = EXT_LANG_BT_ERROR;
412   enum print_values print_value;
413   int oind = 0;
414   int skip_unavailable = 0;
415
416   if (argc > 1)
417     {
418       enum opt
419       {
420         NO_FRAME_FILTERS,
421         SKIP_UNAVAILABLE,
422       };
423       static const struct mi_opt opts[] =
424         {
425           {"-no-frame-filters", NO_FRAME_FILTERS, 0},
426           {"-skip-unavailable", SKIP_UNAVAILABLE, 0},
427           { 0, 0, 0 }
428         };
429
430       while (1)
431         {
432           char *oarg;
433           /* Don't parse 'print-values' as an option.  */
434           int opt = mi_getopt ("-stack-list-variables", argc - 1,
435                                argv, opts, &oind, &oarg);
436           if (opt < 0)
437             break;
438           switch ((enum opt) opt)
439             {
440             case NO_FRAME_FILTERS:
441               raw_arg = oind;
442               break;
443             case SKIP_UNAVAILABLE:
444               skip_unavailable = 1;
445               break;
446             }
447         }
448     }
449
450   /* After the last option is parsed, there should be only
451      'print-values'.  */
452   if (argc - oind != 1)
453     error (_("-stack-list-variables: Usage: [--no-frame-filters] " \
454              "[--skip-unavailable] PRINT_VALUES"));
455
456    frame = get_selected_frame (NULL);
457    print_value = mi_parse_print_values (argv[oind]);
458
459    if (! raw_arg && frame_filters)
460      {
461        frame_filter_flags flags = PRINT_LEVEL | PRINT_ARGS | PRINT_LOCALS;
462
463        result = mi_apply_ext_lang_frame_filter (frame, flags,
464                                                 print_value,
465                                                 current_uiout, 0, 0);
466      }
467
468    /* Run the inbuilt backtrace if there are no filters registered, or
469       if "--no-frame-filters" has been specified from the command.  */
470    if (! frame_filters || raw_arg  || result == EXT_LANG_BT_NO_FILTERS)
471      {
472        list_args_or_locals (user_frame_print_options,
473                             all, print_value, frame,
474                             skip_unavailable);
475      }
476 }
477
478 /* Print single local or argument.  ARG must be already read in.  For
479    WHAT and VALUES see list_args_or_locals.
480
481    Errors are printed as if they would be the parameter value.  Use
482    zeroed ARG iff it should not be printed according to VALUES.  If
483    SKIP_UNAVAILABLE is true, only print ARG if it is available.  */
484
485 static void
486 list_arg_or_local (const struct frame_arg *arg, enum what_to_list what,
487                    enum print_values values, int skip_unavailable)
488 {
489   struct ui_out *uiout = current_uiout;
490
491   gdb_assert (!arg->val || !arg->error);
492   gdb_assert ((values == PRINT_NO_VALUES && arg->val == NULL
493                && arg->error == NULL)
494               || values == PRINT_SIMPLE_VALUES
495               || (values == PRINT_ALL_VALUES
496                   && (arg->val != NULL || arg->error != NULL)));
497   gdb_assert (arg->entry_kind == print_entry_values_no
498               || (arg->entry_kind == print_entry_values_only
499                   && (arg->val || arg->error)));
500
501   if (skip_unavailable && arg->val != NULL
502       && (value_entirely_unavailable (arg->val)
503           /* A scalar object that does not have all bits available is
504              also considered unavailable, because all bits contribute
505              to its representation.  */
506           || (val_print_scalar_type_p (value_type (arg->val))
507               && !value_bytes_available (arg->val,
508                                          value_embedded_offset (arg->val),
509                                          TYPE_LENGTH (value_type (arg->val))))))
510     return;
511
512   gdb::optional<ui_out_emit_tuple> tuple_emitter;
513   if (values != PRINT_NO_VALUES || what == all)
514     tuple_emitter.emplace (uiout, nullptr);
515
516   string_file stb;
517
518   stb.puts (SYMBOL_PRINT_NAME (arg->sym));
519   if (arg->entry_kind == print_entry_values_only)
520     stb.puts ("@entry");
521   uiout->field_stream ("name", stb);
522
523   if (what == all && SYMBOL_IS_ARGUMENT (arg->sym))
524     uiout->field_signed ("arg", 1);
525
526   if (values == PRINT_SIMPLE_VALUES)
527     {
528       check_typedef (arg->sym->type);
529       type_print (arg->sym->type, "", &stb, -1);
530       uiout->field_stream ("type", stb);
531     }
532
533   if (arg->val || arg->error)
534     {
535       if (arg->error)
536         stb.printf (_("<error reading variable: %s>"), arg->error.get ());
537       else
538         {
539           try
540             {
541               struct value_print_options opts;
542
543               get_no_prettyformat_print_options (&opts);
544               opts.deref_ref = 1;
545               common_val_print (arg->val, &stb, 0, &opts,
546                                 language_def (SYMBOL_LANGUAGE (arg->sym)));
547             }
548           catch (const gdb_exception_error &except)
549             {
550               stb.printf (_("<error reading variable: %s>"),
551                           except.what ());
552             }
553         }
554       uiout->field_stream ("value", stb);
555     }
556 }
557
558 /* Print a list of the objects for the frame FI in a certain form,
559    which is determined by VALUES.  The objects can be locals,
560    arguments or both, which is determined by WHAT.  If SKIP_UNAVAILABLE
561    is true, only print the arguments or local variables whose values
562    are available.  */
563
564 static void
565 list_args_or_locals (const frame_print_options &fp_opts,
566                      enum what_to_list what, enum print_values values,
567                      struct frame_info *fi, int skip_unavailable)
568 {
569   const struct block *block;
570   struct symbol *sym;
571   struct block_iterator iter;
572   struct type *type;
573   const char *name_of_result;
574   struct ui_out *uiout = current_uiout;
575
576   block = get_frame_block (fi, 0);
577
578   switch (what)
579     {
580     case locals:
581       name_of_result = "locals";
582       break;
583     case arguments:
584       name_of_result = "args";
585       break;
586     case all:
587       name_of_result = "variables";
588       break;
589     default:
590       internal_error (__FILE__, __LINE__,
591                       "unexpected what_to_list: %d", (int) what);
592     }
593
594   ui_out_emit_list list_emitter (uiout, name_of_result);
595
596   while (block != 0)
597     {
598       ALL_BLOCK_SYMBOLS (block, iter, sym)
599         {
600           int print_me = 0;
601
602           switch (SYMBOL_CLASS (sym))
603             {
604             default:
605             case LOC_UNDEF:     /* catches errors        */
606             case LOC_CONST:     /* constant              */
607             case LOC_TYPEDEF:   /* local typedef         */
608             case LOC_LABEL:     /* local label           */
609             case LOC_BLOCK:     /* local function        */
610             case LOC_CONST_BYTES:       /* loc. byte seq.        */
611             case LOC_UNRESOLVED:        /* unresolved static     */
612             case LOC_OPTIMIZED_OUT:     /* optimized out         */
613               print_me = 0;
614               break;
615
616             case LOC_ARG:       /* argument              */
617             case LOC_REF_ARG:   /* reference arg         */
618             case LOC_REGPARM_ADDR:      /* indirect register arg */
619             case LOC_LOCAL:     /* stack local           */
620             case LOC_STATIC:    /* static                */
621             case LOC_REGISTER:  /* register              */
622             case LOC_COMPUTED:  /* computed location     */
623               if (what == all)
624                 print_me = 1;
625               else if (what == locals)
626                 print_me = !SYMBOL_IS_ARGUMENT (sym);
627               else
628                 print_me = SYMBOL_IS_ARGUMENT (sym);
629               break;
630             }
631           if (print_me)
632             {
633               struct symbol *sym2;
634               struct frame_arg arg, entryarg;
635
636               if (SYMBOL_IS_ARGUMENT (sym))
637                 sym2 = lookup_symbol (SYMBOL_LINKAGE_NAME (sym),
638                                       block, VAR_DOMAIN,
639                                       NULL).symbol;
640               else
641                 sym2 = sym;
642               gdb_assert (sym2 != NULL);
643
644               arg.sym = sym2;
645               arg.entry_kind = print_entry_values_no;
646               entryarg.sym = sym2;
647               entryarg.entry_kind = print_entry_values_no;
648
649               switch (values)
650                 {
651                 case PRINT_SIMPLE_VALUES:
652                   type = check_typedef (sym2->type);
653                   if (TYPE_CODE (type) != TYPE_CODE_ARRAY
654                       && TYPE_CODE (type) != TYPE_CODE_STRUCT
655                       && TYPE_CODE (type) != TYPE_CODE_UNION)
656                     {
657                 case PRINT_ALL_VALUES:
658                   if (SYMBOL_IS_ARGUMENT (sym))
659                     read_frame_arg (fp_opts, sym2, fi, &arg, &entryarg);
660                   else
661                     read_frame_local (sym2, fi, &arg);
662                     }
663                   break;
664                 }
665
666               if (arg.entry_kind != print_entry_values_only)
667                 list_arg_or_local (&arg, what, values, skip_unavailable);
668               if (entryarg.entry_kind != print_entry_values_no)
669                 list_arg_or_local (&entryarg, what, values, skip_unavailable);
670             }
671         }
672
673       if (BLOCK_FUNCTION (block))
674         break;
675       else
676         block = BLOCK_SUPERBLOCK (block);
677     }
678 }
679
680 /* Read a frame specification from FRAME_EXP and return the selected frame.
681    Call error() if the specification is in any way invalid (so this
682    function never returns NULL).
683
684    The frame specification is usually an integer level number, however if
685    the number does not match a valid frame level then it will be treated as
686    a frame address.  The frame address will then be used to find a matching
687    frame in the stack.  If no matching frame is found then a new frame will
688    be created.
689
690    The use of FRAME_EXP as an address is undocumented in the GDB user
691    manual, this feature is supported here purely for backward
692    compatibility.  */
693
694 static struct frame_info *
695 parse_frame_specification (const char *frame_exp)
696 {
697   gdb_assert (frame_exp != NULL);
698
699   /* NOTE: Parse and evaluate expression, but do not use
700      functions such as parse_and_eval_long or
701      parse_and_eval_address to also extract the value.
702      Instead value_as_long and value_as_address are used.
703      This avoids problems with expressions that contain
704      side-effects.  */
705   struct value *arg = parse_and_eval (frame_exp);
706
707   /* Assume ARG is an integer, and try using that to select a frame.  */
708   struct frame_info *fid;
709   int level = value_as_long (arg);
710
711   fid = find_relative_frame (get_current_frame (), &level);
712   if (level == 0)
713     /* find_relative_frame was successful.  */
714     return fid;
715
716   /* Convert the value into a corresponding address.  */
717   CORE_ADDR addr = value_as_address (arg);
718
719   /* Assume that ADDR is an address, use that to identify a frame with a
720      matching ID.  */
721   struct frame_id id = frame_id_build_wild (addr);
722
723   /* If (s)he specifies the frame with an address, he deserves
724      what (s)he gets.  Still, give the highest one that matches.
725      (NOTE: cagney/2004-10-29: Why highest, or outer-most, I don't
726      know).  */
727   for (fid = get_current_frame ();
728        fid != NULL;
729        fid = get_prev_frame (fid))
730     {
731       if (frame_id_eq (id, get_frame_id (fid)))
732         {
733           struct frame_info *prev_frame;
734
735           while (1)
736             {
737               prev_frame = get_prev_frame (fid);
738               if (!prev_frame
739                   || !frame_id_eq (id, get_frame_id (prev_frame)))
740                 break;
741               fid = prev_frame;
742             }
743           return fid;
744         }
745     }
746
747   /* We couldn't identify the frame as an existing frame, but
748      perhaps we can create one with a single argument.  */
749   return create_new_frame (addr, 0);
750 }
751
752 /* Implement the -stack-select-frame MI command.  */
753
754 void
755 mi_cmd_stack_select_frame (const char *command, char **argv, int argc)
756 {
757   if (argc == 0 || argc > 1)
758     error (_("-stack-select-frame: Usage: FRAME_SPEC"));
759
760   select_frame_for_mi (parse_frame_specification (argv[0]));
761 }
762
763 void
764 mi_cmd_stack_info_frame (const char *command, char **argv, int argc)
765 {
766   if (argc > 0)
767     error (_("-stack-info-frame: No arguments allowed"));
768
769   print_frame_info (user_frame_print_options,
770                     get_selected_frame (NULL), 1, LOC_AND_ADDRESS, 0, 1);
771 }