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