OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.0/] [gdb/] [stack.c] - Blame information for rev 104

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 104 markom
/* Print and select stack frames for GDB, the GNU debugger.
2
   Copyright 1986, 1987, 1989, 1991-1996, 1998-2000 Free Software Foundation, Inc.
3
 
4
   This file is part of GDB.
5
 
6
   This program is free software; you can redistribute it and/or modify
7
   it under the terms of the GNU General Public License as published by
8
   the Free Software Foundation; either version 2 of the License, or
9
   (at your option) any later version.
10
 
11
   This program is distributed in the hope that it will be useful,
12
   but WITHOUT ANY WARRANTY; without even the implied warranty of
13
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
   GNU General Public License for more details.
15
 
16
   You should have received a copy of the GNU General Public License
17
   along with this program; if not, write to the Free Software
18
   Foundation, Inc., 59 Temple Place - Suite 330,
19
   Boston, MA 02111-1307, USA.  */
20
 
21
#include <ctype.h>
22
#include "defs.h"
23
#include "gdb_string.h"
24
#include "value.h"
25
#include "symtab.h"
26
#include "gdbtypes.h"
27
#include "expression.h"
28
#include "language.h"
29
#include "frame.h"
30
#include "gdbcmd.h"
31
#include "gdbcore.h"
32
#include "target.h"
33
#include "breakpoint.h"
34
#include "demangle.h"
35
#include "inferior.h"
36
#include "annotate.h"
37
#include "symfile.h"
38
#include "objfiles.h"
39
#ifdef UI_OUT
40
#include "ui-out.h"
41
#endif
42
 
43
/* Prototypes for exported functions. */
44
 
45
void args_info PARAMS ((char *, int));
46
 
47
void locals_info PARAMS ((char *, int));
48
 
49
void (*selected_frame_level_changed_hook) PARAMS ((int));
50
 
51
void _initialize_stack PARAMS ((void));
52
 
53
/* Prototypes for local functions. */
54
 
55
static void return_command PARAMS ((char *, int));
56
 
57
static void down_command PARAMS ((char *, int));
58
 
59
static void down_silently_base PARAMS ((char *));
60
 
61
static void down_silently_command PARAMS ((char *, int));
62
 
63
static void up_command PARAMS ((char *, int));
64
 
65
static void up_silently_base PARAMS ((char *));
66
 
67
static void up_silently_command PARAMS ((char *, int));
68
 
69
void frame_command PARAMS ((char *, int));
70
 
71
static void current_frame_command PARAMS ((char *, int));
72
 
73
static void select_frame_command PARAMS ((char *, int));
74
 
75
static void print_frame_arg_vars (struct frame_info *, struct ui_file *);
76
 
77
static void catch_info PARAMS ((char *, int));
78
 
79
static void args_plus_locals_info PARAMS ((char *, int));
80
 
81
static void print_frame_label_vars (struct frame_info *, int,
82
                                    struct ui_file *);
83
 
84
static void print_frame_local_vars (struct frame_info *, int,
85
                                    struct ui_file *);
86
 
87
static int print_block_frame_labels (struct block *, int *,
88
                                     struct ui_file *);
89
 
90
static int print_block_frame_locals (struct block *,
91
                                     struct frame_info *,
92
                                     int,
93
                                     struct ui_file *);
94
 
95
static void print_frame (struct frame_info *fi,
96
                         int level,
97
                         int source,
98
                         int args,
99
                         struct symtab_and_line sal);
100
 
101
static void print_frame_info_base PARAMS ((struct frame_info *, int, int, int));
102
 
103
static void print_stack_frame_base PARAMS ((struct frame_info *, int, int));
104
 
105
static void backtrace_command PARAMS ((char *, int));
106
 
107
struct frame_info *parse_frame_specification PARAMS ((char *));
108
 
109
static void frame_info PARAMS ((char *, int));
110
 
111
extern int addressprint;        /* Print addresses, or stay symbolic only? */
112
extern int info_verbose;        /* Verbosity of symbol reading msgs */
113
extern int lines_to_list;       /* # of lines "list" command shows by default */
114
 
115
/* The "selected" stack frame is used by default for local and arg access.
116
   May be zero, for no selected frame.  */
117
 
118
struct frame_info *selected_frame;
119
 
120
/* Level of the selected frame:
121
 
122
   or -1 for frame specified by address with no defined level.  */
123
 
124
int selected_frame_level;
125
 
126
/* Zero means do things normally; we are interacting directly with the
127
   user.  One means print the full filename and linenumber when a
128
   frame is printed, and do so in a format emacs18/emacs19.22 can
129
   parse.  Two means print similar annotations, but in many more
130
   cases and in a slightly different syntax.  */
131
 
132
int annotation_level = 0;
133
 
134
 
135
struct print_stack_frame_args
136
  {
137
    struct frame_info *fi;
138
    int level;
139
    int source;
140
    int args;
141
  };
142
 
143
static int print_stack_frame_base_stub PARAMS ((char *));
144
 
145
/* Show and print the frame arguments.
146
   Pass the args the way catch_errors wants them.  */
147
static int show_and_print_stack_frame_stub PARAMS ((void *args));
148
static int
149
show_and_print_stack_frame_stub (args)
150
     void *args;
151
{
152
  struct print_stack_frame_args *p = (struct print_stack_frame_args *) args;
153
 
154
  /* Reversed order of these so tuiDo() doesn't occur
155
   * in the middle of "Breakpoint 1 ... [location]" printing = RT
156
   */
157
  if (tui_version)
158
    print_frame_info_base (p->fi, p->level, p->source, p->args);
159
  print_frame_info (p->fi, p->level, p->source, p->args);
160
 
161
  return 0;
162
}
163
 
164
/* Show or print the frame arguments.
165
   Pass the args the way catch_errors wants them.  */
166
static int print_stack_frame_stub PARAMS ((void *args));
167
static int
168
print_stack_frame_stub (args)
169
     void *args;
170
{
171
  struct print_stack_frame_args *p = (struct print_stack_frame_args *) args;
172
 
173
  if (tui_version)
174
    print_frame_info (p->fi, p->level, p->source, p->args);
175
  else
176
    print_frame_info_base (p->fi, p->level, p->source, p->args);
177
  return 0;
178
}
179
 
180
/* Print a stack frame briefly.  FRAME_INFI should be the frame info
181
   and LEVEL should be its level in the stack (or -1 for level not
182
   defined). */
183
 
184
/* Pass the args the way catch_errors wants them.  */
185
static int
186
print_stack_frame_base_stub (args)
187
     char *args;
188
{
189
  struct print_stack_frame_args *p = (struct print_stack_frame_args *) args;
190
 
191
  print_frame_info_base (p->fi, p->level, p->source, p->args);
192
  return 0;
193
}
194
 
195
/* print the frame arguments to the terminal.
196
   Pass the args the way catch_errors wants them.  */
197
static int print_only_stack_frame_stub PARAMS ((void *));
198
static int
199
print_only_stack_frame_stub (args)
200
     void *args;
201
{
202
  struct print_stack_frame_args *p = (struct print_stack_frame_args *) args;
203
 
204
  print_frame_info_base (p->fi, p->level, p->source, p->args);
205
  return 0;
206
}
207
 
208
/* Print a stack frame briefly.  FRAME_INFI should be the frame info
209
   and LEVEL should be its level in the stack (or -1 for level not defined).
210
   This prints the level, the function executing, the arguments,
211
   and the file name and line number.
212
   If the pc is not at the beginning of the source line,
213
   the actual pc is printed at the beginning.
214
 
215
   If SOURCE is 1, print the source line as well.
216
   If SOURCE is -1, print ONLY the source line.  */
217
 
218
static void
219
print_stack_frame_base (fi, level, source)
220
     struct frame_info *fi;
221
     int level;
222
     int source;
223
{
224
  struct print_stack_frame_args args;
225
 
226
  args.fi = fi;
227
  args.level = level;
228
  args.source = source;
229
  args.args = 1;
230
 
231
  catch_errors (print_stack_frame_stub, &args, "", RETURN_MASK_ALL);
232
}
233
 
234
/* Show and print a stack frame briefly.  FRAME_INFI should be the frame info
235
   and LEVEL should be its level in the stack (or -1 for level not defined).
236
   This prints the level, the function executing, the arguments,
237
   and the file name and line number.
238
   If the pc is not at the beginning of the source line,
239
   the actual pc is printed at the beginning.
240
 
241
   If SOURCE is 1, print the source line as well.
242
   If SOURCE is -1, print ONLY the source line.  */
243
 
244
void
245
show_and_print_stack_frame (fi, level, source)
246
     struct frame_info *fi;
247
     int level;
248
     int source;
249
{
250
  struct print_stack_frame_args args;
251
 
252
  args.fi = fi;
253
  args.level = level;
254
  args.source = source;
255
  args.args = 1;
256
 
257
  catch_errors (show_and_print_stack_frame_stub, &args, "", RETURN_MASK_ALL);
258
}
259
 
260
 
261
/* Show or print a stack frame briefly.  FRAME_INFI should be the frame info
262
   and LEVEL should be its level in the stack (or -1 for level not defined).
263
   This prints the level, the function executing, the arguments,
264
   and the file name and line number.
265
   If the pc is not at the beginning of the source line,
266
   the actual pc is printed at the beginning.
267
 
268
   If SOURCE is 1, print the source line as well.
269
   If SOURCE is -1, print ONLY the source line.  */
270
 
271
void
272
print_stack_frame (fi, level, source)
273
     struct frame_info *fi;
274
     int level;
275
     int source;
276
{
277
  struct print_stack_frame_args args;
278
 
279
  args.fi = fi;
280
  args.level = level;
281
  args.source = source;
282
  args.args = 1;
283
 
284
  catch_errors (print_stack_frame_stub, (char *) &args, "", RETURN_MASK_ALL);
285
}
286
 
