Home | History | Annotate | Line # | Download | only in gdb
stack.c revision 1.6
      1  1.1  christos /* Print and select stack frames for GDB, the GNU debugger.
      2  1.1  christos 
      3  1.6  christos    Copyright (C) 1986-2016 Free Software Foundation, Inc.
      4  1.1  christos 
      5  1.1  christos    This file is part of GDB.
      6  1.1  christos 
      7  1.1  christos    This program is free software; you can redistribute it and/or modify
      8  1.1  christos    it under the terms of the GNU General Public License as published by
      9  1.1  christos    the Free Software Foundation; either version 3 of the License, or
     10  1.1  christos    (at your option) any later version.
     11  1.1  christos 
     12  1.1  christos    This program is distributed in the hope that it will be useful,
     13  1.1  christos    but WITHOUT ANY WARRANTY; without even the implied warranty of
     14  1.1  christos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15  1.1  christos    GNU General Public License for more details.
     16  1.1  christos 
     17  1.1  christos    You should have received a copy of the GNU General Public License
     18  1.1  christos    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     19  1.1  christos 
     20  1.1  christos #include "defs.h"
     21  1.1  christos #include "value.h"
     22  1.1  christos #include "symtab.h"
     23  1.1  christos #include "gdbtypes.h"
     24  1.1  christos #include "expression.h"
     25  1.1  christos #include "language.h"
     26  1.1  christos #include "frame.h"
     27  1.1  christos #include "gdbcmd.h"
     28  1.1  christos #include "gdbcore.h"
     29  1.1  christos #include "target.h"
     30  1.1  christos #include "source.h"
     31  1.1  christos #include "breakpoint.h"
     32  1.1  christos #include "demangle.h"
     33  1.1  christos #include "inferior.h"
     34  1.1  christos #include "annotate.h"
     35  1.1  christos #include "ui-out.h"
     36  1.1  christos #include "block.h"
     37  1.1  christos #include "stack.h"
     38  1.1  christos #include "dictionary.h"
     39  1.1  christos #include "reggroups.h"
     40  1.1  christos #include "regcache.h"
     41  1.1  christos #include "solib.h"
     42  1.1  christos #include "valprint.h"
     43  1.1  christos #include "gdbthread.h"
     44  1.1  christos #include "cp-support.h"
     45  1.1  christos #include "disasm.h"
     46  1.1  christos #include "inline-frame.h"
     47  1.1  christos #include "linespec.h"
     48  1.1  christos #include "cli/cli-utils.h"
     49  1.3  christos #include "objfiles.h"
     50  1.1  christos 
     51  1.6  christos #include "safe-ctype.h"
     52  1.1  christos #include "symfile.h"
     53  1.3  christos #include "extension.h"
     54  1.6  christos #include "observer.h"
     55  1.1  christos 
     56  1.1  christos /* The possible choices of "set print frame-arguments", and the value
     57  1.1  christos    of this setting.  */
     58  1.1  christos 
     59  1.1  christos static const char *const print_frame_arguments_choices[] =
     60  1.1  christos   {"all", "scalars", "none", NULL};
     61  1.1  christos static const char *print_frame_arguments = "scalars";
     62  1.1  christos 
     63  1.1  christos /* If non-zero, don't invoke pretty-printers for frame arguments.  */
     64  1.1  christos static int print_raw_frame_arguments;
     65  1.1  christos 
     66  1.1  christos /* The possible choices of "set print entry-values", and the value
     67  1.1  christos    of this setting.  */
     68  1.1  christos 
     69  1.1  christos const char print_entry_values_no[] = "no";
     70  1.1  christos const char print_entry_values_only[] = "only";
     71  1.1  christos const char print_entry_values_preferred[] = "preferred";
     72  1.1  christos const char print_entry_values_if_needed[] = "if-needed";
     73  1.1  christos const char print_entry_values_both[] = "both";
     74  1.1  christos const char print_entry_values_compact[] = "compact";
     75  1.1  christos const char print_entry_values_default[] = "default";
     76  1.1  christos static const char *const print_entry_values_choices[] =
     77  1.1  christos {
     78  1.1  christos   print_entry_values_no,
     79  1.1  christos   print_entry_values_only,
     80  1.1  christos   print_entry_values_preferred,
     81  1.1  christos   print_entry_values_if_needed,
     82  1.1  christos   print_entry_values_both,
     83  1.1  christos   print_entry_values_compact,
     84  1.1  christos   print_entry_values_default,
     85  1.1  christos   NULL
     86  1.1  christos };
     87  1.1  christos const char *print_entry_values = print_entry_values_default;
     88  1.1  christos 
     89  1.1  christos /* Prototypes for local functions.  */
     90  1.1  christos 
     91  1.1  christos static void print_frame_local_vars (struct frame_info *, int,
     92  1.1  christos 				    struct ui_file *);
     93  1.1  christos 
     94  1.1  christos static void print_frame (struct frame_info *frame, int print_level,
     95  1.1  christos 			 enum print_what print_what,  int print_args,
     96  1.1  christos 			 struct symtab_and_line sal);
     97  1.1  christos 
     98  1.1  christos static void set_last_displayed_sal (int valid,
     99  1.1  christos 				    struct program_space *pspace,
    100  1.1  christos 				    CORE_ADDR addr,
    101  1.1  christos 				    struct symtab *symtab,
    102  1.1  christos 				    int line);
    103  1.1  christos 
    104  1.1  christos /* Zero means do things normally; we are interacting directly with the
    105  1.1  christos    user.  One means print the full filename and linenumber when a
    106  1.1  christos    frame is printed, and do so in a format emacs18/emacs19.22 can
    107  1.1  christos    parse.  Two means print similar annotations, but in many more
    108  1.1  christos    cases and in a slightly different syntax.  */
    109  1.1  christos 
    110  1.1  christos int annotation_level = 0;
    111  1.1  christos 
    112  1.1  christos /* These variables hold the last symtab and line we displayed to the user.
    113  1.1  christos  * This is where we insert a breakpoint or a skiplist entry by default.  */
    114  1.1  christos static int last_displayed_sal_valid = 0;
    115  1.1  christos static struct program_space *last_displayed_pspace = 0;
    116  1.1  christos static CORE_ADDR last_displayed_addr = 0;
    117  1.1  christos static struct symtab *last_displayed_symtab = 0;
    118  1.1  christos static int last_displayed_line = 0;
    119  1.1  christos 
    120  1.1  christos 
    122  1.1  christos /* Return 1 if we should display the address in addition to the location,
    123  1.1  christos    because we are in the middle of a statement.  */
    124  1.1  christos 
    125  1.1  christos static int
    126  1.1  christos frame_show_address (struct frame_info *frame,
    127  1.1  christos 		    struct symtab_and_line sal)
    128  1.1  christos {
    129  1.1  christos   /* If there is a line number, but no PC, then there is no location
    130  1.1  christos      information associated with this sal.  The only way that should
    131  1.1  christos      happen is for the call sites of inlined functions (SAL comes from
    132  1.1  christos      find_frame_sal).  Otherwise, we would have some PC range if the
    133  1.1  christos      SAL came from a line table.  */
    134  1.1  christos   if (sal.line != 0 && sal.pc == 0 && sal.end == 0)
    135  1.1  christos     {
    136  1.1  christos       if (get_next_frame (frame) == NULL)
    137  1.1  christos 	gdb_assert (inline_skipped_frames (inferior_ptid) > 0);
    138  1.1  christos       else
    139  1.1  christos 	gdb_assert (get_frame_type (get_next_frame (frame)) == INLINE_FRAME);
    140  1.1  christos       return 0;
    141  1.1  christos     }
    142  1.1  christos 
    143  1.1  christos   return get_frame_pc (frame) != sal.pc;
    144  1.1  christos }
    145  1.6  christos 
    146  1.6  christos /* See frame.h.  */
    147  1.6  christos 
    148  1.6  christos void
    149  1.6  christos print_stack_frame_to_uiout (struct ui_out *uiout, struct frame_info *frame,
    150  1.6  christos 			    int print_level, enum print_what print_what,
    151  1.6  christos 			    int set_current_sal)
    152  1.6  christos {
    153  1.6  christos   struct cleanup *old_chain;
    154  1.6  christos 
    155  1.6  christos   old_chain = make_cleanup_restore_current_uiout ();
    156  1.6  christos 
    157  1.6  christos   current_uiout = uiout;
    158  1.6  christos 
    159  1.6  christos   print_stack_frame (frame, print_level, print_what, set_current_sal);
    160  1.6  christos 
    161  1.6  christos   do_cleanups (old_chain);
    162  1.6  christos }
    163  1.6  christos 
    164  1.1  christos /* Show or print a stack frame FRAME briefly.  The output is formatted
    165  1.1  christos    according to PRINT_LEVEL and PRINT_WHAT printing the frame's
    166  1.1  christos    relative level, function name, argument list, and file name and
    167  1.1  christos    line number.  If the frame's PC is not at the beginning of the
    168  1.1  christos    source line, the actual PC is printed at the beginning.  */
    169  1.1  christos 
    170  1.1  christos void
    171  1.1  christos print_stack_frame (struct frame_info *frame, int print_level,
    172  1.1  christos 		   enum print_what print_what,
    173  1.1  christos 		   int set_current_sal)
    174  1.1  christos {
    175  1.1  christos 
    176  1.1  christos   /* For mi, alway print location and address.  */
    177  1.1  christos   if (ui_out_is_mi_like_p (current_uiout))
    178  1.1  christos     print_what = LOC_AND_ADDRESS;
    179  1.5  christos 
    180  1.1  christos   TRY
    181  1.1  christos     {
    182  1.1  christos       print_frame_info (frame, print_level, print_what, 1 /* print_args */,
    183  1.1  christos 			set_current_sal);
    184  1.3  christos       if (set_current_sal)
    185  1.1  christos 	set_current_sal_from_frame (frame);
    186  1.5  christos     }
    187  1.5  christos   CATCH (e, RETURN_MASK_ERROR)
    188  1.5  christos     {
    189  1.5  christos     }
    190  1.1  christos   END_CATCH
    191  1.1  christos }
    192  1.1  christos 
    193  1.1  christos /* Print nameless arguments of frame FRAME on STREAM, where START is
    194  1.1  christos    the offset of the first nameless argument, and NUM is the number of
    195  1.1  christos    nameless arguments to print.  FIRST is nonzero if this is the first
    196  1.1  christos    argument (not just the first nameless argument).  */
    197  1.1  christos 
    198  1.1  christos static void
    199  1.1  christos print_frame_nameless_args (struct frame_info *frame, long start, int num,
    200  1.1  christos 			   int first, struct ui_file *stream)
    201  1.1  christos {
    202  1.1  christos   struct gdbarch *gdbarch = get_frame_arch (frame);
    203  1.1  christos   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
    204  1.1  christos   int i;
    205  1.1  christos   CORE_ADDR argsaddr;
    206  1.1  christos   long arg_value;
    207  1.1  christos 
    208  1.1  christos   for (i = 0; i < num; i++)
    209  1.1  christos     {
    210  1.1  christos       QUIT;
    211  1.1  christos       argsaddr = get_frame_args_address (frame);
    212  1.1  christos       if (!argsaddr)
    213  1.1  christos 	return;
    214  1.1  christos       arg_value = read_memory_integer (argsaddr + start,
    215  1.1  christos 				       sizeof (int), byte_order);
    216  1.1  christos       if (!first)
    217  1.1  christos 	fprintf_filtered (stream, ", ");
    218  1.1  christos       fprintf_filtered (stream, "%ld", arg_value);
    219  1.1  christos       first = 0;
    220  1.1  christos       start += sizeof (int);
    221  1.1  christos     }
    222  1.1  christos }
    223  1.1  christos 
    224  1.1  christos /* Print single argument of inferior function.  ARG must be already
    225  1.1  christos    read in.
    226  1.1  christos 
    227  1.1  christos    Errors are printed as if they would be the parameter value.  Use zeroed ARG
    228  1.1  christos    iff it should not be printed accoring to user settings.  */
    229  1.1  christos 
    230  1.1  christos static void
    231  1.1  christos print_frame_arg (const struct frame_arg *arg)
    232  1.1  christos {
    233  1.1  christos   struct ui_out *uiout = current_uiout;
    234  1.1  christos   struct cleanup *old_chain;
    235  1.5  christos   struct ui_file *stb;
    236  1.1  christos   const char *error_message = NULL;
    237  1.1  christos 
    238  1.1  christos   stb = mem_fileopen ();
    239  1.1  christos   old_chain = make_cleanup_ui_file_delete (stb);
    240  1.1  christos 
    241  1.1  christos   gdb_assert (!arg->val || !arg->error);
    242  1.1  christos   gdb_assert (arg->entry_kind == print_entry_values_no
    243  1.1  christos 	      || arg->entry_kind == print_entry_values_only
    244  1.1  christos 	      || (!ui_out_is_mi_like_p (uiout)
    245  1.1  christos 		  && arg->entry_kind == print_entry_values_compact));
    246  1.1  christos 
    247  1.1  christos   annotate_arg_begin ();
    248  1.1  christos 
    249  1.1  christos   make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
    250  1.1  christos   fprintf_symbol_filtered (stb, SYMBOL_PRINT_NAME (arg->sym),
    251  1.1  christos 			   SYMBOL_LANGUAGE (arg->sym), DMGL_PARAMS | DMGL_ANSI);
    252  1.1  christos   if (arg->entry_kind == print_entry_values_compact)
    253  1.1  christos     {
    254  1.1  christos       /* It is OK to provide invalid MI-like stream as with
    255  1.1  christos 	 PRINT_ENTRY_VALUE_COMPACT we never use MI.  */
    256  1.1  christos       fputs_filtered ("=", stb);
    257  1.1  christos 
    258  1.1  christos       fprintf_symbol_filtered (stb, SYMBOL_PRINT_NAME (arg->sym),
    259  1.1  christos 			       SYMBOL_LANGUAGE (arg->sym),
    260  1.1  christos 			       DMGL_PARAMS | DMGL_ANSI);
    261  1.1  christos     }
    262  1.1  christos   if (arg->entry_kind == print_entry_values_only
    263  1.1  christos       || arg->entry_kind == print_entry_values_compact)
    264  1.1  christos     fputs_filtered ("@entry", stb);
    265  1.1  christos   ui_out_field_stream (uiout, "name", stb);
    266  1.1  christos   annotate_arg_name_end ();
    267  1.1  christos   ui_out_text (uiout, "=");
    268  1.1  christos 
    269  1.1  christos   if (!arg->val && !arg->error)
    270  1.1  christos     ui_out_text (uiout, "...");
    271  1.1  christos   else
    272  1.1  christos     {
    273  1.5  christos       if (arg->error)
    274  1.1  christos 	error_message = arg->error;
    275  1.1  christos       else
    276  1.5  christos 	{
    277  1.1  christos 	  TRY
    278  1.1  christos 	    {
    279  1.1  christos 	      const struct language_defn *language;
    280  1.1  christos 	      struct value_print_options opts;
    281  1.1  christos 
    282  1.1  christos 	      /* Avoid value_print because it will deref ref parameters.  We
    283  1.1  christos 		 just want to print their addresses.  Print ??? for args whose
    284  1.1  christos 		 address we do not know.  We pass 2 as "recurse" to val_print
    285  1.1  christos 		 because our standard indentation here is 4 spaces, and
    286  1.1  christos 		 val_print indents 2 for each recurse.  */
    287  1.1  christos 
    288  1.1  christos 	      annotate_arg_value (value_type (arg->val));
    289  1.1  christos 
    290  1.1  christos 	      /* Use the appropriate language to display our symbol, unless the
    291  1.1  christos 		 user forced the language to a specific language.  */
    292  1.1  christos 	      if (language_mode == language_mode_auto)
    293  1.1  christos 		language = language_def (SYMBOL_LANGUAGE (arg->sym));
    294  1.1  christos 	      else
    295  1.1  christos 		language = current_language;
    296  1.1  christos 
    297  1.1  christos 	      get_no_prettyformat_print_options (&opts);
    298  1.1  christos 	      opts.deref_ref = 1;
    299  1.1  christos 	      opts.raw = print_raw_frame_arguments;
    300  1.1  christos 
    301  1.1  christos 	      /* True in "summary" mode, false otherwise.  */
    302  1.1  christos 	      opts.summary = !strcmp (print_frame_arguments, "scalars");
    303  1.1  christos 
    304  1.1  christos 	      common_val_print (arg->val, stb, 2, &opts, language);
    305  1.5  christos 	    }
    306  1.5  christos 	  CATCH (except, RETURN_MASK_ERROR)
    307  1.5  christos 	    {
    308  1.5  christos 	      error_message = except.message;
    309  1.5  christos 	    }
    310  1.1  christos 	  END_CATCH
    311  1.5  christos 	}
    312  1.1  christos       if (error_message != NULL)
    313  1.5  christos 	fprintf_filtered (stb, _("<error reading variable: %s>"),
    314  1.1  christos 			  error_message);
    315  1.1  christos     }
    316  1.1  christos 
    317  1.1  christos   ui_out_field_stream (uiout, "value", stb);
    318  1.1  christos 
    319  1.1  christos   /* Also invoke ui_out_tuple_end.  */
    320  1.1  christos   do_cleanups (old_chain);
    321  1.1  christos 
    322  1.1  christos   annotate_arg_end ();
    323  1.1  christos }
    324  1.1  christos 
    325  1.1  christos /* Read in inferior function local SYM at FRAME into ARGP.  Caller is
    326  1.1  christos    responsible for xfree of ARGP->ERROR.  This function never throws an
    327  1.1  christos    exception.  */
    328  1.1  christos 
    329  1.1  christos void
    330  1.1  christos read_frame_local (struct symbol *sym, struct frame_info *frame,
    331  1.1  christos 		  struct frame_arg *argp)
    332  1.5  christos {
    333  1.5  christos   argp->sym = sym;
    334  1.5  christos   argp->val = NULL;
    335  1.5  christos   argp->error = NULL;
    336  1.5  christos 
    337  1.5  christos   TRY
    338  1.6  christos     {
    339  1.5  christos       argp->val = read_var_value (sym, NULL, frame);
    340  1.5  christos     }
    341  1.1  christos   CATCH (except, RETURN_MASK_ERROR)
    342  1.5  christos     {
    343  1.1  christos       argp->error = xstrdup (except.message);
    344  1.5  christos     }
    345  1.1  christos   END_CATCH
    346  1.1  christos }
    347  1.1  christos 
    348  1.1  christos /* Read in inferior function parameter SYM at FRAME into ARGP.  Caller is
    349  1.1  christos    responsible for xfree of ARGP->ERROR.  This function never throws an
    350  1.1  christos    exception.  */
    351  1.1  christos 
    352  1.1  christos void
    353  1.1  christos read_frame_arg (struct symbol *sym, struct frame_info *frame,
    354  1.1  christos 	        struct frame_arg *argp, struct frame_arg *entryargp)
    355  1.1  christos {
    356  1.1  christos   struct value *val = NULL, *entryval = NULL;
    357  1.1  christos   char *val_error = NULL, *entryval_error = NULL;
    358  1.1  christos   int val_equal = 0;
    359  1.1  christos 
    360  1.1  christos   if (print_entry_values != print_entry_values_only
    361  1.1  christos       && print_entry_values != print_entry_values_preferred)
    362  1.5  christos     {
    363  1.1  christos       TRY
    364  1.6  christos 	{
    365  1.1  christos 	  val = read_var_value (sym, NULL, frame);
    366  1.5  christos 	}
    367  1.1  christos       CATCH (except, RETURN_MASK_ERROR)
    368  1.6  christos 	{
    369  1.1  christos 	  val_error = (char *) alloca (strlen (except.message) + 1);
    370  1.1  christos 	  strcpy (val_error, except.message);
    371  1.5  christos 	}
    372  1.1  christos       END_CATCH
    373  1.1  christos     }
    374  1.1  christos 
    375  1.1  christos   if (SYMBOL_COMPUTED_OPS (sym) != NULL
    376  1.1  christos       && SYMBOL_COMPUTED_OPS (sym)->read_variable_at_entry != NULL
    377  1.1  christos       && print_entry_values != print_entry_values_no
    378  1.1  christos       && (print_entry_values != print_entry_values_if_needed
    379  1.1  christos 	  || !val || value_optimized_out (val)))
    380  1.5  christos     {
    381  1.1  christos       TRY
    382  1.1  christos 	{
    383  1.1  christos 	  const struct symbol_computed_ops *ops;
    384  1.1  christos 
    385  1.1  christos 	  ops = SYMBOL_COMPUTED_OPS (sym);
    386  1.1  christos 	  entryval = ops->read_variable_at_entry (sym, frame);
    387  1.5  christos 	}
    388  1.1  christos       CATCH (except, RETURN_MASK_ERROR)
    389  1.5  christos 	{
    390  1.5  christos 	  if (except.error != NO_ENTRY_VALUE_ERROR)
    391  1.5  christos 	    {
    392  1.5  christos 	      entryval_error = (char *) alloca (strlen (except.message) + 1);
    393  1.5  christos 	      strcpy (entryval_error, except.message);
    394  1.1  christos 	    }
    395  1.5  christos 	}
    396  1.1  christos       END_CATCH
    397  1.5  christos 
    398  1.5  christos       if (entryval != NULL && value_optimized_out (entryval))
    399  1.1  christos 	entryval = NULL;
    400  1.1  christos 
    401  1.1  christos       if (print_entry_values == print_entry_values_compact
    402  1.1  christos 	  || print_entry_values == print_entry_values_default)
    403  1.1  christos 	{
    404  1.1  christos 	  /* For MI do not try to use print_entry_values_compact for ARGP.  */
    405  1.1  christos 
    406  1.1  christos 	  if (val && entryval && !ui_out_is_mi_like_p (current_uiout))
    407  1.1  christos 	    {
    408  1.1  christos 	      struct type *type = value_type (val);
    409  1.3  christos 
    410  1.3  christos 	      if (value_lazy (val))
    411  1.3  christos 		value_fetch_lazy (val);
    412  1.3  christos 	      if (value_lazy (entryval))
    413  1.3  christos 		value_fetch_lazy (entryval);
    414  1.3  christos 
    415  1.1  christos 	      if (value_contents_eq (val, 0, entryval, 0, TYPE_LENGTH (type)))
    416  1.1  christos 		{
    417  1.1  christos 		  /* Initialize it just to avoid a GCC false warning.  */
    418  1.1  christos 		  struct value *val_deref = NULL, *entryval_deref;
    419  1.1  christos 
    420  1.1  christos 		  /* DW_AT_GNU_call_site_value does match with the current
    421  1.1  christos 		     value.  If it is a reference still try to verify if
    422  1.1  christos 		     dereferenced DW_AT_GNU_call_site_data_value does not
    423  1.1  christos 		     differ.  */
    424  1.5  christos 
    425  1.1  christos 		  TRY
    426  1.1  christos 		    {
    427  1.1  christos 		      struct type *type_deref;
    428  1.1  christos 
    429  1.1  christos 		      val_deref = coerce_ref (val);
    430  1.1  christos 		      if (value_lazy (val_deref))
    431  1.1  christos 			value_fetch_lazy (val_deref);
    432  1.1  christos 		      type_deref = value_type (val_deref);
    433  1.1  christos 
    434  1.1  christos 		      entryval_deref = coerce_ref (entryval);
    435  1.1  christos 		      if (value_lazy (entryval_deref))
    436  1.1  christos 			value_fetch_lazy (entryval_deref);
    437  1.1  christos 
    438  1.1  christos 		      /* If the reference addresses match but dereferenced
    439  1.1  christos 			 content does not match print them.  */
    440  1.3  christos 		      if (val != val_deref
    441  1.3  christos 			  && value_contents_eq (val_deref, 0,
    442  1.3  christos 						entryval_deref, 0,
    443  1.1  christos 						TYPE_LENGTH (type_deref)))
    444  1.1  christos 			val_equal = 1;
    445  1.5  christos 		    }
    446  1.5  christos 		  CATCH (except, RETURN_MASK_ERROR)
    447  1.5  christos 		    {
    448  1.5  christos 		      /* If the dereferenced content could not be
    449  1.5  christos 			 fetched do not display anything.  */
    450  1.5  christos 		      if (except.error == NO_ENTRY_VALUE_ERROR)
    451  1.5  christos 			val_equal = 1;
    452  1.5  christos 		      else if (except.message != NULL)
    453  1.5  christos 			{
    454  1.5  christos 			  entryval_error = (char *) alloca (strlen (except.message) + 1);
    455  1.5  christos 			  strcpy (entryval_error, except.message);
    456  1.5  christos 			}
    457  1.5  christos 		    }
    458  1.1  christos 		  END_CATCH
    459  1.1  christos 
    460  1.1  christos 		  /* Value was not a reference; and its content matches.  */
    461  1.1  christos 		  if (val == val_deref)
    462  1.1  christos 		    val_equal = 1;
    463  1.1  christos 
    464  1.1  christos 		  if (val_equal)
    465  1.1  christos 		    entryval = NULL;
    466  1.1  christos 		}
    467  1.1  christos 	    }
    468  1.1  christos 
    469  1.1  christos 	  /* Try to remove possibly duplicate error message for ENTRYARGP even
    470  1.1  christos 	     in MI mode.  */
    471  1.1  christos 
    472  1.1  christos 	  if (val_error && entryval_error
    473  1.1  christos 	      && strcmp (val_error, entryval_error) == 0)
    474  1.1  christos 	    {
    475  1.1  christos 	      entryval_error = NULL;
    476  1.1  christos 
    477  1.1  christos 	      /* Do not se VAL_EQUAL as the same error message may be shown for
    478  1.1  christos 		 the entry value even if no entry values are present in the
    479  1.1  christos 		 inferior.  */
    480  1.1  christos 	    }
    481  1.1  christos 	}
    482  1.1  christos     }
    483  1.1  christos 
    484  1.1  christos   if (entryval == NULL)
    485  1.1  christos     {
    486  1.1  christos       if (print_entry_values == print_entry_values_preferred)
    487  1.5  christos 	{
    488  1.5  christos 	  gdb_assert (val == NULL);
    489  1.5  christos 
    490  1.1  christos 	  TRY
    491  1.6  christos 	    {
    492  1.1  christos 	      val = read_var_value (sym, NULL, frame);
    493  1.5  christos 	    }
    494  1.1  christos 	  CATCH (except, RETURN_MASK_ERROR)
    495  1.6  christos 	    {
    496  1.1  christos 	      val_error = (char *) alloca (strlen (except.message) + 1);
    497  1.1  christos 	      strcpy (val_error, except.message);
    498  1.5  christos 	    }
    499  1.1  christos 	  END_CATCH
    500  1.1  christos 	}
    501  1.1  christos       if (print_entry_values == print_entry_values_only
    502  1.1  christos 	  || print_entry_values == print_entry_values_both
    503  1.1  christos 	  || (print_entry_values == print_entry_values_preferred
    504  1.1  christos 	      && (!val || value_optimized_out (val))))
    505  1.1  christos 	{
    506  1.1  christos 	  entryval = allocate_optimized_out_value (SYMBOL_TYPE (sym));
    507  1.1  christos 	  entryval_error = NULL;
    508  1.1  christos 	}
    509  1.1  christos     }
    510  1.1  christos   if ((print_entry_values == print_entry_values_compact
    511  1.1  christos        || print_entry_values == print_entry_values_if_needed
    512  1.1  christos        || print_entry_values == print_entry_values_preferred)
    513  1.1  christos       && (!val || value_optimized_out (val)) && entryval != NULL)
    514  1.1  christos     {
    515  1.1  christos       val = NULL;
    516  1.1  christos       val_error = NULL;
    517  1.1  christos     }
    518  1.1  christos 
    519  1.1  christos   argp->sym = sym;
    520  1.1  christos   argp->val = val;
    521  1.1  christos   argp->error = val_error ? xstrdup (val_error) : NULL;
    522  1.1  christos   if (!val && !val_error)
    523  1.1  christos     argp->entry_kind = print_entry_values_only;
    524  1.1  christos   else if ((print_entry_values == print_entry_values_compact
    525  1.1  christos 	   || print_entry_values == print_entry_values_default) && val_equal)
    526  1.1  christos     {
    527  1.1  christos       argp->entry_kind = print_entry_values_compact;
    528  1.1  christos       gdb_assert (!ui_out_is_mi_like_p (current_uiout));
    529  1.1  christos     }
    530  1.1  christos   else
    531  1.1  christos     argp->entry_kind = print_entry_values_no;
    532  1.1  christos 
    533  1.1  christos   entryargp->sym = sym;
    534  1.1  christos   entryargp->val = entryval;
    535  1.1  christos   entryargp->error = entryval_error ? xstrdup (entryval_error) : NULL;
    536  1.1  christos   if (!entryval && !entryval_error)
    537  1.1  christos     entryargp->entry_kind = print_entry_values_no;
    538  1.1  christos   else
    539  1.1  christos     entryargp->entry_kind = print_entry_values_only;
    540  1.1  christos }
    541  1.1  christos 
    542  1.1  christos /* Print the arguments of frame FRAME on STREAM, given the function
    543  1.1  christos    FUNC running in that frame (as a symbol), where NUM is the number
    544  1.1  christos    of arguments according to the stack frame (or -1 if the number of
    545  1.1  christos    arguments is unknown).  */
    546  1.1  christos 
    547  1.1  christos /* Note that currently the "number of arguments according to the
    548  1.1  christos    stack frame" is only known on VAX where i refers to the "number of
    549  1.1  christos    ints of arguments according to the stack frame".  */
    550  1.1  christos 
    551  1.1  christos static void
    552  1.1  christos print_frame_args (struct symbol *func, struct frame_info *frame,
    553  1.1  christos 		  int num, struct ui_file *stream)
    554  1.1  christos {
    555  1.1  christos   struct ui_out *uiout = current_uiout;
    556  1.1  christos   int first = 1;
    557  1.1  christos   /* Offset of next stack argument beyond the one we have seen that is
    558  1.1  christos      at the highest offset, or -1 if we haven't come to a stack
    559  1.1  christos      argument yet.  */
    560  1.1  christos   long highest_offset = -1;
    561  1.1  christos   /* Number of ints of arguments that we have printed so far.  */
    562  1.1  christos   int args_printed = 0;
    563  1.1  christos   struct cleanup *old_chain;
    564  1.1  christos   struct ui_file *stb;
    565  1.1  christos   /* True if we should print arguments, false otherwise.  */
    566  1.1  christos   int print_args = strcmp (print_frame_arguments, "none");
    567  1.1  christos 
    568  1.1  christos   stb = mem_fileopen ();
    569  1.1  christos   old_chain = make_cleanup_ui_file_delete (stb);
    570  1.1  christos 
    571  1.1  christos   if (func)
    572  1.3  christos     {
    573  1.1  christos       const struct block *b = SYMBOL_BLOCK_VALUE (func);
    574  1.1  christos       struct block_iterator iter;
    575  1.1  christos       struct symbol *sym;
    576  1.1  christos 
    577  1.1  christos       ALL_BLOCK_SYMBOLS (b, iter, sym)
    578  1.1  christos         {
    579  1.1  christos 	  struct frame_arg arg, entryarg;
    580  1.1  christos 
    581  1.1  christos 	  QUIT;
    582  1.1  christos 
    583  1.1  christos 	  /* Keep track of the highest stack argument offset seen, and
    584  1.1  christos 	     skip over any kinds of symbols we don't care about.  */
    585  1.1  christos 
    586  1.1  christos 	  if (!SYMBOL_IS_ARGUMENT (sym))
    587  1.1  christos 	    continue;
    588  1.1  christos 
    589  1.1  christos 	  switch (SYMBOL_CLASS (sym))
    590  1.1  christos 	    {
    591  1.1  christos 	    case LOC_ARG:
    592  1.1  christos 	    case LOC_REF_ARG:
    593  1.1  christos 	      {
    594  1.1  christos 		long current_offset = SYMBOL_VALUE (sym);
    595  1.1  christos 		int arg_size = TYPE_LENGTH (SYMBOL_TYPE (sym));
    596  1.1  christos 
    597  1.1  christos 		/* Compute address of next argument by adding the size of
    598  1.1  christos 		   this argument and rounding to an int boundary.  */
    599  1.1  christos 		current_offset =
    600  1.1  christos 		  ((current_offset + arg_size + sizeof (int) - 1)
    601  1.1  christos 		   & ~(sizeof (int) - 1));
    602  1.1  christos 
    603  1.1  christos 		/* If this is the highest offset seen yet, set
    604  1.1  christos 		   highest_offset.  */
    605  1.1  christos 		if (highest_offset == -1
    606  1.1  christos 		    || (current_offset > highest_offset))
    607  1.1  christos 		  highest_offset = current_offset;
    608  1.1  christos 
    609  1.1  christos 		/* Add the number of ints we're about to print to
    610  1.1  christos 		   args_printed.  */
    611  1.1  christos 		args_printed += (arg_size + sizeof (int) - 1) / sizeof (int);
    612  1.1  christos 	      }
    613  1.1  christos 
    614  1.1  christos 	      /* We care about types of symbols, but don't need to
    615  1.1  christos 		 keep track of stack offsets in them.  */
    616  1.1  christos 	    case LOC_REGISTER:
    617  1.1  christos 	    case LOC_REGPARM_ADDR:
    618  1.1  christos 	    case LOC_COMPUTED:
    619  1.1  christos 	    case LOC_OPTIMIZED_OUT:
    620  1.1  christos 	    default:
    621  1.1  christos 	      break;
    622  1.1  christos 	    }
    623  1.1  christos 
    624  1.1  christos 	  /* We have to look up the symbol because arguments can have
    625  1.1  christos 	     two entries (one a parameter, one a local) and the one we
    626  1.1  christos 	     want is the local, which lookup_symbol will find for us.
    627  1.1  christos 	     This includes gcc1 (not gcc2) on SPARC when passing a
    628  1.1  christos 	     small structure and gcc2 when the argument type is float
    629  1.1  christos 	     and it is passed as a double and converted to float by
    630  1.1  christos 	     the prologue (in the latter case the type of the LOC_ARG
    631  1.1  christos 	     symbol is double and the type of the LOC_LOCAL symbol is
    632  1.1  christos 	     float).  */
    633  1.1  christos 	  /* But if the parameter name is null, don't try it.  Null
    634  1.1  christos 	     parameter names occur on the RS/6000, for traceback
    635  1.1  christos 	     tables.  FIXME, should we even print them?  */
    636  1.1  christos 
    637  1.1  christos 	  if (*SYMBOL_LINKAGE_NAME (sym))
    638  1.1  christos 	    {
    639  1.1  christos 	      struct symbol *nsym;
    640  1.1  christos 
    641  1.6  christos 	      nsym = lookup_symbol (SYMBOL_LINKAGE_NAME (sym),
    642  1.1  christos 				    b, VAR_DOMAIN, NULL).symbol;
    643  1.1  christos 	      gdb_assert (nsym != NULL);
    644  1.1  christos 	      if (SYMBOL_CLASS (nsym) == LOC_REGISTER
    645  1.1  christos 		  && !SYMBOL_IS_ARGUMENT (nsym))
    646  1.1  christos 		{
    647  1.1  christos 		  /* There is a LOC_ARG/LOC_REGISTER pair.  This means
    648  1.1  christos 		     that it was passed on the stack and loaded into a
    649  1.1  christos 		     register, or passed in a register and stored in a
    650  1.1  christos 		     stack slot.  GDB 3.x used the LOC_ARG; GDB
    651  1.1  christos 		     4.0-4.11 used the LOC_REGISTER.
    652  1.1  christos 
    653  1.1  christos 		     Reasons for using the LOC_ARG:
    654  1.1  christos 
    655  1.1  christos 		     (1) Because find_saved_registers may be slow for
    656  1.1  christos 		         remote debugging.
    657  1.1  christos 
    658  1.1  christos 		     (2) Because registers are often re-used and stack
    659  1.1  christos 		         slots rarely (never?) are.  Therefore using
    660  1.1  christos 		         the stack slot is much less likely to print
    661  1.1  christos 		         garbage.
    662  1.1  christos 
    663  1.1  christos 		     Reasons why we might want to use the LOC_REGISTER:
    664  1.1  christos 
    665  1.1  christos 		     (1) So that the backtrace prints the same value
    666  1.1  christos 		         as "print foo".  I see no compelling reason
    667  1.1  christos 		         why this needs to be the case; having the
    668  1.1  christos 		         backtrace print the value which was passed
    669  1.1  christos 		         in, and "print foo" print the value as
    670  1.1  christos 		         modified within the called function, makes
    671  1.1  christos 		         perfect sense to me.
    672  1.1  christos 
    673  1.1  christos 		     Additional note: It might be nice if "info args"
    674  1.1  christos 		     displayed both values.
    675  1.1  christos 
    676  1.1  christos 		     One more note: There is a case with SPARC
    677  1.1  christos 		     structure passing where we need to use the
    678  1.1  christos 		     LOC_REGISTER, but this is dealt with by creating
    679  1.1  christos 		     a single LOC_REGPARM in symbol reading.  */
    680  1.1  christos 
    681  1.1  christos 		  /* Leave sym (the LOC_ARG) alone.  */
    682  1.1  christos 		  ;
    683  1.1  christos 		}
    684  1.1  christos 	      else
    685  1.1  christos 		sym = nsym;
    686  1.1  christos 	    }
    687  1.1  christos 
    688  1.1  christos 	  /* Print the current arg.  */
    689  1.1  christos 	  if (!first)
    690  1.1  christos 	    ui_out_text (uiout, ", ");
    691  1.1  christos 	  ui_out_wrap_hint (uiout, "    ");
    692  1.1  christos 
    693  1.1  christos 	  if (!print_args)
    694  1.1  christos 	    {
    695  1.1  christos 	      memset (&arg, 0, sizeof (arg));
    696  1.1  christos 	      arg.sym = sym;
    697  1.1  christos 	      arg.entry_kind = print_entry_values_no;
    698  1.1  christos 	      memset (&entryarg, 0, sizeof (entryarg));
    699  1.1  christos 	      entryarg.sym = sym;
    700  1.1  christos 	      entryarg.entry_kind = print_entry_values_no;
    701  1.1  christos 	    }
    702  1.1  christos 	  else
    703  1.1  christos 	    read_frame_arg (sym, frame, &arg, &entryarg);
    704  1.1  christos 
    705  1.1  christos 	  if (arg.entry_kind != print_entry_values_only)
    706  1.1  christos 	    print_frame_arg (&arg);
    707  1.1  christos 
    708  1.1  christos 	  if (entryarg.entry_kind != print_entry_values_no)
    709  1.1  christos 	    {
    710  1.1  christos 	      if (arg.entry_kind != print_entry_values_only)
    711  1.1  christos 		{
    712  1.1  christos 		  ui_out_text (uiout, ", ");
    713  1.1  christos 		  ui_out_wrap_hint (uiout, "    ");
    714  1.1  christos 		}
    715  1.1  christos 
    716  1.1  christos 	      print_frame_arg (&entryarg);
    717  1.1  christos 	    }
    718  1.1  christos 
    719  1.1  christos 	  xfree (arg.error);
    720  1.1  christos 	  xfree (entryarg.error);
    721  1.1  christos 
    722  1.1  christos 	  first = 0;
    723  1.1  christos 	}
    724  1.1  christos     }
    725  1.1  christos 
    726  1.1  christos   /* Don't print nameless args in situations where we don't know
    727  1.1  christos      enough about the stack to find them.  */
    728  1.1  christos   if (num != -1)
    729  1.1  christos     {
    730  1.1  christos       long start;
    731  1.1  christos 
    732  1.1  christos       if (highest_offset == -1)
    733  1.1  christos 	start = gdbarch_frame_args_skip (get_frame_arch (frame));
    734  1.1  christos       else
    735  1.1  christos 	start = highest_offset;
    736  1.1  christos 
    737  1.1  christos       print_frame_nameless_args (frame, start, num - args_printed,
    738  1.1  christos 				 first, stream);
    739  1.1  christos     }
    740  1.1  christos 
    741  1.1  christos   do_cleanups (old_chain);
    742  1.1  christos }
    743  1.1  christos 
    744  1.1  christos /* Set the current source and line to the location given by frame
    745  1.1  christos    FRAME, if possible.  When CENTER is true, adjust so the relevant
    746  1.1  christos    line is in the center of the next 'list'.  */
    747  1.1  christos 
    748  1.3  christos void
    749  1.1  christos set_current_sal_from_frame (struct frame_info *frame)
    750  1.1  christos {
    751  1.1  christos   struct symtab_and_line sal;
    752  1.1  christos 
    753  1.3  christos   find_frame_sal (frame, &sal);
    754  1.3  christos   if (sal.symtab != NULL)
    755  1.1  christos     set_current_source_symtab_and_line (&sal);
    756  1.1  christos }
    757  1.1  christos 
    758  1.1  christos /* If ON, GDB will display disassembly of the next source line when
    759  1.1  christos    execution of the program being debugged stops.
    760  1.1  christos    If AUTO (which is the default), or there's no line info to determine
    761  1.1  christos    the source line of the next instruction, display disassembly of next
    762  1.1  christos    instruction instead.  */
    763  1.1  christos 
    764  1.1  christos static enum auto_boolean disassemble_next_line;
    765  1.1  christos 
    766  1.1  christos static void
    767  1.1  christos show_disassemble_next_line (struct ui_file *file, int from_tty,
    768  1.1  christos 				 struct cmd_list_element *c,
    769  1.1  christos 				 const char *value)
    770  1.1  christos {
    771  1.1  christos   fprintf_filtered (file,
    772  1.1  christos 		    _("Debugger's willingness to use "
    773  1.1  christos 		      "disassemble-next-line is %s.\n"),
    774  1.1  christos                     value);
    775  1.1  christos }
    776  1.1  christos 
    777  1.1  christos /* Use TRY_CATCH to catch the exception from the gdb_disassembly
    778  1.1  christos    because it will be broken by filter sometime.  */
    779  1.1  christos 
    780  1.1  christos static void
    781  1.1  christos do_gdb_disassembly (struct gdbarch *gdbarch,
    782  1.1  christos 		    int how_many, CORE_ADDR low, CORE_ADDR high)
    783  1.1  christos {
    784  1.5  christos 
    785  1.1  christos   TRY
    786  1.1  christos     {
    787  1.1  christos       gdb_disassembly (gdbarch, current_uiout, 0,
    788  1.1  christos 		       DISASSEMBLY_RAW_INSN, how_many,
    789  1.1  christos 		       low, high);
    790  1.5  christos     }
    791  1.1  christos   CATCH (exception, RETURN_MASK_ERROR)
    792  1.1  christos     {
    793  1.1  christos       /* If an exception was thrown while doing the disassembly, print
    794  1.1  christos 	 the error message, to give the user a clue of what happened.  */
    795  1.1  christos       exception_print (gdb_stderr, exception);
    796  1.5  christos     }
    797  1.1  christos   END_CATCH
    798  1.1  christos }
    799  1.1  christos 
    800  1.1  christos /* Print information about frame FRAME.  The output is format according
    801  1.1  christos    to PRINT_LEVEL and PRINT_WHAT and PRINT_ARGS.  The meaning of
    802  1.1  christos    PRINT_WHAT is:
    803  1.1  christos 
    804  1.1  christos    SRC_LINE: Print only source line.
    805  1.1  christos    LOCATION: Print only location.
    806  1.1  christos    LOC_AND_SRC: Print location and source line.
    807  1.1  christos 
    808  1.1  christos    Used in "where" output, and to emit breakpoint or step
    809  1.1  christos    messages.  */
    810  1.1  christos 
    811  1.1  christos void
    812  1.1  christos print_frame_info (struct frame_info *frame, int print_level,
    813  1.1  christos 		  enum print_what print_what, int print_args,
    814  1.1  christos 		  int set_current_sal)
    815  1.1  christos {
    816  1.1  christos   struct gdbarch *gdbarch = get_frame_arch (frame);
    817  1.1  christos   struct symtab_and_line sal;
    818  1.1  christos   int source_print;
    819  1.1  christos   int location_print;
    820  1.1  christos   struct ui_out *uiout = current_uiout;
    821  1.1  christos 
    822  1.1  christos   if (get_frame_type (frame) == DUMMY_FRAME
    823  1.1  christos       || get_frame_type (frame) == SIGTRAMP_FRAME
    824  1.1  christos       || get_frame_type (frame) == ARCH_FRAME)
    825  1.1  christos     {
    826  1.1  christos       struct cleanup *uiout_cleanup
    827  1.1  christos 	= make_cleanup_ui_out_tuple_begin_end (uiout, "frame");
    828  1.1  christos 
    829  1.1  christos       annotate_frame_begin (print_level ? frame_relative_level (frame) : 0,
    830  1.1  christos 			    gdbarch, get_frame_pc (frame));
    831  1.1  christos 
    832  1.1  christos       /* Do this regardless of SOURCE because we don't have any source
    833  1.1  christos          to list for this frame.  */
    834  1.1  christos       if (print_level)
    835  1.1  christos         {
    836  1.1  christos           ui_out_text (uiout, "#");
    837  1.1  christos           ui_out_field_fmt_int (uiout, 2, ui_left, "level",
    838  1.1  christos 				frame_relative_level (frame));
    839  1.1  christos         }
    840  1.1  christos       if (ui_out_is_mi_like_p (uiout))
    841  1.1  christos         {
    842  1.1  christos           annotate_frame_address ();
    843  1.1  christos           ui_out_field_core_addr (uiout, "addr",
    844  1.1  christos 				  gdbarch, get_frame_pc (frame));
    845  1.1  christos           annotate_frame_address_end ();
    846  1.1  christos         }
    847  1.1  christos 
    848  1.1  christos       if (get_frame_type (frame) == DUMMY_FRAME)
    849  1.1  christos         {
    850  1.1  christos           annotate_function_call ();
    851  1.1  christos           ui_out_field_string (uiout, "func", "<function called from gdb>");
    852  1.1  christos 	}
    853  1.1  christos       else if (get_frame_type (frame) == SIGTRAMP_FRAME)
    854  1.1  christos         {
    855  1.1  christos 	  annotate_signal_handler_caller ();
    856  1.1  christos           ui_out_field_string (uiout, "func", "<signal handler called>");
    857  1.1  christos         }
    858  1.1  christos       else if (get_frame_type (frame) == ARCH_FRAME)
    859  1.1  christos         {
    860  1.1  christos           ui_out_field_string (uiout, "func", "<cross-architecture call>");
    861  1.1  christos 	}
    862  1.1  christos       ui_out_text (uiout, "\n");
    863  1.1  christos       annotate_frame_end ();
    864  1.3  christos 
    865  1.3  christos       /* If disassemble-next-line is set to auto or on output the next
    866  1.3  christos 	 instruction.  */
    867  1.3  christos       if (disassemble_next_line == AUTO_BOOLEAN_AUTO
    868  1.3  christos 	  || disassemble_next_line == AUTO_BOOLEAN_TRUE)
    869  1.3  christos 	do_gdb_disassembly (get_frame_arch (frame), 1,
    870  1.3  christos 			    get_frame_pc (frame), get_frame_pc (frame) + 1);
    871  1.1  christos 
    872  1.1  christos       do_cleanups (uiout_cleanup);
    873  1.1  christos       return;
    874  1.1  christos     }
    875  1.1  christos 
    876  1.1  christos   /* If FRAME is not the innermost frame, that normally means that
    877  1.1  christos      FRAME->pc points to *after* the call instruction, and we want to
    878  1.1  christos      get the line containing the call, never the next line.  But if
    879  1.1  christos      the next frame is a SIGTRAMP_FRAME or a DUMMY_FRAME, then the
    880  1.1  christos      next frame was not entered as the result of a call, and we want
    881  1.1  christos      to get the line containing FRAME->pc.  */
    882  1.1  christos   find_frame_sal (frame, &sal);
    883  1.1  christos 
    884  1.1  christos   location_print = (print_what == LOCATION
    885  1.1  christos 		    || print_what == LOC_AND_ADDRESS
    886  1.1  christos 		    || print_what == SRC_AND_LOC);
    887  1.1  christos 
    888  1.1  christos   if (location_print || !sal.symtab)
    889  1.1  christos     print_frame (frame, print_level, print_what, print_args, sal);
    890  1.1  christos 
    891  1.1  christos   source_print = (print_what == SRC_LINE || print_what == SRC_AND_LOC);
    892  1.1  christos 
    893  1.1  christos   /* If disassemble-next-line is set to auto or on and doesn't have
    894  1.1  christos      the line debug messages for $pc, output the next instruction.  */
    895  1.1  christos   if ((disassemble_next_line == AUTO_BOOLEAN_AUTO
    896  1.1  christos        || disassemble_next_line == AUTO_BOOLEAN_TRUE)
    897  1.1  christos       && source_print && !sal.symtab)
    898  1.1  christos     do_gdb_disassembly (get_frame_arch (frame), 1,
    899  1.1  christos 			get_frame_pc (frame), get_frame_pc (frame) + 1);
    900  1.1  christos 
    901  1.1  christos   if (source_print && sal.symtab)
    902  1.1  christos     {
    903  1.1  christos       int done = 0;
    904  1.1  christos       int mid_statement = ((print_what == SRC_LINE)
    905  1.1  christos 			   && frame_show_address (frame, sal));
    906  1.1  christos 
    907  1.1  christos       if (annotation_level)
    908  1.1  christos 	done = identify_source_line (sal.symtab, sal.line, mid_statement,
    909  1.1  christos 				     get_frame_pc (frame));
    910  1.1  christos       if (!done)
    911  1.1  christos 	{
    912  1.1  christos 	  if (deprecated_print_frame_info_listing_hook)
    913  1.1  christos 	    deprecated_print_frame_info_listing_hook (sal.symtab,
    914  1.1  christos 						      sal.line,
    915  1.1  christos 						      sal.line + 1, 0);
    916  1.1  christos 	  else
    917  1.1  christos 	    {
    918  1.1  christos 	      struct value_print_options opts;
    919  1.1  christos 
    920  1.1  christos 	      get_user_print_options (&opts);
    921  1.1  christos 	      /* We used to do this earlier, but that is clearly
    922  1.1  christos 		 wrong.  This function is used by many different
    923  1.1  christos 		 parts of gdb, including normal_stop in infrun.c,
    924  1.1  christos 		 which uses this to print out the current PC
    925  1.1  christos 		 when we stepi/nexti into the middle of a source
    926  1.1  christos 		 line.  Only the command line really wants this
    927  1.1  christos 		 behavior.  Other UIs probably would like the
    928  1.1  christos 		 ability to decide for themselves if it is desired.  */
    929  1.1  christos 	      if (opts.addressprint && mid_statement)
    930  1.1  christos 		{
    931  1.1  christos 		  ui_out_field_core_addr (uiout, "addr",
    932  1.1  christos 					  gdbarch, get_frame_pc (frame));
    933  1.1  christos 		  ui_out_text (uiout, "\t");
    934  1.1  christos 		}
    935  1.1  christos 
    936  1.1  christos 	      print_source_lines (sal.symtab, sal.line, sal.line + 1, 0);
    937  1.1  christos 	    }
    938  1.1  christos 	}
    939  1.1  christos 
    940  1.1  christos       /* If disassemble-next-line is set to on and there is line debug
    941  1.1  christos          messages, output assembly codes for next line.  */
    942  1.1  christos       if (disassemble_next_line == AUTO_BOOLEAN_TRUE)
    943  1.1  christos 	do_gdb_disassembly (get_frame_arch (frame), -1, sal.pc, sal.end);
    944  1.1  christos     }
    945  1.1  christos 
    946  1.1  christos   if (set_current_sal)
    947  1.1  christos     {
    948  1.1  christos       CORE_ADDR pc;
    949  1.1  christos 
    950  1.1  christos       if (get_frame_pc_if_available (frame, &pc))
    951  1.1  christos 	set_last_displayed_sal (1, sal.pspace, pc, sal.symtab, sal.line);
    952  1.1  christos       else
    953  1.1  christos 	set_last_displayed_sal (0, 0, 0, 0, 0);
    954  1.1  christos     }
    955  1.1  christos 
    956  1.1  christos   annotate_frame_end ();
    957  1.1  christos 
    958  1.1  christos   gdb_flush (gdb_stdout);
    959  1.1  christos }
    960  1.1  christos 
    961  1.1  christos /* Remember the last symtab and line we displayed, which we use e.g.
    962  1.1  christos  * as the place to put a breakpoint when the `break' command is
    963  1.1  christos  * invoked with no arguments.  */
    964  1.1  christos 
    965  1.1  christos static void
    966  1.1  christos set_last_displayed_sal (int valid, struct program_space *pspace,
    967  1.1  christos 			CORE_ADDR addr, struct symtab *symtab,
    968  1.1  christos 			int line)
    969  1.1  christos {
    970  1.1  christos   last_displayed_sal_valid = valid;
    971  1.1  christos   last_displayed_pspace = pspace;
    972  1.1  christos   last_displayed_addr = addr;
    973  1.1  christos   last_displayed_symtab = symtab;
    974  1.1  christos   last_displayed_line = line;
    975  1.1  christos   if (valid && pspace == NULL)
    976  1.1  christos     {
    977  1.1  christos       clear_last_displayed_sal ();
    978  1.1  christos       internal_error (__FILE__, __LINE__,
    979  1.1  christos 		      _("Trying to set NULL pspace."));
    980  1.1  christos     }
    981  1.1  christos }
    982  1.1  christos 
    983  1.1  christos /* Forget the last sal we displayed.  */
    984  1.1  christos 
    985  1.1  christos void
    986  1.1  christos clear_last_displayed_sal (void)
    987  1.1  christos {
    988  1.1  christos   last_displayed_sal_valid = 0;
    989  1.1  christos   last_displayed_pspace = 0;
    990  1.1  christos   last_displayed_addr = 0;
    991  1.1  christos   last_displayed_symtab = 0;
    992  1.1  christos   last_displayed_line = 0;
    993  1.1  christos }
    994  1.1  christos 
    995  1.1  christos /* Is our record of the last sal we displayed valid?  If not,
    996  1.1  christos  * the get_last_displayed_* functions will return NULL or 0, as
    997  1.1  christos  * appropriate.  */
    998  1.1  christos 
    999  1.1  christos int
   1000  1.1  christos last_displayed_sal_is_valid (void)
   1001  1.1  christos {
   1002  1.1  christos   return last_displayed_sal_valid;
   1003  1.1  christos }
   1004  1.1  christos 
   1005  1.1  christos /* Get the pspace of the last sal we displayed, if it's valid.  */
   1006  1.1  christos 
   1007  1.1  christos struct program_space *
   1008  1.1  christos get_last_displayed_pspace (void)
   1009  1.1  christos {
   1010  1.1  christos   if (last_displayed_sal_valid)
   1011  1.1  christos     return last_displayed_pspace;
   1012  1.1  christos   return 0;
   1013  1.1  christos }
   1014  1.1  christos 
   1015  1.1  christos /* Get the address of the last sal we displayed, if it's valid.  */
   1016  1.1  christos 
   1017  1.1  christos CORE_ADDR
   1018  1.1  christos get_last_displayed_addr (void)
   1019  1.1  christos {
   1020  1.1  christos   if (last_displayed_sal_valid)
   1021  1.1  christos     return last_displayed_addr;
   1022  1.1  christos   return 0;
   1023  1.1  christos }
   1024  1.1  christos 
   1025  1.1  christos /* Get the symtab of the last sal we displayed, if it's valid.  */
   1026  1.1  christos 
   1027  1.1  christos struct symtab*
   1028  1.1  christos get_last_displayed_symtab (void)
   1029  1.1  christos {
   1030  1.1  christos   if (last_displayed_sal_valid)
   1031  1.1  christos     return last_displayed_symtab;
   1032  1.1  christos   return 0;
   1033  1.1  christos }
   1034  1.1  christos 
   1035  1.1  christos /* Get the line of the last sal we displayed, if it's valid.  */
   1036  1.1  christos 
   1037  1.1  christos int
   1038  1.1  christos get_last_displayed_line (void)
   1039  1.1  christos {
   1040  1.1  christos   if (last_displayed_sal_valid)
   1041  1.1  christos     return last_displayed_line;
   1042  1.1  christos   return 0;
   1043  1.1  christos }
   1044  1.1  christos 
   1045  1.1  christos /* Get the last sal we displayed, if it's valid.  */
   1046  1.1  christos 
   1047  1.1  christos void
   1048  1.1  christos get_last_displayed_sal (struct symtab_and_line *sal)
   1049  1.1  christos {
   1050  1.1  christos   if (last_displayed_sal_valid)
   1051  1.1  christos     {
   1052  1.1  christos       sal->pspace = last_displayed_pspace;
   1053  1.1  christos       sal->pc = last_displayed_addr;
   1054  1.1  christos       sal->symtab = last_displayed_symtab;
   1055  1.1  christos       sal->line = last_displayed_line;
   1056  1.1  christos     }
   1057  1.1  christos   else
   1058  1.1  christos     {
   1059  1.1  christos       sal->pspace = 0;
   1060  1.1  christos       sal->pc = 0;
   1061  1.1  christos       sal->symtab = 0;
   1062  1.1  christos       sal->line = 0;
   1063  1.1  christos     }
   1064  1.1  christos }
   1065  1.1  christos 
   1066  1.1  christos 
   1067  1.1  christos /* Attempt to obtain the FUNNAME, FUNLANG and optionally FUNCP of the function
   1068  1.1  christos    corresponding to FRAME.  FUNNAME needs to be freed by the caller.  */
   1069  1.1  christos 
   1070  1.1  christos void
   1071  1.1  christos find_frame_funname (struct frame_info *frame, char **funname,
   1072  1.1  christos 		    enum language *funlang, struct symbol **funcp)
   1073  1.1  christos {
   1074  1.1  christos   struct symbol *func;
   1075  1.1  christos 
   1076  1.1  christos   *funname = NULL;
   1077  1.1  christos   *funlang = language_unknown;
   1078  1.1  christos   if (funcp)
   1079  1.1  christos     *funcp = NULL;
   1080  1.1  christos 
   1081  1.1  christos   func = get_frame_function (frame);
   1082  1.1  christos   if (func)
   1083  1.1  christos     {
   1084  1.1  christos       /* In certain pathological cases, the symtabs give the wrong
   1085  1.1  christos          function (when we are in the first function in a file which
   1086  1.1  christos          is compiled without debugging symbols, the previous function
   1087  1.1  christos          is compiled with debugging symbols, and the "foo.o" symbol
   1088  1.1  christos          that is supposed to tell us where the file with debugging
   1089  1.1  christos          symbols ends has been truncated by ar because it is longer
   1090  1.1  christos          than 15 characters).  This also occurs if the user uses asm()
   1091  1.1  christos          to create a function but not stabs for it (in a file compiled
   1092  1.1  christos          with -g).
   1093  1.1  christos 
   1094  1.1  christos          So look in the minimal symbol tables as well, and if it comes
   1095  1.1  christos          up with a larger address for the function use that instead.
   1096  1.1  christos          I don't think this can ever cause any problems; there
   1097  1.1  christos          shouldn't be any minimal symbols in the middle of a function;
   1098  1.1  christos          if this is ever changed many parts of GDB will need to be
   1099  1.1  christos          changed (and we'll create a find_pc_minimal_function or some
   1100  1.1  christos          such).  */
   1101  1.1  christos 
   1102  1.1  christos       struct bound_minimal_symbol msymbol;
   1103  1.1  christos 
   1104  1.1  christos       /* Don't attempt to do this for inlined functions, which do not
   1105  1.1  christos 	 have a corresponding minimal symbol.  */
   1106  1.1  christos       if (!block_inlined_p (SYMBOL_BLOCK_VALUE (func)))
   1107  1.1  christos 	msymbol
   1108  1.1  christos 	  = lookup_minimal_symbol_by_pc (get_frame_address_in_block (frame));
   1109  1.1  christos       else
   1110  1.1  christos 	memset (&msymbol, 0, sizeof (msymbol));
   1111  1.1  christos 
   1112  1.3  christos       if (msymbol.minsym != NULL
   1113  1.1  christos 	  && (BMSYMBOL_VALUE_ADDRESS (msymbol)
   1114  1.1  christos 	      > BLOCK_START (SYMBOL_BLOCK_VALUE (func))))
   1115  1.1  christos 	{
   1116  1.1  christos 	  /* We also don't know anything about the function besides
   1117  1.1  christos 	     its address and name.  */
   1118  1.3  christos 	  func = 0;
   1119  1.3  christos 	  *funname = xstrdup (MSYMBOL_PRINT_NAME (msymbol.minsym));
   1120  1.1  christos 	  *funlang = MSYMBOL_LANGUAGE (msymbol.minsym);
   1121  1.1  christos 	}
   1122  1.1  christos       else
   1123  1.6  christos 	{
   1124  1.6  christos 	  const char *print_name = SYMBOL_PRINT_NAME (func);
   1125  1.1  christos 
   1126  1.1  christos 	  *funlang = SYMBOL_LANGUAGE (func);
   1127  1.1  christos 	  if (funcp)
   1128  1.1  christos 	    *funcp = func;
   1129  1.1  christos 	  if (*funlang == language_cplus)
   1130  1.1  christos 	    {
   1131  1.1  christos 	      /* It seems appropriate to use SYMBOL_PRINT_NAME() here,
   1132  1.1  christos 		 to display the demangled name that we already have
   1133  1.1  christos 		 stored in the symbol table, but we stored a version
   1134  1.1  christos 		 with DMGL_PARAMS turned on, and here we don't want to
   1135  1.6  christos 		 display parameters.  So remove the parameters.  */
   1136  1.1  christos 	      char *func_only = cp_remove_params (print_name);
   1137  1.1  christos 
   1138  1.6  christos 	      if (func_only)
   1139  1.1  christos 		*funname = func_only;
   1140  1.6  christos 	    }
   1141  1.6  christos 
   1142  1.6  christos 	  /* If we didn't hit the C++ case above, set *funname here.
   1143  1.6  christos 	     This approach is taken to avoid having to install a
   1144  1.6  christos 	     cleanup in case cp_remove_params can throw.  */
   1145  1.6  christos 	  if (*funname == NULL)
   1146  1.1  christos 	    *funname = xstrdup (print_name);
   1147  1.1  christos 	}
   1148  1.1  christos     }
   1149  1.1  christos   else
   1150  1.1  christos     {
   1151  1.1  christos       struct bound_minimal_symbol msymbol;
   1152  1.1  christos       CORE_ADDR pc;
   1153  1.1  christos 
   1154  1.1  christos       if (!get_frame_address_in_block_if_available (frame, &pc))
   1155  1.1  christos 	return;
   1156  1.1  christos 
   1157  1.1  christos       msymbol = lookup_minimal_symbol_by_pc (pc);
   1158  1.1  christos       if (msymbol.minsym != NULL)
   1159  1.3  christos 	{
   1160  1.3  christos 	  *funname = xstrdup (MSYMBOL_PRINT_NAME (msymbol.minsym));
   1161  1.1  christos 	  *funlang = MSYMBOL_LANGUAGE (msymbol.minsym);
   1162  1.1  christos 	}
   1163  1.1  christos     }
   1164  1.1  christos }
   1165  1.1  christos 
   1166  1.1  christos static void
   1167  1.1  christos print_frame (struct frame_info *frame, int print_level,
   1168  1.1  christos 	     enum print_what print_what, int print_args,
   1169  1.1  christos 	     struct symtab_and_line sal)
   1170  1.1  christos {
   1171  1.1  christos   struct gdbarch *gdbarch = get_frame_arch (frame);
   1172  1.1  christos   struct ui_out *uiout = current_uiout;
   1173  1.1  christos   char *funname = NULL;
   1174  1.1  christos   enum language funlang = language_unknown;
   1175  1.1  christos   struct ui_file *stb;
   1176  1.1  christos   struct cleanup *old_chain, *list_chain;
   1177  1.1  christos   struct value_print_options opts;
   1178  1.1  christos   struct symbol *func;
   1179  1.1  christos   CORE_ADDR pc = 0;
   1180  1.1  christos   int pc_p;
   1181  1.1  christos 
   1182  1.1  christos   pc_p = get_frame_pc_if_available (frame, &pc);
   1183  1.1  christos 
   1184  1.1  christos   stb = mem_fileopen ();
   1185  1.1  christos   old_chain = make_cleanup_ui_file_delete (stb);
   1186  1.1  christos 
   1187  1.1  christos   find_frame_funname (frame, &funname, &funlang, &func);
   1188  1.1  christos   make_cleanup (xfree, funname);
   1189  1.1  christos 
   1190  1.1  christos   annotate_frame_begin (print_level ? frame_relative_level (frame) : 0,
   1191  1.1  christos 			gdbarch, pc);
   1192  1.1  christos 
   1193  1.1  christos   list_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "frame");
   1194  1.1  christos 
   1195  1.1  christos   if (print_level)
   1196  1.1  christos     {
   1197  1.1  christos       ui_out_text (uiout, "#");
   1198  1.1  christos       ui_out_field_fmt_int (uiout, 2, ui_left, "level",
   1199  1.1  christos 			    frame_relative_level (frame));
   1200  1.1  christos     }
   1201  1.1  christos   get_user_print_options (&opts);
   1202  1.1  christos   if (opts.addressprint)
   1203  1.1  christos     if (!sal.symtab
   1204  1.1  christos 	|| frame_show_address (frame, sal)
   1205  1.1  christos 	|| print_what == LOC_AND_ADDRESS)
   1206  1.1  christos       {
   1207  1.1  christos 	annotate_frame_address ();
   1208  1.1  christos 	if (pc_p)
   1209  1.1  christos 	  ui_out_field_core_addr (uiout, "addr", gdbarch, pc);
   1210  1.1  christos 	else
   1211  1.1  christos 	  ui_out_field_string (uiout, "addr", "<unavailable>");
   1212  1.1  christos 	annotate_frame_address_end ();
   1213  1.1  christos 	ui_out_text (uiout, " in ");
   1214  1.1  christos       }
   1215  1.1  christos   annotate_frame_function_name ();
   1216  1.1  christos   fprintf_symbol_filtered (stb, funname ? funname : "??",
   1217  1.1  christos 			   funlang, DMGL_ANSI);
   1218  1.1  christos   ui_out_field_stream (uiout, "func", stb);
   1219  1.1  christos   ui_out_wrap_hint (uiout, "   ");
   1220  1.1  christos   annotate_frame_args ();
   1221  1.1  christos 
   1222  1.1  christos   ui_out_text (uiout, " (");
   1223  1.1  christos   if (print_args)
   1224  1.1  christos     {
   1225  1.1  christos       struct gdbarch *gdbarch = get_frame_arch (frame);
   1226  1.1  christos       int numargs;
   1227  1.1  christos       struct cleanup *args_list_chain;
   1228  1.1  christos 
   1229  1.1  christos       if (gdbarch_frame_num_args_p (gdbarch))
   1230  1.1  christos 	{
   1231  1.1  christos 	  numargs = gdbarch_frame_num_args (gdbarch, frame);
   1232  1.1  christos 	  gdb_assert (numargs >= 0);
   1233  1.1  christos 	}
   1234  1.1  christos       else
   1235  1.1  christos 	numargs = -1;
   1236  1.1  christos 
   1237  1.5  christos       args_list_chain = make_cleanup_ui_out_list_begin_end (uiout, "args");
   1238  1.1  christos       TRY
   1239  1.1  christos 	{
   1240  1.1  christos 	  print_frame_args (func, frame, numargs, gdb_stdout);
   1241  1.5  christos 	}
   1242  1.5  christos       CATCH (e, RETURN_MASK_ERROR)
   1243  1.5  christos 	{
   1244  1.5  christos 	}
   1245  1.5  christos       END_CATCH
   1246  1.1  christos 
   1247  1.1  christos       /* FIXME: ARGS must be a list.  If one argument is a string it
   1248  1.1  christos 	  will have " that will not be properly escaped.  */
   1249  1.1  christos       /* Invoke ui_out_tuple_end.  */
   1250  1.1  christos       do_cleanups (args_list_chain);
   1251  1.1  christos       QUIT;
   1252  1.1  christos     }
   1253  1.1  christos   ui_out_text (uiout, ")");
   1254  1.1  christos   if (sal.symtab)
   1255  1.1  christos     {
   1256  1.1  christos       const char *filename_display;
   1257  1.1  christos 
   1258  1.1  christos       filename_display = symtab_to_filename_for_display (sal.symtab);
   1259  1.1  christos       annotate_frame_source_begin ();
   1260  1.1  christos       ui_out_wrap_hint (uiout, "   ");
   1261  1.1  christos       ui_out_text (uiout, " at ");
   1262  1.1  christos       annotate_frame_source_file ();
   1263  1.1  christos       ui_out_field_string (uiout, "file", filename_display);
   1264  1.1  christos       if (ui_out_is_mi_like_p (uiout))
   1265  1.1  christos 	{
   1266  1.1  christos 	  const char *fullname = symtab_to_fullname (sal.symtab);
   1267  1.1  christos 
   1268  1.1  christos 	  ui_out_field_string (uiout, "fullname", fullname);
   1269  1.1  christos 	}
   1270  1.1  christos       annotate_frame_source_file_end ();
   1271  1.1  christos       ui_out_text (uiout, ":");
   1272  1.1  christos       annotate_frame_source_line ();
   1273  1.1  christos       ui_out_field_int (uiout, "line", sal.line);
   1274  1.1  christos       annotate_frame_source_end ();
   1275  1.1  christos     }
   1276  1.1  christos 
   1277  1.1  christos   if (pc_p && (funname == NULL || sal.symtab == NULL))
   1278  1.1  christos     {
   1279  1.1  christos       char *lib = solib_name_from_address (get_frame_program_space (frame),
   1280  1.1  christos 					   get_frame_pc (frame));
   1281  1.1  christos 
   1282  1.1  christos       if (lib)
   1283  1.1  christos 	{
   1284  1.1  christos 	  annotate_frame_where ();
   1285  1.1  christos 	  ui_out_wrap_hint (uiout, "  ");
   1286  1.1  christos 	  ui_out_text (uiout, " from ");
   1287  1.1  christos 	  ui_out_field_string (uiout, "from", lib);
   1288  1.1  christos 	}
   1289  1.1  christos     }
   1290  1.1  christos 
   1291  1.1  christos   /* do_cleanups will call ui_out_tuple_end() for us.  */
   1292  1.1  christos   do_cleanups (list_chain);
   1293  1.1  christos   ui_out_text (uiout, "\n");
   1294  1.1  christos   do_cleanups (old_chain);
   1295  1.1  christos }
   1296  1.1  christos 
   1297  1.6  christos 
   1299  1.6  christos /* Read a frame specification in whatever the appropriate format is from
   1300  1.6  christos    FRAME_EXP.  Call error() if the specification is in any way invalid (so
   1301  1.1  christos    this function never returns NULL).  When SEPECTED_P is non-NULL set its
   1302  1.1  christos    target to indicate that the default selected frame was used.  */
   1303  1.6  christos 
   1304  1.1  christos static struct frame_info *
   1305  1.1  christos parse_frame_specification (const char *frame_exp, int *selected_frame_p)
   1306  1.1  christos {
   1307  1.1  christos   int numargs;
   1308  1.1  christos   struct value *args[4];
   1309  1.1  christos   CORE_ADDR addrs[ARRAY_SIZE (args)];
   1310  1.1  christos 
   1311  1.1  christos   if (frame_exp == NULL)
   1312  1.1  christos     numargs = 0;
   1313  1.1  christos   else
   1314  1.1  christos     {
   1315  1.1  christos       numargs = 0;
   1316  1.1  christos       while (1)
   1317  1.1  christos 	{
   1318  1.1  christos 	  char *addr_string;
   1319  1.1  christos 	  struct cleanup *cleanup;
   1320  1.1  christos 	  const char *p;
   1321  1.1  christos 
   1322  1.1  christos 	  /* Skip leading white space, bail of EOL.  */
   1323  1.1  christos 	  frame_exp = skip_spaces_const (frame_exp);
   1324  1.1  christos 	  if (!*frame_exp)
   1325  1.1  christos 	    break;
   1326  1.1  christos 
   1327  1.6  christos 	  /* Parse the argument, extract it, save it.  */
   1328  1.1  christos 	  for (p = frame_exp;
   1329  1.1  christos 	       *p && !ISSPACE (*p);
   1330  1.1  christos 	       p++);
   1331  1.1  christos 	  addr_string = savestring (frame_exp, p - frame_exp);
   1332  1.1  christos 	  frame_exp = p;
   1333  1.1  christos 	  cleanup = make_cleanup (xfree, addr_string);
   1334  1.1  christos 
   1335  1.1  christos 	  /* NOTE: Parse and evaluate expression, but do not use
   1336  1.1  christos 	     functions such as parse_and_eval_long or
   1337  1.1  christos 	     parse_and_eval_address to also extract the value.
   1338  1.1  christos 	     Instead value_as_long and value_as_address are used.
   1339  1.1  christos 	     This avoids problems with expressions that contain
   1340  1.1  christos 	     side-effects.  */
   1341  1.1  christos 	  if (numargs >= ARRAY_SIZE (args))
   1342  1.1  christos 	    error (_("Too many args in frame specification"));
   1343  1.1  christos 	  args[numargs++] = parse_and_eval (addr_string);
   1344  1.1  christos 
   1345  1.1  christos 	  do_cleanups (cleanup);
   1346  1.1  christos 	}
   1347  1.1  christos     }
   1348  1.1  christos 
   1349  1.1  christos   /* If no args, default to the selected frame.  */
   1350  1.1  christos   if (numargs == 0)
   1351  1.1  christos     {
   1352  1.6  christos       if (selected_frame_p != NULL)
   1353  1.1  christos 	(*selected_frame_p) = 1;
   1354  1.1  christos       return get_selected_frame (_("No stack."));
   1355  1.1  christos     }
   1356  1.1  christos 
   1357  1.1  christos   /* None of the remaining use the selected frame.  */
   1358  1.1  christos   if (selected_frame_p != NULL)
   1359  1.1  christos     (*selected_frame_p) = 0;
   1360  1.1  christos 
   1361  1.1  christos   /* Assume the single arg[0] is an integer, and try using that to
   1362  1.1  christos      select a frame relative to current.  */
   1363  1.1  christos   if (numargs == 1)
   1364  1.1  christos     {
   1365  1.1  christos       struct frame_info *fid;
   1366  1.1  christos       int level = value_as_long (args[0]);
   1367  1.1  christos 
   1368  1.1  christos       fid = find_relative_frame (get_current_frame (), &level);
   1369  1.1  christos       if (level == 0)
   1370  1.1  christos 	/* find_relative_frame was successful.  */
   1371  1.1  christos 	return fid;
   1372  1.1  christos     }
   1373  1.1  christos 
   1374  1.1  christos   /* Convert each value into a corresponding address.  */
   1375  1.1  christos   {
   1376  1.1  christos     int i;
   1377  1.1  christos 
   1378  1.1  christos     for (i = 0; i < numargs; i++)
   1379  1.1  christos       addrs[i] = value_as_address (args[i]);
   1380  1.1  christos   }
   1381  1.1  christos 
   1382  1.1  christos   /* Assume that the single arg[0] is an address, use that to identify
   1383  1.1  christos      a frame with a matching ID.  Should this also accept stack/pc or
   1384  1.1  christos      stack/pc/special.  */
   1385  1.1  christos   if (numargs == 1)
   1386  1.1  christos     {
   1387  1.1  christos       struct frame_id id = frame_id_build_wild (addrs[0]);
   1388  1.1  christos       struct frame_info *fid;
   1389  1.1  christos 
   1390  1.1  christos       /* If (s)he specifies the frame with an address, he deserves
   1391  1.1  christos 	 what (s)he gets.  Still, give the highest one that matches.
   1392  1.1  christos 	 (NOTE: cagney/2004-10-29: Why highest, or outer-most, I don't
   1393  1.1  christos 	 know).  */
   1394  1.1  christos       for (fid = get_current_frame ();
   1395  1.1  christos 	   fid != NULL;
   1396  1.1  christos 	   fid = get_prev_frame (fid))
   1397  1.1  christos 	{
   1398  1.1  christos 	  if (frame_id_eq (id, get_frame_id (fid)))
   1399  1.1  christos 	    {
   1400  1.1  christos 	      struct frame_info *prev_frame;
   1401  1.1  christos 
   1402  1.1  christos 	      while (1)
   1403  1.1  christos 		{
   1404  1.1  christos 		  prev_frame = get_prev_frame (fid);
   1405  1.1  christos 		  if (!prev_frame
   1406  1.1  christos 		      || !frame_id_eq (id, get_frame_id (prev_frame)))
   1407  1.1  christos 		    break;
   1408  1.1  christos 		  fid = prev_frame;
   1409  1.1  christos 		}
   1410  1.1  christos 	      return fid;
   1411  1.1  christos 	    }
   1412  1.1  christos 	}
   1413  1.1  christos       }
   1414  1.1  christos 
   1415  1.1  christos   /* We couldn't identify the frame as an existing frame, but
   1416  1.1  christos      perhaps we can create one with a single argument.  */
   1417  1.1  christos   if (numargs == 1)
   1418  1.1  christos     return create_new_frame (addrs[0], 0);
   1419  1.1  christos   else if (numargs == 2)
   1420  1.1  christos     return create_new_frame (addrs[0], addrs[1]);
   1421  1.1  christos   else
   1422  1.1  christos     error (_("Too many args in frame specification"));
   1423  1.1  christos }
   1424  1.1  christos 
   1425  1.1  christos /* Print verbosely the selected frame or the frame at address
   1426  1.1  christos    ADDR_EXP.  Absolutely all information in the frame is printed.  */
   1427  1.1  christos 
   1428  1.1  christos static void
   1429  1.1  christos frame_info (char *addr_exp, int from_tty)
   1430  1.1  christos {
   1431  1.1  christos   struct frame_info *fi;
   1432  1.1  christos   struct symtab_and_line sal;
   1433  1.1  christos   struct symbol *func;
   1434  1.1  christos   struct symtab *s;
   1435  1.1  christos   struct frame_info *calling_frame_info;
   1436  1.1  christos   int numregs;
   1437  1.1  christos   const char *funname = 0;
   1438  1.1  christos   enum language funlang = language_unknown;
   1439  1.1  christos   const char *pc_regname;
   1440  1.1  christos   int selected_frame_p;
   1441  1.1  christos   struct gdbarch *gdbarch;
   1442  1.1  christos   struct cleanup *back_to = make_cleanup (null_cleanup, NULL);
   1443  1.1  christos   CORE_ADDR frame_pc;
   1444  1.1  christos   int frame_pc_p;
   1445  1.5  christos   /* Initialize it to avoid "may be used uninitialized" warning.  */
   1446  1.1  christos   CORE_ADDR caller_pc = 0;
   1447  1.6  christos   int caller_pc_p = 0;
   1448  1.1  christos 
   1449  1.1  christos   fi = parse_frame_specification (addr_exp, &selected_frame_p);
   1450  1.1  christos   gdbarch = get_frame_arch (fi);
   1451  1.1  christos 
   1452  1.1  christos   /* Name of the value returned by get_frame_pc().  Per comments, "pc"
   1453  1.1  christos      is not a good name.  */
   1454  1.1  christos   if (gdbarch_pc_regnum (gdbarch) >= 0)
   1455  1.1  christos     /* OK, this is weird.  The gdbarch_pc_regnum hardware register's value can
   1456  1.1  christos        easily not match that of the internal value returned by
   1457  1.1  christos        get_frame_pc().  */
   1458  1.1  christos     pc_regname = gdbarch_register_name (gdbarch, gdbarch_pc_regnum (gdbarch));
   1459  1.1  christos   else
   1460  1.1  christos     /* But then, this is weird to.  Even without gdbarch_pc_regnum, an
   1461  1.1  christos        architectures will often have a hardware register called "pc",
   1462  1.1  christos        and that register's value, again, can easily not match
   1463  1.1  christos        get_frame_pc().  */
   1464  1.1  christos     pc_regname = "pc";
   1465  1.1  christos 
   1466  1.1  christos   frame_pc_p = get_frame_pc_if_available (fi, &frame_pc);
   1467  1.1  christos   find_frame_sal (fi, &sal);
   1468  1.1  christos   func = get_frame_function (fi);
   1469  1.1  christos   s = sal.symtab;
   1470  1.1  christos   if (func)
   1471  1.1  christos     {
   1472  1.1  christos       funname = SYMBOL_PRINT_NAME (func);
   1473  1.1  christos       funlang = SYMBOL_LANGUAGE (func);
   1474  1.1  christos       if (funlang == language_cplus)
   1475  1.1  christos 	{
   1476  1.1  christos 	  /* It seems appropriate to use SYMBOL_PRINT_NAME() here,
   1477  1.1  christos 	     to display the demangled name that we already have
   1478  1.1  christos 	     stored in the symbol table, but we stored a version
   1479  1.1  christos 	     with DMGL_PARAMS turned on, and here we don't want to
   1480  1.1  christos 	     display parameters.  So remove the parameters.  */
   1481  1.1  christos 	  char *func_only = cp_remove_params (funname);
   1482  1.1  christos 
   1483  1.1  christos 	  if (func_only)
   1484  1.1  christos 	    {
   1485  1.1  christos 	      funname = func_only;
   1486  1.1  christos 	      make_cleanup (xfree, func_only);
   1487  1.1  christos 	    }
   1488  1.1  christos 	}
   1489  1.1  christos     }
   1490  1.1  christos   else if (frame_pc_p)
   1491  1.1  christos     {
   1492  1.1  christos       struct bound_minimal_symbol msymbol;
   1493  1.1  christos 
   1494  1.1  christos       msymbol = lookup_minimal_symbol_by_pc (frame_pc);
   1495  1.3  christos       if (msymbol.minsym != NULL)
   1496  1.3  christos 	{
   1497  1.1  christos 	  funname = MSYMBOL_PRINT_NAME (msymbol.minsym);
   1498  1.1  christos 	  funlang = MSYMBOL_LANGUAGE (msymbol.minsym);
   1499  1.1  christos 	}
   1500  1.1  christos     }
   1501  1.1  christos   calling_frame_info = get_prev_frame (fi);
   1502  1.1  christos 
   1503  1.1  christos   if (selected_frame_p && frame_relative_level (fi) >= 0)
   1504  1.1  christos     {
   1505  1.1  christos       printf_filtered (_("Stack level %d, frame at "),
   1506  1.1  christos 		       frame_relative_level (fi));
   1507  1.1  christos     }
   1508  1.1  christos   else
   1509  1.1  christos     {
   1510  1.1  christos       printf_filtered (_("Stack frame at "));
   1511  1.1  christos     }
   1512  1.1  christos   fputs_filtered (paddress (gdbarch, get_frame_base (fi)), gdb_stdout);
   1513  1.1  christos   printf_filtered (":\n");
   1514  1.1  christos   printf_filtered (" %s = ", pc_regname);
   1515  1.1  christos   if (frame_pc_p)
   1516  1.1  christos     fputs_filtered (paddress (gdbarch, get_frame_pc (fi)), gdb_stdout);
   1517  1.1  christos   else
   1518  1.1  christos     fputs_filtered ("<unavailable>", gdb_stdout);
   1519  1.1  christos 
   1520  1.1  christos   wrap_here ("   ");
   1521  1.1  christos   if (funname)
   1522  1.1  christos     {
   1523  1.1  christos       printf_filtered (" in ");
   1524  1.1  christos       fprintf_symbol_filtered (gdb_stdout, funname, funlang,
   1525  1.1  christos 			       DMGL_ANSI | DMGL_PARAMS);
   1526  1.1  christos     }
   1527  1.1  christos   wrap_here ("   ");
   1528  1.1  christos   if (sal.symtab)
   1529  1.1  christos     printf_filtered (" (%s:%d)", symtab_to_filename_for_display (sal.symtab),
   1530  1.1  christos 		     sal.line);
   1531  1.1  christos   puts_filtered ("; ");
   1532  1.1  christos   wrap_here ("    ");
   1533  1.6  christos   printf_filtered ("saved %s = ", pc_regname);
   1534  1.6  christos 
   1535  1.6  christos   if (!frame_id_p (frame_unwind_caller_id (fi)))
   1536  1.1  christos     val_print_not_saved (gdb_stdout);
   1537  1.6  christos   else
   1538  1.6  christos     {
   1539  1.6  christos       TRY
   1540  1.6  christos 	{
   1541  1.6  christos 	  caller_pc = frame_unwind_caller_pc (fi);
   1542  1.6  christos 	  caller_pc_p = 1;
   1543  1.1  christos 	}
   1544  1.6  christos       CATCH (ex, RETURN_MASK_ERROR)
   1545  1.6  christos 	{
   1546  1.6  christos 	  switch (ex.error)
   1547  1.6  christos 	    {
   1548  1.6  christos 	    case NOT_AVAILABLE_ERROR:
   1549  1.6  christos 	      val_print_unavailable (gdb_stdout);
   1550  1.6  christos 	      break;
   1551  1.6  christos 	    case OPTIMIZED_OUT_ERROR:
   1552  1.6  christos 	      val_print_not_saved (gdb_stdout);
   1553  1.6  christos 	      break;
   1554  1.6  christos 	    default:
   1555  1.6  christos 	      fprintf_filtered (gdb_stdout, _("<error: %s>"), ex.message);
   1556  1.1  christos 	      break;
   1557  1.6  christos 	    }
   1558  1.1  christos 	}
   1559  1.5  christos       END_CATCH
   1560  1.5  christos     }
   1561  1.1  christos 
   1562  1.1  christos   if (caller_pc_p)
   1563  1.1  christos     fputs_filtered (paddress (gdbarch, caller_pc), gdb_stdout);
   1564  1.1  christos   printf_filtered ("\n");
   1565  1.1  christos 
   1566  1.1  christos   if (calling_frame_info == NULL)
   1567  1.1  christos     {
   1568  1.1  christos       enum unwind_stop_reason reason;
   1569  1.1  christos 
   1570  1.1  christos       reason = get_frame_unwind_stop_reason (fi);
   1571  1.3  christos       if (reason != UNWIND_NO_REASON)
   1572  1.1  christos 	printf_filtered (_(" Outermost frame: %s\n"),
   1573  1.1  christos 			 frame_stop_reason_string (fi));
   1574  1.1  christos     }
   1575  1.1  christos   else if (get_frame_type (fi) == TAILCALL_FRAME)
   1576  1.1  christos     puts_filtered (" tail call frame");
   1577  1.1  christos   else if (get_frame_type (fi) == INLINE_FRAME)
   1578  1.1  christos     printf_filtered (" inlined into frame %d",
   1579  1.1  christos 		     frame_relative_level (get_prev_frame (fi)));
   1580  1.1  christos   else
   1581  1.1  christos     {
   1582  1.1  christos       printf_filtered (" called by frame at ");
   1583  1.1  christos       fputs_filtered (paddress (gdbarch, get_frame_base (calling_frame_info)),
   1584  1.1  christos 		      gdb_stdout);
   1585  1.1  christos     }
   1586  1.1  christos   if (get_next_frame (fi) && calling_frame_info)
   1587  1.1  christos     puts_filtered (",");
   1588  1.1  christos   wrap_here ("   ");
   1589  1.1  christos   if (get_next_frame (fi))
   1590  1.1  christos     {
   1591  1.1  christos       printf_filtered (" caller of frame at ");
   1592  1.1  christos       fputs_filtered (paddress (gdbarch, get_frame_base (get_next_frame (fi))),
   1593  1.1  christos 		      gdb_stdout);
   1594  1.1  christos     }
   1595  1.1  christos   if (get_next_frame (fi) || calling_frame_info)
   1596  1.1  christos     puts_filtered ("\n");
   1597  1.1  christos 
   1598  1.1  christos   if (s)
   1599  1.1  christos     printf_filtered (" source language %s.\n",
   1600  1.1  christos 		     language_str (s->language));
   1601  1.1  christos 
   1602  1.1  christos   {
   1603  1.1  christos     /* Address of the argument list for this frame, or 0.  */
   1604  1.1  christos     CORE_ADDR arg_list = get_frame_args_address (fi);
   1605  1.1  christos     /* Number of args for this frame, or -1 if unknown.  */
   1606  1.1  christos     int numargs;
   1607  1.1  christos 
   1608  1.1  christos     if (arg_list == 0)
   1609  1.1  christos       printf_filtered (" Arglist at unknown address.\n");
   1610  1.1  christos     else
   1611  1.1  christos       {
   1612  1.1  christos 	printf_filtered (" Arglist at ");
   1613  1.1  christos 	fputs_filtered (paddress (gdbarch, arg_list), gdb_stdout);
   1614  1.1  christos 	printf_filtered (",");
   1615  1.1  christos 
   1616  1.1  christos 	if (!gdbarch_frame_num_args_p (gdbarch))
   1617  1.1  christos 	  {
   1618  1.1  christos 	    numargs = -1;
   1619  1.1  christos 	    puts_filtered (" args: ");
   1620  1.1  christos 	  }
   1621  1.1  christos 	else
   1622  1.1  christos 	  {
   1623  1.1  christos 	    numargs = gdbarch_frame_num_args (gdbarch, fi);
   1624  1.1  christos 	    gdb_assert (numargs >= 0);
   1625  1.1  christos 	    if (numargs == 0)
   1626  1.1  christos 	      puts_filtered (" no args.");
   1627  1.1  christos 	    else if (numargs == 1)
   1628  1.1  christos 	      puts_filtered (" 1 arg: ");
   1629  1.1  christos 	    else
   1630  1.1  christos 	      printf_filtered (" %d args: ", numargs);
   1631  1.1  christos 	  }
   1632  1.1  christos 	print_frame_args (func, fi, numargs, gdb_stdout);
   1633  1.1  christos 	puts_filtered ("\n");
   1634  1.1  christos       }
   1635  1.1  christos   }
   1636  1.1  christos   {
   1637  1.1  christos     /* Address of the local variables for this frame, or 0.  */
   1638  1.1  christos     CORE_ADDR arg_list = get_frame_locals_address (fi);
   1639  1.1  christos 
   1640  1.1  christos     if (arg_list == 0)
   1641  1.1  christos       printf_filtered (" Locals at unknown address,");
   1642  1.1  christos     else
   1643  1.1  christos       {
   1644  1.1  christos 	printf_filtered (" Locals at ");
   1645  1.1  christos 	fputs_filtered (paddress (gdbarch, arg_list), gdb_stdout);
   1646  1.1  christos 	printf_filtered (",");
   1647  1.1  christos       }
   1648  1.1  christos   }
   1649  1.1  christos 
   1650  1.1  christos   /* Print as much information as possible on the location of all the
   1651  1.1  christos      registers.  */
   1652  1.1  christos   {
   1653  1.1  christos     enum lval_type lval;
   1654  1.1  christos     int optimized;
   1655  1.1  christos     int unavailable;
   1656  1.1  christos     CORE_ADDR addr;
   1657  1.1  christos     int realnum;
   1658  1.1  christos     int count;
   1659  1.1  christos     int i;
   1660  1.1  christos     int need_nl = 1;
   1661  1.1  christos 
   1662  1.1  christos     /* The sp is special; what's displayed isn't the save address, but
   1663  1.1  christos        the value of the previous frame's sp.  This is a legacy thing,
   1664  1.1  christos        at one stage the frame cached the previous frame's SP instead
   1665  1.1  christos        of its address, hence it was easiest to just display the cached
   1666  1.1  christos        value.  */
   1667  1.1  christos     if (gdbarch_sp_regnum (gdbarch) >= 0)
   1668  1.1  christos       {
   1669  1.1  christos 	/* Find out the location of the saved stack pointer with out
   1670  1.1  christos            actually evaluating it.  */
   1671  1.1  christos 	frame_register_unwind (fi, gdbarch_sp_regnum (gdbarch),
   1672  1.1  christos 			       &optimized, &unavailable, &lval, &addr,
   1673  1.1  christos 			       &realnum, NULL);
   1674  1.1  christos 	if (!optimized && !unavailable && lval == not_lval)
   1675  1.1  christos 	  {
   1676  1.1  christos 	    enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   1677  1.1  christos 	    int sp_size = register_size (gdbarch, gdbarch_sp_regnum (gdbarch));
   1678  1.1  christos 	    gdb_byte value[MAX_REGISTER_SIZE];
   1679  1.1  christos 	    CORE_ADDR sp;
   1680  1.1  christos 
   1681  1.1  christos 	    frame_register_unwind (fi, gdbarch_sp_regnum (gdbarch),
   1682  1.1  christos 				   &optimized, &unavailable, &lval, &addr,
   1683  1.1  christos 				   &realnum, value);
   1684  1.1  christos 	    /* NOTE: cagney/2003-05-22: This is assuming that the
   1685  1.1  christos                stack pointer was packed as an unsigned integer.  That
   1686  1.1  christos                may or may not be valid.  */
   1687  1.1  christos 	    sp = extract_unsigned_integer (value, sp_size, byte_order);
   1688  1.1  christos 	    printf_filtered (" Previous frame's sp is ");
   1689  1.1  christos 	    fputs_filtered (paddress (gdbarch, sp), gdb_stdout);
   1690  1.1  christos 	    printf_filtered ("\n");
   1691  1.1  christos 	    need_nl = 0;
   1692  1.1  christos 	  }
   1693  1.1  christos 	else if (!optimized && !unavailable && lval == lval_memory)
   1694  1.1  christos 	  {
   1695  1.1  christos 	    printf_filtered (" Previous frame's sp at ");
   1696  1.1  christos 	    fputs_filtered (paddress (gdbarch, addr), gdb_stdout);
   1697  1.1  christos 	    printf_filtered ("\n");
   1698  1.1  christos 	    need_nl = 0;
   1699  1.1  christos 	  }
   1700  1.1  christos 	else if (!optimized && !unavailable && lval == lval_register)
   1701  1.1  christos 	  {
   1702  1.1  christos 	    printf_filtered (" Previous frame's sp in %s\n",
   1703  1.1  christos 			     gdbarch_register_name (gdbarch, realnum));
   1704  1.1  christos 	    need_nl = 0;
   1705  1.1  christos 	  }
   1706  1.1  christos 	/* else keep quiet.  */
   1707  1.1  christos       }
   1708  1.1  christos 
   1709  1.1  christos     count = 0;
   1710  1.1  christos     numregs = gdbarch_num_regs (gdbarch)
   1711  1.1  christos 	      + gdbarch_num_pseudo_regs (gdbarch);
   1712  1.1  christos     for (i = 0; i < numregs; i++)
   1713  1.1  christos       if (i != gdbarch_sp_regnum (gdbarch)
   1714  1.1  christos 	  && gdbarch_register_reggroup_p (gdbarch, i, all_reggroup))
   1715  1.1  christos 	{
   1716  1.1  christos 	  /* Find out the location of the saved register without
   1717  1.1  christos              fetching the corresponding value.  */
   1718  1.1  christos 	  frame_register_unwind (fi, i, &optimized, &unavailable,
   1719  1.1  christos 				 &lval, &addr, &realnum, NULL);
   1720  1.1  christos 	  /* For moment, only display registers that were saved on the
   1721  1.1  christos 	     stack.  */
   1722  1.1  christos 	  if (!optimized && !unavailable && lval == lval_memory)
   1723  1.1  christos 	    {
   1724  1.1  christos 	      if (count == 0)
   1725  1.1  christos 		puts_filtered (" Saved registers:\n ");
   1726  1.1  christos 	      else
   1727  1.1  christos 		puts_filtered (",");
   1728  1.1  christos 	      wrap_here (" ");
   1729  1.1  christos 	      printf_filtered (" %s at ",
   1730  1.1  christos 			       gdbarch_register_name (gdbarch, i));
   1731  1.1  christos 	      fputs_filtered (paddress (gdbarch, addr), gdb_stdout);
   1732  1.1  christos 	      count++;
   1733  1.1  christos 	    }
   1734  1.1  christos 	}
   1735  1.1  christos     if (count || need_nl)
   1736  1.1  christos       puts_filtered ("\n");
   1737  1.1  christos   }
   1738  1.1  christos 
   1739  1.1  christos   do_cleanups (back_to);
   1740  1.1  christos }
   1741  1.1  christos 
   1742  1.1  christos /* Print briefly all stack frames or just the innermost COUNT_EXP
   1743  1.1  christos    frames.  */
   1744  1.1  christos 
   1745  1.1  christos static void
   1746  1.1  christos backtrace_command_1 (char *count_exp, int show_locals, int no_filters,
   1747  1.1  christos 		     int from_tty)
   1748  1.1  christos {
   1749  1.1  christos   struct frame_info *fi;
   1750  1.1  christos   int count;
   1751  1.1  christos   int i;
   1752  1.3  christos   struct frame_info *trailing;
   1753  1.1  christos   int trailing_level, py_start = 0, py_end = 0;
   1754  1.1  christos   enum ext_lang_bt_status result = EXT_LANG_BT_ERROR;
   1755  1.1  christos 
   1756  1.1  christos   if (!target_has_stack)
   1757  1.1  christos     error (_("No stack."));
   1758  1.1  christos 
   1759  1.1  christos   /* The following code must do two things.  First, it must set the
   1760  1.1  christos      variable TRAILING to the frame from which we should start
   1761  1.1  christos      printing.  Second, it must set the variable count to the number
   1762  1.1  christos      of frames which we should print, or -1 if all of them.  */
   1763  1.1  christos   trailing = get_current_frame ();
   1764  1.1  christos 
   1765  1.1  christos   trailing_level = 0;
   1766  1.1  christos   if (count_exp)
   1767  1.1  christos     {
   1768  1.1  christos       count = parse_and_eval_long (count_exp);
   1769  1.1  christos       if (count < 0)
   1770  1.1  christos 	{
   1771  1.1  christos 	  struct frame_info *current;
   1772  1.1  christos 
   1773  1.1  christos 	  py_start = count;
   1774  1.1  christos 	  count = -count;
   1775  1.1  christos 
   1776  1.1  christos 	  current = trailing;
   1777  1.1  christos 	  while (current && count--)
   1778  1.1  christos 	    {
   1779  1.1  christos 	      QUIT;
   1780  1.1  christos 	      current = get_prev_frame (current);
   1781  1.1  christos 	    }
   1782  1.1  christos 
   1783  1.1  christos 	  /* Will stop when CURRENT reaches the top of the stack.
   1784  1.1  christos 	     TRAILING will be COUNT below it.  */
   1785  1.1  christos 	  while (current)
   1786  1.1  christos 	    {
   1787  1.1  christos 	      QUIT;
   1788  1.1  christos 	      trailing = get_prev_frame (trailing);
   1789  1.1  christos 	      current = get_prev_frame (current);
   1790  1.1  christos 	      trailing_level++;
   1791  1.1  christos 	    }
   1792  1.1  christos 
   1793  1.1  christos 	  count = -1;
   1794  1.1  christos 	}
   1795  1.1  christos       else
   1796  1.1  christos 	{
   1797  1.1  christos 	  py_start = 0;
   1798  1.1  christos 	  py_end = count;
   1799  1.1  christos 	}
   1800  1.1  christos     }
   1801  1.1  christos   else
   1802  1.1  christos     {
   1803  1.1  christos       py_end = -1;
   1804  1.1  christos       count = -1;
   1805  1.1  christos     }
   1806  1.1  christos 
   1807  1.1  christos   if (info_verbose)
   1808  1.1  christos     {
   1809  1.1  christos       /* Read in symbols for all of the frames.  Need to do this in a
   1810  1.1  christos          separate pass so that "Reading in symbols for xxx" messages
   1811  1.1  christos          don't screw up the appearance of the backtrace.  Also if
   1812  1.1  christos          people have strong opinions against reading symbols for
   1813  1.1  christos          backtrace this may have to be an option.  */
   1814  1.1  christos       i = count;
   1815  1.1  christos       for (fi = trailing; fi != NULL && i--; fi = get_prev_frame (fi))
   1816  1.1  christos 	{
   1817  1.1  christos 	  CORE_ADDR pc;
   1818  1.1  christos 
   1819  1.3  christos 	  QUIT;
   1820  1.1  christos 	  pc = get_frame_address_in_block (fi);
   1821  1.1  christos 	  expand_symtab_containing_pc (pc, find_pc_mapped_section (pc));
   1822  1.1  christos 	}
   1823  1.1  christos     }
   1824  1.1  christos 
   1825  1.1  christos   if (! no_filters)
   1826  1.3  christos     {
   1827  1.1  christos       int flags = PRINT_LEVEL | PRINT_FRAME_INFO | PRINT_ARGS;
   1828  1.1  christos       enum ext_lang_frame_args arg_type;
   1829  1.1  christos 
   1830  1.1  christos       if (show_locals)
   1831  1.1  christos 	flags |= PRINT_LOCALS;
   1832  1.1  christos 
   1833  1.1  christos       if (!strcmp (print_frame_arguments, "scalars"))
   1834  1.1  christos 	arg_type = CLI_SCALAR_VALUES;
   1835  1.1  christos       else if (!strcmp (print_frame_arguments, "all"))
   1836  1.1  christos 	arg_type = CLI_ALL_VALUES;
   1837  1.1  christos       else
   1838  1.3  christos 	arg_type = NO_VALUES;
   1839  1.3  christos 
   1840  1.3  christos       result = apply_ext_lang_frame_filter (get_current_frame (), flags,
   1841  1.3  christos 					    arg_type, current_uiout,
   1842  1.1  christos 					    py_start, py_end);
   1843  1.1  christos     }
   1844  1.1  christos 
   1845  1.3  christos   /* Run the inbuilt backtrace if there are no filters registered, or
   1846  1.1  christos      "no-filters" has been specified from the command.  */
   1847  1.1  christos   if (no_filters ||  result == EXT_LANG_BT_NO_FILTERS)
   1848  1.1  christos     {
   1849  1.1  christos       for (i = 0, fi = trailing; fi && count--; i++, fi = get_prev_frame (fi))
   1850  1.1  christos 	{
   1851  1.1  christos 	  QUIT;
   1852  1.1  christos 
   1853  1.1  christos 	  /* Don't use print_stack_frame; if an error() occurs it probably
   1854  1.1  christos 	     means further attempts to backtrace would fail (on the other
   1855  1.1  christos 	     hand, perhaps the code does or could be fixed to make sure
   1856  1.1  christos 	     the frame->prev field gets set to NULL in that case).  */
   1857  1.1  christos 
   1858  1.1  christos 	  print_frame_info (fi, 1, LOCATION, 1, 0);
   1859  1.1  christos 	  if (show_locals)
   1860  1.1  christos 	    {
   1861  1.1  christos 	      struct frame_id frame_id = get_frame_id (fi);
   1862  1.1  christos 
   1863  1.1  christos 	      print_frame_local_vars (fi, 1, gdb_stdout);
   1864  1.1  christos 
   1865  1.1  christos 	      /* print_frame_local_vars invalidates FI.  */
   1866  1.1  christos 	      fi = frame_find_by_id (frame_id);
   1867  1.1  christos 	      if (fi == NULL)
   1868  1.1  christos 		{
   1869  1.1  christos 		  trailing = NULL;
   1870  1.1  christos 		  warning (_("Unable to restore previously selected frame."));
   1871  1.1  christos 		  break;
   1872  1.1  christos 		}
   1873  1.1  christos 	    }
   1874  1.1  christos 
   1875  1.1  christos 	  /* Save the last frame to check for error conditions.  */
   1876  1.1  christos 	  trailing = fi;
   1877  1.1  christos 	}
   1878  1.1  christos 
   1879  1.1  christos       /* If we've stopped before the end, mention that.  */
   1880  1.1  christos       if (fi && from_tty)
   1881  1.1  christos 	printf_filtered (_("(More stack frames follow...)\n"));
   1882  1.1  christos 
   1883  1.1  christos       /* If we've run out of frames, and the reason appears to be an error
   1884  1.1  christos 	 condition, print it.  */
   1885  1.1  christos       if (fi == NULL && trailing != NULL)
   1886  1.1  christos 	{
   1887  1.1  christos 	  enum unwind_stop_reason reason;
   1888  1.1  christos 
   1889  1.1  christos 	  reason = get_frame_unwind_stop_reason (trailing);
   1890  1.3  christos 	  if (reason >= UNWIND_FIRST_ERROR)
   1891  1.1  christos 	    printf_filtered (_("Backtrace stopped: %s\n"),
   1892  1.1  christos 			     frame_stop_reason_string (trailing));
   1893  1.1  christos 	}
   1894  1.1  christos     }
   1895  1.1  christos }
   1896  1.1  christos 
   1897  1.1  christos static void
   1898  1.1  christos backtrace_command (char *arg, int from_tty)
   1899  1.1  christos {
   1900  1.1  christos   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
   1901  1.1  christos   int fulltrace_arg = -1, arglen = 0, argc = 0, no_filters  = -1;
   1902  1.1  christos   int user_arg = 0;
   1903  1.1  christos 
   1904  1.1  christos   if (arg)
   1905  1.1  christos     {
   1906  1.1  christos       char **argv;
   1907  1.1  christos       int i;
   1908  1.1  christos 
   1909  1.1  christos       argv = gdb_buildargv (arg);
   1910  1.1  christos       make_cleanup_freeargv (argv);
   1911  1.1  christos       argc = 0;
   1912  1.1  christos       for (i = 0; argv[i]; i++)
   1913  1.1  christos 	{
   1914  1.1  christos 	  unsigned int j;
   1915  1.6  christos 
   1916  1.1  christos 	  for (j = 0; j < strlen (argv[i]); j++)
   1917  1.1  christos 	    argv[i][j] = TOLOWER (argv[i][j]);
   1918  1.1  christos 
   1919  1.1  christos 	  if (no_filters < 0 && subset_compare (argv[i], "no-filters"))
   1920  1.1  christos 	    no_filters = argc;
   1921  1.1  christos 	  else
   1922  1.1  christos 	    {
   1923  1.1  christos 	      if (fulltrace_arg < 0 && subset_compare (argv[i], "full"))
   1924  1.1  christos 		fulltrace_arg = argc;
   1925  1.1  christos 	      else
   1926  1.1  christos 		{
   1927  1.1  christos 		  user_arg++;
   1928  1.1  christos 		  arglen += strlen (argv[i]);
   1929  1.1  christos 		}
   1930  1.1  christos 	    }
   1931  1.1  christos 	  argc++;
   1932  1.1  christos 	}
   1933  1.1  christos       arglen += user_arg;
   1934  1.1  christos       if (fulltrace_arg >= 0 || no_filters >= 0)
   1935  1.1  christos 	{
   1936  1.6  christos 	  if (arglen > 0)
   1937  1.1  christos 	    {
   1938  1.1  christos 	      arg = (char *) xmalloc (arglen + 1);
   1939  1.1  christos 	      make_cleanup (xfree, arg);
   1940  1.1  christos 	      arg[0] = 0;
   1941  1.1  christos 	      for (i = 0; i < argc; i++)
   1942  1.1  christos 		{
   1943  1.1  christos 		  if (i != fulltrace_arg && i != no_filters)
   1944  1.1  christos 		    {
   1945  1.1  christos 		      strcat (arg, argv[i]);
   1946  1.1  christos 		      strcat (arg, " ");
   1947  1.1  christos 		    }
   1948  1.1  christos 		}
   1949  1.1  christos 	    }
   1950  1.1  christos 	  else
   1951  1.1  christos 	    arg = NULL;
   1952  1.1  christos 	}
   1953  1.1  christos     }
   1954  1.1  christos 
   1955  1.1  christos   backtrace_command_1 (arg, fulltrace_arg >= 0 /* show_locals */,
   1956  1.1  christos 		       no_filters >= 0 /* no frame-filters */, from_tty);
   1957  1.1  christos 
   1958  1.1  christos   do_cleanups (old_chain);
   1959  1.1  christos }
   1960  1.1  christos 
   1961  1.1  christos /* Iterate over the local variables of a block B, calling CB with
   1962  1.1  christos    CB_DATA.  */
   1963  1.3  christos 
   1964  1.1  christos static void
   1965  1.1  christos iterate_over_block_locals (const struct block *b,
   1966  1.1  christos 			   iterate_over_block_arg_local_vars_cb cb,
   1967  1.1  christos 			   void *cb_data)
   1968  1.1  christos {
   1969  1.1  christos   struct block_iterator iter;
   1970  1.1  christos   struct symbol *sym;
   1971  1.1  christos 
   1972  1.1  christos   ALL_BLOCK_SYMBOLS (b, iter, sym)
   1973  1.1  christos     {
   1974  1.1  christos       switch (SYMBOL_CLASS (sym))
   1975  1.1  christos 	{
   1976  1.1  christos 	case LOC_LOCAL:
   1977  1.1  christos 	case LOC_REGISTER:
   1978  1.1  christos 	case LOC_STATIC:
   1979  1.1  christos 	case LOC_COMPUTED:
   1980  1.1  christos 	  if (SYMBOL_IS_ARGUMENT (sym))
   1981  1.1  christos 	    break;
   1982  1.1  christos 	  if (SYMBOL_DOMAIN (sym) == COMMON_BLOCK_DOMAIN)
   1983  1.1  christos 	    break;
   1984  1.1  christos 	  (*cb) (SYMBOL_PRINT_NAME (sym), sym, cb_data);
   1985  1.1  christos 	  break;
   1986  1.1  christos 
   1987  1.1  christos 	default:
   1988  1.1  christos 	  /* Ignore symbols which are not locals.  */
   1989  1.1  christos 	  break;
   1990  1.1  christos 	}
   1991  1.1  christos     }
   1992  1.1  christos }
   1993  1.1  christos 
   1994  1.1  christos 
   1995  1.1  christos /* Same, but print labels.  */
   1996  1.1  christos 
   1997  1.1  christos #if 0
   1998  1.1  christos /* Commented out, as the code using this function has also been
   1999  1.1  christos    commented out.  FIXME:brobecker/2009-01-13: Find out why the code
   2000  1.1  christos    was commented out in the first place.  The discussion introducing
   2001  1.1  christos    this change (2007-12-04: Support lexical blocks and function bodies
   2002  1.1  christos    that occupy non-contiguous address ranges) did not explain why
   2003  1.1  christos    this change was made.  */
   2004  1.1  christos static int
   2005  1.1  christos print_block_frame_labels (struct gdbarch *gdbarch, struct block *b,
   2006  1.1  christos 			  int *have_default, struct ui_file *stream)
   2007  1.1  christos {
   2008  1.1  christos   struct block_iterator iter;
   2009  1.1  christos   struct symbol *sym;
   2010  1.1  christos   int values_printed = 0;
   2011  1.1  christos 
   2012  1.1  christos   ALL_BLOCK_SYMBOLS (b, iter, sym)
   2013  1.1  christos     {
   2014  1.1  christos       if (strcmp (SYMBOL_LINKAGE_NAME (sym), "default") == 0)
   2015  1.1  christos 	{
   2016  1.1  christos 	  if (*have_default)
   2017  1.1  christos 	    continue;
   2018  1.1  christos 	  *have_default = 1;
   2019  1.1  christos 	}
   2020  1.1  christos       if (SYMBOL_CLASS (sym) == LOC_LABEL)
   2021  1.1  christos 	{
   2022  1.1  christos 	  struct symtab_and_line sal;
   2023  1.1  christos 	  struct value_print_options opts;
   2024  1.1  christos 
   2025  1.1  christos 	  sal = find_pc_line (SYMBOL_VALUE_ADDRESS (sym), 0);
   2026  1.1  christos 	  values_printed = 1;
   2027  1.1  christos 	  fputs_filtered (SYMBOL_PRINT_NAME (sym), stream);
   2028  1.1  christos 	  get_user_print_options (&opts);
   2029  1.1  christos 	  if (opts.addressprint)
   2030  1.1  christos 	    {
   2031  1.1  christos 	      fprintf_filtered (stream, " ");
   2032  1.1  christos 	      fputs_filtered (paddress (gdbarch, SYMBOL_VALUE_ADDRESS (sym)),
   2033  1.1  christos 			      stream);
   2034  1.1  christos 	    }
   2035  1.1  christos 	  fprintf_filtered (stream, " in file %s, line %d\n",
   2036  1.1  christos 			    sal.symtab->filename, sal.line);
   2037  1.1  christos 	}
   2038  1.1  christos     }
   2039  1.1  christos 
   2040  1.1  christos   return values_printed;
   2041  1.1  christos }
   2042  1.1  christos #endif
   2043  1.1  christos 
   2044  1.1  christos /* Iterate over all the local variables in block B, including all its
   2045  1.1  christos    superblocks, stopping when the top-level block is reached.  */
   2046  1.3  christos 
   2047  1.1  christos void
   2048  1.1  christos iterate_over_block_local_vars (const struct block *block,
   2049  1.1  christos 			       iterate_over_block_arg_local_vars_cb cb,
   2050  1.1  christos 			       void *cb_data)
   2051  1.1  christos {
   2052  1.1  christos   while (block)
   2053  1.1  christos     {
   2054  1.1  christos       iterate_over_block_locals (block, cb, cb_data);
   2055  1.1  christos       /* After handling the function's top-level block, stop.  Don't
   2056  1.1  christos 	 continue to its superblock, the block of per-file
   2057  1.1  christos 	 symbols.  */
   2058  1.1  christos       if (BLOCK_FUNCTION (block))
   2059  1.1  christos 	break;
   2060  1.1  christos       block = BLOCK_SUPERBLOCK (block);
   2061  1.1  christos     }
   2062  1.1  christos }
   2063  1.1  christos 
   2064  1.1  christos /* Data to be passed around in the calls to the locals and args
   2065  1.1  christos    iterators.  */
   2066  1.1  christos 
   2067  1.1  christos struct print_variable_and_value_data
   2068  1.1  christos {
   2069  1.1  christos   struct frame_id frame_id;
   2070  1.1  christos   int num_tabs;
   2071  1.1  christos   struct ui_file *stream;
   2072  1.1  christos   int values_printed;
   2073  1.1  christos };
   2074  1.1  christos 
   2075  1.1  christos /* The callback for the locals and args iterators.  */
   2076  1.1  christos 
   2077  1.1  christos static void
   2078  1.1  christos do_print_variable_and_value (const char *print_name,
   2079  1.1  christos 			     struct symbol *sym,
   2080  1.6  christos 			     void *cb_data)
   2081  1.6  christos {
   2082  1.1  christos   struct print_variable_and_value_data *p
   2083  1.1  christos     = (struct print_variable_and_value_data *) cb_data;
   2084  1.1  christos   struct frame_info *frame;
   2085  1.1  christos 
   2086  1.1  christos   frame = frame_find_by_id (p->frame_id);
   2087  1.1  christos   if (frame == NULL)
   2088  1.1  christos     {
   2089  1.1  christos       warning (_("Unable to restore previously selected frame."));
   2090  1.1  christos       return;
   2091  1.1  christos     }
   2092  1.1  christos 
   2093  1.1  christos   print_variable_and_value (print_name, sym, frame, p->stream, p->num_tabs);
   2094  1.1  christos 
   2095  1.1  christos   /* print_variable_and_value invalidates FRAME.  */
   2096  1.1  christos   frame = NULL;
   2097  1.1  christos 
   2098  1.1  christos   p->values_printed = 1;
   2099  1.1  christos }
   2100  1.1  christos 
   2101  1.1  christos /* Print all variables from the innermost up to the function block of FRAME.
   2102  1.1  christos    Print them with values to STREAM indented by NUM_TABS.
   2103  1.1  christos 
   2104  1.1  christos    This function will invalidate FRAME.  */
   2105  1.1  christos 
   2106  1.1  christos static void
   2107  1.1  christos print_frame_local_vars (struct frame_info *frame, int num_tabs,
   2108  1.1  christos 			struct ui_file *stream)
   2109  1.3  christos {
   2110  1.1  christos   struct print_variable_and_value_data cb_data;
   2111  1.6  christos   const struct block *block;
   2112  1.1  christos   CORE_ADDR pc;
   2113  1.1  christos   struct gdb_exception except = exception_none;
   2114  1.1  christos 
   2115  1.1  christos   if (!get_frame_pc_if_available (frame, &pc))
   2116  1.1  christos     {
   2117  1.1  christos       fprintf_filtered (stream,
   2118  1.1  christos 			_("PC unavailable, cannot determine locals.\n"));
   2119  1.1  christos       return;
   2120  1.1  christos     }
   2121  1.1  christos 
   2122  1.1  christos   block = get_frame_block (frame, 0);
   2123  1.1  christos   if (block == 0)
   2124  1.1  christos     {
   2125  1.1  christos       fprintf_filtered (stream, "No symbol table info available.\n");
   2126  1.1  christos       return;
   2127  1.1  christos     }
   2128  1.1  christos 
   2129  1.1  christos   cb_data.frame_id = get_frame_id (frame);
   2130  1.1  christos   cb_data.num_tabs = 4 * num_tabs;
   2131  1.1  christos   cb_data.stream = stream;
   2132  1.6  christos   cb_data.values_printed = 0;
   2133  1.6  christos 
   2134  1.6  christos   /* Temporarily change the selected frame to the given FRAME.
   2135  1.6  christos      This allows routines that rely on the selected frame instead
   2136  1.6  christos      of being given a frame as parameter to use the correct frame.  */
   2137  1.6  christos   select_frame (frame);
   2138  1.6  christos 
   2139  1.6  christos   TRY
   2140  1.6  christos     {
   2141  1.6  christos       iterate_over_block_local_vars (block,
   2142  1.6  christos 				     do_print_variable_and_value,
   2143  1.6  christos 				     &cb_data);
   2144  1.6  christos     }
   2145  1.6  christos   CATCH (ex, RETURN_MASK_ALL)
   2146  1.6  christos     {
   2147  1.6  christos       except = ex;
   2148  1.6  christos     }
   2149  1.6  christos   END_CATCH
   2150  1.6  christos 
   2151  1.6  christos   /* Restore the selected frame, and then rethrow if there was a problem.  */
   2152  1.6  christos   select_frame (frame_find_by_id (cb_data.frame_id));
   2153  1.1  christos   if (except.reason < 0)
   2154  1.1  christos     throw_exception (except);
   2155  1.1  christos 
   2156  1.1  christos   /* do_print_variable_and_value invalidates FRAME.  */
   2157  1.1  christos   frame = NULL;
   2158  1.1  christos 
   2159  1.1  christos   if (!cb_data.values_printed)
   2160  1.1  christos     fprintf_filtered (stream, _("No locals.\n"));
   2161  1.1  christos }
   2162  1.1  christos 
   2163  1.1  christos void
   2164  1.1  christos locals_info (char *args, int from_tty)
   2165  1.1  christos {
   2166  1.1  christos   print_frame_local_vars (get_selected_frame (_("No frame selected.")),
   2167  1.1  christos 			  0, gdb_stdout);
   2168  1.1  christos }
   2169  1.1  christos 
   2170  1.1  christos /* Iterate over all the argument variables in block B.
   2171  1.1  christos 
   2172  1.1  christos    Returns 1 if any argument was walked; 0 otherwise.  */
   2173  1.3  christos 
   2174  1.1  christos void
   2175  1.1  christos iterate_over_block_arg_vars (const struct block *b,
   2176  1.1  christos 			     iterate_over_block_arg_local_vars_cb cb,
   2177  1.1  christos 			     void *cb_data)
   2178  1.1  christos {
   2179  1.1  christos   struct block_iterator iter;
   2180  1.1  christos   struct symbol *sym, *sym2;
   2181  1.1  christos 
   2182  1.1  christos   ALL_BLOCK_SYMBOLS (b, iter, sym)
   2183  1.1  christos     {
   2184  1.1  christos       /* Don't worry about things which aren't arguments.  */
   2185  1.1  christos       if (SYMBOL_IS_ARGUMENT (sym))
   2186  1.1  christos 	{
   2187  1.1  christos 	  /* We have to look up the symbol because arguments can have
   2188  1.1  christos 	     two entries (one a parameter, one a local) and the one we
   2189  1.1  christos 	     want is the local, which lookup_symbol will find for us.
   2190  1.1  christos 	     This includes gcc1 (not gcc2) on the sparc when passing a
   2191  1.1  christos 	     small structure and gcc2 when the argument type is float
   2192  1.1  christos 	     and it is passed as a double and converted to float by
   2193  1.1  christos 	     the prologue (in the latter case the type of the LOC_ARG
   2194  1.1  christos 	     symbol is double and the type of the LOC_LOCAL symbol is
   2195  1.1  christos 	     float).  There are also LOC_ARG/LOC_REGISTER pairs which
   2196  1.1  christos 	     are not combined in symbol-reading.  */
   2197  1.6  christos 
   2198  1.1  christos 	  sym2 = lookup_symbol (SYMBOL_LINKAGE_NAME (sym),
   2199  1.1  christos 				b, VAR_DOMAIN, NULL).symbol;
   2200  1.1  christos 	  (*cb) (SYMBOL_PRINT_NAME (sym), sym2, cb_data);
   2201  1.1  christos 	}
   2202  1.1  christos     }
   2203  1.1  christos }
   2204  1.1  christos 
   2205  1.1  christos /* Print all argument variables of the function of FRAME.
   2206  1.1  christos    Print them with values to STREAM.
   2207  1.1  christos 
   2208  1.1  christos    This function will invalidate FRAME.  */
   2209  1.1  christos 
   2210  1.1  christos static void
   2211  1.1  christos print_frame_arg_vars (struct frame_info *frame, struct ui_file *stream)
   2212  1.1  christos {
   2213  1.1  christos   struct print_variable_and_value_data cb_data;
   2214  1.1  christos   struct symbol *func;
   2215  1.1  christos   CORE_ADDR pc;
   2216  1.1  christos 
   2217  1.1  christos   if (!get_frame_pc_if_available (frame, &pc))
   2218  1.1  christos     {
   2219  1.1  christos       fprintf_filtered (stream, _("PC unavailable, cannot determine args.\n"));
   2220  1.1  christos       return;
   2221  1.1  christos     }
   2222  1.1  christos 
   2223  1.1  christos   func = get_frame_function (frame);
   2224  1.1  christos   if (func == NULL)
   2225  1.1  christos     {
   2226  1.1  christos       fprintf_filtered (stream, _("No symbol table info available.\n"));
   2227  1.1  christos       return;
   2228  1.1  christos     }
   2229  1.1  christos 
   2230  1.1  christos   cb_data.frame_id = get_frame_id (frame);
   2231  1.1  christos   cb_data.num_tabs = 0;
   2232  1.1  christos   cb_data.stream = gdb_stdout;
   2233  1.1  christos   cb_data.values_printed = 0;
   2234  1.1  christos 
   2235  1.1  christos   iterate_over_block_arg_vars (SYMBOL_BLOCK_VALUE (func),
   2236  1.1  christos 			       do_print_variable_and_value, &cb_data);
   2237  1.1  christos 
   2238  1.1  christos   /* do_print_variable_and_value invalidates FRAME.  */
   2239  1.1  christos   frame = NULL;
   2240  1.1  christos 
   2241  1.1  christos   if (!cb_data.values_printed)
   2242  1.1  christos     fprintf_filtered (stream, _("No arguments.\n"));
   2243  1.1  christos }
   2244  1.1  christos 
   2245  1.1  christos void
   2246  1.1  christos args_info (char *ignore, int from_tty)
   2247  1.1  christos {
   2248  1.1  christos   print_frame_arg_vars (get_selected_frame (_("No frame selected.")),
   2249  1.1  christos 			gdb_stdout);
   2250  1.1  christos }
   2251  1.1  christos 
   2252  1.1  christos /* Select frame FRAME.  Also print the stack frame and show the source
   2253  1.1  christos    if this is the tui version.  */
   2254  1.1  christos static void
   2255  1.1  christos select_and_print_frame (struct frame_info *frame)
   2256  1.1  christos {
   2257  1.1  christos   select_frame (frame);
   2258  1.1  christos   if (frame)
   2259  1.1  christos     print_stack_frame (frame, 1, SRC_AND_LOC, 1);
   2260  1.1  christos }
   2261  1.1  christos 
   2262  1.1  christos /* Return the symbol-block in which the selected frame is executing.
   2264  1.1  christos    Can return zero under various legitimate circumstances.
   2265  1.1  christos 
   2266  1.1  christos    If ADDR_IN_BLOCK is non-zero, set *ADDR_IN_BLOCK to the relevant
   2267  1.3  christos    code address within the block returned.  We use this to decide
   2268  1.1  christos    which macros are in scope.  */
   2269  1.1  christos 
   2270  1.1  christos const struct block *
   2271  1.1  christos get_selected_block (CORE_ADDR *addr_in_block)
   2272  1.1  christos {
   2273  1.1  christos   if (!has_stack_frames ())
   2274  1.1  christos     return 0;
   2275  1.1  christos 
   2276  1.1  christos   return get_frame_block (get_selected_frame (NULL), addr_in_block);
   2277  1.1  christos }
   2278  1.1  christos 
   2279  1.1  christos /* Find a frame a certain number of levels away from FRAME.
   2280  1.1  christos    LEVEL_OFFSET_PTR points to an int containing the number of levels.
   2281  1.1  christos    Positive means go to earlier frames (up); negative, the reverse.
   2282  1.1  christos    The int that contains the number of levels is counted toward
   2283  1.1  christos    zero as the frames for those levels are found.
   2284  1.1  christos    If the top or bottom frame is reached, that frame is returned,
   2285  1.1  christos    but the final value of *LEVEL_OFFSET_PTR is nonzero and indicates
   2286  1.1  christos    how much farther the original request asked to go.  */
   2287  1.1  christos 
   2288  1.1  christos struct frame_info *
   2289  1.1  christos find_relative_frame (struct frame_info *frame, int *level_offset_ptr)
   2290  1.1  christos {
   2291  1.1  christos   /* Going up is simple: just call get_prev_frame enough times or
   2292  1.1  christos      until the initial frame is reached.  */
   2293  1.1  christos   while (*level_offset_ptr > 0)
   2294  1.1  christos     {
   2295  1.1  christos       struct frame_info *prev = get_prev_frame (frame);
   2296  1.1  christos 
   2297  1.1  christos       if (!prev)
   2298  1.1  christos 	break;
   2299  1.1  christos       (*level_offset_ptr)--;
   2300  1.1  christos       frame = prev;
   2301  1.1  christos     }
   2302  1.1  christos 
   2303  1.1  christos   /* Going down is just as simple.  */
   2304  1.1  christos   while (*level_offset_ptr < 0)
   2305  1.1  christos     {
   2306  1.1  christos       struct frame_info *next = get_next_frame (frame);
   2307  1.1  christos 
   2308  1.1  christos       if (!next)
   2309  1.1  christos 	break;
   2310  1.1  christos       (*level_offset_ptr)++;
   2311  1.1  christos       frame = next;
   2312  1.1  christos     }
   2313  1.1  christos 
   2314  1.1  christos   return frame;
   2315  1.1  christos }
   2316  1.1  christos 
   2317  1.1  christos /* The "select_frame" command.  With no argument this is a NOP.
   2318  1.1  christos    Select the frame at level LEVEL_EXP if it is a valid level.
   2319  1.1  christos    Otherwise, treat LEVEL_EXP as an address expression and select it.
   2320  1.1  christos 
   2321  1.1  christos    See parse_frame_specification for more info on proper frame
   2322  1.1  christos    expressions.  */
   2323  1.1  christos 
   2324  1.6  christos void
   2325  1.6  christos select_frame_command (char *level_exp, int from_tty)
   2326  1.6  christos {
   2327  1.6  christos   struct frame_info *prev_frame = get_selected_frame_if_set ();
   2328  1.6  christos 
   2329  1.1  christos   select_frame (parse_frame_specification (level_exp, NULL));
   2330  1.1  christos   if (get_selected_frame_if_set () != prev_frame)
   2331  1.1  christos     observer_notify_user_selected_context_changed (USER_SELECTED_FRAME);
   2332  1.1  christos }
   2333  1.1  christos 
   2334  1.1  christos /* The "frame" command.  With no argument, print the selected frame
   2335  1.1  christos    briefly.  With an argument, behave like select_frame and then print
   2336  1.1  christos    the selected frame.  */
   2337  1.1  christos 
   2338  1.6  christos static void
   2339  1.6  christos frame_command (char *level_exp, int from_tty)
   2340  1.6  christos {
   2341  1.6  christos   struct frame_info *prev_frame = get_selected_frame_if_set ();
   2342  1.6  christos 
   2343  1.6  christos   select_frame (parse_frame_specification (level_exp, NULL));
   2344  1.6  christos   if (get_selected_frame_if_set () != prev_frame)
   2345  1.1  christos     observer_notify_user_selected_context_changed (USER_SELECTED_FRAME);
   2346  1.1  christos   else
   2347  1.1  christos     print_selected_thread_frame (current_uiout, USER_SELECTED_FRAME);
   2348  1.1  christos }
   2349  1.1  christos 
   2350  1.1  christos /* Select the frame up one or COUNT_EXP stack levels from the
   2351  1.3  christos    previously selected frame, and print it briefly.  */
   2352  1.1  christos 
   2353  1.1  christos static void
   2354  1.1  christos up_silently_base (const char *count_exp)
   2355  1.1  christos {
   2356  1.1  christos   struct frame_info *frame;
   2357  1.1  christos   int count = 1;
   2358  1.1  christos 
   2359  1.1  christos   if (count_exp)
   2360  1.1  christos     count = parse_and_eval_long (count_exp);
   2361  1.1  christos 
   2362  1.1  christos   frame = find_relative_frame (get_selected_frame ("No stack."), &count);
   2363  1.1  christos   if (count != 0 && count_exp == NULL)
   2364  1.1  christos     error (_("Initial frame selected; you cannot go up."));
   2365  1.1  christos   select_frame (frame);
   2366  1.1  christos }
   2367  1.1  christos 
   2368  1.1  christos static void
   2369  1.1  christos up_silently_command (char *count_exp, int from_tty)
   2370  1.1  christos {
   2371  1.1  christos   up_silently_base (count_exp);
   2372  1.1  christos }
   2373  1.1  christos 
   2374  1.1  christos static void
   2375  1.6  christos up_command (char *count_exp, int from_tty)
   2376  1.1  christos {
   2377  1.1  christos   up_silently_base (count_exp);
   2378  1.1  christos   observer_notify_user_selected_context_changed (USER_SELECTED_FRAME);
   2379  1.1  christos }
   2380  1.1  christos 
   2381  1.1  christos /* Select the frame down one or COUNT_EXP stack levels from the previously
   2382  1.3  christos    selected frame, and print it briefly.  */
   2383  1.1  christos 
   2384  1.1  christos static void
   2385  1.1  christos down_silently_base (const char *count_exp)
   2386  1.1  christos {
   2387  1.1  christos   struct frame_info *frame;
   2388  1.1  christos   int count = -1;
   2389  1.1  christos 
   2390  1.1  christos   if (count_exp)
   2391  1.1  christos     count = -parse_and_eval_long (count_exp);
   2392  1.1  christos 
   2393  1.1  christos   frame = find_relative_frame (get_selected_frame ("No stack."), &count);
   2394  1.1  christos   if (count != 0 && count_exp == NULL)
   2395  1.1  christos     {
   2396  1.1  christos       /* We only do this if COUNT_EXP is not specified.  That way
   2397  1.1  christos          "down" means to really go down (and let me know if that is
   2398  1.1  christos          impossible), but "down 9999" can be used to mean go all the
   2399  1.1  christos          way down without getting an error.  */
   2400  1.1  christos 
   2401  1.1  christos       error (_("Bottom (innermost) frame selected; you cannot go down."));
   2402  1.1  christos     }
   2403  1.1  christos 
   2404  1.1  christos   select_frame (frame);
   2405  1.1  christos }
   2406  1.1  christos 
   2407  1.1  christos static void
   2408  1.1  christos down_silently_command (char *count_exp, int from_tty)
   2409  1.1  christos {
   2410  1.1  christos   down_silently_base (count_exp);
   2411  1.1  christos }
   2412  1.1  christos 
   2413  1.1  christos static void
   2414  1.6  christos down_command (char *count_exp, int from_tty)
   2415  1.1  christos {
   2416  1.1  christos   down_silently_base (count_exp);
   2417  1.1  christos   observer_notify_user_selected_context_changed (USER_SELECTED_FRAME);
   2418  1.1  christos }
   2419  1.1  christos 
   2420  1.1  christos void
   2421  1.1  christos return_command (char *retval_exp, int from_tty)
   2422  1.1  christos {
   2423  1.1  christos   /* Initialize it just to avoid a GCC false warning.  */
   2424  1.1  christos   enum return_value_convention rv_conv = RETURN_VALUE_STRUCT_CONVENTION;
   2425  1.1  christos   struct frame_info *thisframe;
   2426  1.1  christos   struct gdbarch *gdbarch;
   2427  1.1  christos   struct symbol *thisfun;
   2428  1.1  christos   struct value *return_value = NULL;
   2429  1.1  christos   struct value *function = NULL;
   2430  1.1  christos   const char *query_prefix = "";
   2431  1.1  christos 
   2432  1.1  christos   thisframe = get_selected_frame ("No selected frame.");
   2433  1.1  christos   thisfun = get_frame_function (thisframe);
   2434  1.1  christos   gdbarch = get_frame_arch (thisframe);
   2435  1.1  christos 
   2436  1.1  christos   if (get_frame_type (get_current_frame ()) == INLINE_FRAME)
   2437  1.1  christos     error (_("Can not force return from an inlined function."));
   2438  1.1  christos 
   2439  1.1  christos   /* Compute the return value.  If the computation triggers an error,
   2440  1.1  christos      let it bail.  If the return type can't be handled, set
   2441  1.1  christos      RETURN_VALUE to NULL, and QUERY_PREFIX to an informational
   2442  1.1  christos      message.  */
   2443  1.1  christos   if (retval_exp)
   2444  1.1  christos     {
   2445  1.1  christos       struct expression *retval_expr = parse_expression (retval_exp);
   2446  1.1  christos       struct cleanup *old_chain = make_cleanup (xfree, retval_expr);
   2447  1.1  christos       struct type *return_type = NULL;
   2448  1.1  christos 
   2449  1.1  christos       /* Compute the return value.  Should the computation fail, this
   2450  1.1  christos          call throws an error.  */
   2451  1.1  christos       return_value = evaluate_expression (retval_expr);
   2452  1.1  christos 
   2453  1.1  christos       /* Cast return value to the return type of the function.  Should
   2454  1.1  christos          the cast fail, this call throws an error.  */
   2455  1.1  christos       if (thisfun != NULL)
   2456  1.1  christos 	return_type = TYPE_TARGET_TYPE (SYMBOL_TYPE (thisfun));
   2457  1.1  christos       if (return_type == NULL)
   2458  1.1  christos       	{
   2459  1.1  christos 	  if (retval_expr->elts[0].opcode != UNOP_CAST
   2460  1.1  christos 	      && retval_expr->elts[0].opcode != UNOP_CAST_TYPE)
   2461  1.1  christos 	    error (_("Return value type not available for selected "
   2462  1.1  christos 		     "stack frame.\n"
   2463  1.1  christos 		     "Please use an explicit cast of the value to return."));
   2464  1.6  christos 	  return_type = value_type (return_value);
   2465  1.1  christos 	}
   2466  1.1  christos       do_cleanups (old_chain);
   2467  1.1  christos       return_type = check_typedef (return_type);
   2468  1.1  christos       return_value = value_cast (return_type, return_value);
   2469  1.1  christos 
   2470  1.1  christos       /* Make sure the value is fully evaluated.  It may live in the
   2471  1.1  christos          stack frame we're about to pop.  */
   2472  1.1  christos       if (value_lazy (return_value))
   2473  1.6  christos 	value_fetch_lazy (return_value);
   2474  1.1  christos 
   2475  1.1  christos       if (thisfun != NULL)
   2476  1.1  christos 	function = read_var_value (thisfun, NULL, thisframe);
   2477  1.1  christos 
   2478  1.1  christos       rv_conv = RETURN_VALUE_REGISTER_CONVENTION;
   2479  1.1  christos       if (TYPE_CODE (return_type) == TYPE_CODE_VOID)
   2480  1.1  christos 	/* If the return-type is "void", don't try to find the
   2481  1.1  christos            return-value's location.  However, do still evaluate the
   2482  1.1  christos            return expression so that, even when the expression result
   2483  1.1  christos            is discarded, side effects such as "return i++" still
   2484  1.1  christos            occur.  */
   2485  1.1  christos 	return_value = NULL;
   2486  1.1  christos       else if (thisfun != NULL)
   2487  1.1  christos 	{
   2488  1.1  christos 	  rv_conv = struct_return_convention (gdbarch, function, return_type);
   2489  1.1  christos 	  if (rv_conv == RETURN_VALUE_STRUCT_CONVENTION
   2490  1.1  christos 	      || rv_conv == RETURN_VALUE_ABI_RETURNS_ADDRESS)
   2491  1.1  christos 	    {
   2492  1.1  christos 	      query_prefix = "The location at which to store the "
   2493  1.1  christos 		"function's return value is unknown.\n"
   2494  1.1  christos 		"If you continue, the return value "
   2495  1.1  christos 		"that you specified will be ignored.\n";
   2496  1.1  christos 	      return_value = NULL;
   2497  1.1  christos 	    }
   2498  1.1  christos 	}
   2499  1.1  christos     }
   2500  1.1  christos 
   2501  1.1  christos   /* Does an interactive user really want to do this?  Include
   2502  1.1  christos      information, such as how well GDB can handle the return value, in
   2503  1.1  christos      the query message.  */
   2504  1.1  christos   if (from_tty)
   2505  1.1  christos     {
   2506  1.1  christos       int confirmed;
   2507  1.1  christos 
   2508  1.1  christos       if (thisfun == NULL)
   2509  1.5  christos 	confirmed = query (_("%sMake selected stack frame return now? "),
   2510  1.5  christos 			   query_prefix);
   2511  1.5  christos       else
   2512  1.5  christos 	{
   2513  1.5  christos 	  if (TYPE_NO_RETURN (thisfun->type))
   2514  1.5  christos 	    warning (_("Function does not return normally to caller."));
   2515  1.1  christos 	  confirmed = query (_("%sMake %s return now? "), query_prefix,
   2516  1.1  christos 			     SYMBOL_PRINT_NAME (thisfun));
   2517  1.1  christos 	}
   2518  1.1  christos       if (!confirmed)
   2519  1.1  christos 	error (_("Not confirmed"));
   2520  1.1  christos     }
   2521  1.1  christos 
   2522  1.1  christos   /* Discard the selected frame and all frames inner-to it.  */
   2523  1.1  christos   frame_pop (get_selected_frame (NULL));
   2524  1.1  christos 
   2525  1.1  christos   /* Store RETURN_VALUE in the just-returned register set.  */
   2526  1.1  christos   if (return_value != NULL)
   2527  1.1  christos     {
   2528  1.1  christos       struct type *return_type = value_type (return_value);
   2529  1.1  christos       struct gdbarch *gdbarch = get_regcache_arch (get_current_regcache ());
   2530  1.1  christos 
   2531  1.1  christos       gdb_assert (rv_conv != RETURN_VALUE_STRUCT_CONVENTION
   2532  1.1  christos 		  && rv_conv != RETURN_VALUE_ABI_RETURNS_ADDRESS);
   2533  1.1  christos       gdbarch_return_value (gdbarch, function, return_type,
   2534  1.1  christos 			    get_current_regcache (), NULL /*read*/,
   2535  1.1  christos 			    value_contents (return_value) /*write*/);
   2536  1.1  christos     }
   2537  1.1  christos 
   2538  1.1  christos   /* If we are at the end of a call dummy now, pop the dummy frame
   2539  1.1  christos      too.  */
   2540  1.6  christos   if (get_frame_type (get_current_frame ()) == DUMMY_FRAME)
   2541  1.1  christos     frame_pop (get_current_frame ());
   2542  1.1  christos 
   2543  1.6  christos   select_frame (get_current_frame ());
   2544  1.1  christos   /* If interactive, print the frame that is now current.  */
   2545  1.1  christos   if (from_tty)
   2546  1.1  christos     print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1);
   2547  1.1  christos }
   2548  1.1  christos 
   2549  1.1  christos /* Sets the scope to input function name, provided that the function
   2550  1.1  christos    is within the current stack frame.  */
   2551  1.1  christos 
   2552  1.1  christos struct function_bounds
   2553  1.1  christos {
   2554  1.1  christos   CORE_ADDR low, high;
   2555  1.1  christos };
   2556  1.1  christos 
   2557  1.1  christos static void
   2558  1.1  christos func_command (char *arg, int from_tty)
   2559  1.1  christos {
   2560  1.1  christos   struct frame_info *frame;
   2561  1.1  christos   int found = 0;
   2562  1.1  christos   struct symtabs_and_lines sals;
   2563  1.1  christos   int i;
   2564  1.1  christos   int level = 1;
   2565  1.6  christos   struct function_bounds *func_bounds = NULL;
   2566  1.1  christos   struct cleanup *cleanups;
   2567  1.1  christos 
   2568  1.6  christos   if (arg == NULL)
   2569  1.1  christos     return;
   2570  1.1  christos 
   2571  1.6  christos   frame = get_current_frame ();
   2572  1.1  christos   sals = decode_line_with_current_source (arg, DECODE_LINE_FUNFIRSTLINE);
   2573  1.1  christos   cleanups = make_cleanup (xfree, sals.sals);
   2574  1.1  christos   func_bounds = XNEWVEC (struct function_bounds, sals.nelts);
   2575  1.1  christos   make_cleanup (xfree, func_bounds);
   2576  1.1  christos   for (i = 0; (i < sals.nelts && !found); i++)
   2577  1.1  christos     {
   2578  1.1  christos       if (sals.sals[i].pspace != current_program_space)
   2579  1.1  christos 	func_bounds[i].low = func_bounds[i].high = 0;
   2580  1.1  christos       else if (sals.sals[i].pc == 0
   2581  1.1  christos 	       || find_pc_partial_function (sals.sals[i].pc, NULL,
   2582  1.1  christos 					    &func_bounds[i].low,
   2583  1.1  christos 					    &func_bounds[i].high) == 0)
   2584  1.1  christos 	{
   2585  1.1  christos 	  func_bounds[i].low = func_bounds[i].high = 0;
   2586  1.1  christos 	}
   2587  1.1  christos     }
   2588  1.1  christos 
   2589  1.1  christos   do
   2590  1.1  christos     {
   2591  1.1  christos       for (i = 0; (i < sals.nelts && !found); i++)
   2592  1.1  christos 	found = (get_frame_pc (frame) >= func_bounds[i].low
   2593  1.1  christos 		 && get_frame_pc (frame) < func_bounds[i].high);
   2594  1.1  christos       if (!found)
   2595  1.1  christos 	{
   2596  1.1  christos 	  level = 1;
   2597  1.1  christos 	  frame = find_relative_frame (frame, &level);
   2598  1.1  christos 	}
   2599  1.1  christos     }
   2600  1.1  christos   while (!found && level == 0);
   2601  1.1  christos 
   2602  1.1  christos   do_cleanups (cleanups);
   2603  1.1  christos 
   2604  1.1  christos   if (!found)
   2605  1.1  christos     printf_filtered (_("'%s' not within current stack frame.\n"), arg);
   2606  1.1  christos   else if (frame != get_selected_frame (NULL))
   2607  1.1  christos     select_and_print_frame (frame);
   2608  1.1  christos }
   2609  1.1  christos 
   2610  1.1  christos 
   2612  1.1  christos /* Provide a prototype to silence -Wmissing-prototypes.  */
   2613  1.1  christos void _initialize_stack (void);
   2614  1.1  christos 
   2615  1.1  christos void
   2616  1.1  christos _initialize_stack (void)
   2617  1.1  christos {
   2618  1.1  christos   add_com ("return", class_stack, return_command, _("\
   2619  1.1  christos Make selected stack frame return to its caller.\n\
   2620  1.1  christos Control remains in the debugger, but when you continue\n\
   2621  1.1  christos execution will resume in the frame above the one now selected.\n\
   2622  1.1  christos If an argument is given, it is an expression for the value to return."));
   2623  1.1  christos 
   2624  1.1  christos   add_com ("up", class_stack, up_command, _("\
   2625  1.1  christos Select and print stack frame that called this one.\n\
   2626  1.1  christos An argument says how many frames up to go."));
   2627  1.1  christos   add_com ("up-silently", class_support, up_silently_command, _("\
   2628  1.1  christos Same as the `up' command, but does not print anything.\n\
   2629  1.1  christos This is useful in command scripts."));
   2630  1.1  christos 
   2631  1.1  christos   add_com ("down", class_stack, down_command, _("\
   2632  1.1  christos Select and print stack frame called by this one.\n\
   2633  1.1  christos An argument says how many frames down to go."));
   2634  1.1  christos   add_com_alias ("do", "down", class_stack, 1);
   2635  1.1  christos   add_com_alias ("dow", "down", class_stack, 1);
   2636  1.1  christos   add_com ("down-silently", class_support, down_silently_command, _("\
   2637  1.1  christos Same as the `down' command, but does not print anything.\n\
   2638  1.1  christos This is useful in command scripts."));
   2639  1.1  christos 
   2640  1.1  christos   add_com ("frame", class_stack, frame_command, _("\
   2641  1.1  christos Select and print a stack frame.\nWith no argument, \
   2642  1.1  christos print the selected stack frame.  (See also \"info frame\").\n\
   2643  1.1  christos An argument specifies the frame to select.\n\
   2644  1.1  christos It can be a stack frame number or the address of the frame.\n\
   2645  1.1  christos With argument, nothing is printed if input is coming from\n\
   2646  1.6  christos a command file or a user-defined command."));
   2647  1.1  christos 
   2648  1.1  christos   add_com_alias ("f", "frame", class_stack, 1);
   2649  1.6  christos 
   2650  1.6  christos   add_com_suppress_notification ("select-frame", class_stack, select_frame_command, _("\
   2651  1.1  christos Select a stack frame without printing anything.\n\
   2652  1.1  christos An argument specifies the frame to select.\n\
   2653  1.1  christos It can be a stack frame number or the address of the frame.\n"),
   2654  1.1  christos 		 &cli_suppress_notification.user_selected_context);
   2655  1.1  christos 
   2656  1.1  christos   add_com ("backtrace", class_stack, backtrace_command, _("\
   2657  1.1  christos Print backtrace of all stack frames, or innermost COUNT frames.\n\
   2658  1.1  christos With a negative argument, print outermost -COUNT frames.\nUse of the \
   2659  1.1  christos 'full' qualifier also prints the values of the local variables.\n\
   2660  1.1  christos Use of the 'no-filters' qualifier prohibits frame filters from executing\n\
   2661  1.1  christos on this backtrace.\n"));
   2662  1.1  christos   add_com_alias ("bt", "backtrace", class_stack, 0);
   2663  1.1  christos 
   2664  1.1  christos   add_com_alias ("where", "backtrace", class_alias, 0);
   2665  1.1  christos   add_info ("stack", backtrace_command,
   2666  1.1  christos 	    _("Backtrace of the stack, or innermost COUNT frames."));
   2667  1.1  christos   add_info_alias ("s", "stack", 1);
   2668  1.1  christos   add_info ("frame", frame_info,
   2669  1.1  christos 	    _("All about selected stack frame, or frame at ADDR."));
   2670  1.1  christos   add_info_alias ("f", "frame", 1);
   2671  1.1  christos   add_info ("locals", locals_info,
   2672  1.1  christos 	    _("Local variables of current stack frame."));
   2673  1.1  christos   add_info ("args", args_info,
   2674  1.1  christos 	    _("Argument variables of current stack frame."));
   2675  1.1  christos 
   2676  1.1  christos   if (dbx_commands)
   2677  1.1  christos     add_com ("func", class_stack, func_command, _("\
   2678  1.1  christos Select the stack frame that contains <func>.\n\
   2679  1.1  christos Usage: func <name>\n"));
   2680  1.1  christos 
   2681  1.1  christos   add_setshow_enum_cmd ("frame-arguments", class_stack,
   2682  1.1  christos 			print_frame_arguments_choices, &print_frame_arguments,
   2683  1.1  christos 			_("Set printing of non-scalar frame arguments"),
   2684  1.1  christos 			_("Show printing of non-scalar frame arguments"),
   2685  1.1  christos 			NULL, NULL, NULL, &setprintlist, &showprintlist);
   2686  1.1  christos 
   2687  1.1  christos   add_setshow_boolean_cmd ("frame-arguments", no_class,
   2688  1.1  christos 			   &print_raw_frame_arguments, _("\
   2689  1.1  christos Set whether to print frame arguments in raw form."), _("\
   2690  1.1  christos Show whether to print frame arguments in raw form."), _("\
   2691  1.1  christos If set, frame arguments are printed in raw form, bypassing any\n\
   2692  1.1  christos pretty-printers for that value."),
   2693  1.1  christos 			   NULL, NULL,
   2694  1.1  christos 			   &setprintrawlist, &showprintrawlist);
   2695  1.1  christos 
   2696  1.1  christos   add_setshow_auto_boolean_cmd ("disassemble-next-line", class_stack,
   2697  1.1  christos 			        &disassemble_next_line, _("\
   2698  1.1  christos Set whether to disassemble next source line or insn when execution stops."),
   2699  1.1  christos 				_("\
   2700  1.1  christos Show whether to disassemble next source line or insn when execution stops."),
   2701  1.1  christos 				_("\
   2702  1.1  christos If ON, GDB will display disassembly of the next source line, in addition\n\
   2703  1.1  christos to displaying the source line itself.  If the next source line cannot\n\
   2704  1.1  christos be displayed (e.g., source is unavailable or there's no line info), GDB\n\
   2705  1.1  christos will display disassembly of next instruction instead of showing the\n\
   2706  1.1  christos source line.\n\
   2707  1.1  christos If AUTO, display disassembly of next instruction only if the source line\n\
   2708  1.1  christos cannot be displayed.\n\
   2709  1.1  christos If OFF (which is the default), never display the disassembly of the next\n\
   2710  1.1  christos source line."),
   2711  1.1  christos 			        NULL,
   2712  1.1  christos 			        show_disassemble_next_line,
   2713  1.1  christos 			        &setlist, &showlist);
   2714  1.1  christos   disassemble_next_line = AUTO_BOOLEAN_FALSE;
   2715  1.1  christos 
   2716  1.1  christos   add_setshow_enum_cmd ("entry-values", class_stack,
   2717  1.1  christos 			print_entry_values_choices, &print_entry_values,
   2718  1.1  christos 			_("Set printing of function arguments at function "
   2719  1.1  christos 			  "entry"),
   2720  1.1  christos 			_("Show printing of function arguments at function "
   2721  1.1  christos 			  "entry"),
   2722  1.1  christos 			_("\
   2723  1.1  christos GDB can sometimes determine the values of function arguments at entry,\n\
   2724  1.1  christos in addition to their current values.  This option tells GDB whether\n\
   2725                to print the current value, the value at entry (marked as val@entry),\n\
   2726                or both.  Note that one or both of these values may be <optimized out>."),
   2727                			NULL, NULL, &setprintlist, &showprintlist);
   2728                }
   2729