]> Git Repo - binutils.git/blob - gdb/stack.c
* udip2soc.c (UDIConnect): replace union wait with int.
[binutils.git] / gdb / stack.c
1 /* Print and select stack frames for GDB, the GNU debugger.
2    Copyright 1986, 1987, 1989, 1991, 1992, 1993 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., 675 Mass Ave, Cambridge, MA 02139, USA.  */
19
20 #include "defs.h"
21 #include "value.h"
22 #include "symtab.h"
23 #include "gdbtypes.h"
24 #include "expression.h"
25 #include "language.h"
26 #include "frame.h"
27 #include "gdbcmd.h"
28 #include "gdbcore.h"
29 #include "target.h"
30 #include "breakpoint.h"
31 #include "demangle.h"
32 #include "inferior.h"
33
34 static void
35 return_command PARAMS ((char *, int));
36
37 static void
38 down_command PARAMS ((char *, int));
39
40 static void
41 down_silently_command PARAMS ((char *, int));
42
43 static void
44 up_command PARAMS ((char *, int));
45
46 static void
47 up_silently_command PARAMS ((char *, int));
48
49 static void
50 frame_command PARAMS ((char *, int));
51
52 static void
53 select_frame_command PARAMS ((char *, int));
54
55 static void
56 args_info PARAMS ((char *, int));
57
58 static void
59 print_frame_arg_vars PARAMS ((FRAME, FILE *));
60
61 static void
62 catch_info PARAMS ((char *, int));
63
64 static void
65 locals_info PARAMS ((char *, int));
66
67 static void
68 print_frame_label_vars PARAMS ((FRAME, int, FILE *));
69
70 static void
71 print_frame_local_vars PARAMS ((FRAME, FILE *));
72
73 static int
74 print_block_frame_labels PARAMS ((struct block *, int *, FILE *));
75
76 static int
77 print_block_frame_locals PARAMS ((struct block *, FRAME, FILE *));
78
79 static void
80 backtrace_command PARAMS ((char *, int));
81
82 static FRAME
83 parse_frame_specification PARAMS ((char *));
84
85 static void
86 frame_info PARAMS ((char *, int));
87
88
89 extern int addressprint;        /* Print addresses, or stay symbolic only? */
90 extern int info_verbose;        /* Verbosity of symbol reading msgs */
91 extern int lines_to_list;       /* # of lines "list" command shows by default */
92
93 /* The "selected" stack frame is used by default for local and arg access.
94    May be zero, for no selected frame.  */
95
96 FRAME selected_frame;
97
98 /* Level of the selected frame:
99    0 for innermost, 1 for its caller, ...
100    or -1 for frame specified by address with no defined level.  */
101
102 int selected_frame_level;
103
104 /* Nonzero means print the full filename and linenumber
105    when a frame is printed, and do so in a format programs can parse.  */
106
107 int frame_file_full_name = 0;
108
109 \f
110 /* Print a stack frame briefly.  FRAME should be the frame id
111    and LEVEL should be its level in the stack (or -1 for level not defined).
112    This prints the level, the function executing, the arguments,
113    and the file name and line number.
114    If the pc is not at the beginning of the source line,
115    the actual pc is printed at the beginning.
116
117    If SOURCE is 1, print the source line as well.
118    If SOURCE is -1, print ONLY the source line.  */
119
120 void
121 print_stack_frame (frame, level, source)
122      FRAME frame;
123      int level;
124      int source;
125 {
126   struct frame_info *fi;
127
128   fi = get_frame_info (frame);
129
130   print_frame_info (fi, level, source, 1);
131 }
132
133 void
134 print_frame_info (fi, level, source, args)
135      struct frame_info *fi;
136      register int level;
137      int source;
138      int args;
139 {
140   struct symtab_and_line sal;
141   struct symbol *func;
142   register char *funname = 0;
143   enum language funlang = language_unknown;
144   int numargs;
145
146   if (PC_IN_CALL_DUMMY (fi->pc, read_register (SP_REGNUM), fi->frame))
147     {
148       /* Do this regardless of SOURCE because we don't have any source
149          to list for this frame.  */
150       if (level >= 0)
151         printf_filtered ("#%-2d ", level);
152       printf_filtered ("<function called from gdb>\n");
153       return;
154     }
155   if (fi->signal_handler_caller)
156     {
157       /* Do this regardless of SOURCE because we don't have any source
158          to list for this frame.  */
159       if (level >= 0)
160         printf_filtered ("#%-2d ", level);
161       printf_filtered ("<signal handler called>\n");
162       return;
163     }
164
165   sal = find_pc_line (fi->pc, fi->next_frame);
166   func = find_pc_function (fi->pc);
167   if (func)
168     {
169       /* In certain pathological cases, the symtabs give the wrong
170          function (when we are in the first function in a file which
171          is compiled without debugging symbols, the previous function
172          is compiled with debugging symbols, and the "foo.o" symbol
173          that is supposed to tell us where the file with debugging symbols
174          ends has been truncated by ar because it is longer than 15
175          characters).
176
177          So look in the minimal symbol tables as well, and if it comes
178          up with a larger address for the function use that instead.
179          I don't think this can ever cause any problems; there shouldn't
180          be any minimal symbols in the middle of a function.
181          FIXME:  (Not necessarily true.  What about text labels) */
182
183       struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (fi->pc);
184       if (msymbol != NULL
185           && (SYMBOL_VALUE_ADDRESS (msymbol) 
186               > BLOCK_START (SYMBOL_BLOCK_VALUE (func))))
187         {
188           /* In this case we have no way of knowing the source file
189              and line number, so don't print them.  */
190           sal.symtab = 0;
191           /* We also don't know anything about the function besides
192              its address and name.  */
193           func = 0;
194           funname = SYMBOL_NAME (msymbol);
195           funlang = SYMBOL_LANGUAGE (msymbol);
196         }
197       else
198         {
199           funname = SYMBOL_NAME (func);
200           funlang = SYMBOL_LANGUAGE (func);
201         }
202     }
203   else
204     {
205       register struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (fi->pc);
206       if (msymbol != NULL)
207         {
208           funname = SYMBOL_NAME (msymbol);
209           funlang = SYMBOL_LANGUAGE (msymbol);
210         }
211     }
212
213   if (source >= 0 || !sal.symtab)
214     {
215       if (level >= 0)
216         printf_filtered ("#%-2d ", level);
217       if (addressprint)
218         if (fi->pc != sal.pc || !sal.symtab)
219           printf_filtered ("%s in ", local_hex_string(fi->pc));
220       fprintf_symbol_filtered (stdout, funname ? funname : "??", funlang,
221                                DMGL_NO_OPTS);
222       wrap_here ("   ");
223       fputs_filtered (" (", stdout);
224       if (args)
225         {
226           FRAME_NUM_ARGS (numargs, fi);
227           print_frame_args (func, fi, numargs, stdout);
228         }
229       printf_filtered (")");
230       if (sal.symtab && sal.symtab->filename)
231         {
232           wrap_here ("   ");
233           printf_filtered (" at %s:%d", sal.symtab->filename, sal.line);
234         }
235
236 #ifdef PC_LOAD_SEGMENT
237      /* If we couldn't print out function name but if can figure out what
238         load segment this pc value is from, at least print out some info
239         about its load segment. */
240       if (!funname) {
241         wrap_here ("  ");
242         printf_filtered (" from %s", PC_LOAD_SEGMENT (fi->pc));
243       }
244 #endif
245       printf_filtered ("\n");
246     }
247
248   if ((source != 0) && sal.symtab)
249     {
250       int done = 0;
251       int mid_statement = source < 0 && fi->pc != sal.pc;
252       if (frame_file_full_name)
253         done = identify_source_line (sal.symtab, sal.line, mid_statement);
254       if (!done)
255         {
256           if (addressprint && mid_statement)
257             printf_filtered ("%s\t", local_hex_string(fi->pc));
258           print_source_lines (sal.symtab, sal.line, sal.line + 1, 0);
259         }
260       current_source_line = max (sal.line - lines_to_list/2, 1);
261     }
262   if (source != 0)
263     set_default_breakpoint (1, fi->pc, sal.symtab, sal.line);
264
265   fflush (stdout);
266 }
267
268 /*
269  * Read a frame specification in whatever the appropriate format is.
270  * Call error() if the specification is in any way invalid (i.e.
271  * this function never returns NULL).
272  */
273 static FRAME
274 parse_frame_specification (frame_exp)
275      char *frame_exp;
276 {
277   int numargs = 0;
278   int arg1, arg2, arg3;
279 #define MAXARGS 4
280   int args[MAXARGS];
281   
282   if (frame_exp)
283     {
284       char *addr_string, *p;
285       struct cleanup *tmp_cleanup;
286
287       while (*frame_exp == ' ') frame_exp++;
288
289       while (*frame_exp)
290         {
291           if (numargs > MAXARGS)
292             error ("Too many args in frame specification");
293           /* Parse an argument.  */
294           for (p = frame_exp; *p && *p != ' '; p++)
295             ;
296           addr_string = savestring(frame_exp, p - frame_exp);
297
298           {
299             tmp_cleanup = make_cleanup (free, addr_string);
300             args[numargs++] = parse_and_eval_address (addr_string);
301             do_cleanups (tmp_cleanup);
302           }
303
304           /* Skip spaces, move to possible next arg.  */
305           while (*p == ' ') p++;
306           frame_exp = p;
307         }
308     }
309
310   switch (numargs)
311     {
312     case 0:
313       if (selected_frame == NULL)
314         error ("No selected frame.");
315       return selected_frame;
316       /* NOTREACHED */
317     case 1:
318       {
319         int level = args[0];
320         FRAME fid = find_relative_frame (get_current_frame (), &level);
321         FRAME tfid;
322
323         if (level == 0)
324           /* find_relative_frame was successful */
325           return fid;
326
327         /* If (s)he specifies the frame with an address, he deserves what
328            (s)he gets.  Still, give the highest one that matches.  */
329
330         for (fid = get_current_frame ();
331              fid && FRAME_FP (fid) != args[0];
332              fid = get_prev_frame (fid))
333           ;
334
335         if (fid)
336           while ((tfid = get_prev_frame (fid)) &&
337                  (FRAME_FP (tfid) == args[0]))
338             fid = tfid;
339           
340         /* We couldn't identify the frame as an existing frame, but
341            perhaps we can create one with a single argument.
342            Fall through to default case; it's up to SETUP_ARBITRARY_FRAME
343            to complain if it doesn't like a single arg.  */
344       }
345
346      default:
347 #ifdef SETUP_ARBITRARY_FRAME
348       return SETUP_ARBITRARY_FRAME (numargs, args);
349 #else
350       /* Usual case.  Do it here rather than have everyone supply
351          a SETUP_ARBITRARY_FRAME that does this.  */
352       if (numargs == 1)
353         return create_new_frame (args[0], 0);
354       error ("Too many args in frame specification");
355 #endif
356       /* NOTREACHED */
357     }
358   /* NOTREACHED */
359 }
360
361 /* FRAME_ARGS_ADDRESS_CORRECT is just like FRAME_ARGS_ADDRESS except
362    that if it is unsure about the answer, it returns 0
363    instead of guessing (this happens on the VAX and i960, for example).
364
365    On most machines, we never have to guess about the args address,
366    so FRAME_ARGS_ADDRESS{,_CORRECT} are the same.  */
367 #if !defined (FRAME_ARGS_ADDRESS_CORRECT)
368 #define FRAME_ARGS_ADDRESS_CORRECT FRAME_ARGS_ADDRESS
369 #endif
370
371 /* Print verbosely the selected frame or the frame at address ADDR.
372    This means absolutely all information in the frame is printed.  */
373
374 static void
375 frame_info (addr_exp, from_tty)
376      char *addr_exp;
377      int from_tty;
378 {
379   FRAME frame;
380   struct frame_info *fi;
381   struct frame_saved_regs fsr;
382   struct symtab_and_line sal;
383   struct symbol *func;
384   struct symtab *s;
385   FRAME calling_frame;
386   int i, count;
387   char *funname = 0;
388   enum language funlang = language_unknown;
389
390   if (!target_has_stack)
391     error ("No inferior or core file.");
392
393   frame = parse_frame_specification (addr_exp);
394   if (!frame)
395     error ("Invalid frame specified.");
396
397   fi = get_frame_info (frame);
398   sal = find_pc_line (fi->pc, fi->next_frame);
399   func = get_frame_function (frame);
400   s = find_pc_symtab(fi->pc);
401   if (func)
402     {
403       funname = SYMBOL_NAME (func);
404       funlang = SYMBOL_LANGUAGE (func);
405     }
406   else
407     {
408       register struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (fi->pc);
409       if (msymbol != NULL)
410         {
411           funname = SYMBOL_NAME (msymbol);
412           funlang = SYMBOL_LANGUAGE (msymbol);
413         }
414     }
415   calling_frame = get_prev_frame (frame);
416
417   if (!addr_exp && selected_frame_level >= 0) {
418     printf_filtered ("Stack level %d, frame at %s:\n",
419                      selected_frame_level, 
420                      local_hex_string(FRAME_FP(frame)));
421   } else {
422     printf_filtered ("Stack frame at %s:\n",
423                      local_hex_string(FRAME_FP(frame)));
424   }
425   printf_filtered (" %s = %s",
426                    reg_names[PC_REGNUM], 
427                    local_hex_string(fi->pc));
428
429   wrap_here ("   ");
430   if (funname)
431     {
432       printf_filtered (" in ");
433       fprintf_symbol_filtered (stdout, funname, funlang,
434                                DMGL_ANSI | DMGL_PARAMS);
435     }
436   wrap_here ("   ");
437   if (sal.symtab)
438     printf_filtered (" (%s:%d)", sal.symtab->filename, sal.line);
439   puts_filtered ("; ");
440   wrap_here ("    ");
441   printf_filtered ("saved %s %s\n", reg_names[PC_REGNUM],
442                    local_hex_string(FRAME_SAVED_PC (frame)));
443
444   {
445     int frameless = 0;
446 #ifdef FRAMELESS_FUNCTION_INVOCATION
447     FRAMELESS_FUNCTION_INVOCATION (fi, frameless);
448 #endif
449     if (frameless)
450       printf_filtered (" (FRAMELESS),");
451   }
452
453   if (calling_frame)
454     printf_filtered (" called by frame at %s", 
455                      local_hex_string(FRAME_FP (calling_frame)));
456   if (fi->next_frame && calling_frame)
457     puts_filtered (",");
458   wrap_here ("   ");
459   if (fi->next_frame)
460     printf_filtered (" caller of frame at %s", local_hex_string(fi->next_frame));
461   if (fi->next_frame || calling_frame)
462     puts_filtered ("\n");
463   if (s)
464      printf_filtered(" source language %s.\n", language_str(s->language));
465
466 #ifdef PRINT_EXTRA_FRAME_INFO
467   PRINT_EXTRA_FRAME_INFO (fi);
468 #endif
469
470   {
471     /* Address of the argument list for this frame, or 0.  */
472     CORE_ADDR arg_list = FRAME_ARGS_ADDRESS_CORRECT (fi);
473     /* Number of args for this frame, or -1 if unknown.  */
474     int numargs;
475
476     if (arg_list == 0)
477         printf_filtered (" Arglist at unknown address.\n");
478     else
479       {
480         printf_filtered (" Arglist at %s,", local_hex_string(arg_list));
481
482         FRAME_NUM_ARGS (numargs, fi);
483         if (numargs < 0)
484           puts_filtered (" args: ");
485         else if (numargs == 0)
486           puts_filtered (" no args.");
487         else if (numargs == 1)
488           puts_filtered (" 1 arg: ");
489         else
490           printf_filtered (" %d args: ", numargs);
491         print_frame_args (func, fi, numargs, stdout);
492         puts_filtered ("\n");
493       }
494   }
495   {
496     /* Address of the local variables for this frame, or 0.  */
497     CORE_ADDR arg_list = FRAME_LOCALS_ADDRESS (fi);
498
499     if (arg_list == 0)
500         printf_filtered (" Locals at unknown address,");
501     else
502         printf_filtered (" Locals at %s,", local_hex_string(arg_list));
503   }
504
505 #if defined (FRAME_FIND_SAVED_REGS)  
506   get_frame_saved_regs (fi, &fsr);
507   /* The sp is special; what's returned isn't the save address, but
508      actually the value of the previous frame's sp.  */
509   printf_filtered (" Previous frame's sp is %s\n", 
510                    local_hex_string(fsr.regs[SP_REGNUM]));
511   count = 0;
512   for (i = 0; i < NUM_REGS; i++)
513     if (fsr.regs[i] && i != SP_REGNUM)
514       {
515         if (count == 0)
516           puts_filtered (" Saved registers:\n ");
517         else
518           puts_filtered (",");
519         wrap_here (" ");
520         printf_filtered (" %s at %s", reg_names[i], 
521                          local_hex_string(fsr.regs[i]));
522         count++;
523       }
524   if (count)
525     puts_filtered ("\n");
526 #endif /* Have FRAME_FIND_SAVED_REGS.  */
527 }
528
529 #if 0
530 /* Set a limit on the number of frames printed by default in a
531    backtrace.  */
532
533 static int backtrace_limit;
534
535 static void
536 set_backtrace_limit_command (count_exp, from_tty)
537      char *count_exp;
538      int from_tty;
539 {
540   int count = parse_and_eval_address (count_exp);
541
542   if (count < 0)
543     error ("Negative argument not meaningful as backtrace limit.");
544
545   backtrace_limit = count;
546 }
547
548 static void
549 backtrace_limit_info (arg, from_tty)
550      char *arg;
551      int from_tty;
552 {
553   if (arg)
554     error ("\"Info backtrace-limit\" takes no arguments.");
555
556   printf ("Backtrace limit: %d.\n", backtrace_limit);
557 }
558 #endif
559
560 /* Print briefly all stack frames or just the innermost COUNT frames.  */
561
562 static void
563 backtrace_command (count_exp, from_tty)
564      char *count_exp;
565      int from_tty;
566 {
567   struct frame_info *fi;
568   register int count;
569   register FRAME frame;
570   register int i;
571   register FRAME trailing;
572   register int trailing_level;
573
574   if (!target_has_stack)
575     error ("No stack.");
576
577   /* The following code must do two things.  First, it must
578      set the variable TRAILING to the frame from which we should start
579      printing.  Second, it must set the variable count to the number
580      of frames which we should print, or -1 if all of them.  */
581   trailing = get_current_frame ();
582   trailing_level = 0;
583   if (count_exp)
584     {
585       count = parse_and_eval_address (count_exp);
586       if (count < 0)
587         {
588           FRAME current;
589
590           count = -count;
591
592           current = trailing;
593           while (current && count--)
594             {
595               QUIT;
596               current = get_prev_frame (current);
597             }
598           
599           /* Will stop when CURRENT reaches the top of the stack.  TRAILING
600              will be COUNT below it.  */
601           while (current)
602             {
603               QUIT;
604               trailing = get_prev_frame (trailing);
605               current = get_prev_frame (current);
606               trailing_level++;
607             }
608           
609           count = -1;
610         }
611     }
612   else
613     count = -1;
614
615   if (info_verbose)
616     {
617       struct partial_symtab *ps;
618       
619       /* Read in symbols for all of the frames.  Need to do this in
620          a separate pass so that "Reading in symbols for xxx" messages
621          don't screw up the appearance of the backtrace.  Also
622          if people have strong opinions against reading symbols for
623          backtrace this may have to be an option.  */
624       i = count;
625       for (frame = trailing;
626            frame != NULL && i--;
627            frame = get_prev_frame (frame))
628         {
629           QUIT;
630           fi = get_frame_info (frame);
631           ps = find_pc_psymtab (fi->pc);
632           if (ps)
633             PSYMTAB_TO_SYMTAB (ps);     /* Force syms to come in */
634         }
635     }
636
637   for (i = 0, frame = trailing;
638        frame && count--;
639        i++, frame = get_prev_frame (frame))
640     {
641       QUIT;
642       fi = get_frame_info (frame);
643       print_frame_info (fi, trailing_level + i, 0, 1);
644     }
645
646   /* If we've stopped before the end, mention that.  */
647   if (frame && from_tty)
648     printf_filtered ("(More stack frames follow...)\n");
649 }
650 \f
651 /* Print the local variables of a block B active in FRAME.
652    Return 1 if any variables were printed; 0 otherwise.  */
653
654 static int
655 print_block_frame_locals (b, frame, stream)
656      struct block *b;
657      register FRAME frame;
658      register FILE *stream;
659 {
660   int nsyms;
661   register int i;
662   register struct symbol *sym;
663   register int values_printed = 0;
664
665   nsyms = BLOCK_NSYMS (b);
666
667   for (i = 0; i < nsyms; i++)
668     {
669       sym = BLOCK_SYM (b, i);
670       if (SYMBOL_CLASS (sym) == LOC_LOCAL
671           || SYMBOL_CLASS (sym) == LOC_REGISTER
672           || SYMBOL_CLASS (sym) == LOC_STATIC)
673         {
674           values_printed = 1;
675           fputs_filtered (SYMBOL_SOURCE_NAME (sym), stream);
676           fputs_filtered (" = ", stream);
677           print_variable_value (sym, frame, stream);
678           fprintf_filtered (stream, "\n");
679         }
680     }
681   return values_printed;
682 }
683
684 /* Same, but print labels.  */
685
686 static int
687 print_block_frame_labels (b, have_default, stream)
688      struct block *b;
689      int *have_default;
690      register FILE *stream;
691 {
692   int nsyms;
693   register int i;
694   register struct symbol *sym;
695   register int values_printed = 0;
696
697   nsyms = BLOCK_NSYMS (b);
698
699   for (i = 0; i < nsyms; i++)
700     {
701       sym = BLOCK_SYM (b, i);
702       if (STREQ (SYMBOL_NAME (sym), "default"))
703         {
704           if (*have_default)
705             continue;
706           *have_default = 1;
707         }
708       if (SYMBOL_CLASS (sym) == LOC_LABEL)
709         {
710           struct symtab_and_line sal;
711           sal = find_pc_line (SYMBOL_VALUE_ADDRESS (sym), 0);
712           values_printed = 1;
713           fputs_filtered (SYMBOL_SOURCE_NAME (sym), stream);
714           if (addressprint)
715             fprintf_filtered (stream, " %s", 
716                               local_hex_string(SYMBOL_VALUE_ADDRESS (sym)));
717           fprintf_filtered (stream, " in file %s, line %d\n",
718                             sal.symtab->filename, sal.line);
719         }
720     }
721   return values_printed;
722 }
723
724 /* Print on STREAM all the local variables in frame FRAME,
725    including all the blocks active in that frame
726    at its current pc.
727
728    Returns 1 if the job was done,
729    or 0 if nothing was printed because we have no info
730    on the function running in FRAME.  */
731
732 static void
733 print_frame_local_vars (frame, stream)
734      register FRAME frame;
735      register FILE *stream;
736 {
737   register struct block *block = get_frame_block (frame);
738   register int values_printed = 0;
739
740   if (block == 0)
741     {
742       fprintf_filtered (stream, "No symbol table info available.\n");
743       return;
744     }
745   
746   while (block != 0)
747     {
748       if (print_block_frame_locals (block, frame, stream))
749         values_printed = 1;
750       /* After handling the function's top-level block, stop.
751          Don't continue to its superblock, the block of
752          per-file symbols.  */
753       if (BLOCK_FUNCTION (block))
754         break;
755       block = BLOCK_SUPERBLOCK (block);
756     }
757
758   if (!values_printed)
759     {
760       fprintf_filtered (stream, "No locals.\n");
761     }
762 }
763
764 /* Same, but print labels.  */
765
766 static void
767 print_frame_label_vars (frame, this_level_only, stream)
768      register FRAME frame;
769      int this_level_only;
770      register FILE *stream;
771 {
772   register struct blockvector *bl;
773   register struct block *block = get_frame_block (frame);
774   register int values_printed = 0;
775   int index, have_default = 0;
776   char *blocks_printed;
777   struct frame_info *fi = get_frame_info (frame);
778   CORE_ADDR pc = fi->pc;
779
780   if (block == 0)
781     {
782       fprintf_filtered (stream, "No symbol table info available.\n");
783       return;
784     }
785
786   bl = blockvector_for_pc (BLOCK_END (block) - 4, &index);
787   blocks_printed = (char *) alloca (BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
788   memset (blocks_printed, 0, BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
789
790   while (block != 0)
791     {
792       CORE_ADDR end = BLOCK_END (block) - 4;
793       int last_index;
794
795       if (bl != blockvector_for_pc (end, &index))
796         error ("blockvector blotch");
797       if (BLOCKVECTOR_BLOCK (bl, index) != block)
798         error ("blockvector botch");
799       last_index = BLOCKVECTOR_NBLOCKS (bl);
800       index += 1;
801
802       /* Don't print out blocks that have gone by.  */
803       while (index < last_index
804              && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < pc)
805         index++;
806
807       while (index < last_index
808              && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < end)
809         {
810           if (blocks_printed[index] == 0)
811             {
812               if (print_block_frame_labels (BLOCKVECTOR_BLOCK (bl, index), &have_default, stream))
813                 values_printed = 1;
814               blocks_printed[index] = 1;
815             }
816           index++;
817         }
818       if (have_default)
819         return;
820       if (values_printed && this_level_only)
821         return;
822
823       /* After handling the function's top-level block, stop.
824          Don't continue to its superblock, the block of
825          per-file symbols.  */
826       if (BLOCK_FUNCTION (block))
827         break;
828       block = BLOCK_SUPERBLOCK (block);
829     }
830
831   if (!values_printed && !this_level_only)
832     {
833       fprintf_filtered (stream, "No catches.\n");
834     }
835 }
836
837 /* ARGSUSED */
838 static void
839 locals_info (args, from_tty)
840      char *args;
841      int from_tty;
842 {
843   if (!selected_frame)
844     error ("No frame selected.");
845   print_frame_local_vars (selected_frame, stdout);
846 }
847
848 static void
849 catch_info (ignore, from_tty)
850      char *ignore;
851      int from_tty;
852 {
853   if (!selected_frame)
854     error ("No frame selected.");
855   print_frame_label_vars (selected_frame, 0, stdout);
856 }
857
858 static void
859 print_frame_arg_vars (frame, stream)
860      register FRAME frame;
861      register FILE *stream;
862 {
863   struct symbol *func = get_frame_function (frame);
864   register struct block *b;
865   int nsyms;
866   register int i;
867   register struct symbol *sym, *sym2;
868   register int values_printed = 0;
869
870   if (func == 0)
871     {
872       fprintf_filtered (stream, "No symbol table info available.\n");
873       return;
874     }
875
876   b = SYMBOL_BLOCK_VALUE (func);
877   nsyms = BLOCK_NSYMS (b);
878
879   for (i = 0; i < nsyms; i++)
880     {
881       sym = BLOCK_SYM (b, i);
882       if (SYMBOL_CLASS (sym) == LOC_ARG
883           || SYMBOL_CLASS (sym) == LOC_LOCAL_ARG
884           || SYMBOL_CLASS (sym) == LOC_REF_ARG
885           || SYMBOL_CLASS (sym) == LOC_REGPARM
886           || SYMBOL_CLASS (sym) == LOC_REGPARM_ADDR)
887         {
888           values_printed = 1;
889           fputs_filtered (SYMBOL_SOURCE_NAME (sym), stream);
890           fputs_filtered (" = ", stream);
891
892           /* We have to look up the symbol because arguments can have
893              two entries (one a parameter, one a local) and the one we
894              want is the local, which lookup_symbol will find for us.
895              This includes gcc1 (not gcc2) on the sparc when passing a
896              small structure and gcc2 when the argument type is float
897              and it is passed as a double and converted to float by
898              the prologue (in the latter case the type of the LOC_ARG
899              symbol is double and the type of the LOC_LOCAL symbol is
900              float).  It's possible this should be dealt with in
901              symbol reading the way it now is for LOC_REGPARM.  */
902
903           sym2 = lookup_symbol (SYMBOL_NAME (sym),
904                         b, VAR_NAMESPACE, (int *)NULL, (struct symtab **)NULL);
905           print_variable_value (sym2, frame, stream);
906           fprintf_filtered (stream, "\n");
907         }
908     }
909
910   if (!values_printed)
911     {
912       fprintf_filtered (stream, "No arguments.\n");
913     }
914 }
915
916 static void
917 args_info (ignore, from_tty)
918      char *ignore;
919      int from_tty;
920 {
921   if (!selected_frame)
922     error ("No frame selected.");
923   print_frame_arg_vars (selected_frame, stdout);
924 }
925 \f
926 /* Select frame FRAME, and note that its stack level is LEVEL.
927    LEVEL may be -1 if an actual level number is not known.  */
928
929 void
930 select_frame (frame, level)
931      FRAME frame;
932      int level;
933 {
934   register struct symtab *s;
935
936   selected_frame = frame;
937   selected_frame_level = level;
938
939   /* Ensure that symbols for this frame are read in.  Also, determine the
940      source language of this frame, and switch to it if desired.  */
941   if (frame)
942   {
943     s = find_pc_symtab (get_frame_info (frame)->pc);
944     if (s 
945         && s->language != current_language->la_language
946         && s->language != language_unknown
947         && language_mode == language_mode_auto) {
948       set_language(s->language);
949     }
950   }
951 }
952
953 /* Store the selected frame and its level into *FRAMEP and *LEVELP.
954    If there is no selected frame, *FRAMEP is set to NULL.  */
955
956 void
957 record_selected_frame (frameaddrp, levelp)
958      FRAME_ADDR *frameaddrp;
959      int *levelp;
960 {
961   *frameaddrp = selected_frame ? FRAME_FP (selected_frame) : 0;
962   *levelp = selected_frame_level;
963 }
964
965 /* Return the symbol-block in which the selected frame is executing.
966    Can return zero under various legitimate circumstances.  */
967
968 struct block *
969 get_selected_block ()
970 {
971   if (!target_has_stack)
972     return 0;
973
974   if (!selected_frame)
975     return get_current_block ();
976   return get_frame_block (selected_frame);
977 }
978
979 /* Find a frame a certain number of levels away from FRAME.
980    LEVEL_OFFSET_PTR points to an int containing the number of levels.
981    Positive means go to earlier frames (up); negative, the reverse.
982    The int that contains the number of levels is counted toward
983    zero as the frames for those levels are found.
984    If the top or bottom frame is reached, that frame is returned,
985    but the final value of *LEVEL_OFFSET_PTR is nonzero and indicates
986    how much farther the original request asked to go.  */
987
988 FRAME
989 find_relative_frame (frame, level_offset_ptr)
990      register FRAME frame;
991      register int* level_offset_ptr;
992 {
993   register FRAME prev;
994   register FRAME frame1;
995
996   /* Going up is simple: just do get_prev_frame enough times
997      or until initial frame is reached.  */
998   while (*level_offset_ptr > 0)
999     {
1000       prev = get_prev_frame (frame);
1001       if (prev == 0)
1002         break;
1003       (*level_offset_ptr)--;
1004       frame = prev;
1005     }
1006   /* Going down is just as simple.  */
1007   if (*level_offset_ptr < 0)
1008     {
1009       while (*level_offset_ptr < 0) {
1010         frame1 = get_next_frame (frame);
1011         if (!frame1)
1012           break;
1013         frame = frame1;
1014         (*level_offset_ptr)++;
1015       }
1016     }
1017   return frame;
1018 }
1019
1020 /* The "select_frame" command.  With no arg, NOP.
1021    With arg LEVEL_EXP, select the frame at level LEVEL if it is a
1022    valid level.  Otherwise, treat level_exp as an address expression
1023    and select it.  See parse_frame_specification for more info on proper
1024    frame expressions. */
1025
1026 /* ARGSUSED */
1027 static void
1028 select_frame_command (level_exp, from_tty)
1029      char *level_exp;
1030      int from_tty;
1031 {
1032   register FRAME frame, frame1;
1033   unsigned int level = 0;
1034
1035   if (!target_has_stack)
1036     error ("No stack.");
1037
1038   frame = parse_frame_specification (level_exp);
1039
1040   /* Try to figure out what level this frame is.  But if there is
1041      no current stack, don't error out -- let the user set one.  */
1042   frame1 = 0;
1043   if (get_current_frame()) {
1044     for (frame1 = get_prev_frame (0);
1045          frame1 && frame1 != frame;
1046          frame1 = get_prev_frame (frame1))
1047       level++;
1048   }
1049
1050   if (!frame1)
1051     level = 0;
1052
1053   select_frame (frame, level);
1054 }
1055
1056 /* The "frame" command.  With no arg, print selected frame briefly.
1057    With arg, behaves like select_frame and then prints the selected
1058    frame.  */
1059
1060 static void
1061 frame_command (level_exp, from_tty)
1062      char *level_exp;
1063      int from_tty;
1064 {
1065   select_frame_command (level_exp, from_tty);
1066   print_stack_frame (selected_frame, selected_frame_level, 1);
1067 }
1068
1069 /* Select the frame up one or COUNT stack levels
1070    from the previously selected frame, and print it briefly.  */
1071
1072 /* ARGSUSED */
1073 static void
1074 up_silently_command (count_exp, from_tty)
1075      char *count_exp;
1076      int from_tty;
1077 {
1078   register FRAME frame;
1079   int count = 1, count1;
1080   if (count_exp)
1081     count = parse_and_eval_address (count_exp);
1082   count1 = count;
1083   
1084   if (target_has_stack == 0 || selected_frame == 0)
1085     error ("No stack.");
1086
1087   frame = find_relative_frame (selected_frame, &count1);
1088   if (count1 != 0 && count_exp == 0)
1089     error ("Initial frame selected; you cannot go up.");
1090   select_frame (frame, selected_frame_level + count - count1);
1091 }
1092
1093 static void
1094 up_command (count_exp, from_tty)
1095      char *count_exp;
1096      int from_tty;
1097 {
1098   up_silently_command (count_exp, from_tty);
1099   print_stack_frame (selected_frame, selected_frame_level, 1);
1100 }
1101
1102 /* Select the frame down one or COUNT stack levels
1103    from the previously selected frame, and print it briefly.  */
1104
1105 /* ARGSUSED */
1106 static void
1107 down_silently_command (count_exp, from_tty)
1108      char *count_exp;
1109      int from_tty;
1110 {
1111   register FRAME frame;
1112   int count = -1, count1;
1113   if (count_exp)
1114     count = - parse_and_eval_address (count_exp);
1115   count1 = count;
1116   
1117   if (target_has_stack == 0 || selected_frame == 0)
1118     error ("No stack.");
1119
1120   frame = find_relative_frame (selected_frame, &count1);
1121   if (count1 != 0 && count_exp == 0)
1122     error ("Bottom (i.e., innermost) frame selected; you cannot go down.");
1123   select_frame (frame, selected_frame_level + count - count1);
1124 }
1125
1126
1127 static void
1128 down_command (count_exp, from_tty)
1129      char *count_exp;
1130      int from_tty;
1131 {
1132   down_silently_command (count_exp, from_tty);
1133   print_stack_frame (selected_frame, selected_frame_level, 1);
1134 }
1135 \f
1136 static void
1137 return_command (retval_exp, from_tty)
1138      char *retval_exp;
1139      int from_tty;
1140 {
1141   struct symbol *thisfun;
1142   FRAME_ADDR selected_frame_addr;
1143   CORE_ADDR selected_frame_pc;
1144   FRAME frame;
1145   value return_value;
1146
1147   if (selected_frame == NULL)
1148     error ("No selected frame.");
1149   thisfun = get_frame_function (selected_frame);
1150   selected_frame_addr = FRAME_FP (selected_frame);
1151   selected_frame_pc = (get_frame_info (selected_frame))->pc;
1152
1153   /* Compute the return value (if any -- possibly getting errors here).
1154      Call VALUE_CONTENTS to make sure we have fully evaluated it, since
1155      it might live in the stack frame we're about to pop.  */
1156
1157   if (retval_exp)
1158     {
1159       return_value = parse_and_eval (retval_exp);
1160       VALUE_CONTENTS (return_value);
1161     }
1162
1163   /* If interactive, require confirmation.  */
1164
1165   if (from_tty)
1166     {
1167       if (thisfun != 0)
1168         {
1169           if (!query ("Make %s return now? ", SYMBOL_SOURCE_NAME (thisfun)))
1170             {
1171               error ("Not confirmed.");
1172               /* NOTREACHED */
1173             }
1174         }
1175       else
1176         if (!query ("Make selected stack frame return now? "))
1177           error ("Not confirmed.");
1178     }
1179
1180   /* Do the real work.  Pop until the specified frame is current.  We
1181      use this method because the selected_frame is not valid after
1182      a POP_FRAME.  The pc comparison makes this work even if the
1183      selected frame shares its fp with another frame.  */
1184
1185   while ( selected_frame_addr != FRAME_FP (frame = get_current_frame())
1186        || selected_frame_pc   != (get_frame_info (frame))->pc  )
1187     POP_FRAME;
1188
1189   /* Then pop that frame.  */
1190
1191   POP_FRAME;
1192
1193   /* Compute the return value (if any) and store in the place
1194      for return values.  */
1195
1196   if (retval_exp)
1197     set_return_value (return_value);
1198
1199   /* If interactive, print the frame that is now current.  */
1200
1201   if (from_tty)
1202     frame_command ("0", 1);
1203 }
1204
1205 /* Gets the language of the current frame. */
1206 enum language
1207 get_frame_language()
1208 {
1209    register struct symtab *s;
1210    FRAME fr;
1211    enum language flang;         /* The language of the current frame */
1212    
1213    fr = get_frame_info(selected_frame);
1214    if(fr)
1215    {
1216       s = find_pc_symtab(fr->pc);
1217       if(s)
1218          flang = s->language;
1219       else
1220          flang = language_unknown;
1221    }
1222    else
1223       flang = language_unknown;
1224
1225    return flang;
1226 }
1227 \f
1228 void
1229 _initialize_stack ()
1230 {
1231 #if 0  
1232   backtrace_limit = 30;
1233 #endif
1234
1235   add_com ("return", class_stack, return_command,
1236            "Make selected stack frame return to its caller.\n\
1237 Control remains in the debugger, but when you continue\n\
1238 execution will resume in the frame above the one now selected.\n\
1239 If an argument is given, it is an expression for the value to return.");
1240
1241   add_com ("up", class_stack, up_command,
1242            "Select and print stack frame that called this one.\n\
1243 An argument says how many frames up to go.");
1244   add_com ("up-silently", class_support, up_silently_command,
1245            "Same as the `up' command, but does not print anything.\n\
1246 This is useful in command scripts.");
1247
1248   add_com ("down", class_stack, down_command,
1249            "Select and print stack frame called by this one.\n\
1250 An argument says how many frames down to go.");
1251   add_com_alias ("do", "down", class_stack, 1);
1252   add_com_alias ("dow", "down", class_stack, 1);
1253   add_com ("down-silently", class_support, down_silently_command,
1254            "Same as the `down' command, but does not print anything.\n\
1255 This is useful in command scripts.");
1256
1257   add_com ("frame", class_stack, frame_command,
1258            "Select and print a stack frame.\n\
1259 With no argument, print the selected stack frame.  (See also \"info frame\").\n\
1260 An argument specifies the frame to select.\n\
1261 It can be a stack frame number or the address of the frame.\n\
1262 With argument, nothing is printed if input is coming from\n\
1263 a command file or a user-defined command.");
1264
1265   add_com_alias ("f", "frame", class_stack, 1);
1266
1267   add_com ("select-frame", class_stack, select_frame_command,
1268            "Select a stack frame without printing anything.\n\
1269 An argument specifies the frame to select.\n\
1270 It can be a stack frame number or the address of the frame.\n");
1271
1272   add_com ("backtrace", class_stack, backtrace_command,
1273            "Print backtrace of all stack frames, or innermost COUNT frames.\n\
1274 With a negative argument, print outermost -COUNT frames.");
1275   add_com_alias ("bt", "backtrace", class_stack, 0);
1276   add_com_alias ("where", "backtrace", class_alias, 0);
1277   add_info ("stack", backtrace_command,
1278             "Backtrace of the stack, or innermost COUNT frames.");
1279   add_info_alias ("s", "stack", 1);
1280   add_info ("frame", frame_info,
1281             "All about selected stack frame, or frame at ADDR.");
1282   add_info_alias ("f", "frame", 1);
1283   add_info ("locals", locals_info,
1284             "Local variables of current stack frame.");
1285   add_info ("args", args_info,
1286             "Argument variables of current stack frame.");
1287   add_info ("catch", catch_info,
1288             "Exceptions that can be caught in the current stack frame.");
1289
1290 #if 0
1291   add_cmd ("backtrace-limit", class_stack, set_backtrace_limit_command, 
1292            "Specify maximum number of frames for \"backtrace\" to print by default.",
1293            &setlist);
1294   add_info ("backtrace-limit", backtrace_limit_info,
1295             "The maximum number of frames for \"backtrace\" to print by default.");
1296 #endif
1297 }
This page took 0.095638 seconds and 4 git commands to generate.