287
/* Print a stack frame briefly.  FRAME_INFI should be the frame info
288
   and LEVEL should be its level in the stack (or -1 for level not defined).
289
   This prints the level, the function executing, the arguments,
290
   and the file name and line number.
291
   If the pc is not at the beginning of the source line,
292
   the actual pc is printed at the beginning.
293
 
294
   If SOURCE is 1, print the source line as well.
295
   If SOURCE is -1, print ONLY the source line.  */
296
 
297
void
298
print_only_stack_frame (fi, level, source)
299
     struct frame_info *fi;
300
     int level;
301
     int source;
302
{
303
  struct print_stack_frame_args args;
304
 
305
  args.fi = fi;
306
  args.level = level;
307
  args.source = source;
308
  args.args = 1;
309
 
310
  catch_errors (print_only_stack_frame_stub, &args, "", RETURN_MASK_ALL);
311
}
312
 
313
struct print_args_args
314
{
315
  struct symbol *func;
316
  struct frame_info *fi;
317
  struct ui_file *stream;
318
};
319
 
320
static int print_args_stub PARAMS ((PTR));
321
 
322
/* Pass the args the way catch_errors wants them.  */
323
 
324
static int
325
print_args_stub (args)
326
     PTR args;
327
{
328
  int numargs;
329
  struct print_args_args *p = (struct print_args_args *) args;
330
 
331
  numargs = FRAME_NUM_ARGS (p->fi);
332
  print_frame_args (p->func, p->fi, numargs, p->stream);
333
  return 0;
334
}
335
 
336
/* Print information about a frame for frame "fi" at level "level".
337
   Used in "where" output, also used to emit breakpoint or step
338
   messages.
339
   LEVEL is the level of the frame, or -1 if it is the
340
   innermost frame but we don't want to print the level.
341
   The meaning of the SOURCE argument is:
342
   SRC_LINE: Print only source line
343
   LOCATION: Print only location
344
   LOC_AND_SRC: Print location and source line.  */
345
 
346
static void
347
print_frame_info_base (fi, level, source, args)
348
     struct frame_info *fi;
349
     int level;
350
     int source;
351
     int args;
352
{
353
  struct symtab_and_line sal;
354
  int source_print;
355
  int location_print;
356
 
357
#if 0
358
  char buf[MAX_REGISTER_RAW_SIZE];
359
  CORE_ADDR sp;
360
 
361
  /* On the 68k, this spends too much time in m68k_find_saved_regs.  */
362
 
363
  /* Get the value of SP_REGNUM relative to the frame.  */
364
  get_saved_register (buf, (int *) NULL, (CORE_ADDR *) NULL,
365
                    FRAME_INFO_ID (fi), SP_REGNUM, (enum lval_type *) NULL);
366
  sp = extract_address (buf, REGISTER_RAW_SIZE (SP_REGNUM));
367
 
368
  /* This is not a perfect test, because if a function alloca's some
369
     memory, puts some code there, and then jumps into it, then the test
370
     will succeed even though there is no call dummy.  Probably best is
371
     to check for a bp_call_dummy breakpoint.  */
372
  if (PC_IN_CALL_DUMMY (fi->pc, sp, fi->frame))
373
#else
374
  if (frame_in_dummy (fi))
375
#endif
376
    {
377
      annotate_frame_begin (level == -1 ? 0 : level, fi->pc);
378
 
379
      /* Do this regardless of SOURCE because we don't have any source
380
         to list for this frame.  */
381
      if (level >= 0)
382
        printf_filtered ("#%-2d ", level);
383
      annotate_function_call ();
384
      printf_filtered ("<function called from gdb>\n");
385
      annotate_frame_end ();
386
      return;
387
    }
388
  if (fi->signal_handler_caller)
389
    {
390
      annotate_frame_begin (level == -1 ? 0 : level, fi->pc);
391
 
392
      /* Do this regardless of SOURCE because we don't have any source
393
         to list for this frame.  */
394
      if (level >= 0)
395
        printf_filtered ("#%-2d ", level);
396
      annotate_signal_handler_caller ();
397
      printf_filtered ("<signal handler called>\n");
398
      annotate_frame_end ();
399
      return;
400
    }
401
 
402
  /* If fi is not the innermost frame, that normally means that fi->pc
403
     points to *after* the call instruction, and we want to get the line
404
     containing the call, never the next line.  But if the next frame is
405
     a signal_handler_caller or a dummy frame, then the next frame was
406
     not entered as the result of a call, and we want to get the line
407
     containing fi->pc.  */
408
  sal =
409
    find_pc_line (fi->pc,
410
                  fi->next != NULL
411
                  && !fi->next->signal_handler_caller
412
                  && !frame_in_dummy (fi->next));
413
 
414
  location_print = (source == LOCATION
415
                    || source == LOC_AND_ADDRESS
416
                    || source == SRC_AND_LOC);
417
 
418
  if (location_print || !sal.symtab)
419
    print_frame (fi, level, source, args, sal);
420
 
421
  source_print = (source == SRC_LINE || source == SRC_AND_LOC);
422
 
423
  if (source_print && sal.symtab)
424
    {
425
      int done = 0;
426
      int mid_statement = (source == SRC_LINE) && (fi->pc != sal.pc);
427
 
428
      if (annotation_level)
429
        done = identify_source_line (sal.symtab, sal.line, mid_statement,
430
                                     fi->pc);
431
      if (!done)
432
        {
433
          if (addressprint && mid_statement && !tui_version)
434
            {
435
#ifdef UI_OUT
436
              ui_out_field_core_addr (uiout, "addr", fi->pc);
437
              ui_out_text (uiout, "\t");
438
#else
439
              print_address_numeric (fi->pc, 1, gdb_stdout);
440
              printf_filtered ("\t");
441
#endif
442
            }
443
          if (print_frame_info_listing_hook)
444
            print_frame_info_listing_hook (sal.symtab, sal.line, sal.line + 1, 0);
445
          else if (!tui_version)
446
            print_source_lines (sal.symtab, sal.line, sal.line + 1, 0);
447
        }
448
      current_source_line = max (sal.line - lines_to_list / 2, 1);
449
    }
450
 
451
  if (source != 0)
452
    set_default_breakpoint (1, fi->pc, sal.symtab, sal.line);
453
 
454
  annotate_frame_end ();
455
 
456
  gdb_flush (gdb_stdout);
457
}
458
 
459
static void
460
print_frame (struct frame_info *fi,
461
             int level,
462
             int source,
463
             int args,
464
             struct symtab_and_line sal)
