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

Subversion Repositories or1k_old

[/] [or1k_old/] [trunk/] [gdb-5.3/] [gdb/] [stack.c] - Blame information for rev 1782

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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