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