465
{
466
  struct symbol *func;
467
  register char *funname = 0;
468
  enum language funlang = language_unknown;
469
#ifdef UI_OUT
470
  struct ui_stream *stb;
471
  struct cleanup *old_chain;
472
 
473
  stb = ui_out_stream_new (uiout);
474
  old_chain = make_cleanup ((make_cleanup_func) ui_out_stream_delete, stb);
475
#endif /* UI_OUT */
476
 
477
  func = find_pc_function (fi->pc);
478
  if (func)
479
    {
480
      /* In certain pathological cases, the symtabs give the wrong
481
         function (when we are in the first function in a file which
482
         is compiled without debugging symbols, the previous function
483
         is compiled with debugging symbols, and the "foo.o" symbol
484
         that is supposed to tell us where the file with debugging symbols
485
         ends has been truncated by ar because it is longer than 15
486
         characters).  This also occurs if the user uses asm() to create
487
         a function but not stabs for it (in a file compiled -g).
488
 
489
         So look in the minimal symbol tables as well, and if it comes
490
         up with a larger address for the function use that instead.
491
         I don't think this can ever cause any problems; there shouldn't
492
         be any minimal symbols in the middle of a function; if this is
493
         ever changed many parts of GDB will need to be changed (and we'll
494
         create a find_pc_minimal_function or some such).  */
495
 
496
      struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (fi->pc);
497
      if (msymbol != NULL
498
          && (SYMBOL_VALUE_ADDRESS (msymbol)
499
              > BLOCK_START (SYMBOL_BLOCK_VALUE (func))))
500
        {
501
#if 0
502
          /* There is no particular reason to think the line number
503
             information is wrong.  Someone might have just put in
504
             a label with asm() but left the line numbers alone.  */
505
          /* In this case we have no way of knowing the source file
506
             and line number, so don't print them.  */
507
          sal.symtab = 0;
508
#endif
509
          /* We also don't know anything about the function besides
510
             its address and name.  */
511
          func = 0;
512
          funname = SYMBOL_NAME (msymbol);
513
          funlang = SYMBOL_LANGUAGE (msymbol);
514
        }
515
      else
516
        {
517
          /* I'd like to use SYMBOL_SOURCE_NAME() here, to display the
518
             demangled name that we already have stored in the symbol
519
             table, but we stored a version with DMGL_PARAMS turned
520
             on, and here we don't want to display parameters. So call
521
             the demangler again, with DMGL_ANSI only. (Yes, I know
522
             that printf_symbol_filtered() will again try to demangle
523
             the name on the fly, but the issue is that if
524
             cplus_demangle() fails here, it'll fail there too. So we
525
             want to catch the failure ("demangled==NULL" case below)
526
             here, while we still have our hands on the function
527
             symbol.) */
528
          char *demangled;
529
          funname = SYMBOL_NAME (func);
530
          funlang = SYMBOL_LANGUAGE (func);
531
          if (funlang == language_cplus)
532
            {
533
              demangled = cplus_demangle (funname, DMGL_ANSI);
534
              if (demangled == NULL)
535
                /* If the demangler fails, try the demangled name from
536
                   the symbol table. This'll have parameters, but
537
                   that's preferable to diplaying a mangled name. */
538
                funname = SYMBOL_SOURCE_NAME (func);
539
            }
540
        }
541
    }
542
  else
543
    {
544
      struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (fi->pc);
545
      if (msymbol != NULL)
546
        {
547
          funname = SYMBOL_NAME (msymbol);
548
          funlang = SYMBOL_LANGUAGE (msymbol);
549
        }
550
    }
551
 
552
  annotate_frame_begin (level == -1 ? 0 : level, fi->pc);
553
 
554
#ifdef UI_OUT
555
  ui_out_list_begin (uiout, "frame");
556
#endif
557
 
558
  if (level >= 0)
559
    {
560
#ifdef UI_OUT
561
      ui_out_text (uiout, "#");
562
      ui_out_field_fmt (uiout, "level", "%-2d", level);
563
      ui_out_spaces (uiout, 1);
564
#else
565
      printf_filtered ("#%-2d ", level);
566
#endif
567
    }
568
  if (addressprint)
569
    if (fi->pc != sal.pc || !sal.symtab || source == LOC_AND_ADDRESS)
570
      {
571
        annotate_frame_address ();
572
#ifdef UI_OUT
573
        ui_out_field_core_addr (uiout, "addr", fi->pc);
574
        annotate_frame_address_end ();
575
        ui_out_text (uiout, " in ");
576
#else
577
        print_address_numeric (fi->pc, 1, gdb_stdout);
578
        annotate_frame_address_end ();
579
        printf_filtered (" in ");
580
#endif
581
      }
582
  annotate_frame_function_name ();
583
#ifdef UI_OUT
584
  fprintf_symbol_filtered (stb->stream, funname ? funname : "??", funlang,
585
                           DMGL_ANSI);
586
  ui_out_field_stream (uiout, "func", stb);
587
  ui_out_wrap_hint (uiout, "   ");
588
#else
589
  fprintf_symbol_filtered (gdb_stdout, funname ? funname : "??", funlang,
590
                           DMGL_ANSI);
591
  wrap_here ("   ");
592
#endif
593
  annotate_frame_args ();
594
 
595
#ifdef UI_OUT
596
  ui_out_text (uiout, " (");
597
#else
598
  fputs_filtered (" (", gdb_stdout);
599
#endif
600
  if (args)
601
    {
602
      struct print_args_args args;
603
      args.fi = fi;
604
      args.func = func;
605
      args.stream = gdb_stdout;
606
#ifdef UI_OUT
607
      ui_out_list_begin (uiout, "args");
608
      catch_errors (print_args_stub, &args, "", RETURN_MASK_ALL);
609
      /* FIXME: args must be a list. If one argument is a string it will
610
                 have " that will not be properly escaped.  */
611
      ui_out_list_end (uiout);
612
#else
613
      catch_errors (print_args_stub, &args, "", RETURN_MASK_ALL);
614
#endif
615
      QUIT;
616
    }
617
#ifdef UI_OUT
618
  ui_out_text (uiout, ")");
619
#else
620
  printf_filtered (")");
621
#endif
622
  if (sal.symtab && sal.symtab->filename)
623
    {
624
      annotate_frame_source_begin ();
625
#ifdef UI_OUT
626
      ui_out_wrap_hint (uiout, "   ");
627
      ui_out_text (uiout, " at ");
628
      annotate_frame_source_file ();
629
      ui_out_field_string (uiout, "file", sal.symtab->filename);
630
      annotate_frame_source_file_end ();
631
      ui_out_text (uiout, ":");
632
      annotate_frame_source_line ();
633
      ui_out_field_int (uiout, "line", sal.line);
634
#else
635
      wrap_here ("   ");
636
      printf_filtered (" at ");
637
      annotate_frame_source_file ();
638
      printf_filtered ("%s", sal.symtab->filename);
639
      annotate_frame_source_file_end ();
640
      printf_filtered (":");
641
      annotate_frame_source_line ();
642
      printf_filtered ("%d", sal.line);
643
#endif
644
      annotate_frame_source_end ();
645
    }
646
 
647
#ifdef PC_LOAD_SEGMENT
648
  /* If we couldn't print out function name but if can figure out what
649
         load segment this pc value is from, at least print out some info
650
         about its load segment. */
651
  if (!funname)
652
    {
653
      annotate_frame_where ();
654
#ifdef UI_OUT
655
      ui_out_wrap_hint (uiout, "  ");
656
      ui_out_text (uiout, " from ");
657
      ui_out_field_string (uiout, "from", PC_LOAD_SEGMENT (fi->pc));
658
#else
659
      wrap_here ("  ");
660
      printf_filtered (" from %s", PC_LOAD_SEGMENT (fi->pc));
661
#endif
662
    }
663
#endif /* PC_LOAD_SEGMENT */
664
 
665
#ifdef PC_SOLIB
666
  if (!funname || (!sal.symtab || !sal.symtab->filename))
667
    {
668
      char *lib = PC_SOLIB (fi->pc);
669
      if (lib)
670
        {
671
          annotate_frame_where ();
672
#ifdef UI_OUT
673
          ui_out_wrap_hint (uiout, "  ");
674
          ui_out_text (uiout, " from ");
675
          ui_out_field_string (uiout, "from", lib);
676
#else
677
          wrap_here ("  ");
678
          printf_filtered (" from %s", lib);
679
#endif
680
        }
681
    }
682
#endif /* PC_SOLIB */
683
 
684
#ifdef UI_OUT
685
  ui_out_list_end (uiout);
686
  ui_out_text (uiout, "\n");
687
  do_cleanups (old_chain);
688
#else
689
  printf_filtered ("\n");
690
#endif
691
}
692
 
693
 
694
#if 0
695
void
696
stack_publish_stopped_with_no_frame ()
697
{
698
  TUIDO (((TuiOpaqueFuncPtr) tuiUpdateOnEnd));
699
 
700
  return;
701
}
702
#endif
703
 
704
/* Show or print the frame info.  If this is the tui, it will be shown in
705
   the source display */
706
void
707
print_frame_info (fi, level, source, args)
708
     struct frame_info *fi;
709
     register int level;
710
     int source;
711
     int args;
712
{
713
  if (!tui_version)
714
    print_frame_info_base (fi, level, source, args);
715
  else
716
    {
717
      if (fi && (frame_in_dummy (fi) || fi->signal_handler_caller))
718
        print_frame_info_base (fi, level, source, args);
719
      else
720
        {
721
          TUIDO (((TuiOpaqueFuncPtr) tui_vShowFrameInfo, fi));
722
        }
723
    }
724
}
725
 
726
/* Show the frame info.  If this is the tui, it will be shown in
727
   the source display otherwise, nothing is done */
728
void
729
show_stack_frame (fi)
730
     struct frame_info *fi;
731
{
732
  TUIDO (((TuiOpaqueFuncPtr) tui_vShowFrameInfo, fi));
733
}
734
 
735
 
736
/* Read a frame specification in whatever the appropriate format is.
737
   Call error() if the specification is in any way invalid (i.e.
738
   this function never returns NULL).  */
739
 
740
struct frame_info *
741
parse_frame_specification (frame_exp)
742
     char *frame_exp;
743
{
744
  int numargs = 0;
745
#define MAXARGS 4
746
  CORE_ADDR args[MAXARGS];
747
 
748
  if (frame_exp)
749
    {
750
      char *addr_string, *p;
751
      struct cleanup *tmp_cleanup;
752
 
753
      while (*frame_exp == ' ')
754
        frame_exp++;
755
 
756
      while (*frame_exp)
757
        {
758
          if (numargs > MAXARGS)
759
            error ("Too many args in frame specification");
760
          /* Parse an argument.  */
761
          for (p = frame_exp; *p && *p != ' '; p++)
762
            ;
763
          addr_string = savestring (frame_exp, p - frame_exp);
764
 
765
          {
766
            tmp_cleanup = make_cleanup (free, addr_string);
767
            args[numargs++] = parse_and_eval_address (addr_string);
768
            do_cleanups (tmp_cleanup);
769
          }
770
 
771
          /* Skip spaces, move to possible next arg.  */
772
          while (*p == ' ')
773
            p++;
774
          frame_exp = p;
775
        }
776
    }
777
 
778
  switch (numargs)
779
    {
780
    case 0:
781
      if (selected_frame == NULL)
782
        error ("No selected frame.");
783
      return selected_frame;
784
      /* NOTREACHED */
785
    case 1:
786
      {
787
        int level = args[0];
788
        struct frame_info *fid =
789
        find_relative_frame (get_current_frame (), &level);
790
        struct frame_info *tfid;
791
 
792
        if (level == 0)
793
          /* find_relative_frame was successful */
794
          return fid;
795
 
796
        /* If SETUP_ARBITRARY_FRAME is defined, then frame specifications
797
           take at least 2 addresses.  It is important to detect this case
798
           here so that "frame 100" does not give a confusing error message
799
           like "frame specification requires two addresses".  This of course
800
           does not solve the "frame 100" problem for machines on which
801
           a frame specification can be made with one address.  To solve
802
           that, we need a new syntax for a specifying a frame by address.
803
           I think the cleanest syntax is $frame(0x45) ($frame(0x23,0x45) for
804
           two args, etc.), but people might think that is too much typing,
805
           so I guess *0x23,0x45 would be a possible alternative (commas
806
           really should be used instead of spaces to delimit; using spaces
807
           normally works in an expression).  */
808
#ifdef SETUP_ARBITRARY_FRAME
809
        error ("No frame %d", args[0]);
810
#endif
811
 
812
        /* If (s)he specifies the frame with an address, he deserves what
813
           (s)he gets.  Still, give the highest one that matches.  */
814
 
815
        for (fid = get_current_frame ();
816
             fid && fid->frame != args[0];
817
             fid = get_prev_frame (fid))
818
          ;
819
 
820
        if (fid)
821
          while ((tfid = get_prev_frame (fid)) &&
822
                 (tfid->frame == args[0]))
823
            fid = tfid;
824
 
825
        /* We couldn't identify the frame as an existing frame, but
826
           perhaps we can create one with a single argument.  */
827
      }
828
 
829
    default:
830
#ifdef SETUP_ARBITRARY_FRAME
831
      return SETUP_ARBITRARY_FRAME (numargs, args);
832
#else
833
      /* Usual case.  Do it here rather than have everyone supply
834
         a SETUP_ARBITRARY_FRAME that does this.  */
835
      if (numargs == 1)
836
        return create_new_frame (args[0], 0);
837
      error ("Too many args in frame specification");
838
#endif
839
      /* NOTREACHED */
840
    }
841
  /* NOTREACHED */
842
}
843
 
