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