844
/* FRAME_ARGS_ADDRESS_CORRECT is just like FRAME_ARGS_ADDRESS except
845
   that if it is unsure about the answer, it returns 0
846
   instead of guessing (this happens on the VAX and i960, for example).
847
 
848
   On most machines, we never have to guess about the args address,
849
   so FRAME_ARGS_ADDRESS{,_CORRECT} are the same.  */
850
#if !defined (FRAME_ARGS_ADDRESS_CORRECT)
851
#define FRAME_ARGS_ADDRESS_CORRECT FRAME_ARGS_ADDRESS
852
#endif
853
 
854
/* Print verbosely the selected frame or the frame at address ADDR.
855
   This means absolutely all information in the frame is printed.  */
856
 
857
static void
858
frame_info (addr_exp, from_tty)
859
     char *addr_exp;
860
     int from_tty;
861
{
862
  struct frame_info *fi;
863
  struct symtab_and_line sal;
864
  struct symbol *func;
865
  struct symtab *s;
866
  struct frame_info *calling_frame_info;
867
  int i, count, numregs;
868
  char *funname = 0;
869
  enum language funlang = language_unknown;
870
 
871
  if (!target_has_stack)
872
    error ("No stack.");
873
 
874
  fi = parse_frame_specification (addr_exp);
875
  if (fi == NULL)
876
    error ("Invalid frame specified.");
877
 
878
  sal = find_pc_line (fi->pc,
879
                      fi->next != NULL
880
                      && !fi->next->signal_handler_caller
881
                      && !frame_in_dummy (fi->next));
882
  func = get_frame_function (fi);
883
  s = find_pc_symtab (fi->pc);
884
  if (func)
885
    {
886
      /* I'd like to use SYMBOL_SOURCE_NAME() here, to display
887
       * the demangled name that we already have stored in
888
       * the symbol table, but we stored a version with
889
       * DMGL_PARAMS turned on, and here we don't want
890
       * to display parameters. So call the demangler again,
891
       * with DMGL_ANSI only. RT
892
       * (Yes, I know that printf_symbol_filtered() will
893
       * again try to demangle the name on the fly, but
894
       * the issue is that if cplus_demangle() fails here,
895
       * it'll fail there too. So we want to catch the failure
896
       * ("demangled==NULL" case below) here, while we still
897
       * have our hands on the function symbol.)
898
       */
899
      char *demangled;
900
      funname = SYMBOL_NAME (func);
901
      funlang = SYMBOL_LANGUAGE (func);
902
      if (funlang == language_cplus)
903
        {
904
          demangled = cplus_demangle (funname, DMGL_ANSI);
905
          /* If the demangler fails, try the demangled name
906
           * from the symbol table. This'll have parameters,
907
           * but that's preferable to diplaying a mangled name.
908
           */
909
          if (demangled == NULL)
910
            funname = SYMBOL_SOURCE_NAME (func);
911
        }
912
    }
913
  else
914
    {
915
      register struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (fi->pc);
916
      if (msymbol != NULL)
917
        {
918
          funname = SYMBOL_NAME (msymbol);
919
          funlang = SYMBOL_LANGUAGE (msymbol);
920
        }
921
    }
922
  calling_frame_info = get_prev_frame (fi);
923
 
924
  if (!addr_exp && selected_frame_level >= 0)
925
    {
926
      printf_filtered ("Stack level %d, frame at ", selected_frame_level);
927
      print_address_numeric (fi->frame, 1, gdb_stdout);
928
      printf_filtered (":\n");
929
    }
930
  else
931
    {
932
      printf_filtered ("Stack frame at ");
933
      print_address_numeric (fi->frame, 1, gdb_stdout);
934
      printf_filtered (":\n");
935
    }
936
  printf_filtered (" %s = ", REGISTER_NAME (PC_REGNUM));
937
  print_address_numeric (fi->pc, 1, gdb_stdout);
938
 
939
  wrap_here ("   ");
940
  if (funname)
941
    {
942
      printf_filtered (" in ");
943
      fprintf_symbol_filtered (gdb_stdout, funname, funlang,
944
                               DMGL_ANSI | DMGL_PARAMS);
945
    }
946
  wrap_here ("   ");
947
  if (sal.symtab)
948
    printf_filtered (" (%s:%d)", sal.symtab->filename, sal.line);
949
  puts_filtered ("; ");
950
  wrap_here ("    ");
951
  printf_filtered ("saved %s ", REGISTER_NAME (PC_REGNUM));
952
  print_address_numeric (FRAME_SAVED_PC (fi), 1, gdb_stdout);
953
  printf_filtered ("\n");
954
 
955
  {
956
    int frameless;
957
    frameless = FRAMELESS_FUNCTION_INVOCATION (fi);
958
    if (frameless)
959
      printf_filtered (" (FRAMELESS),");
960
  }
961
 
962
  if (calling_frame_info)
963
    {
964
      printf_filtered (" called by frame at ");
965
      print_address_numeric (calling_frame_info->frame, 1, gdb_stdout);
966
    }
967
  if (fi->next && calling_frame_info)
968
    puts_filtered (",");
969
  wrap_here ("   ");
970
  if (fi->next)
971
    {
972
      printf_filtered (" caller of frame at ");
973
      print_address_numeric (fi->next->frame, 1, gdb_stdout);
974
    }
975
  if (fi->next || calling_frame_info)
976
    puts_filtered ("\n");
977
  if (s)
978
    printf_filtered (" source language %s.\n", language_str (s->language));
979
 
980
#ifdef PRINT_EXTRA_FRAME_INFO
981
  PRINT_EXTRA_FRAME_INFO (fi);
982
#endif
983
 
984
  {
985
    /* Address of the argument list for this frame, or 0.  */
986
    CORE_ADDR arg_list = FRAME_ARGS_ADDRESS_CORRECT (fi);
987
    /* Number of args for this frame, or -1 if unknown.  */
988
    int numargs;
989
 
990
    if (arg_list == 0)
991
      printf_filtered (" Arglist at unknown address.\n");
992
    else
993
      {
994
        printf_filtered (" Arglist at ");
995
        print_address_numeric (arg_list, 1, gdb_stdout);
996
        printf_filtered (",");
997
 
998
        numargs = FRAME_NUM_ARGS (fi);
999
        if (numargs < 0)
1000
          puts_filtered (" args: ");
1001
        else if (numargs == 0)
1002
          puts_filtered (" no args.");
1003
        else if (numargs == 1)
1004
          puts_filtered (" 1 arg: ");
1005
        else
1006
          printf_filtered (" %d args: ", numargs);
1007
        print_frame_args (func, fi, numargs, gdb_stdout);
1008
        puts_filtered ("\n");
1009
      }
1010
  }
1011
  {
1012
    /* Address of the local variables for this frame, or 0.  */
1013
    CORE_ADDR arg_list = FRAME_LOCALS_ADDRESS (fi);
1014
 
1015
    if (arg_list == 0)
1016
      printf_filtered (" Locals at unknown address,");
1017
    else
1018
      {
1019
        printf_filtered (" Locals at ");
1020
        print_address_numeric (arg_list, 1, gdb_stdout);
1021
        printf_filtered (",");
1022
      }
1023
  }
1024
 
1025
  FRAME_INIT_SAVED_REGS (fi);
1026
  if (fi->saved_regs != NULL)
1027
    {
1028
      /* The sp is special; what's returned isn't the save address, but
1029
         actually the value of the previous frame's sp.  */
1030
      printf_filtered (" Previous frame's sp is ");
1031
      print_address_numeric (fi->saved_regs[SP_REGNUM], 1, gdb_stdout);
1032
      printf_filtered ("\n");
1033
      count = 0;
1034
      numregs = ARCH_NUM_REGS;
1035
      for (i = 0; i < numregs; i++)
1036
        if (fi->saved_regs[i] && i != SP_REGNUM)
1037
          {
1038
            if (count == 0)
1039
              puts_filtered (" Saved registers:\n ");
1040
            else
1041
              puts_filtered (",");
1042
            wrap_here (" ");
1043
            printf_filtered (" %s at ", REGISTER_NAME (i));
1044
            print_address_numeric (fi->saved_regs[i], 1, gdb_stdout);
1045
            count++;
1046
          }
1047
      if (count)
1048
        puts_filtered ("\n");
1049
    }
1050
  else
1051
    {
1052
      /* We could get some information about saved registers by
1053
         calling get_saved_register on each register.  Which info goes
1054
         with which frame is necessarily lost, however, and I suspect
1055
         that the users don't care whether they get the info.  */
1056
      puts_filtered ("\n");
1057
    }
1058
}
1059
 
1060
#if 0
1061
/* Set a limit on the number of frames printed by default in a
1062
   backtrace.  */
1063
 
1064
static int backtrace_limit;
1065
 
1066
static void
1067
set_backtrace_limit_command (count_exp, from_tty)
1068
     char *count_exp;
1069
     int from_tty;
1070
{
1071
  int count = parse_and_eval_address (count_exp);
1072
 
1073
  if (count < 0)
1074
    error ("Negative argument not meaningful as backtrace limit.");
1075
 
1076
  backtrace_limit = count;
1077
}
1078
 
1079
static void
1080
backtrace_limit_info (arg, from_tty)
1081
     char *arg;
1082
     int from_tty;
1083
{
1084
  if (arg)
1085
    error ("\"Info backtrace-limit\" takes no arguments.");
1086
 
1087
  printf_unfiltered ("Backtrace limit: %d.\n", backtrace_limit);
1088
}
1089
#endif
1090
 
1091
/* Print briefly all stack frames or just the innermost COUNT frames.  */
1092
 
1093
static void backtrace_command_1 PARAMS ((char *count_exp, int show_locals, int from_tty));
1094
static void
1095
backtrace_command_1 (count_exp, show_locals, from_tty)
1096
     char *count_exp;
1097
     int show_locals;
1098
     int from_tty;
1099
{
1100
  struct frame_info *fi;
1101
  register int count;
1102
  register int i;
1103
  register struct frame_info *trailing;
1104
  register int trailing_level;
1105
 
1106
  if (!target_has_stack)
1107
    error ("No stack.");
1108
 
1109
  /* The following code must do two things.  First, it must
1110
     set the variable TRAILING to the frame from which we should start
1111
     printing.  Second, it must set the variable count to the number
1112
     of frames which we should print, or -1 if all of them.  */
1113
  trailing = get_current_frame ();
1114
 
1115
  /* The target can be in a state where there is no valid frames
1116
     (e.g., just connected). */
1117
  if (trailing == NULL)
1118
    error ("No stack.");
1119
 
1120
  trailing_level = 0;
1121
  if (count_exp)
1122
    {
1123
      count = parse_and_eval_address (count_exp);
1124
      if (count < 0)
1125
        {
1126
          struct frame_info *current;
1127
 
1128
          count = -count;
1129
 
1130
          current = trailing;
1131
          while (current && count--)
1132
            {
1133
              QUIT;
1134
              current = get_prev_frame (current);
1135
            }
1136
 
1137
          /* Will stop when CURRENT reaches the top of the stack.  TRAILING
1138
             will be COUNT below it.  */
1139
          while (current)
1140
            {
1141
              QUIT;
1142
              trailing = get_prev_frame (trailing);
1143
              current = get_prev_frame (current);
1144
              trailing_level++;
1145
            }
1146
 
1147
          count = -1;
1148
        }
1149
    }
1150
  else
1151
    count = -1;
1152
 
1153
  if (info_verbose)
1154
    {
1155
      struct partial_symtab *ps;
1156
 
1157
      /* Read in symbols for all of the frames.  Need to do this in
1158
         a separate pass so that "Reading in symbols for xxx" messages
1159
         don't screw up the appearance of the backtrace.  Also
1160
         if people have strong opinions against reading symbols for
1161
         backtrace this may have to be an option.  */
1162
      i = count;
1163
      for (fi = trailing;
1164
           fi != NULL && i--;
1165
           fi = get_prev_frame (fi))
1166
        {
1167
          QUIT;
1168
          ps = find_pc_psymtab (fi->pc);
1169
          if (ps)
1170
            PSYMTAB_TO_SYMTAB (ps);     /* Force syms to come in */
1171
        }
1172
    }
1173
 
1174
  for (i = 0, fi = trailing;
1175
       fi && count--;
1176
       i++, fi = get_prev_frame (fi))
1177
    {
1178
      QUIT;
1179
 
1180
      /* Don't use print_stack_frame; if an error() occurs it probably
1181
         means further attempts to backtrace would fail (on the other
1182
         hand, perhaps the code does or could be fixed to make sure
1183
         the frame->prev field gets set to NULL in that case).  */
1184
      print_frame_info_base (fi, trailing_level + i, 0, 1);
1185
      if (show_locals)
1186
        print_frame_local_vars (fi, 1, gdb_stdout);
1187
    }
1188
 
1189
  /* If we've stopped before the end, mention that.  */
1190
  if (fi && from_tty)
1191
    printf_filtered ("(More stack frames follow...)\n");
1192
}
1193
 
1194
static void
1195
backtrace_command (arg, from_tty)
1196
     char *arg;
1197
     int from_tty;
1198
{
1199
  struct cleanup *old_chain = (struct cleanup *) NULL;
1200
  char **argv = (char **) NULL;
1201
  int argIndicatingFullTrace = (-1), totArgLen = 0, argc = 0;
1202
  char *argPtr = arg;
1203
 
1204
  if (arg != (char *) NULL)
1205
    {
1206
      int i;
1207
 
1208
      argv = buildargv (arg);
1209
      old_chain = make_cleanup_freeargv (argv);
1210
      argc = 0;
1211
      for (i = 0; (argv[i] != (char *) NULL); i++)
1212
        {
1213
          unsigned int j;
1214
 
1215
          for (j = 0; (j < strlen (argv[i])); j++)
1216
            argv[i][j] = tolower (argv[i][j]);
1217
 
1218
          if (argIndicatingFullTrace < 0 && subset_compare (argv[i], "full"))
1219
            argIndicatingFullTrace = argc;
1220
          else
1221
            {
1222
              argc++;
1223
              totArgLen += strlen (argv[i]);
1224
            }
1225
        }
1226
      totArgLen += argc;
1227
      if (argIndicatingFullTrace >= 0)
1228
        {
1229
          if (totArgLen > 0)
1230
            {
1231
              argPtr = (char *) xmalloc (totArgLen + 1);
1232
              if (!argPtr)
1233
                nomem (0);
1234
              else
1235
                {
1236
                  memset (argPtr, 0, totArgLen + 1);
1237
                  for (i = 0; (i < (argc + 1)); i++)
1238
                    {
1239
                      if (i != argIndicatingFullTrace)
1240
                        {
1241
                          strcat (argPtr, argv[i]);
1242
                          strcat (argPtr, " ");
1243
                        }
1244
                    }
1245
                }
1246
            }
1247
          else
1248
            argPtr = (char *) NULL;
1249
        }
1250
    }
1251
 
1252
  backtrace_command_1 (argPtr, (argIndicatingFullTrace >= 0), from_tty);
1253
 
1254
  if (argIndicatingFullTrace >= 0 && totArgLen > 0)
1255
    free (argPtr);
1256
 
1257
  if (old_chain)
1258
    do_cleanups (old_chain);
1259
}
1260
 
1261
static void backtrace_full_command PARAMS ((char *arg, int from_tty));
1262
static void
1263
backtrace_full_command (arg, from_tty)
1264
     char *arg;
1265
     int from_tty;
1266
{
1267
  backtrace_command_1 (arg, 1, from_tty);
1268
}
1269
 
1270
 
1271
/* Print the local variables of a block B active in FRAME.
1272
   Return 1 if any variables were printed; 0 otherwise.  */
1273
 
1274
static int
1275
print_block_frame_locals (b, fi, num_tabs, stream)
1276
     struct block *b;
1277
     register struct frame_info *fi;
1278
     int num_tabs;
1279
     register struct ui_file *stream;
1280
{
1281
  int nsyms;
1282
  register int i, j;
1283
  register struct symbol *sym;
1284
  register int values_printed = 0;
1285
 
1286
  nsyms = BLOCK_NSYMS (b);
1287
 
1288
  for (i = 0; i < nsyms; i++)
1289
    {
1290
      sym = BLOCK_SYM (b, i);
1291
      switch (SYMBOL_CLASS (sym))
1292
        {
1293
        case LOC_LOCAL:
1294
        case LOC_REGISTER:
1295
        case LOC_STATIC:
1296
        case LOC_BASEREG:
1297
          values_printed = 1;
1298
          for (j = 0; j < num_tabs; j++)
1299
            fputs_filtered ("\t", stream);
1300
          fputs_filtered (SYMBOL_SOURCE_NAME (sym), stream);
1301
          fputs_filtered (" = ", stream);
1302
          print_variable_value (sym, fi, stream);
1303
          fprintf_filtered (stream, "\n");
1304
          break;
1305
 
1306
        default:
1307
          /* Ignore symbols which are not locals.  */
1308
          break;
1309
        }
1310
    }
1311
  return values_printed;
1312
}
1313
 
1314
/* Same, but print labels.  */
1315
 
1316
static int
1317
print_block_frame_labels (b, have_default, stream)
1318
     struct block *b;
1319
     int *have_default;
1320
     register struct ui_file *stream;
1321
{
1322
  int nsyms;
1323
  register int i;
1324
  register struct symbol *sym;
1325
  register int values_printed = 0;
1326
 
1327
  nsyms = BLOCK_NSYMS (b);
1328
 
1329
  for (i = 0; i < nsyms; i++)
1330
    {
1331
      sym = BLOCK_SYM (b, i);
1332
      if (STREQ (SYMBOL_NAME (sym), "default"))
1333
        {
1334
          if (*have_default)
1335
            continue;
1336
          *have_default = 1;
1337
        }
1338
      if (SYMBOL_CLASS (sym) == LOC_LABEL)
1339
        {
1340
          struct symtab_and_line sal;
1341
          sal = find_pc_line (SYMBOL_VALUE_ADDRESS (sym), 0);
1342
          values_printed = 1;
1343
          fputs_filtered (SYMBOL_SOURCE_NAME (sym), stream);
1344
          if (addressprint)
1345
            {
1346
              fprintf_filtered (stream, " ");
1347
              print_address_numeric (SYMBOL_VALUE_ADDRESS (sym), 1, stream);
1348
            }
1349
          fprintf_filtered (stream, " in file %s, line %d\n",
1350
                            sal.symtab->filename, sal.line);
1351
        }
1352
    }
1353
  return values_printed;
1354
}
1355
 
1356
/* Print on STREAM all the local variables in frame FRAME,
1357
   including all the blocks active in that frame
1358
   at its current pc.
1359
 
1360
   Returns 1 if the job was done,
1361
   or 0 if nothing was printed because we have no info
1362
   on the function running in FRAME.  */
1363
 
1364
static void
1365
print_frame_local_vars (fi, num_tabs, stream)
1366
     register struct frame_info *fi;
1367
     register int num_tabs;
1368
     register struct ui_file *stream;
1369
{
1370
  register struct block *block = get_frame_block (fi);
1371
  register int values_printed = 0;
1372
 
1373
  if (block == 0)
1374
    {
1375
      fprintf_filtered (stream, "No symbol table info available.\n");
1376
      return;
1377
    }
1378
 
1379
  while (block != 0)
1380
    {
1381
      if (print_block_frame_locals (block, fi, num_tabs, stream))
1382
        values_printed = 1;
1383
      /* After handling the function's top-level block, stop.
1384
         Don't continue to its superblock, the block of
1385
         per-file symbols.  */
1386
      if (BLOCK_FUNCTION (block))
1387
        break;
1388
      block = BLOCK_SUPERBLOCK (block);
1389
    }
1390
 
1391
  if (!values_printed)
1392
    {
1393
      fprintf_filtered (stream, "No locals.\n");
1394
    }
1395
}
1396
 
1397
/* Same, but print labels.  */
1398
 
1399
static void
1400
print_frame_label_vars (fi, this_level_only, stream)
1401
     register struct frame_info *fi;
1402
     int this_level_only;
1403
     register struct ui_file *stream;
1404
{
1405
  register struct blockvector *bl;
1406
  register struct block *block = get_frame_block (fi);
1407
  register int values_printed = 0;
1408
  int index, have_default = 0;
1409
  char *blocks_printed;
1410
  CORE_ADDR pc = fi->pc;
1411
 
1412
  if (block == 0)
1413
    {
1414
      fprintf_filtered (stream, "No symbol table info available.\n");
1415
      return;
1416
    }
1417
 
1418
  bl = blockvector_for_pc (BLOCK_END (block) - 4, &index);
1419
  blocks_printed = (char *) alloca (BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
1420
  memset (blocks_printed, 0, BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
1421
 
1422
  while (block != 0)
1423
    {
1424
      CORE_ADDR end = BLOCK_END (block) - 4;
1425
      int last_index;
1426
 
1427
      if (bl != blockvector_for_pc (end, &index))
1428
        error ("blockvector blotch");
1429
      if (BLOCKVECTOR_BLOCK (bl, index) != block)
1430
        error ("blockvector botch");
1431
      last_index = BLOCKVECTOR_NBLOCKS (bl);
1432
      index += 1;
1433
 
1434
      /* Don't print out blocks that have gone by.  */
1435
      while (index < last_index
1436
             && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < pc)
1437
        index++;
1438
 
1439
      while (index < last_index
1440
             && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < end)
1441
        {
1442
          if (blocks_printed[index] == 0)
1443
            {
1444
              if (print_block_frame_labels (BLOCKVECTOR_BLOCK (bl, index), &have_default, stream))
1445
                values_printed = 1;
1446
              blocks_printed[index] = 1;
1447
            }
1448
          index++;
1449
        }
1450
      if (have_default)
1451
        return;
1452
      if (values_printed && this_level_only)
1453
        return;
1454
 
1455
      /* After handling the function's top-level block, stop.
1456
         Don't continue to its superblock, the block of
1457
         per-file symbols.  */
1458
      if (BLOCK_FUNCTION (block))
1459
        break;
1460
      block = BLOCK_SUPERBLOCK (block);
1461
    }
1462
 
1463
  if (!values_printed && !this_level_only)
1464
    {
1465
      fprintf_filtered (stream, "No catches.\n");
1466
    }
1467
}
1468
 
1469
/* ARGSUSED */
1470
void
1471
locals_info (args, from_tty)
1472
     char *args;
1473
     int from_tty;
1474
{
1475
  if (!selected_frame)
1476
    error ("No frame selected.");
1477
  print_frame_local_vars (selected_frame, 0, gdb_stdout);
1478
}
1479
 
1480
static void
1481
catch_info (ignore, from_tty)
1482
     char *ignore;
1483
     int from_tty;
1484
{
1485
  struct symtab_and_line *sal;
1486
 
1487
  /* Check for target support for exception handling */
1488
  sal = target_enable_exception_callback (EX_EVENT_CATCH, 1);
1489
  if (sal)
1490
    {
1491
      /* Currently not handling this */
1492
      /* Ideally, here we should interact with the C++ runtime
1493
         system to find the list of active handlers, etc. */
1494
      fprintf_filtered (gdb_stdout, "Info catch not supported with this target/compiler combination.\n");
1495
#if 0
1496
      if (!selected_frame)
1497
        error ("No frame selected.");
1498
#endif
1499
    }
1500
  else
1501
    {
1502
      /* Assume g++ compiled code -- old v 4.16 behaviour */
1503
      if (!selected_frame)
1504
        error ("No frame selected.");
1505
 
1506
      print_frame_label_vars (selected_frame, 0, gdb_stdout);
1507
    }
1508
}
1509
 
1510
static void
1511
print_frame_arg_vars (fi, stream)
1512
     register struct frame_info *fi;
1513
     register struct ui_file *stream;
1514
{
1515
  struct symbol *func = get_frame_function (fi);
1516
  register struct block *b;
1517
  int nsyms;
1518
  register int i;
1519
  register struct symbol *sym, *sym2;
1520
  register int values_printed = 0;
1521
 
1522
  if (func == 0)
1523
    {
1524
      fprintf_filtered (stream, "No symbol table info available.\n");
1525
      return;
1526
    }
1527
 
1528
  b = SYMBOL_BLOCK_VALUE (func);
1529
  nsyms = BLOCK_NSYMS (b);
1530
 
1531
  for (i = 0; i < nsyms; i++)
1532
    {
1533
      sym = BLOCK_SYM (b, i);
1534
      switch (SYMBOL_CLASS (sym))
1535
        {
1536
        case LOC_ARG:
1537
        case LOC_LOCAL_ARG:
1538
        case LOC_REF_ARG:
1539
        case LOC_REGPARM:
1540
        case LOC_REGPARM_ADDR:
1541
        case LOC_BASEREG_ARG:
1542
          values_printed = 1;
1543
          fputs_filtered (SYMBOL_SOURCE_NAME (sym), stream);
1544
          fputs_filtered (" = ", stream);
1545
 
1546
          /* We have to look up the symbol because arguments can have
1547
             two entries (one a parameter, one a local) and the one we
1548
             want is the local, which lookup_symbol will find for us.
1549
             This includes gcc1 (not gcc2) on the sparc when passing a
1550
             small structure and gcc2 when the argument type is float
1551
             and it is passed as a double and converted to float by
1552
             the prologue (in the latter case the type of the LOC_ARG
1553
             symbol is double and the type of the LOC_LOCAL symbol is
1554
             float).  There are also LOC_ARG/LOC_REGISTER pairs which
1555
             are not combined in symbol-reading.  */
1556
 
1557
          sym2 = lookup_symbol (SYMBOL_NAME (sym),
1558
                   b, VAR_NAMESPACE, (int *) NULL, (struct symtab **) NULL);
1559
          print_variable_value (sym2, fi, stream);
1560
          fprintf_filtered (stream, "\n");
1561
          break;
1562
 
1563
        default:
1564
          /* Don't worry about things which aren't arguments.  */
1565
          break;
1566
        }
1567
    }
1568
 
1569
  if (!values_printed)
1570
    {
1571
      fprintf_filtered (stream, "No arguments.\n");
1572
    }
1573
}
1574
 
1575
void
1576
args_info (ignore, from_tty)
1577
     char *ignore;
1578
     int from_tty;
1579
{
1580
  if (!selected_frame)
1581
    error ("No frame selected.");
1582
  print_frame_arg_vars (selected_frame, gdb_stdout);
1583
}
1584
 
1585
 
1586
static void
1587
args_plus_locals_info (ignore, from_tty)
1588
     char *ignore;
1589
     int from_tty;
1590
{
1591
  args_info (ignore, from_tty);
1592
  locals_info (ignore, from_tty);
1593
}
1594
 
1595
 
1596
/* Select frame FI, and note that its stack level is LEVEL.
1597
   LEVEL may be -1 if an actual level number is not known.  */
1598
 
1599
void
1600
select_frame (fi, level)
1601
     struct frame_info *fi;
1602
     int level;
1603
{
1604
  register struct symtab *s;
1605
 
1606
  selected_frame = fi;
1607
  selected_frame_level = level;
1608
  if (selected_frame_level_changed_hook)
1609
    selected_frame_level_changed_hook (level);
1610
 
1611
  /* Ensure that symbols for this frame are read in.  Also, determine the
1612
     source language of this frame, and switch to it if desired.  */
1613
  if (fi)
1614
    {
1615
      s = find_pc_symtab (fi->pc);
1616
      if (s
1617
          && s->language != current_language->la_language
1618
          && s->language != language_unknown
1619
          && language_mode == language_mode_auto)
1620
        {
1621
          set_language (s->language);
1622
        }
1623
      /* elz: this if here fixes the problem with the pc not being displayed
1624
         in the tui asm layout, with no debug symbols. The value of s
1625
         would be 0 here, and select_source_symtab would abort the
1626
         command by calling the 'error' function */
1627
      if (s)
1628
        {
1629
          TUIDO (((TuiOpaqueFuncPtr) tui_vSelectSourceSymtab, s));
1630
        }
1631
    }
1632
}
1633
 
1634
 
1635
/* Select frame FI, noting that its stack level is LEVEL.  Also print
1636
   the stack frame and show the source if this is the tui version.  */
1637
void
1638
select_and_print_frame (fi, level)
1639
     struct frame_info *fi;
1640
     int level;
1641
{
1642
  select_frame (fi, level);
1643
  if (fi)
1644
    {
1645
      print_stack_frame (fi, level, 1);
1646
      TUIDO (((TuiOpaqueFuncPtr) tui_vCheckDataValues, fi));
1647
    }
1648
}
1649
 
1650
 
1651
/* Select frame FI, noting that its stack level is LEVEL.  Be silent if
1652
   not the TUI */
1653
#if 0
1654
void
1655
select_and_maybe_print_frame (fi, level)
1656
     struct frame_info *fi;
1657
     int level;
1658
{
1659
  if (!tui_version)
1660
    select_frame (fi, level);
1661
  else
1662
    select_and_print_frame (fi, level);
1663
}
1664
#endif
1665
 
1666
 
1667
/* Store the selected frame and its level into *FRAMEP and *LEVELP.
1668
   If there is no selected frame, *FRAMEP is set to NULL.  */
1669
 
1670
void
1671
record_selected_frame (frameaddrp, levelp)
1672
     CORE_ADDR *frameaddrp;
1673
     int *levelp;
1674
{
1675
  *frameaddrp = selected_frame ? selected_frame->frame : 0;
1676
  *levelp = selected_frame_level;
1677
}
1678
 
1679
/* Return the symbol-block in which the selected frame is executing.
1680
   Can return zero under various legitimate circumstances.  */
1681
 
1682
struct block *
1683
get_selected_block ()
1684
{
1685
  if (!target_has_stack)
1686
    return 0;
1687
 
1688
  if (!selected_frame)
1689
    return get_current_block ();
1690
  return get_frame_block (selected_frame);
1691
}
1692
 
1693
/* Find a frame a certain number of levels away from FRAME.
1694
   LEVEL_OFFSET_PTR points to an int containing the number of levels.
1695
   Positive means go to earlier frames (up); negative, the reverse.
1696
   The int that contains the number of levels is counted toward
1697
   zero as the frames for those levels are found.
1698
   If the top or bottom frame is reached, that frame is returned,
1699
   but the final value of *LEVEL_OFFSET_PTR is nonzero and indicates
1700
   how much farther the original request asked to go.  */
1701
 
1702
struct frame_info *
1703
find_relative_frame (frame, level_offset_ptr)
1704
     register struct frame_info *frame;
1705
     register int *level_offset_ptr;
1706
{
1707
  register struct frame_info *prev;
1708
  register struct frame_info *frame1;
1709
 
1710
  /* Going up is simple: just do get_prev_frame enough times
1711
     or until initial frame is reached.  */
1712
  while (*level_offset_ptr > 0)
1713
    {
1714
      prev = get_prev_frame (frame);
1715
      if (prev == 0)
1716
        break;
1717
      (*level_offset_ptr)--;
1718
      frame = prev;
1719
    }
1720
  /* Going down is just as simple.  */
1721
  if (*level_offset_ptr < 0)
1722
    {
1723
      while (*level_offset_ptr < 0)
1724
        {
1725
          frame1 = get_next_frame (frame);
1726
          if (!frame1)
1727
            break;
1728
          frame = frame1;
1729
          (*level_offset_ptr)++;
1730
        }
1731
    }
1732
  return frame;
1733
}
1734
 
1735
/* The "select_frame" command.  With no arg, NOP.
1736
   With arg LEVEL_EXP, select the frame at level LEVEL if it is a
1737
   valid level.  Otherwise, treat level_exp as an address expression
1738
   and select it.  See parse_frame_specification for more info on proper
1739
   frame expressions. */
1740
 
1741
/* ARGSUSED */
1742
#ifdef UI_OUT
1743
void
1744
select_frame_command_wrapper (level_exp, from_tty)
1745
     char *level_exp;
1746
     int from_tty;
1747
{
1748
  select_frame_command (level_exp, from_tty);
1749
}
1750
#endif
1751
static void
1752
select_frame_command (level_exp, from_tty)
1753
     char *level_exp;
1754
     int from_tty;
1755
{
1756
  register struct frame_info *frame, *frame1;
1757
  unsigned int level = 0;
1758
 
1759
  if (!target_has_stack)
1760
    error ("No stack.");
1761
 
1762
  frame = parse_frame_specification (level_exp);
1763
 
1764
  /* Try to figure out what level this frame is.  But if there is
1765
     no current stack, don't error out -- let the user set one.  */
1766
  frame1 = 0;
1767
  if (get_current_frame ())
1768
    {
1769
      for (frame1 = get_prev_frame (0);
1770
           frame1 && frame1 != frame;
1771
           frame1 = get_prev_frame (frame1))
1772
        level++;
1773
    }
1774
 
1775
  if (!frame1)
1776
    level = 0;
1777
 
1778
  select_frame (frame, level);
1779
}
1780
 
1781
/* The "frame" command.  With no arg, print selected frame briefly.
1782
   With arg, behaves like select_frame and then prints the selected
1783
   frame.  */
1784
 
1785
void
1786
frame_command (level_exp, from_tty)
1787
     char *level_exp;
1788
     int from_tty;
1789
{
1790
  select_frame_command (level_exp, from_tty);
1791
  show_and_print_stack_frame (selected_frame, selected_frame_level, 1);
1792
}
1793
 
1794
/* The XDB Compatibility command to print the current frame. */
1795
 
1796
static void
1797
current_frame_command (level_exp, from_tty)
1798
     char *level_exp;
1799
     int from_tty;
1800
{
1801
  if (target_has_stack == 0 || selected_frame == 0)
1802
    error ("No stack.");
1803
  print_only_stack_frame (selected_frame, selected_frame_level, 1);
1804
}
1805
 
1806
/* Select the frame up one or COUNT stack levels
1807
   from the previously selected frame, and print it briefly.  */
1808
 
1809
/* ARGSUSED */
1810
static void
1811
up_silently_base (count_exp)
1812
     char *count_exp;
1813
{
1814
  register struct frame_info *fi;
1815
  int count = 1, count1;
1816
  if (count_exp)
1817
    count = parse_and_eval_address (count_exp);
1818
  count1 = count;
1819
 
1820
  if (target_has_stack == 0 || selected_frame == 0)
1821
    error ("No stack.");
1822
 
1823
  fi = find_relative_frame (selected_frame, &count1);
1824
  if (count1 != 0 && count_exp == 0)
1825
    error ("Initial frame selected; you cannot go up.");
1826
  select_frame (fi, selected_frame_level + count - count1);
1827
}
1828
 
1829
static void
1830
up_silently_command (count_exp, from_tty)
1831
     char *count_exp;
1832
     int from_tty;
1833
{
1834
  up_silently_base (count_exp);
1835
  if (tui_version)
1836
    print_stack_frame (selected_frame, selected_frame_level, 1);
1837
}
1838
 
1839
static void
1840
up_command (count_exp, from_tty)
1841
     char *count_exp;
1842
     int from_tty;
1843
{
1844
  up_silently_base (count_exp);
1845
  show_and_print_stack_frame (selected_frame, selected_frame_level, 1);
1846
}
1847
 
1848
/* Select the frame down one or COUNT stack levels
1849
   from the previously selected frame, and print it briefly.  */
1850
 
1851
/* ARGSUSED */
1852
static void
1853
down_silently_base (count_exp)
1854
     char *count_exp;
1855
{
1856
  register struct frame_info *frame;
1857
  int count = -1, count1;
1858
  if (count_exp)
1859
    count = -parse_and_eval_address (count_exp);
1860
  count1 = count;
1861
 
1862
  if (target_has_stack == 0 || selected_frame == 0)
1863
    error ("No stack.");
1864
 
1865
  frame = find_relative_frame (selected_frame, &count1);
1866
  if (count1 != 0 && count_exp == 0)
1867
    {
1868
 
1869
      /* We only do this if count_exp is not specified.  That way "down"
1870
         means to really go down (and let me know if that is
1871
         impossible), but "down 9999" can be used to mean go all the way
1872
         down without getting an error.  */
1873
 
1874
      error ("Bottom (i.e., innermost) frame selected; you cannot go down.");
1875
    }
1876
 
1877
  select_frame (frame, selected_frame_level + count - count1);
1878
}
1879
 
1880
/* ARGSUSED */
1881
static void
1882
down_silently_command (count_exp, from_tty)
1883
     char *count_exp;
1884
     int from_tty;
1885
{
1886
  down_silently_base (count_exp);
1887
  if (tui_version)
1888
    print_stack_frame (selected_frame, selected_frame_level, 1);
1889
}
1890
 
1891
static void
1892
down_command (count_exp, from_tty)
1893
     char *count_exp;
1894
     int from_tty;
1895
{
1896
  down_silently_base (count_exp);
1897
  show_and_print_stack_frame (selected_frame, selected_frame_level, 1);
1898
}
1899
 
1900
#ifdef UI_OUT
1901
void
1902
return_command_wrapper (retval_exp, from_tty)
1903
     char *retval_exp;
1904
     int from_tty;
1905
{
1906
  return_command (retval_exp, from_tty);
1907
}
1908
#endif
1909
static void
1910
return_command (retval_exp, from_tty)
1911
     char *retval_exp;
1912
     int from_tty;
1913
{
1914
  struct symbol *thisfun;
1915
  CORE_ADDR selected_frame_addr;
1916
  CORE_ADDR selected_frame_pc;
1917
  struct frame_info *frame;
1918
  value_ptr return_value = NULL;
1919
 
1920
  if (selected_frame == NULL)
1921
    error ("No selected frame.");
1922
  thisfun = get_frame_function (selected_frame);
1923
  selected_frame_addr = FRAME_FP (selected_frame);
1924
  selected_frame_pc = selected_frame->pc;
1925
 
1926
  /* Compute the return value (if any -- possibly getting errors here).  */
1927
 
1928
  if (retval_exp)
1929
    {
1930
      struct type *return_type = NULL;
1931
 
1932
      return_value = parse_and_eval (retval_exp);
1933
 
1934
      /* Cast return value to the return type of the function.  */
1935
      if (thisfun != NULL)
1936
        return_type = TYPE_TARGET_TYPE (SYMBOL_TYPE (thisfun));
1937
      if (return_type == NULL)
1938
        return_type = builtin_type_int;
1939
      return_value = value_cast (return_type, return_value);
1940
 
1941
      /* Make sure we have fully evaluated it, since
1942
         it might live in the stack frame we're about to pop.  */
1943
      if (VALUE_LAZY (return_value))
1944
        value_fetch_lazy (return_value);
1945
    }
1946
 
1947
  /* If interactive, require confirmation.  */
1948
 
1949
  if (from_tty)
1950
    {
1951
      if (thisfun != 0)
1952
        {
1953
          if (!query ("Make %s return now? ", SYMBOL_SOURCE_NAME (thisfun)))
1954
            {
1955
              error ("Not confirmed.");
1956
              /* NOTREACHED */
1957
            }
1958
        }
1959
      else if (!query ("Make selected stack frame return now? "))
1960
        error ("Not confirmed.");
1961
    }
1962
 
1963
  /* Do the real work.  Pop until the specified frame is current.  We
1964
     use this method because the selected_frame is not valid after
1965
     a POP_FRAME.  The pc comparison makes this work even if the
1966
     selected frame shares its fp with another frame.  */
1967
 
1968
  while (selected_frame_addr != (frame = get_current_frame ())->frame
1969
         || selected_frame_pc != frame->pc)
1970
    POP_FRAME;
1971
 
1972
  /* Then pop that frame.  */
1973
 
1974
  POP_FRAME;
1975
 
1976
  /* Compute the return value (if any) and store in the place
1977
     for return values.  */
1978
 
1979
  if (retval_exp)
1980
    set_return_value (return_value);
1981
 
1982
  /* If interactive, print the frame that is now current.  */
1983
 
1984
  if (from_tty)
1985
    frame_command ("0", 1);
1986
  else
1987
    select_frame_command ("0", 0);
1988
}
1989
 
1990
/* Sets the scope to input function name, provided that the
1991
   function is within the current stack frame */
1992
 
1993
struct function_bounds
1994
{
1995
  CORE_ADDR low, high;
1996
};
1997
 
1998
static void func_command PARAMS ((char *arg, int from_tty));
1999
static void
2000
func_command (arg, from_tty)
2001
     char *arg;
2002
     int from_tty;
2003
{
2004
  struct frame_info *fp;
2005
  int found = 0;
2006
  struct symtabs_and_lines sals;
2007
  int i;
2008
  int level = 1;
2009
  struct function_bounds *func_bounds = (struct function_bounds *) NULL;
2010
 
2011
  if (arg != (char *) NULL)
2012
    return;
2013
 
2014
  fp = parse_frame_specification ("0");
2015
  sals = decode_line_spec (arg, 1);
2016
  func_bounds = (struct function_bounds *) xmalloc (
2017
                              sizeof (struct function_bounds) * sals.nelts);
2018
  for (i = 0; (i < sals.nelts && !found); i++)
2019
    {
2020
      if (sals.sals[i].pc == (CORE_ADDR) 0 ||
2021
          find_pc_partial_function (sals.sals[i].pc,
2022
                                    (char **) NULL,
2023
                                    &func_bounds[i].low,
2024
                                    &func_bounds[i].high) == 0)
2025
        {
2026
          func_bounds[i].low =
2027
            func_bounds[i].high = (CORE_ADDR) NULL;
2028
        }
2029
    }
2030
 
2031
  do
2032
    {
2033
      for (i = 0; (i < sals.nelts && !found); i++)
2034
        found = (fp->pc >= func_bounds[i].low &&
2035
                 fp->pc < func_bounds[i].high);
2036
      if (!found)
2037
        {
2038
          level = 1;
2039
          fp = find_relative_frame (fp, &level);
2040
        }
2041
    }
2042
  while (!found && level == 0);
2043
 
2044
  if (func_bounds)
2045
    free (func_bounds);
2046
 
2047
  if (!found)
2048
    printf_filtered ("'%s' not within current stack frame.\n", arg);
2049
  else if (fp != selected_frame)
2050
    select_and_print_frame (fp, level);
2051
}
2052
 
2053
/* Gets the language of the current frame.  */
2054
 
2055
enum language
2056
get_frame_language ()
2057
{
2058
  register struct symtab *s;
2059
  enum language flang;          /* The language of the current frame */
2060
 
2061
  if (selected_frame)
2062
    {
2063
      s = find_pc_symtab (selected_frame->pc);
2064
      if (s)
2065
        flang = s->language;
2066
      else
2067
        flang = language_unknown;
2068
    }
2069
  else
2070
    flang = language_unknown;
2071
 
2072
  return flang;
2073
}
2074
 
2075
void
2076
_initialize_stack ()
2077
{
2078
#if 0
2079
  backtrace_limit = 30;
2080
#endif
2081
 
2082
  add_com ("return", class_stack, return_command,
2083
           "Make selected stack frame return to its caller.\n\
2084
Control remains in the debugger, but when you continue\n\
2085
execution will resume in the frame above the one now selected.\n\
2086
If an argument is given, it is an expression for the value to return.");
2087
 
2088
  add_com ("up", class_stack, up_command,
2089
           "Select and print stack frame that called this one.\n\
2090
An argument says how many frames up to go.");
2091
  add_com ("up-silently", class_support, up_silently_command,
2092
           "Same as the `up' command, but does not print anything.\n\
2093
This is useful in command scripts.");
2094
 
2095
  add_com ("down", class_stack, down_command,
2096
           "Select and print stack frame called by this one.\n\
2097
An argument says how many frames down to go.");
2098
  add_com_alias ("do", "down", class_stack, 1);
2099
  add_com_alias ("dow", "down", class_stack, 1);
2100
  add_com ("down-silently", class_support, down_silently_command,
2101
           "Same as the `down' command, but does not print anything.\n\
2102
This is useful in command scripts.");
2103
 
2104
  add_com ("frame", class_stack, frame_command,
2105
           "Select and print a stack frame.\n\
2106
With no argument, print the selected stack frame.  (See also \"info frame\").\n\
2107
An argument specifies the frame to select.\n\
2108
It can be a stack frame number or the address of the frame.\n\
2109
With argument, nothing is printed if input is coming from\n\
2110
a command file or a user-defined command.");
2111
 
2112
  add_com_alias ("f", "frame", class_stack, 1);
2113
 
2114
  if (xdb_commands)
2115
    {
2116
      add_com ("L", class_stack, current_frame_command,
2117
               "Print the current stack frame.\n");
2118
      add_com_alias ("V", "frame", class_stack, 1);
2119
    }
2120
  add_com ("select-frame", class_stack, select_frame_command,
2121
           "Select a stack frame without printing anything.\n\
2122
An argument specifies the frame to select.\n\
2123
It can be a stack frame number or the address of the frame.\n");
2124
 
2125
  add_com ("backtrace", class_stack, backtrace_command,
2126
           "Print backtrace of all stack frames, or innermost COUNT frames.\n\
2127
With a negative argument, print outermost -COUNT frames.\n\
2128
Use of the 'full' qualifier also prints the values of the local variables.\n");
2129
  add_com_alias ("bt", "backtrace", class_stack, 0);
2130
  if (xdb_commands)
2131
    {
2132
      add_com_alias ("t", "backtrace", class_stack, 0);
2133
      add_com ("T", class_stack, backtrace_full_command,
2134
               "Print backtrace of all stack frames, or innermost COUNT frames \n\
2135
and the values of the local variables.\n\
2136
With a negative argument, print outermost -COUNT frames.\n\
2137
Usage: T <count>\n");
2138
    }
2139
 
2140
  add_com_alias ("where", "backtrace", class_alias, 0);
2141
  add_info ("stack", backtrace_command,
2142
            "Backtrace of the stack, or innermost COUNT frames.");
2143
  add_info_alias ("s", "stack", 1);
2144
  add_info ("frame", frame_info,
2145
            "All about selected stack frame, or frame at ADDR.");
2146
  add_info_alias ("f", "frame", 1);
2147
  add_info ("locals", locals_info,
2148
            "Local variables of current stack frame.");
2149
  add_info ("args", args_info,
2150
            "Argument variables of current stack frame.");
2151
  if (xdb_commands)
2152
    add_com ("l", class_info, args_plus_locals_info,
2153
             "Argument and local variables of current stack frame.");
2154
 
2155
  if (dbx_commands)
2156
    add_com ("func", class_stack, func_command,
2157
      "Select the stack frame that contains <func>.\nUsage: func <name>\n");
2158
 
2159
  add_info ("catch", catch_info,
2160
            "Exceptions that can be caught in the current stack frame.");
2161
 
2162
#if 0
2163
  add_cmd ("backtrace-limit", class_stack, set_backtrace_limit_command,
2164
  "Specify maximum number of frames for \"backtrace\" to print by default.",
2165
           &setlist);
2166
  add_info ("backtrace-limit", backtrace_limit_info,
2167
     "The maximum number of frames for \"backtrace\" to print by default.");
2168
#endif
2169
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.