stack.c revision 1.7 1 1.1 christos /* Print and select stack frames for GDB, the GNU debugger.
2 1.1 christos
3 1.7 christos Copyright (C) 1986-2017 Free Software Foundation, Inc.
4 1.1 christos
5 1.1 christos This file is part of GDB.
6 1.1 christos
7 1.1 christos This program is free software; you can redistribute it and/or modify
8 1.1 christos it under the terms of the GNU General Public License as published by
9 1.1 christos the Free Software Foundation; either version 3 of the License, or
10 1.1 christos (at your option) any later version.
11 1.1 christos
12 1.1 christos This program is distributed in the hope that it will be useful,
13 1.1 christos but WITHOUT ANY WARRANTY; without even the implied warranty of
14 1.1 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 1.1 christos GNU General Public License for more details.
16 1.1 christos
17 1.1 christos You should have received a copy of the GNU General Public License
18 1.1 christos along with this program. If not, see <http://www.gnu.org/licenses/>. */
19 1.1 christos
20 1.1 christos #include "defs.h"
21 1.1 christos #include "value.h"
22 1.1 christos #include "symtab.h"
23 1.1 christos #include "gdbtypes.h"
24 1.1 christos #include "expression.h"
25 1.1 christos #include "language.h"
26 1.1 christos #include "frame.h"
27 1.1 christos #include "gdbcmd.h"
28 1.1 christos #include "gdbcore.h"
29 1.1 christos #include "target.h"
30 1.1 christos #include "source.h"
31 1.1 christos #include "breakpoint.h"
32 1.1 christos #include "demangle.h"
33 1.1 christos #include "inferior.h"
34 1.1 christos #include "annotate.h"
35 1.1 christos #include "ui-out.h"
36 1.1 christos #include "block.h"
37 1.1 christos #include "stack.h"
38 1.1 christos #include "dictionary.h"
39 1.1 christos #include "reggroups.h"
40 1.1 christos #include "regcache.h"
41 1.1 christos #include "solib.h"
42 1.1 christos #include "valprint.h"
43 1.1 christos #include "gdbthread.h"
44 1.1 christos #include "cp-support.h"
45 1.1 christos #include "disasm.h"
46 1.1 christos #include "inline-frame.h"
47 1.1 christos #include "linespec.h"
48 1.1 christos #include "cli/cli-utils.h"
49 1.3 christos #include "objfiles.h"
50 1.1 christos
51 1.6 christos #include "safe-ctype.h"
52 1.1 christos #include "symfile.h"
53 1.3 christos #include "extension.h"
54 1.6 christos #include "observer.h"
55 1.1 christos
56 1.1 christos /* The possible choices of "set print frame-arguments", and the value
57 1.1 christos of this setting. */
58 1.1 christos
59 1.1 christos static const char *const print_frame_arguments_choices[] =
60 1.1 christos {"all", "scalars", "none", NULL};
61 1.1 christos static const char *print_frame_arguments = "scalars";
62 1.1 christos
63 1.1 christos /* If non-zero, don't invoke pretty-printers for frame arguments. */
64 1.1 christos static int print_raw_frame_arguments;
65 1.1 christos
66 1.1 christos /* The possible choices of "set print entry-values", and the value
67 1.1 christos of this setting. */
68 1.1 christos
69 1.1 christos const char print_entry_values_no[] = "no";
70 1.1 christos const char print_entry_values_only[] = "only";
71 1.1 christos const char print_entry_values_preferred[] = "preferred";
72 1.1 christos const char print_entry_values_if_needed[] = "if-needed";
73 1.1 christos const char print_entry_values_both[] = "both";
74 1.1 christos const char print_entry_values_compact[] = "compact";
75 1.1 christos const char print_entry_values_default[] = "default";
76 1.1 christos static const char *const print_entry_values_choices[] =
77 1.1 christos {
78 1.1 christos print_entry_values_no,
79 1.1 christos print_entry_values_only,
80 1.1 christos print_entry_values_preferred,
81 1.1 christos print_entry_values_if_needed,
82 1.1 christos print_entry_values_both,
83 1.1 christos print_entry_values_compact,
84 1.1 christos print_entry_values_default,
85 1.1 christos NULL
86 1.1 christos };
87 1.1 christos const char *print_entry_values = print_entry_values_default;
88 1.1 christos
89 1.1 christos /* Prototypes for local functions. */
90 1.1 christos
91 1.1 christos static void print_frame_local_vars (struct frame_info *, int,
92 1.1 christos struct ui_file *);
93 1.1 christos
94 1.1 christos static void print_frame (struct frame_info *frame, int print_level,
95 1.1 christos enum print_what print_what, int print_args,
96 1.1 christos struct symtab_and_line sal);
97 1.1 christos
98 1.1 christos static void set_last_displayed_sal (int valid,
99 1.1 christos struct program_space *pspace,
100 1.1 christos CORE_ADDR addr,
101 1.1 christos struct symtab *symtab,
102 1.1 christos int line);
103 1.1 christos
104 1.1 christos /* Zero means do things normally; we are interacting directly with the
105 1.1 christos user. One means print the full filename and linenumber when a
106 1.1 christos frame is printed, and do so in a format emacs18/emacs19.22 can
107 1.1 christos parse. Two means print similar annotations, but in many more
108 1.1 christos cases and in a slightly different syntax. */
109 1.1 christos
110 1.1 christos int annotation_level = 0;
111 1.1 christos
112 1.1 christos /* These variables hold the last symtab and line we displayed to the user.
113 1.1 christos * This is where we insert a breakpoint or a skiplist entry by default. */
114 1.1 christos static int last_displayed_sal_valid = 0;
115 1.1 christos static struct program_space *last_displayed_pspace = 0;
116 1.1 christos static CORE_ADDR last_displayed_addr = 0;
117 1.1 christos static struct symtab *last_displayed_symtab = 0;
118 1.1 christos static int last_displayed_line = 0;
119 1.1 christos
120 1.1 christos
122 1.1 christos /* Return 1 if we should display the address in addition to the location,
123 1.1 christos because we are in the middle of a statement. */
124 1.1 christos
125 1.1 christos static int
126 1.1 christos frame_show_address (struct frame_info *frame,
127 1.1 christos struct symtab_and_line sal)
128 1.1 christos {
129 1.1 christos /* If there is a line number, but no PC, then there is no location
130 1.1 christos information associated with this sal. The only way that should
131 1.1 christos happen is for the call sites of inlined functions (SAL comes from
132 1.1 christos find_frame_sal). Otherwise, we would have some PC range if the
133 1.1 christos SAL came from a line table. */
134 1.1 christos if (sal.line != 0 && sal.pc == 0 && sal.end == 0)
135 1.1 christos {
136 1.1 christos if (get_next_frame (frame) == NULL)
137 1.1 christos gdb_assert (inline_skipped_frames (inferior_ptid) > 0);
138 1.1 christos else
139 1.1 christos gdb_assert (get_frame_type (get_next_frame (frame)) == INLINE_FRAME);
140 1.1 christos return 0;
141 1.1 christos }
142 1.1 christos
143 1.1 christos return get_frame_pc (frame) != sal.pc;
144 1.1 christos }
145 1.6 christos
146 1.6 christos /* See frame.h. */
147 1.6 christos
148 1.6 christos void
149 1.6 christos print_stack_frame_to_uiout (struct ui_out *uiout, struct frame_info *frame,
150 1.6 christos int print_level, enum print_what print_what,
151 1.6 christos int set_current_sal)
152 1.7 christos {
153 1.6 christos scoped_restore save_uiout = make_scoped_restore (¤t_uiout, uiout);
154 1.6 christos
155 1.6 christos print_stack_frame (frame, print_level, print_what, set_current_sal);
156 1.6 christos }
157 1.6 christos
158 1.1 christos /* Show or print a stack frame FRAME briefly. The output is formatted
159 1.1 christos according to PRINT_LEVEL and PRINT_WHAT printing the frame's
160 1.1 christos relative level, function name, argument list, and file name and
161 1.1 christos line number. If the frame's PC is not at the beginning of the
162 1.1 christos source line, the actual PC is printed at the beginning. */
163 1.1 christos
164 1.1 christos void
165 1.1 christos print_stack_frame (struct frame_info *frame, int print_level,
166 1.1 christos enum print_what print_what,
167 1.1 christos int set_current_sal)
168 1.1 christos {
169 1.1 christos
170 1.7 christos /* For mi, alway print location and address. */
171 1.1 christos if (current_uiout->is_mi_like_p ())
172 1.1 christos print_what = LOC_AND_ADDRESS;
173 1.5 christos
174 1.1 christos TRY
175 1.1 christos {
176 1.1 christos print_frame_info (frame, print_level, print_what, 1 /* print_args */,
177 1.1 christos set_current_sal);
178 1.3 christos if (set_current_sal)
179 1.1 christos set_current_sal_from_frame (frame);
180 1.5 christos }
181 1.5 christos CATCH (e, RETURN_MASK_ERROR)
182 1.5 christos {
183 1.5 christos }
184 1.1 christos END_CATCH
185 1.1 christos }
186 1.1 christos
187 1.1 christos /* Print nameless arguments of frame FRAME on STREAM, where START is
188 1.1 christos the offset of the first nameless argument, and NUM is the number of
189 1.1 christos nameless arguments to print. FIRST is nonzero if this is the first
190 1.1 christos argument (not just the first nameless argument). */
191 1.1 christos
192 1.1 christos static void
193 1.1 christos print_frame_nameless_args (struct frame_info *frame, long start, int num,
194 1.1 christos int first, struct ui_file *stream)
195 1.1 christos {
196 1.1 christos struct gdbarch *gdbarch = get_frame_arch (frame);
197 1.1 christos enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
198 1.1 christos int i;
199 1.1 christos CORE_ADDR argsaddr;
200 1.1 christos long arg_value;
201 1.1 christos
202 1.1 christos for (i = 0; i < num; i++)
203 1.1 christos {
204 1.1 christos QUIT;
205 1.1 christos argsaddr = get_frame_args_address (frame);
206 1.1 christos if (!argsaddr)
207 1.1 christos return;
208 1.1 christos arg_value = read_memory_integer (argsaddr + start,
209 1.1 christos sizeof (int), byte_order);
210 1.1 christos if (!first)
211 1.1 christos fprintf_filtered (stream, ", ");
212 1.1 christos fprintf_filtered (stream, "%ld", arg_value);
213 1.1 christos first = 0;
214 1.1 christos start += sizeof (int);
215 1.1 christos }
216 1.1 christos }
217 1.1 christos
218 1.1 christos /* Print single argument of inferior function. ARG must be already
219 1.1 christos read in.
220 1.1 christos
221 1.1 christos Errors are printed as if they would be the parameter value. Use zeroed ARG
222 1.1 christos iff it should not be printed accoring to user settings. */
223 1.1 christos
224 1.1 christos static void
225 1.1 christos print_frame_arg (const struct frame_arg *arg)
226 1.1 christos {
227 1.1 christos struct ui_out *uiout = current_uiout;
228 1.5 christos struct cleanup *old_chain;
229 1.1 christos const char *error_message = NULL;
230 1.7 christos
231 1.1 christos string_file stb;
232 1.1 christos
233 1.1 christos gdb_assert (!arg->val || !arg->error);
234 1.1 christos gdb_assert (arg->entry_kind == print_entry_values_no
235 1.7 christos || arg->entry_kind == print_entry_values_only
236 1.1 christos || (!uiout->is_mi_like_p ()
237 1.1 christos && arg->entry_kind == print_entry_values_compact));
238 1.1 christos
239 1.1 christos annotate_arg_begin ();
240 1.7 christos
241 1.7 christos old_chain = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
242 1.1 christos fprintf_symbol_filtered (&stb, SYMBOL_PRINT_NAME (arg->sym),
243 1.1 christos SYMBOL_LANGUAGE (arg->sym), DMGL_PARAMS | DMGL_ANSI);
244 1.1 christos if (arg->entry_kind == print_entry_values_compact)
245 1.1 christos {
246 1.1 christos /* It is OK to provide invalid MI-like stream as with
247 1.7 christos PRINT_ENTRY_VALUE_COMPACT we never use MI. */
248 1.1 christos stb.puts ("=");
249 1.7 christos
250 1.1 christos fprintf_symbol_filtered (&stb, SYMBOL_PRINT_NAME (arg->sym),
251 1.1 christos SYMBOL_LANGUAGE (arg->sym),
252 1.1 christos DMGL_PARAMS | DMGL_ANSI);
253 1.1 christos }
254 1.1 christos if (arg->entry_kind == print_entry_values_only
255 1.7 christos || arg->entry_kind == print_entry_values_compact)
256 1.7 christos stb.puts ("@entry");
257 1.1 christos uiout->field_stream ("name", stb);
258 1.7 christos annotate_arg_name_end ();
259 1.1 christos uiout->text ("=");
260 1.1 christos
261 1.7 christos if (!arg->val && !arg->error)
262 1.1 christos uiout->text ("...");
263 1.1 christos else
264 1.1 christos {
265 1.5 christos if (arg->error)
266 1.1 christos error_message = arg->error;
267 1.1 christos else
268 1.5 christos {
269 1.1 christos TRY
270 1.1 christos {
271 1.1 christos const struct language_defn *language;
272 1.1 christos struct value_print_options opts;
273 1.1 christos
274 1.1 christos /* Avoid value_print because it will deref ref parameters. We
275 1.1 christos just want to print their addresses. Print ??? for args whose
276 1.1 christos address we do not know. We pass 2 as "recurse" to val_print
277 1.1 christos because our standard indentation here is 4 spaces, and
278 1.1 christos val_print indents 2 for each recurse. */
279 1.1 christos
280 1.1 christos annotate_arg_value (value_type (arg->val));
281 1.1 christos
282 1.1 christos /* Use the appropriate language to display our symbol, unless the
283 1.1 christos user forced the language to a specific language. */
284 1.1 christos if (language_mode == language_mode_auto)
285 1.1 christos language = language_def (SYMBOL_LANGUAGE (arg->sym));
286 1.1 christos else
287 1.1 christos language = current_language;
288 1.1 christos
289 1.1 christos get_no_prettyformat_print_options (&opts);
290 1.1 christos opts.deref_ref = 1;
291 1.1 christos opts.raw = print_raw_frame_arguments;
292 1.1 christos
293 1.1 christos /* True in "summary" mode, false otherwise. */
294 1.1 christos opts.summary = !strcmp (print_frame_arguments, "scalars");
295 1.7 christos
296 1.1 christos common_val_print (arg->val, &stb, 2, &opts, language);
297 1.5 christos }
298 1.5 christos CATCH (except, RETURN_MASK_ERROR)
299 1.5 christos {
300 1.5 christos error_message = except.message;
301 1.5 christos }
302 1.1 christos END_CATCH
303 1.5 christos }
304 1.7 christos if (error_message != NULL)
305 1.1 christos stb.printf (_("<error reading variable: %s>"), error_message);
306 1.1 christos }
307 1.7 christos
308 1.1 christos uiout->field_stream ("value", stb);
309 1.1 christos
310 1.1 christos /* Also invoke ui_out_tuple_end. */
311 1.1 christos do_cleanups (old_chain);
312 1.1 christos
313 1.1 christos annotate_arg_end ();
314 1.1 christos }
315 1.1 christos
316 1.1 christos /* Read in inferior function local SYM at FRAME into ARGP. Caller is
317 1.1 christos responsible for xfree of ARGP->ERROR. This function never throws an
318 1.1 christos exception. */
319 1.1 christos
320 1.1 christos void
321 1.1 christos read_frame_local (struct symbol *sym, struct frame_info *frame,
322 1.1 christos struct frame_arg *argp)
323 1.5 christos {
324 1.5 christos argp->sym = sym;
325 1.5 christos argp->val = NULL;
326 1.5 christos argp->error = NULL;
327 1.5 christos
328 1.5 christos TRY
329 1.6 christos {
330 1.5 christos argp->val = read_var_value (sym, NULL, frame);
331 1.5 christos }
332 1.1 christos CATCH (except, RETURN_MASK_ERROR)
333 1.5 christos {
334 1.1 christos argp->error = xstrdup (except.message);
335 1.5 christos }
336 1.1 christos END_CATCH
337 1.1 christos }
338 1.1 christos
339 1.1 christos /* Read in inferior function parameter SYM at FRAME into ARGP. Caller is
340 1.1 christos responsible for xfree of ARGP->ERROR. This function never throws an
341 1.1 christos exception. */
342 1.1 christos
343 1.1 christos void
344 1.1 christos read_frame_arg (struct symbol *sym, struct frame_info *frame,
345 1.1 christos struct frame_arg *argp, struct frame_arg *entryargp)
346 1.1 christos {
347 1.1 christos struct value *val = NULL, *entryval = NULL;
348 1.1 christos char *val_error = NULL, *entryval_error = NULL;
349 1.1 christos int val_equal = 0;
350 1.1 christos
351 1.1 christos if (print_entry_values != print_entry_values_only
352 1.1 christos && print_entry_values != print_entry_values_preferred)
353 1.5 christos {
354 1.1 christos TRY
355 1.6 christos {
356 1.1 christos val = read_var_value (sym, NULL, frame);
357 1.5 christos }
358 1.1 christos CATCH (except, RETURN_MASK_ERROR)
359 1.6 christos {
360 1.1 christos val_error = (char *) alloca (strlen (except.message) + 1);
361 1.1 christos strcpy (val_error, except.message);
362 1.5 christos }
363 1.1 christos END_CATCH
364 1.1 christos }
365 1.1 christos
366 1.1 christos if (SYMBOL_COMPUTED_OPS (sym) != NULL
367 1.1 christos && SYMBOL_COMPUTED_OPS (sym)->read_variable_at_entry != NULL
368 1.1 christos && print_entry_values != print_entry_values_no
369 1.1 christos && (print_entry_values != print_entry_values_if_needed
370 1.1 christos || !val || value_optimized_out (val)))
371 1.5 christos {
372 1.1 christos TRY
373 1.1 christos {
374 1.1 christos const struct symbol_computed_ops *ops;
375 1.1 christos
376 1.1 christos ops = SYMBOL_COMPUTED_OPS (sym);
377 1.1 christos entryval = ops->read_variable_at_entry (sym, frame);
378 1.5 christos }
379 1.1 christos CATCH (except, RETURN_MASK_ERROR)
380 1.5 christos {
381 1.5 christos if (except.error != NO_ENTRY_VALUE_ERROR)
382 1.5 christos {
383 1.5 christos entryval_error = (char *) alloca (strlen (except.message) + 1);
384 1.5 christos strcpy (entryval_error, except.message);
385 1.1 christos }
386 1.5 christos }
387 1.1 christos END_CATCH
388 1.5 christos
389 1.5 christos if (entryval != NULL && value_optimized_out (entryval))
390 1.1 christos entryval = NULL;
391 1.1 christos
392 1.1 christos if (print_entry_values == print_entry_values_compact
393 1.1 christos || print_entry_values == print_entry_values_default)
394 1.1 christos {
395 1.1 christos /* For MI do not try to use print_entry_values_compact for ARGP. */
396 1.7 christos
397 1.1 christos if (val && entryval && !current_uiout->is_mi_like_p ())
398 1.1 christos {
399 1.1 christos struct type *type = value_type (val);
400 1.3 christos
401 1.3 christos if (value_lazy (val))
402 1.3 christos value_fetch_lazy (val);
403 1.3 christos if (value_lazy (entryval))
404 1.3 christos value_fetch_lazy (entryval);
405 1.3 christos
406 1.1 christos if (value_contents_eq (val, 0, entryval, 0, TYPE_LENGTH (type)))
407 1.1 christos {
408 1.1 christos /* Initialize it just to avoid a GCC false warning. */
409 1.1 christos struct value *val_deref = NULL, *entryval_deref;
410 1.7 christos
411 1.1 christos /* DW_AT_call_value does match with the current
412 1.7 christos value. If it is a reference still try to verify if
413 1.1 christos dereferenced DW_AT_call_data_value does not differ. */
414 1.5 christos
415 1.1 christos TRY
416 1.1 christos {
417 1.1 christos struct type *type_deref;
418 1.1 christos
419 1.1 christos val_deref = coerce_ref (val);
420 1.1 christos if (value_lazy (val_deref))
421 1.1 christos value_fetch_lazy (val_deref);
422 1.1 christos type_deref = value_type (val_deref);
423 1.1 christos
424 1.1 christos entryval_deref = coerce_ref (entryval);
425 1.1 christos if (value_lazy (entryval_deref))
426 1.1 christos value_fetch_lazy (entryval_deref);
427 1.1 christos
428 1.1 christos /* If the reference addresses match but dereferenced
429 1.1 christos content does not match print them. */
430 1.3 christos if (val != val_deref
431 1.3 christos && value_contents_eq (val_deref, 0,
432 1.3 christos entryval_deref, 0,
433 1.1 christos TYPE_LENGTH (type_deref)))
434 1.1 christos val_equal = 1;
435 1.5 christos }
436 1.5 christos CATCH (except, RETURN_MASK_ERROR)
437 1.5 christos {
438 1.5 christos /* If the dereferenced content could not be
439 1.5 christos fetched do not display anything. */
440 1.5 christos if (except.error == NO_ENTRY_VALUE_ERROR)
441 1.5 christos val_equal = 1;
442 1.5 christos else if (except.message != NULL)
443 1.5 christos {
444 1.5 christos entryval_error = (char *) alloca (strlen (except.message) + 1);
445 1.5 christos strcpy (entryval_error, except.message);
446 1.5 christos }
447 1.5 christos }
448 1.1 christos END_CATCH
449 1.1 christos
450 1.1 christos /* Value was not a reference; and its content matches. */
451 1.1 christos if (val == val_deref)
452 1.1 christos val_equal = 1;
453 1.1 christos
454 1.1 christos if (val_equal)
455 1.1 christos entryval = NULL;
456 1.1 christos }
457 1.1 christos }
458 1.1 christos
459 1.1 christos /* Try to remove possibly duplicate error message for ENTRYARGP even
460 1.1 christos in MI mode. */
461 1.1 christos
462 1.1 christos if (val_error && entryval_error
463 1.1 christos && strcmp (val_error, entryval_error) == 0)
464 1.1 christos {
465 1.1 christos entryval_error = NULL;
466 1.1 christos
467 1.1 christos /* Do not se VAL_EQUAL as the same error message may be shown for
468 1.1 christos the entry value even if no entry values are present in the
469 1.1 christos inferior. */
470 1.1 christos }
471 1.1 christos }
472 1.1 christos }
473 1.1 christos
474 1.1 christos if (entryval == NULL)
475 1.1 christos {
476 1.1 christos if (print_entry_values == print_entry_values_preferred)
477 1.5 christos {
478 1.5 christos gdb_assert (val == NULL);
479 1.5 christos
480 1.1 christos TRY
481 1.6 christos {
482 1.1 christos val = read_var_value (sym, NULL, frame);
483 1.5 christos }
484 1.1 christos CATCH (except, RETURN_MASK_ERROR)
485 1.6 christos {
486 1.1 christos val_error = (char *) alloca (strlen (except.message) + 1);
487 1.1 christos strcpy (val_error, except.message);
488 1.5 christos }
489 1.1 christos END_CATCH
490 1.1 christos }
491 1.1 christos if (print_entry_values == print_entry_values_only
492 1.1 christos || print_entry_values == print_entry_values_both
493 1.1 christos || (print_entry_values == print_entry_values_preferred
494 1.1 christos && (!val || value_optimized_out (val))))
495 1.1 christos {
496 1.1 christos entryval = allocate_optimized_out_value (SYMBOL_TYPE (sym));
497 1.1 christos entryval_error = NULL;
498 1.1 christos }
499 1.1 christos }
500 1.1 christos if ((print_entry_values == print_entry_values_compact
501 1.1 christos || print_entry_values == print_entry_values_if_needed
502 1.1 christos || print_entry_values == print_entry_values_preferred)
503 1.1 christos && (!val || value_optimized_out (val)) && entryval != NULL)
504 1.1 christos {
505 1.1 christos val = NULL;
506 1.1 christos val_error = NULL;
507 1.1 christos }
508 1.1 christos
509 1.1 christos argp->sym = sym;
510 1.1 christos argp->val = val;
511 1.1 christos argp->error = val_error ? xstrdup (val_error) : NULL;
512 1.1 christos if (!val && !val_error)
513 1.1 christos argp->entry_kind = print_entry_values_only;
514 1.1 christos else if ((print_entry_values == print_entry_values_compact
515 1.1 christos || print_entry_values == print_entry_values_default) && val_equal)
516 1.1 christos {
517 1.7 christos argp->entry_kind = print_entry_values_compact;
518 1.1 christos gdb_assert (!current_uiout->is_mi_like_p ());
519 1.1 christos }
520 1.1 christos else
521 1.1 christos argp->entry_kind = print_entry_values_no;
522 1.1 christos
523 1.1 christos entryargp->sym = sym;
524 1.1 christos entryargp->val = entryval;
525 1.1 christos entryargp->error = entryval_error ? xstrdup (entryval_error) : NULL;
526 1.1 christos if (!entryval && !entryval_error)
527 1.1 christos entryargp->entry_kind = print_entry_values_no;
528 1.1 christos else
529 1.1 christos entryargp->entry_kind = print_entry_values_only;
530 1.1 christos }
531 1.1 christos
532 1.1 christos /* Print the arguments of frame FRAME on STREAM, given the function
533 1.1 christos FUNC running in that frame (as a symbol), where NUM is the number
534 1.1 christos of arguments according to the stack frame (or -1 if the number of
535 1.1 christos arguments is unknown). */
536 1.1 christos
537 1.1 christos /* Note that currently the "number of arguments according to the
538 1.1 christos stack frame" is only known on VAX where i refers to the "number of
539 1.1 christos ints of arguments according to the stack frame". */
540 1.1 christos
541 1.1 christos static void
542 1.1 christos print_frame_args (struct symbol *func, struct frame_info *frame,
543 1.1 christos int num, struct ui_file *stream)
544 1.1 christos {
545 1.1 christos struct ui_out *uiout = current_uiout;
546 1.1 christos int first = 1;
547 1.1 christos /* Offset of next stack argument beyond the one we have seen that is
548 1.1 christos at the highest offset, or -1 if we haven't come to a stack
549 1.1 christos argument yet. */
550 1.1 christos long highest_offset = -1;
551 1.1 christos /* Number of ints of arguments that we have printed so far. */
552 1.1 christos int args_printed = 0;
553 1.1 christos /* True if we should print arguments, false otherwise. */
554 1.1 christos int print_args = strcmp (print_frame_arguments, "none");
555 1.1 christos
556 1.1 christos if (func)
557 1.3 christos {
558 1.1 christos const struct block *b = SYMBOL_BLOCK_VALUE (func);
559 1.1 christos struct block_iterator iter;
560 1.1 christos struct symbol *sym;
561 1.1 christos
562 1.1 christos ALL_BLOCK_SYMBOLS (b, iter, sym)
563 1.1 christos {
564 1.1 christos struct frame_arg arg, entryarg;
565 1.1 christos
566 1.1 christos QUIT;
567 1.1 christos
568 1.1 christos /* Keep track of the highest stack argument offset seen, and
569 1.1 christos skip over any kinds of symbols we don't care about. */
570 1.1 christos
571 1.1 christos if (!SYMBOL_IS_ARGUMENT (sym))
572 1.1 christos continue;
573 1.1 christos
574 1.1 christos switch (SYMBOL_CLASS (sym))
575 1.1 christos {
576 1.1 christos case LOC_ARG:
577 1.1 christos case LOC_REF_ARG:
578 1.1 christos {
579 1.1 christos long current_offset = SYMBOL_VALUE (sym);
580 1.1 christos int arg_size = TYPE_LENGTH (SYMBOL_TYPE (sym));
581 1.1 christos
582 1.1 christos /* Compute address of next argument by adding the size of
583 1.1 christos this argument and rounding to an int boundary. */
584 1.1 christos current_offset =
585 1.1 christos ((current_offset + arg_size + sizeof (int) - 1)
586 1.1 christos & ~(sizeof (int) - 1));
587 1.1 christos
588 1.1 christos /* If this is the highest offset seen yet, set
589 1.1 christos highest_offset. */
590 1.1 christos if (highest_offset == -1
591 1.1 christos || (current_offset > highest_offset))
592 1.1 christos highest_offset = current_offset;
593 1.1 christos
594 1.1 christos /* Add the number of ints we're about to print to
595 1.1 christos args_printed. */
596 1.1 christos args_printed += (arg_size + sizeof (int) - 1) / sizeof (int);
597 1.1 christos }
598 1.1 christos
599 1.1 christos /* We care about types of symbols, but don't need to
600 1.1 christos keep track of stack offsets in them. */
601 1.1 christos case LOC_REGISTER:
602 1.1 christos case LOC_REGPARM_ADDR:
603 1.1 christos case LOC_COMPUTED:
604 1.1 christos case LOC_OPTIMIZED_OUT:
605 1.1 christos default:
606 1.1 christos break;
607 1.1 christos }
608 1.1 christos
609 1.1 christos /* We have to look up the symbol because arguments can have
610 1.1 christos two entries (one a parameter, one a local) and the one we
611 1.1 christos want is the local, which lookup_symbol will find for us.
612 1.1 christos This includes gcc1 (not gcc2) on SPARC when passing a
613 1.1 christos small structure and gcc2 when the argument type is float
614 1.1 christos and it is passed as a double and converted to float by
615 1.1 christos the prologue (in the latter case the type of the LOC_ARG
616 1.1 christos symbol is double and the type of the LOC_LOCAL symbol is
617 1.1 christos float). */
618 1.1 christos /* But if the parameter name is null, don't try it. Null
619 1.1 christos parameter names occur on the RS/6000, for traceback
620 1.1 christos tables. FIXME, should we even print them? */
621 1.1 christos
622 1.1 christos if (*SYMBOL_LINKAGE_NAME (sym))
623 1.1 christos {
624 1.1 christos struct symbol *nsym;
625 1.1 christos
626 1.6 christos nsym = lookup_symbol (SYMBOL_LINKAGE_NAME (sym),
627 1.1 christos b, VAR_DOMAIN, NULL).symbol;
628 1.1 christos gdb_assert (nsym != NULL);
629 1.1 christos if (SYMBOL_CLASS (nsym) == LOC_REGISTER
630 1.1 christos && !SYMBOL_IS_ARGUMENT (nsym))
631 1.1 christos {
632 1.1 christos /* There is a LOC_ARG/LOC_REGISTER pair. This means
633 1.1 christos that it was passed on the stack and loaded into a
634 1.1 christos register, or passed in a register and stored in a
635 1.1 christos stack slot. GDB 3.x used the LOC_ARG; GDB
636 1.1 christos 4.0-4.11 used the LOC_REGISTER.
637 1.1 christos
638 1.1 christos Reasons for using the LOC_ARG:
639 1.1 christos
640 1.1 christos (1) Because find_saved_registers may be slow for
641 1.1 christos remote debugging.
642 1.1 christos
643 1.1 christos (2) Because registers are often re-used and stack
644 1.1 christos slots rarely (never?) are. Therefore using
645 1.1 christos the stack slot is much less likely to print
646 1.1 christos garbage.
647 1.1 christos
648 1.1 christos Reasons why we might want to use the LOC_REGISTER:
649 1.1 christos
650 1.1 christos (1) So that the backtrace prints the same value
651 1.1 christos as "print foo". I see no compelling reason
652 1.1 christos why this needs to be the case; having the
653 1.1 christos backtrace print the value which was passed
654 1.1 christos in, and "print foo" print the value as
655 1.1 christos modified within the called function, makes
656 1.1 christos perfect sense to me.
657 1.1 christos
658 1.1 christos Additional note: It might be nice if "info args"
659 1.1 christos displayed both values.
660 1.1 christos
661 1.1 christos One more note: There is a case with SPARC
662 1.1 christos structure passing where we need to use the
663 1.1 christos LOC_REGISTER, but this is dealt with by creating
664 1.1 christos a single LOC_REGPARM in symbol reading. */
665 1.1 christos
666 1.1 christos /* Leave sym (the LOC_ARG) alone. */
667 1.1 christos ;
668 1.1 christos }
669 1.1 christos else
670 1.1 christos sym = nsym;
671 1.1 christos }
672 1.1 christos
673 1.1 christos /* Print the current arg. */
674 1.7 christos if (!first)
675 1.7 christos uiout->text (", ");
676 1.1 christos uiout->wrap_hint (" ");
677 1.1 christos
678 1.1 christos if (!print_args)
679 1.1 christos {
680 1.1 christos memset (&arg, 0, sizeof (arg));
681 1.1 christos arg.sym = sym;
682 1.1 christos arg.entry_kind = print_entry_values_no;
683 1.1 christos memset (&entryarg, 0, sizeof (entryarg));
684 1.1 christos entryarg.sym = sym;
685 1.1 christos entryarg.entry_kind = print_entry_values_no;
686 1.1 christos }
687 1.1 christos else
688 1.1 christos read_frame_arg (sym, frame, &arg, &entryarg);
689 1.1 christos
690 1.1 christos if (arg.entry_kind != print_entry_values_only)
691 1.1 christos print_frame_arg (&arg);
692 1.1 christos
693 1.1 christos if (entryarg.entry_kind != print_entry_values_no)
694 1.1 christos {
695 1.1 christos if (arg.entry_kind != print_entry_values_only)
696 1.7 christos {
697 1.7 christos uiout->text (", ");
698 1.1 christos uiout->wrap_hint (" ");
699 1.1 christos }
700 1.1 christos
701 1.1 christos print_frame_arg (&entryarg);
702 1.1 christos }
703 1.1 christos
704 1.1 christos xfree (arg.error);
705 1.1 christos xfree (entryarg.error);
706 1.1 christos
707 1.1 christos first = 0;
708 1.1 christos }
709 1.1 christos }
710 1.1 christos
711 1.1 christos /* Don't print nameless args in situations where we don't know
712 1.1 christos enough about the stack to find them. */
713 1.1 christos if (num != -1)
714 1.1 christos {
715 1.1 christos long start;
716 1.1 christos
717 1.1 christos if (highest_offset == -1)
718 1.1 christos start = gdbarch_frame_args_skip (get_frame_arch (frame));
719 1.1 christos else
720 1.1 christos start = highest_offset;
721 1.1 christos
722 1.1 christos print_frame_nameless_args (frame, start, num - args_printed,
723 1.1 christos first, stream);
724 1.1 christos }
725 1.1 christos }
726 1.1 christos
727 1.1 christos /* Set the current source and line to the location given by frame
728 1.1 christos FRAME, if possible. When CENTER is true, adjust so the relevant
729 1.1 christos line is in the center of the next 'list'. */
730 1.1 christos
731 1.3 christos void
732 1.1 christos set_current_sal_from_frame (struct frame_info *frame)
733 1.1 christos {
734 1.1 christos struct symtab_and_line sal;
735 1.1 christos
736 1.3 christos find_frame_sal (frame, &sal);
737 1.3 christos if (sal.symtab != NULL)
738 1.1 christos set_current_source_symtab_and_line (&sal);
739 1.1 christos }
740 1.1 christos
741 1.1 christos /* If ON, GDB will display disassembly of the next source line when
742 1.1 christos execution of the program being debugged stops.
743 1.1 christos If AUTO (which is the default), or there's no line info to determine
744 1.1 christos the source line of the next instruction, display disassembly of next
745 1.1 christos instruction instead. */
746 1.1 christos
747 1.1 christos static enum auto_boolean disassemble_next_line;
748 1.1 christos
749 1.1 christos static void
750 1.1 christos show_disassemble_next_line (struct ui_file *file, int from_tty,
751 1.1 christos struct cmd_list_element *c,
752 1.1 christos const char *value)
753 1.1 christos {
754 1.1 christos fprintf_filtered (file,
755 1.1 christos _("Debugger's willingness to use "
756 1.1 christos "disassemble-next-line is %s.\n"),
757 1.1 christos value);
758 1.1 christos }
759 1.1 christos
760 1.1 christos /* Use TRY_CATCH to catch the exception from the gdb_disassembly
761 1.1 christos because it will be broken by filter sometime. */
762 1.1 christos
763 1.1 christos static void
764 1.1 christos do_gdb_disassembly (struct gdbarch *gdbarch,
765 1.1 christos int how_many, CORE_ADDR low, CORE_ADDR high)
766 1.1 christos {
767 1.5 christos
768 1.1 christos TRY
769 1.7 christos {
770 1.1 christos gdb_disassembly (gdbarch, current_uiout,
771 1.1 christos DISASSEMBLY_RAW_INSN, how_many,
772 1.1 christos low, high);
773 1.5 christos }
774 1.1 christos CATCH (exception, RETURN_MASK_ERROR)
775 1.1 christos {
776 1.1 christos /* If an exception was thrown while doing the disassembly, print
777 1.1 christos the error message, to give the user a clue of what happened. */
778 1.1 christos exception_print (gdb_stderr, exception);
779 1.5 christos }
780 1.1 christos END_CATCH
781 1.1 christos }
782 1.1 christos
783 1.1 christos /* Print information about frame FRAME. The output is format according
784 1.1 christos to PRINT_LEVEL and PRINT_WHAT and PRINT_ARGS. The meaning of
785 1.1 christos PRINT_WHAT is:
786 1.1 christos
787 1.1 christos SRC_LINE: Print only source line.
788 1.1 christos LOCATION: Print only location.
789 1.1 christos LOC_AND_SRC: Print location and source line.
790 1.1 christos
791 1.1 christos Used in "where" output, and to emit breakpoint or step
792 1.1 christos messages. */
793 1.1 christos
794 1.1 christos void
795 1.1 christos print_frame_info (struct frame_info *frame, int print_level,
796 1.1 christos enum print_what print_what, int print_args,
797 1.1 christos int set_current_sal)
798 1.1 christos {
799 1.1 christos struct gdbarch *gdbarch = get_frame_arch (frame);
800 1.1 christos struct symtab_and_line sal;
801 1.1 christos int source_print;
802 1.1 christos int location_print;
803 1.1 christos struct ui_out *uiout = current_uiout;
804 1.1 christos
805 1.1 christos if (get_frame_type (frame) == DUMMY_FRAME
806 1.1 christos || get_frame_type (frame) == SIGTRAMP_FRAME
807 1.1 christos || get_frame_type (frame) == ARCH_FRAME)
808 1.1 christos {
809 1.1 christos struct cleanup *uiout_cleanup
810 1.1 christos = make_cleanup_ui_out_tuple_begin_end (uiout, "frame");
811 1.1 christos
812 1.1 christos annotate_frame_begin (print_level ? frame_relative_level (frame) : 0,
813 1.1 christos gdbarch, get_frame_pc (frame));
814 1.1 christos
815 1.1 christos /* Do this regardless of SOURCE because we don't have any source
816 1.1 christos to list for this frame. */
817 1.1 christos if (print_level)
818 1.7 christos {
819 1.7 christos uiout->text ("#");
820 1.1 christos uiout->field_fmt_int (2, ui_left, "level",
821 1.1 christos frame_relative_level (frame));
822 1.7 christos }
823 1.1 christos if (uiout->is_mi_like_p ())
824 1.1 christos {
825 1.7 christos annotate_frame_address ();
826 1.1 christos uiout->field_core_addr ("addr",
827 1.1 christos gdbarch, get_frame_pc (frame));
828 1.1 christos annotate_frame_address_end ();
829 1.1 christos }
830 1.1 christos
831 1.1 christos if (get_frame_type (frame) == DUMMY_FRAME)
832 1.1 christos {
833 1.7 christos annotate_function_call ();
834 1.1 christos uiout->field_string ("func", "<function called from gdb>");
835 1.1 christos }
836 1.1 christos else if (get_frame_type (frame) == SIGTRAMP_FRAME)
837 1.1 christos {
838 1.7 christos annotate_signal_handler_caller ();
839 1.1 christos uiout->field_string ("func", "<signal handler called>");
840 1.1 christos }
841 1.1 christos else if (get_frame_type (frame) == ARCH_FRAME)
842 1.7 christos {
843 1.1 christos uiout->field_string ("func", "<cross-architecture call>");
844 1.7 christos }
845 1.1 christos uiout->text ("\n");
846 1.1 christos annotate_frame_end ();
847 1.3 christos
848 1.3 christos /* If disassemble-next-line is set to auto or on output the next
849 1.3 christos instruction. */
850 1.3 christos if (disassemble_next_line == AUTO_BOOLEAN_AUTO
851 1.3 christos || disassemble_next_line == AUTO_BOOLEAN_TRUE)
852 1.3 christos do_gdb_disassembly (get_frame_arch (frame), 1,
853 1.3 christos get_frame_pc (frame), get_frame_pc (frame) + 1);
854 1.1 christos
855 1.1 christos do_cleanups (uiout_cleanup);
856 1.1 christos return;
857 1.1 christos }
858 1.1 christos
859 1.1 christos /* If FRAME is not the innermost frame, that normally means that
860 1.1 christos FRAME->pc points to *after* the call instruction, and we want to
861 1.1 christos get the line containing the call, never the next line. But if
862 1.1 christos the next frame is a SIGTRAMP_FRAME or a DUMMY_FRAME, then the
863 1.1 christos next frame was not entered as the result of a call, and we want
864 1.1 christos to get the line containing FRAME->pc. */
865 1.1 christos find_frame_sal (frame, &sal);
866 1.1 christos
867 1.1 christos location_print = (print_what == LOCATION
868 1.1 christos || print_what == LOC_AND_ADDRESS
869 1.1 christos || print_what == SRC_AND_LOC);
870 1.1 christos
871 1.1 christos if (location_print || !sal.symtab)
872 1.1 christos print_frame (frame, print_level, print_what, print_args, sal);
873 1.1 christos
874 1.1 christos source_print = (print_what == SRC_LINE || print_what == SRC_AND_LOC);
875 1.1 christos
876 1.1 christos /* If disassemble-next-line is set to auto or on and doesn't have
877 1.1 christos the line debug messages for $pc, output the next instruction. */
878 1.1 christos if ((disassemble_next_line == AUTO_BOOLEAN_AUTO
879 1.1 christos || disassemble_next_line == AUTO_BOOLEAN_TRUE)
880 1.1 christos && source_print && !sal.symtab)
881 1.1 christos do_gdb_disassembly (get_frame_arch (frame), 1,
882 1.1 christos get_frame_pc (frame), get_frame_pc (frame) + 1);
883 1.1 christos
884 1.1 christos if (source_print && sal.symtab)
885 1.1 christos {
886 1.1 christos int done = 0;
887 1.1 christos int mid_statement = ((print_what == SRC_LINE)
888 1.1 christos && frame_show_address (frame, sal));
889 1.1 christos
890 1.1 christos if (annotation_level)
891 1.1 christos done = identify_source_line (sal.symtab, sal.line, mid_statement,
892 1.1 christos get_frame_pc (frame));
893 1.1 christos if (!done)
894 1.1 christos {
895 1.1 christos if (deprecated_print_frame_info_listing_hook)
896 1.1 christos deprecated_print_frame_info_listing_hook (sal.symtab,
897 1.1 christos sal.line,
898 1.1 christos sal.line + 1, 0);
899 1.1 christos else
900 1.1 christos {
901 1.1 christos struct value_print_options opts;
902 1.1 christos
903 1.1 christos get_user_print_options (&opts);
904 1.1 christos /* We used to do this earlier, but that is clearly
905 1.1 christos wrong. This function is used by many different
906 1.1 christos parts of gdb, including normal_stop in infrun.c,
907 1.1 christos which uses this to print out the current PC
908 1.1 christos when we stepi/nexti into the middle of a source
909 1.1 christos line. Only the command line really wants this
910 1.1 christos behavior. Other UIs probably would like the
911 1.1 christos ability to decide for themselves if it is desired. */
912 1.1 christos if (opts.addressprint && mid_statement)
913 1.7 christos {
914 1.1 christos uiout->field_core_addr ("addr",
915 1.7 christos gdbarch, get_frame_pc (frame));
916 1.1 christos uiout->text ("\t");
917 1.1 christos }
918 1.1 christos
919 1.1 christos print_source_lines (sal.symtab, sal.line, sal.line + 1, 0);
920 1.1 christos }
921 1.1 christos }
922 1.1 christos
923 1.1 christos /* If disassemble-next-line is set to on and there is line debug
924 1.1 christos messages, output assembly codes for next line. */
925 1.1 christos if (disassemble_next_line == AUTO_BOOLEAN_TRUE)
926 1.1 christos do_gdb_disassembly (get_frame_arch (frame), -1, sal.pc, sal.end);
927 1.1 christos }
928 1.1 christos
929 1.1 christos if (set_current_sal)
930 1.1 christos {
931 1.1 christos CORE_ADDR pc;
932 1.1 christos
933 1.1 christos if (get_frame_pc_if_available (frame, &pc))
934 1.1 christos set_last_displayed_sal (1, sal.pspace, pc, sal.symtab, sal.line);
935 1.1 christos else
936 1.1 christos set_last_displayed_sal (0, 0, 0, 0, 0);
937 1.1 christos }
938 1.1 christos
939 1.1 christos annotate_frame_end ();
940 1.1 christos
941 1.1 christos gdb_flush (gdb_stdout);
942 1.1 christos }
943 1.1 christos
944 1.1 christos /* Remember the last symtab and line we displayed, which we use e.g.
945 1.1 christos * as the place to put a breakpoint when the `break' command is
946 1.1 christos * invoked with no arguments. */
947 1.1 christos
948 1.1 christos static void
949 1.1 christos set_last_displayed_sal (int valid, struct program_space *pspace,
950 1.1 christos CORE_ADDR addr, struct symtab *symtab,
951 1.1 christos int line)
952 1.1 christos {
953 1.1 christos last_displayed_sal_valid = valid;
954 1.1 christos last_displayed_pspace = pspace;
955 1.1 christos last_displayed_addr = addr;
956 1.1 christos last_displayed_symtab = symtab;
957 1.1 christos last_displayed_line = line;
958 1.1 christos if (valid && pspace == NULL)
959 1.1 christos {
960 1.1 christos clear_last_displayed_sal ();
961 1.1 christos internal_error (__FILE__, __LINE__,
962 1.1 christos _("Trying to set NULL pspace."));
963 1.1 christos }
964 1.1 christos }
965 1.1 christos
966 1.1 christos /* Forget the last sal we displayed. */
967 1.1 christos
968 1.1 christos void
969 1.1 christos clear_last_displayed_sal (void)
970 1.1 christos {
971 1.1 christos last_displayed_sal_valid = 0;
972 1.1 christos last_displayed_pspace = 0;
973 1.1 christos last_displayed_addr = 0;
974 1.1 christos last_displayed_symtab = 0;
975 1.1 christos last_displayed_line = 0;
976 1.1 christos }
977 1.1 christos
978 1.1 christos /* Is our record of the last sal we displayed valid? If not,
979 1.1 christos * the get_last_displayed_* functions will return NULL or 0, as
980 1.1 christos * appropriate. */
981 1.1 christos
982 1.1 christos int
983 1.1 christos last_displayed_sal_is_valid (void)
984 1.1 christos {
985 1.1 christos return last_displayed_sal_valid;
986 1.1 christos }
987 1.1 christos
988 1.1 christos /* Get the pspace of the last sal we displayed, if it's valid. */
989 1.1 christos
990 1.1 christos struct program_space *
991 1.1 christos get_last_displayed_pspace (void)
992 1.1 christos {
993 1.1 christos if (last_displayed_sal_valid)
994 1.1 christos return last_displayed_pspace;
995 1.1 christos return 0;
996 1.1 christos }
997 1.1 christos
998 1.1 christos /* Get the address of the last sal we displayed, if it's valid. */
999 1.1 christos
1000 1.1 christos CORE_ADDR
1001 1.1 christos get_last_displayed_addr (void)
1002 1.1 christos {
1003 1.1 christos if (last_displayed_sal_valid)
1004 1.1 christos return last_displayed_addr;
1005 1.1 christos return 0;
1006 1.1 christos }
1007 1.1 christos
1008 1.1 christos /* Get the symtab of the last sal we displayed, if it's valid. */
1009 1.1 christos
1010 1.1 christos struct symtab*
1011 1.1 christos get_last_displayed_symtab (void)
1012 1.1 christos {
1013 1.1 christos if (last_displayed_sal_valid)
1014 1.1 christos return last_displayed_symtab;
1015 1.1 christos return 0;
1016 1.1 christos }
1017 1.1 christos
1018 1.1 christos /* Get the line of the last sal we displayed, if it's valid. */
1019 1.1 christos
1020 1.1 christos int
1021 1.1 christos get_last_displayed_line (void)
1022 1.1 christos {
1023 1.1 christos if (last_displayed_sal_valid)
1024 1.1 christos return last_displayed_line;
1025 1.1 christos return 0;
1026 1.1 christos }
1027 1.1 christos
1028 1.1 christos /* Get the last sal we displayed, if it's valid. */
1029 1.1 christos
1030 1.1 christos void
1031 1.1 christos get_last_displayed_sal (struct symtab_and_line *sal)
1032 1.1 christos {
1033 1.1 christos if (last_displayed_sal_valid)
1034 1.1 christos {
1035 1.1 christos sal->pspace = last_displayed_pspace;
1036 1.1 christos sal->pc = last_displayed_addr;
1037 1.1 christos sal->symtab = last_displayed_symtab;
1038 1.1 christos sal->line = last_displayed_line;
1039 1.1 christos }
1040 1.1 christos else
1041 1.1 christos {
1042 1.1 christos sal->pspace = 0;
1043 1.1 christos sal->pc = 0;
1044 1.1 christos sal->symtab = 0;
1045 1.1 christos sal->line = 0;
1046 1.1 christos }
1047 1.1 christos }
1048 1.1 christos
1049 1.1 christos
1050 1.1 christos /* Attempt to obtain the FUNNAME, FUNLANG and optionally FUNCP of the function
1051 1.1 christos corresponding to FRAME. FUNNAME needs to be freed by the caller. */
1052 1.1 christos
1053 1.1 christos void
1054 1.1 christos find_frame_funname (struct frame_info *frame, char **funname,
1055 1.1 christos enum language *funlang, struct symbol **funcp)
1056 1.1 christos {
1057 1.1 christos struct symbol *func;
1058 1.1 christos
1059 1.1 christos *funname = NULL;
1060 1.1 christos *funlang = language_unknown;
1061 1.1 christos if (funcp)
1062 1.1 christos *funcp = NULL;
1063 1.1 christos
1064 1.1 christos func = get_frame_function (frame);
1065 1.1 christos if (func)
1066 1.1 christos {
1067 1.1 christos /* In certain pathological cases, the symtabs give the wrong
1068 1.1 christos function (when we are in the first function in a file which
1069 1.1 christos is compiled without debugging symbols, the previous function
1070 1.1 christos is compiled with debugging symbols, and the "foo.o" symbol
1071 1.1 christos that is supposed to tell us where the file with debugging
1072 1.1 christos symbols ends has been truncated by ar because it is longer
1073 1.1 christos than 15 characters). This also occurs if the user uses asm()
1074 1.1 christos to create a function but not stabs for it (in a file compiled
1075 1.1 christos with -g).
1076 1.1 christos
1077 1.1 christos So look in the minimal symbol tables as well, and if it comes
1078 1.1 christos up with a larger address for the function use that instead.
1079 1.1 christos I don't think this can ever cause any problems; there
1080 1.1 christos shouldn't be any minimal symbols in the middle of a function;
1081 1.1 christos if this is ever changed many parts of GDB will need to be
1082 1.1 christos changed (and we'll create a find_pc_minimal_function or some
1083 1.1 christos such). */
1084 1.1 christos
1085 1.1 christos struct bound_minimal_symbol msymbol;
1086 1.1 christos
1087 1.1 christos /* Don't attempt to do this for inlined functions, which do not
1088 1.1 christos have a corresponding minimal symbol. */
1089 1.1 christos if (!block_inlined_p (SYMBOL_BLOCK_VALUE (func)))
1090 1.1 christos msymbol
1091 1.1 christos = lookup_minimal_symbol_by_pc (get_frame_address_in_block (frame));
1092 1.1 christos else
1093 1.1 christos memset (&msymbol, 0, sizeof (msymbol));
1094 1.1 christos
1095 1.3 christos if (msymbol.minsym != NULL
1096 1.1 christos && (BMSYMBOL_VALUE_ADDRESS (msymbol)
1097 1.1 christos > BLOCK_START (SYMBOL_BLOCK_VALUE (func))))
1098 1.1 christos {
1099 1.1 christos /* We also don't know anything about the function besides
1100 1.1 christos its address and name. */
1101 1.3 christos func = 0;
1102 1.3 christos *funname = xstrdup (MSYMBOL_PRINT_NAME (msymbol.minsym));
1103 1.1 christos *funlang = MSYMBOL_LANGUAGE (msymbol.minsym);
1104 1.1 christos }
1105 1.1 christos else
1106 1.6 christos {
1107 1.6 christos const char *print_name = SYMBOL_PRINT_NAME (func);
1108 1.1 christos
1109 1.1 christos *funlang = SYMBOL_LANGUAGE (func);
1110 1.1 christos if (funcp)
1111 1.1 christos *funcp = func;
1112 1.1 christos if (*funlang == language_cplus)
1113 1.1 christos {
1114 1.1 christos /* It seems appropriate to use SYMBOL_PRINT_NAME() here,
1115 1.1 christos to display the demangled name that we already have
1116 1.1 christos stored in the symbol table, but we stored a version
1117 1.1 christos with DMGL_PARAMS turned on, and here we don't want to
1118 1.6 christos display parameters. So remove the parameters. */
1119 1.1 christos char *func_only = cp_remove_params (print_name);
1120 1.1 christos
1121 1.6 christos if (func_only)
1122 1.1 christos *funname = func_only;
1123 1.6 christos }
1124 1.6 christos
1125 1.6 christos /* If we didn't hit the C++ case above, set *funname here.
1126 1.6 christos This approach is taken to avoid having to install a
1127 1.6 christos cleanup in case cp_remove_params can throw. */
1128 1.6 christos if (*funname == NULL)
1129 1.1 christos *funname = xstrdup (print_name);
1130 1.1 christos }
1131 1.1 christos }
1132 1.1 christos else
1133 1.1 christos {
1134 1.1 christos struct bound_minimal_symbol msymbol;
1135 1.1 christos CORE_ADDR pc;
1136 1.1 christos
1137 1.1 christos if (!get_frame_address_in_block_if_available (frame, &pc))
1138 1.1 christos return;
1139 1.1 christos
1140 1.1 christos msymbol = lookup_minimal_symbol_by_pc (pc);
1141 1.1 christos if (msymbol.minsym != NULL)
1142 1.3 christos {
1143 1.3 christos *funname = xstrdup (MSYMBOL_PRINT_NAME (msymbol.minsym));
1144 1.1 christos *funlang = MSYMBOL_LANGUAGE (msymbol.minsym);
1145 1.1 christos }
1146 1.1 christos }
1147 1.1 christos }
1148 1.1 christos
1149 1.1 christos static void
1150 1.1 christos print_frame (struct frame_info *frame, int print_level,
1151 1.1 christos enum print_what print_what, int print_args,
1152 1.1 christos struct symtab_and_line sal)
1153 1.1 christos {
1154 1.1 christos struct gdbarch *gdbarch = get_frame_arch (frame);
1155 1.1 christos struct ui_out *uiout = current_uiout;
1156 1.1 christos char *funname = NULL;
1157 1.1 christos enum language funlang = language_unknown;
1158 1.1 christos struct cleanup *old_chain, *list_chain;
1159 1.1 christos struct value_print_options opts;
1160 1.1 christos struct symbol *func;
1161 1.1 christos CORE_ADDR pc = 0;
1162 1.1 christos int pc_p;
1163 1.1 christos
1164 1.1 christos pc_p = get_frame_pc_if_available (frame, &pc);
1165 1.1 christos
1166 1.1 christos
1167 1.7 christos find_frame_funname (frame, &funname, &funlang, &func);
1168 1.1 christos old_chain = make_cleanup (xfree, funname);
1169 1.1 christos
1170 1.1 christos annotate_frame_begin (print_level ? frame_relative_level (frame) : 0,
1171 1.1 christos gdbarch, pc);
1172 1.1 christos
1173 1.1 christos list_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "frame");
1174 1.1 christos
1175 1.1 christos if (print_level)
1176 1.7 christos {
1177 1.7 christos uiout->text ("#");
1178 1.1 christos uiout->field_fmt_int (2, ui_left, "level",
1179 1.1 christos frame_relative_level (frame));
1180 1.1 christos }
1181 1.1 christos get_user_print_options (&opts);
1182 1.1 christos if (opts.addressprint)
1183 1.1 christos if (!sal.symtab
1184 1.1 christos || frame_show_address (frame, sal)
1185 1.1 christos || print_what == LOC_AND_ADDRESS)
1186 1.1 christos {
1187 1.1 christos annotate_frame_address ();
1188 1.7 christos if (pc_p)
1189 1.1 christos uiout->field_core_addr ("addr", gdbarch, pc);
1190 1.7 christos else
1191 1.1 christos uiout->field_string ("addr", "<unavailable>");
1192 1.7 christos annotate_frame_address_end ();
1193 1.1 christos uiout->text (" in ");
1194 1.1 christos }
1195 1.7 christos annotate_frame_function_name ();
1196 1.7 christos
1197 1.7 christos string_file stb;
1198 1.1 christos fprintf_symbol_filtered (&stb, funname ? funname : "??",
1199 1.7 christos funlang, DMGL_ANSI);
1200 1.7 christos uiout->field_stream ("func", stb);
1201 1.1 christos uiout->wrap_hint (" ");
1202 1.1 christos annotate_frame_args ();
1203 1.7 christos
1204 1.1 christos uiout->text (" (");
1205 1.1 christos if (print_args)
1206 1.1 christos {
1207 1.1 christos struct gdbarch *gdbarch = get_frame_arch (frame);
1208 1.1 christos int numargs;
1209 1.1 christos struct cleanup *args_list_chain;
1210 1.1 christos
1211 1.1 christos if (gdbarch_frame_num_args_p (gdbarch))
1212 1.1 christos {
1213 1.1 christos numargs = gdbarch_frame_num_args (gdbarch, frame);
1214 1.1 christos gdb_assert (numargs >= 0);
1215 1.1 christos }
1216 1.1 christos else
1217 1.1 christos numargs = -1;
1218 1.1 christos
1219 1.5 christos args_list_chain = make_cleanup_ui_out_list_begin_end (uiout, "args");
1220 1.1 christos TRY
1221 1.1 christos {
1222 1.1 christos print_frame_args (func, frame, numargs, gdb_stdout);
1223 1.5 christos }
1224 1.5 christos CATCH (e, RETURN_MASK_ERROR)
1225 1.5 christos {
1226 1.5 christos }
1227 1.5 christos END_CATCH
1228 1.1 christos
1229 1.1 christos /* FIXME: ARGS must be a list. If one argument is a string it
1230 1.1 christos will have " that will not be properly escaped. */
1231 1.1 christos /* Invoke ui_out_tuple_end. */
1232 1.1 christos do_cleanups (args_list_chain);
1233 1.1 christos QUIT;
1234 1.7 christos }
1235 1.1 christos uiout->text (")");
1236 1.1 christos if (sal.symtab)
1237 1.1 christos {
1238 1.1 christos const char *filename_display;
1239 1.1 christos
1240 1.1 christos filename_display = symtab_to_filename_for_display (sal.symtab);
1241 1.7 christos annotate_frame_source_begin ();
1242 1.7 christos uiout->wrap_hint (" ");
1243 1.1 christos uiout->text (" at ");
1244 1.7 christos annotate_frame_source_file ();
1245 1.7 christos uiout->field_string ("file", filename_display);
1246 1.1 christos if (uiout->is_mi_like_p ())
1247 1.1 christos {
1248 1.1 christos const char *fullname = symtab_to_fullname (sal.symtab);
1249 1.7 christos
1250 1.1 christos uiout->field_string ("fullname", fullname);
1251 1.1 christos }
1252 1.7 christos annotate_frame_source_file_end ();
1253 1.1 christos uiout->text (":");
1254 1.7 christos annotate_frame_source_line ();
1255 1.1 christos uiout->field_int ("line", sal.line);
1256 1.1 christos annotate_frame_source_end ();
1257 1.1 christos }
1258 1.1 christos
1259 1.1 christos if (pc_p && (funname == NULL || sal.symtab == NULL))
1260 1.1 christos {
1261 1.1 christos char *lib = solib_name_from_address (get_frame_program_space (frame),
1262 1.1 christos get_frame_pc (frame));
1263 1.1 christos
1264 1.1 christos if (lib)
1265 1.1 christos {
1266 1.7 christos annotate_frame_where ();
1267 1.7 christos uiout->wrap_hint (" ");
1268 1.7 christos uiout->text (" from ");
1269 1.1 christos uiout->field_string ("from", lib);
1270 1.1 christos }
1271 1.1 christos }
1272 1.1 christos
1273 1.1 christos /* do_cleanups will call ui_out_tuple_end() for us. */
1274 1.7 christos do_cleanups (list_chain);
1275 1.1 christos uiout->text ("\n");
1276 1.1 christos do_cleanups (old_chain);
1277 1.1 christos }
1278 1.1 christos
1279 1.6 christos
1281 1.7 christos /* Read a frame specification in whatever the appropriate format is from
1282 1.7 christos FRAME_EXP. Call error() if the specification is in any way invalid (so
1283 1.1 christos this function never returns NULL). When SELECTED_FRAME_P is non-NULL
1284 1.1 christos set its target to indicate that the default selected frame was used. */
1285 1.6 christos
1286 1.1 christos static struct frame_info *
1287 1.1 christos parse_frame_specification (const char *frame_exp, int *selected_frame_p)
1288 1.1 christos {
1289 1.1 christos int numargs;
1290 1.1 christos struct value *args[4];
1291 1.1 christos CORE_ADDR addrs[ARRAY_SIZE (args)];
1292 1.1 christos
1293 1.1 christos if (frame_exp == NULL)
1294 1.1 christos numargs = 0;
1295 1.1 christos else
1296 1.1 christos {
1297 1.1 christos numargs = 0;
1298 1.1 christos while (1)
1299 1.1 christos {
1300 1.1 christos char *addr_string;
1301 1.1 christos struct cleanup *cleanup;
1302 1.1 christos const char *p;
1303 1.1 christos
1304 1.1 christos /* Skip leading white space, bail of EOL. */
1305 1.1 christos frame_exp = skip_spaces_const (frame_exp);
1306 1.1 christos if (!*frame_exp)
1307 1.1 christos break;
1308 1.1 christos
1309 1.6 christos /* Parse the argument, extract it, save it. */
1310 1.1 christos for (p = frame_exp;
1311 1.1 christos *p && !ISSPACE (*p);
1312 1.1 christos p++);
1313 1.1 christos addr_string = savestring (frame_exp, p - frame_exp);
1314 1.1 christos frame_exp = p;
1315 1.1 christos cleanup = make_cleanup (xfree, addr_string);
1316 1.1 christos
1317 1.1 christos /* NOTE: Parse and evaluate expression, but do not use
1318 1.1 christos functions such as parse_and_eval_long or
1319 1.1 christos parse_and_eval_address to also extract the value.
1320 1.1 christos Instead value_as_long and value_as_address are used.
1321 1.1 christos This avoids problems with expressions that contain
1322 1.1 christos side-effects. */
1323 1.1 christos if (numargs >= ARRAY_SIZE (args))
1324 1.1 christos error (_("Too many args in frame specification"));
1325 1.1 christos args[numargs++] = parse_and_eval (addr_string);
1326 1.1 christos
1327 1.1 christos do_cleanups (cleanup);
1328 1.1 christos }
1329 1.1 christos }
1330 1.1 christos
1331 1.1 christos /* If no args, default to the selected frame. */
1332 1.1 christos if (numargs == 0)
1333 1.1 christos {
1334 1.6 christos if (selected_frame_p != NULL)
1335 1.1 christos (*selected_frame_p) = 1;
1336 1.1 christos return get_selected_frame (_("No stack."));
1337 1.1 christos }
1338 1.1 christos
1339 1.1 christos /* None of the remaining use the selected frame. */
1340 1.1 christos if (selected_frame_p != NULL)
1341 1.1 christos (*selected_frame_p) = 0;
1342 1.1 christos
1343 1.1 christos /* Assume the single arg[0] is an integer, and try using that to
1344 1.1 christos select a frame relative to current. */
1345 1.1 christos if (numargs == 1)
1346 1.1 christos {
1347 1.1 christos struct frame_info *fid;
1348 1.1 christos int level = value_as_long (args[0]);
1349 1.1 christos
1350 1.1 christos fid = find_relative_frame (get_current_frame (), &level);
1351 1.1 christos if (level == 0)
1352 1.1 christos /* find_relative_frame was successful. */
1353 1.1 christos return fid;
1354 1.1 christos }
1355 1.1 christos
1356 1.1 christos /* Convert each value into a corresponding address. */
1357 1.1 christos {
1358 1.1 christos int i;
1359 1.1 christos
1360 1.1 christos for (i = 0; i < numargs; i++)
1361 1.1 christos addrs[i] = value_as_address (args[i]);
1362 1.1 christos }
1363 1.1 christos
1364 1.1 christos /* Assume that the single arg[0] is an address, use that to identify
1365 1.1 christos a frame with a matching ID. Should this also accept stack/pc or
1366 1.1 christos stack/pc/special. */
1367 1.1 christos if (numargs == 1)
1368 1.1 christos {
1369 1.1 christos struct frame_id id = frame_id_build_wild (addrs[0]);
1370 1.1 christos struct frame_info *fid;
1371 1.1 christos
1372 1.1 christos /* If (s)he specifies the frame with an address, he deserves
1373 1.1 christos what (s)he gets. Still, give the highest one that matches.
1374 1.1 christos (NOTE: cagney/2004-10-29: Why highest, or outer-most, I don't
1375 1.1 christos know). */
1376 1.1 christos for (fid = get_current_frame ();
1377 1.1 christos fid != NULL;
1378 1.1 christos fid = get_prev_frame (fid))
1379 1.1 christos {
1380 1.1 christos if (frame_id_eq (id, get_frame_id (fid)))
1381 1.1 christos {
1382 1.1 christos struct frame_info *prev_frame;
1383 1.1 christos
1384 1.1 christos while (1)
1385 1.1 christos {
1386 1.1 christos prev_frame = get_prev_frame (fid);
1387 1.1 christos if (!prev_frame
1388 1.1 christos || !frame_id_eq (id, get_frame_id (prev_frame)))
1389 1.1 christos break;
1390 1.1 christos fid = prev_frame;
1391 1.1 christos }
1392 1.1 christos return fid;
1393 1.1 christos }
1394 1.1 christos }
1395 1.1 christos }
1396 1.1 christos
1397 1.1 christos /* We couldn't identify the frame as an existing frame, but
1398 1.1 christos perhaps we can create one with a single argument. */
1399 1.1 christos if (numargs == 1)
1400 1.1 christos return create_new_frame (addrs[0], 0);
1401 1.1 christos else if (numargs == 2)
1402 1.1 christos return create_new_frame (addrs[0], addrs[1]);
1403 1.1 christos else
1404 1.1 christos error (_("Too many args in frame specification"));
1405 1.1 christos }
1406 1.1 christos
1407 1.1 christos /* Print verbosely the selected frame or the frame at address
1408 1.1 christos ADDR_EXP. Absolutely all information in the frame is printed. */
1409 1.1 christos
1410 1.1 christos static void
1411 1.1 christos frame_info (char *addr_exp, int from_tty)
1412 1.1 christos {
1413 1.1 christos struct frame_info *fi;
1414 1.1 christos struct symtab_and_line sal;
1415 1.1 christos struct symbol *func;
1416 1.1 christos struct symtab *s;
1417 1.1 christos struct frame_info *calling_frame_info;
1418 1.1 christos int numregs;
1419 1.1 christos const char *funname = 0;
1420 1.1 christos enum language funlang = language_unknown;
1421 1.1 christos const char *pc_regname;
1422 1.1 christos int selected_frame_p;
1423 1.1 christos struct gdbarch *gdbarch;
1424 1.1 christos struct cleanup *back_to = make_cleanup (null_cleanup, NULL);
1425 1.1 christos CORE_ADDR frame_pc;
1426 1.1 christos int frame_pc_p;
1427 1.5 christos /* Initialize it to avoid "may be used uninitialized" warning. */
1428 1.1 christos CORE_ADDR caller_pc = 0;
1429 1.6 christos int caller_pc_p = 0;
1430 1.1 christos
1431 1.1 christos fi = parse_frame_specification (addr_exp, &selected_frame_p);
1432 1.1 christos gdbarch = get_frame_arch (fi);
1433 1.1 christos
1434 1.1 christos /* Name of the value returned by get_frame_pc(). Per comments, "pc"
1435 1.1 christos is not a good name. */
1436 1.1 christos if (gdbarch_pc_regnum (gdbarch) >= 0)
1437 1.1 christos /* OK, this is weird. The gdbarch_pc_regnum hardware register's value can
1438 1.1 christos easily not match that of the internal value returned by
1439 1.1 christos get_frame_pc(). */
1440 1.1 christos pc_regname = gdbarch_register_name (gdbarch, gdbarch_pc_regnum (gdbarch));
1441 1.1 christos else
1442 1.1 christos /* But then, this is weird to. Even without gdbarch_pc_regnum, an
1443 1.1 christos architectures will often have a hardware register called "pc",
1444 1.1 christos and that register's value, again, can easily not match
1445 1.1 christos get_frame_pc(). */
1446 1.1 christos pc_regname = "pc";
1447 1.1 christos
1448 1.1 christos frame_pc_p = get_frame_pc_if_available (fi, &frame_pc);
1449 1.1 christos find_frame_sal (fi, &sal);
1450 1.1 christos func = get_frame_function (fi);
1451 1.1 christos s = sal.symtab;
1452 1.1 christos if (func)
1453 1.1 christos {
1454 1.1 christos funname = SYMBOL_PRINT_NAME (func);
1455 1.1 christos funlang = SYMBOL_LANGUAGE (func);
1456 1.1 christos if (funlang == language_cplus)
1457 1.1 christos {
1458 1.1 christos /* It seems appropriate to use SYMBOL_PRINT_NAME() here,
1459 1.1 christos to display the demangled name that we already have
1460 1.1 christos stored in the symbol table, but we stored a version
1461 1.1 christos with DMGL_PARAMS turned on, and here we don't want to
1462 1.1 christos display parameters. So remove the parameters. */
1463 1.1 christos char *func_only = cp_remove_params (funname);
1464 1.1 christos
1465 1.1 christos if (func_only)
1466 1.1 christos {
1467 1.1 christos funname = func_only;
1468 1.1 christos make_cleanup (xfree, func_only);
1469 1.1 christos }
1470 1.1 christos }
1471 1.1 christos }
1472 1.1 christos else if (frame_pc_p)
1473 1.1 christos {
1474 1.1 christos struct bound_minimal_symbol msymbol;
1475 1.1 christos
1476 1.1 christos msymbol = lookup_minimal_symbol_by_pc (frame_pc);
1477 1.3 christos if (msymbol.minsym != NULL)
1478 1.3 christos {
1479 1.1 christos funname = MSYMBOL_PRINT_NAME (msymbol.minsym);
1480 1.1 christos funlang = MSYMBOL_LANGUAGE (msymbol.minsym);
1481 1.1 christos }
1482 1.1 christos }
1483 1.1 christos calling_frame_info = get_prev_frame (fi);
1484 1.1 christos
1485 1.1 christos if (selected_frame_p && frame_relative_level (fi) >= 0)
1486 1.1 christos {
1487 1.1 christos printf_filtered (_("Stack level %d, frame at "),
1488 1.1 christos frame_relative_level (fi));
1489 1.1 christos }
1490 1.1 christos else
1491 1.1 christos {
1492 1.1 christos printf_filtered (_("Stack frame at "));
1493 1.1 christos }
1494 1.1 christos fputs_filtered (paddress (gdbarch, get_frame_base (fi)), gdb_stdout);
1495 1.1 christos printf_filtered (":\n");
1496 1.1 christos printf_filtered (" %s = ", pc_regname);
1497 1.1 christos if (frame_pc_p)
1498 1.1 christos fputs_filtered (paddress (gdbarch, get_frame_pc (fi)), gdb_stdout);
1499 1.1 christos else
1500 1.1 christos fputs_filtered ("<unavailable>", gdb_stdout);
1501 1.1 christos
1502 1.1 christos wrap_here (" ");
1503 1.1 christos if (funname)
1504 1.1 christos {
1505 1.1 christos printf_filtered (" in ");
1506 1.1 christos fprintf_symbol_filtered (gdb_stdout, funname, funlang,
1507 1.1 christos DMGL_ANSI | DMGL_PARAMS);
1508 1.1 christos }
1509 1.1 christos wrap_here (" ");
1510 1.1 christos if (sal.symtab)
1511 1.1 christos printf_filtered (" (%s:%d)", symtab_to_filename_for_display (sal.symtab),
1512 1.1 christos sal.line);
1513 1.1 christos puts_filtered ("; ");
1514 1.1 christos wrap_here (" ");
1515 1.6 christos printf_filtered ("saved %s = ", pc_regname);
1516 1.6 christos
1517 1.6 christos if (!frame_id_p (frame_unwind_caller_id (fi)))
1518 1.1 christos val_print_not_saved (gdb_stdout);
1519 1.6 christos else
1520 1.6 christos {
1521 1.6 christos TRY
1522 1.6 christos {
1523 1.6 christos caller_pc = frame_unwind_caller_pc (fi);
1524 1.6 christos caller_pc_p = 1;
1525 1.1 christos }
1526 1.6 christos CATCH (ex, RETURN_MASK_ERROR)
1527 1.6 christos {
1528 1.6 christos switch (ex.error)
1529 1.6 christos {
1530 1.6 christos case NOT_AVAILABLE_ERROR:
1531 1.6 christos val_print_unavailable (gdb_stdout);
1532 1.6 christos break;
1533 1.6 christos case OPTIMIZED_OUT_ERROR:
1534 1.6 christos val_print_not_saved (gdb_stdout);
1535 1.6 christos break;
1536 1.6 christos default:
1537 1.6 christos fprintf_filtered (gdb_stdout, _("<error: %s>"), ex.message);
1538 1.1 christos break;
1539 1.6 christos }
1540 1.1 christos }
1541 1.5 christos END_CATCH
1542 1.5 christos }
1543 1.1 christos
1544 1.1 christos if (caller_pc_p)
1545 1.1 christos fputs_filtered (paddress (gdbarch, caller_pc), gdb_stdout);
1546 1.1 christos printf_filtered ("\n");
1547 1.1 christos
1548 1.1 christos if (calling_frame_info == NULL)
1549 1.1 christos {
1550 1.1 christos enum unwind_stop_reason reason;
1551 1.1 christos
1552 1.1 christos reason = get_frame_unwind_stop_reason (fi);
1553 1.3 christos if (reason != UNWIND_NO_REASON)
1554 1.1 christos printf_filtered (_(" Outermost frame: %s\n"),
1555 1.1 christos frame_stop_reason_string (fi));
1556 1.1 christos }
1557 1.1 christos else if (get_frame_type (fi) == TAILCALL_FRAME)
1558 1.1 christos puts_filtered (" tail call frame");
1559 1.1 christos else if (get_frame_type (fi) == INLINE_FRAME)
1560 1.1 christos printf_filtered (" inlined into frame %d",
1561 1.1 christos frame_relative_level (get_prev_frame (fi)));
1562 1.1 christos else
1563 1.1 christos {
1564 1.1 christos printf_filtered (" called by frame at ");
1565 1.1 christos fputs_filtered (paddress (gdbarch, get_frame_base (calling_frame_info)),
1566 1.1 christos gdb_stdout);
1567 1.1 christos }
1568 1.1 christos if (get_next_frame (fi) && calling_frame_info)
1569 1.1 christos puts_filtered (",");
1570 1.1 christos wrap_here (" ");
1571 1.1 christos if (get_next_frame (fi))
1572 1.1 christos {
1573 1.1 christos printf_filtered (" caller of frame at ");
1574 1.1 christos fputs_filtered (paddress (gdbarch, get_frame_base (get_next_frame (fi))),
1575 1.1 christos gdb_stdout);
1576 1.1 christos }
1577 1.1 christos if (get_next_frame (fi) || calling_frame_info)
1578 1.1 christos puts_filtered ("\n");
1579 1.1 christos
1580 1.1 christos if (s)
1581 1.1 christos printf_filtered (" source language %s.\n",
1582 1.1 christos language_str (s->language));
1583 1.1 christos
1584 1.1 christos {
1585 1.1 christos /* Address of the argument list for this frame, or 0. */
1586 1.1 christos CORE_ADDR arg_list = get_frame_args_address (fi);
1587 1.1 christos /* Number of args for this frame, or -1 if unknown. */
1588 1.1 christos int numargs;
1589 1.1 christos
1590 1.1 christos if (arg_list == 0)
1591 1.1 christos printf_filtered (" Arglist at unknown address.\n");
1592 1.1 christos else
1593 1.1 christos {
1594 1.1 christos printf_filtered (" Arglist at ");
1595 1.1 christos fputs_filtered (paddress (gdbarch, arg_list), gdb_stdout);
1596 1.1 christos printf_filtered (",");
1597 1.1 christos
1598 1.1 christos if (!gdbarch_frame_num_args_p (gdbarch))
1599 1.1 christos {
1600 1.1 christos numargs = -1;
1601 1.1 christos puts_filtered (" args: ");
1602 1.1 christos }
1603 1.1 christos else
1604 1.1 christos {
1605 1.1 christos numargs = gdbarch_frame_num_args (gdbarch, fi);
1606 1.1 christos gdb_assert (numargs >= 0);
1607 1.1 christos if (numargs == 0)
1608 1.1 christos puts_filtered (" no args.");
1609 1.1 christos else if (numargs == 1)
1610 1.1 christos puts_filtered (" 1 arg: ");
1611 1.1 christos else
1612 1.1 christos printf_filtered (" %d args: ", numargs);
1613 1.1 christos }
1614 1.1 christos print_frame_args (func, fi, numargs, gdb_stdout);
1615 1.1 christos puts_filtered ("\n");
1616 1.1 christos }
1617 1.1 christos }
1618 1.1 christos {
1619 1.1 christos /* Address of the local variables for this frame, or 0. */
1620 1.1 christos CORE_ADDR arg_list = get_frame_locals_address (fi);
1621 1.1 christos
1622 1.1 christos if (arg_list == 0)
1623 1.1 christos printf_filtered (" Locals at unknown address,");
1624 1.1 christos else
1625 1.1 christos {
1626 1.1 christos printf_filtered (" Locals at ");
1627 1.1 christos fputs_filtered (paddress (gdbarch, arg_list), gdb_stdout);
1628 1.1 christos printf_filtered (",");
1629 1.1 christos }
1630 1.1 christos }
1631 1.1 christos
1632 1.1 christos /* Print as much information as possible on the location of all the
1633 1.1 christos registers. */
1634 1.1 christos {
1635 1.1 christos int count;
1636 1.7 christos int i;
1637 1.1 christos int need_nl = 1;
1638 1.1 christos int sp_regnum = gdbarch_sp_regnum (gdbarch);
1639 1.1 christos
1640 1.1 christos /* The sp is special; what's displayed isn't the save address, but
1641 1.1 christos the value of the previous frame's sp. This is a legacy thing,
1642 1.1 christos at one stage the frame cached the previous frame's SP instead
1643 1.7 christos of its address, hence it was easiest to just display the cached
1644 1.1 christos value. */
1645 1.7 christos if (sp_regnum >= 0)
1646 1.7 christos {
1647 1.7 christos struct value *value = frame_unwind_register_value (fi, sp_regnum);
1648 1.7 christos gdb_assert (value != NULL);
1649 1.1 christos
1650 1.7 christos if (!value_optimized_out (value) && value_entirely_available (value))
1651 1.7 christos {
1652 1.7 christos if (VALUE_LVAL (value) == not_lval)
1653 1.7 christos {
1654 1.7 christos CORE_ADDR sp;
1655 1.7 christos enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1656 1.7 christos int sp_size = register_size (gdbarch, sp_regnum);
1657 1.7 christos
1658 1.7 christos sp = extract_unsigned_integer (value_contents_all (value),
1659 1.7 christos sp_size, byte_order);
1660 1.7 christos
1661 1.7 christos printf_filtered (" Previous frame's sp is ");
1662 1.7 christos fputs_filtered (paddress (gdbarch, sp), gdb_stdout);
1663 1.7 christos printf_filtered ("\n");
1664 1.7 christos }
1665 1.7 christos else if (VALUE_LVAL (value) == lval_memory)
1666 1.7 christos {
1667 1.7 christos printf_filtered (" Previous frame's sp at ");
1668 1.7 christos fputs_filtered (paddress (gdbarch, value_address (value)),
1669 1.7 christos gdb_stdout);
1670 1.7 christos printf_filtered ("\n");
1671 1.7 christos }
1672 1.7 christos else if (VALUE_LVAL (value) == lval_register)
1673 1.7 christos {
1674 1.7 christos printf_filtered (" Previous frame's sp in %s\n",
1675 1.7 christos gdbarch_register_name (gdbarch,
1676 1.7 christos VALUE_REGNUM (value)));
1677 1.7 christos }
1678 1.7 christos
1679 1.1 christos release_value (value);
1680 1.1 christos value_free (value);
1681 1.1 christos need_nl = 0;
1682 1.1 christos }
1683 1.1 christos /* else keep quiet. */
1684 1.1 christos }
1685 1.1 christos
1686 1.1 christos count = 0;
1687 1.1 christos numregs = gdbarch_num_regs (gdbarch)
1688 1.7 christos + gdbarch_num_pseudo_regs (gdbarch);
1689 1.1 christos for (i = 0; i < numregs; i++)
1690 1.1 christos if (i != sp_regnum
1691 1.7 christos && gdbarch_register_reggroup_p (gdbarch, i, all_reggroup))
1692 1.7 christos {
1693 1.7 christos enum lval_type lval;
1694 1.7 christos int optimized;
1695 1.7 christos int unavailable;
1696 1.7 christos CORE_ADDR addr;
1697 1.1 christos int realnum;
1698 1.1 christos
1699 1.1 christos /* Find out the location of the saved register without
1700 1.1 christos fetching the corresponding value. */
1701 1.1 christos frame_register_unwind (fi, i, &optimized, &unavailable,
1702 1.1 christos &lval, &addr, &realnum, NULL);
1703 1.1 christos /* For moment, only display registers that were saved on the
1704 1.1 christos stack. */
1705 1.1 christos if (!optimized && !unavailable && lval == lval_memory)
1706 1.1 christos {
1707 1.1 christos if (count == 0)
1708 1.1 christos puts_filtered (" Saved registers:\n ");
1709 1.1 christos else
1710 1.1 christos puts_filtered (",");
1711 1.1 christos wrap_here (" ");
1712 1.1 christos printf_filtered (" %s at ",
1713 1.1 christos gdbarch_register_name (gdbarch, i));
1714 1.1 christos fputs_filtered (paddress (gdbarch, addr), gdb_stdout);
1715 1.1 christos count++;
1716 1.1 christos }
1717 1.1 christos }
1718 1.1 christos if (count || need_nl)
1719 1.1 christos puts_filtered ("\n");
1720 1.1 christos }
1721 1.1 christos
1722 1.1 christos do_cleanups (back_to);
1723 1.1 christos }
1724 1.1 christos
1725 1.1 christos /* Print briefly all stack frames or just the innermost COUNT_EXP
1726 1.1 christos frames. */
1727 1.1 christos
1728 1.1 christos static void
1729 1.1 christos backtrace_command_1 (char *count_exp, int show_locals, int no_filters,
1730 1.1 christos int from_tty)
1731 1.1 christos {
1732 1.1 christos struct frame_info *fi;
1733 1.1 christos int count;
1734 1.1 christos int i;
1735 1.3 christos struct frame_info *trailing;
1736 1.1 christos int trailing_level, py_start = 0, py_end = 0;
1737 1.1 christos enum ext_lang_bt_status result = EXT_LANG_BT_ERROR;
1738 1.1 christos
1739 1.1 christos if (!target_has_stack)
1740 1.1 christos error (_("No stack."));
1741 1.1 christos
1742 1.1 christos /* The following code must do two things. First, it must set the
1743 1.1 christos variable TRAILING to the frame from which we should start
1744 1.1 christos printing. Second, it must set the variable count to the number
1745 1.1 christos of frames which we should print, or -1 if all of them. */
1746 1.1 christos trailing = get_current_frame ();
1747 1.1 christos
1748 1.1 christos trailing_level = 0;
1749 1.1 christos if (count_exp)
1750 1.1 christos {
1751 1.1 christos count = parse_and_eval_long (count_exp);
1752 1.1 christos if (count < 0)
1753 1.1 christos {
1754 1.1 christos struct frame_info *current;
1755 1.1 christos
1756 1.1 christos py_start = count;
1757 1.1 christos count = -count;
1758 1.1 christos
1759 1.1 christos current = trailing;
1760 1.1 christos while (current && count--)
1761 1.1 christos {
1762 1.1 christos QUIT;
1763 1.1 christos current = get_prev_frame (current);
1764 1.1 christos }
1765 1.1 christos
1766 1.1 christos /* Will stop when CURRENT reaches the top of the stack.
1767 1.1 christos TRAILING will be COUNT below it. */
1768 1.1 christos while (current)
1769 1.1 christos {
1770 1.1 christos QUIT;
1771 1.1 christos trailing = get_prev_frame (trailing);
1772 1.1 christos current = get_prev_frame (current);
1773 1.1 christos trailing_level++;
1774 1.1 christos }
1775 1.1 christos
1776 1.1 christos count = -1;
1777 1.1 christos }
1778 1.1 christos else
1779 1.1 christos {
1780 1.1 christos py_start = 0;
1781 1.1 christos py_end = count;
1782 1.1 christos }
1783 1.1 christos }
1784 1.1 christos else
1785 1.1 christos {
1786 1.1 christos py_end = -1;
1787 1.1 christos count = -1;
1788 1.1 christos }
1789 1.1 christos
1790 1.1 christos if (info_verbose)
1791 1.1 christos {
1792 1.1 christos /* Read in symbols for all of the frames. Need to do this in a
1793 1.1 christos separate pass so that "Reading in symbols for xxx" messages
1794 1.1 christos don't screw up the appearance of the backtrace. Also if
1795 1.1 christos people have strong opinions against reading symbols for
1796 1.1 christos backtrace this may have to be an option. */
1797 1.1 christos i = count;
1798 1.1 christos for (fi = trailing; fi != NULL && i--; fi = get_prev_frame (fi))
1799 1.1 christos {
1800 1.1 christos CORE_ADDR pc;
1801 1.1 christos
1802 1.3 christos QUIT;
1803 1.1 christos pc = get_frame_address_in_block (fi);
1804 1.1 christos expand_symtab_containing_pc (pc, find_pc_mapped_section (pc));
1805 1.1 christos }
1806 1.1 christos }
1807 1.1 christos
1808 1.1 christos if (! no_filters)
1809 1.3 christos {
1810 1.1 christos int flags = PRINT_LEVEL | PRINT_FRAME_INFO | PRINT_ARGS;
1811 1.1 christos enum ext_lang_frame_args arg_type;
1812 1.1 christos
1813 1.1 christos if (show_locals)
1814 1.1 christos flags |= PRINT_LOCALS;
1815 1.1 christos
1816 1.1 christos if (!strcmp (print_frame_arguments, "scalars"))
1817 1.1 christos arg_type = CLI_SCALAR_VALUES;
1818 1.1 christos else if (!strcmp (print_frame_arguments, "all"))
1819 1.1 christos arg_type = CLI_ALL_VALUES;
1820 1.1 christos else
1821 1.3 christos arg_type = NO_VALUES;
1822 1.3 christos
1823 1.3 christos result = apply_ext_lang_frame_filter (get_current_frame (), flags,
1824 1.3 christos arg_type, current_uiout,
1825 1.1 christos py_start, py_end);
1826 1.1 christos }
1827 1.1 christos
1828 1.3 christos /* Run the inbuilt backtrace if there are no filters registered, or
1829 1.1 christos "no-filters" has been specified from the command. */
1830 1.1 christos if (no_filters || result == EXT_LANG_BT_NO_FILTERS)
1831 1.1 christos {
1832 1.1 christos for (i = 0, fi = trailing; fi && count--; i++, fi = get_prev_frame (fi))
1833 1.1 christos {
1834 1.1 christos QUIT;
1835 1.1 christos
1836 1.1 christos /* Don't use print_stack_frame; if an error() occurs it probably
1837 1.1 christos means further attempts to backtrace would fail (on the other
1838 1.1 christos hand, perhaps the code does or could be fixed to make sure
1839 1.1 christos the frame->prev field gets set to NULL in that case). */
1840 1.1 christos
1841 1.1 christos print_frame_info (fi, 1, LOCATION, 1, 0);
1842 1.1 christos if (show_locals)
1843 1.1 christos {
1844 1.1 christos struct frame_id frame_id = get_frame_id (fi);
1845 1.1 christos
1846 1.1 christos print_frame_local_vars (fi, 1, gdb_stdout);
1847 1.1 christos
1848 1.1 christos /* print_frame_local_vars invalidates FI. */
1849 1.1 christos fi = frame_find_by_id (frame_id);
1850 1.1 christos if (fi == NULL)
1851 1.1 christos {
1852 1.1 christos trailing = NULL;
1853 1.1 christos warning (_("Unable to restore previously selected frame."));
1854 1.1 christos break;
1855 1.1 christos }
1856 1.1 christos }
1857 1.1 christos
1858 1.1 christos /* Save the last frame to check for error conditions. */
1859 1.1 christos trailing = fi;
1860 1.1 christos }
1861 1.1 christos
1862 1.1 christos /* If we've stopped before the end, mention that. */
1863 1.1 christos if (fi && from_tty)
1864 1.1 christos printf_filtered (_("(More stack frames follow...)\n"));
1865 1.1 christos
1866 1.1 christos /* If we've run out of frames, and the reason appears to be an error
1867 1.1 christos condition, print it. */
1868 1.1 christos if (fi == NULL && trailing != NULL)
1869 1.1 christos {
1870 1.1 christos enum unwind_stop_reason reason;
1871 1.1 christos
1872 1.1 christos reason = get_frame_unwind_stop_reason (trailing);
1873 1.3 christos if (reason >= UNWIND_FIRST_ERROR)
1874 1.1 christos printf_filtered (_("Backtrace stopped: %s\n"),
1875 1.1 christos frame_stop_reason_string (trailing));
1876 1.1 christos }
1877 1.1 christos }
1878 1.1 christos }
1879 1.1 christos
1880 1.1 christos static void
1881 1.1 christos backtrace_command (char *arg, int from_tty)
1882 1.1 christos {
1883 1.1 christos struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
1884 1.1 christos int fulltrace_arg = -1, arglen = 0, argc = 0, no_filters = -1;
1885 1.1 christos int user_arg = 0;
1886 1.1 christos
1887 1.1 christos if (arg)
1888 1.1 christos {
1889 1.1 christos char **argv;
1890 1.1 christos int i;
1891 1.1 christos
1892 1.1 christos argv = gdb_buildargv (arg);
1893 1.1 christos make_cleanup_freeargv (argv);
1894 1.1 christos argc = 0;
1895 1.1 christos for (i = 0; argv[i]; i++)
1896 1.1 christos {
1897 1.1 christos unsigned int j;
1898 1.6 christos
1899 1.1 christos for (j = 0; j < strlen (argv[i]); j++)
1900 1.1 christos argv[i][j] = TOLOWER (argv[i][j]);
1901 1.1 christos
1902 1.1 christos if (no_filters < 0 && subset_compare (argv[i], "no-filters"))
1903 1.1 christos no_filters = argc;
1904 1.1 christos else
1905 1.1 christos {
1906 1.1 christos if (fulltrace_arg < 0 && subset_compare (argv[i], "full"))
1907 1.1 christos fulltrace_arg = argc;
1908 1.1 christos else
1909 1.1 christos {
1910 1.1 christos user_arg++;
1911 1.1 christos arglen += strlen (argv[i]);
1912 1.1 christos }
1913 1.1 christos }
1914 1.1 christos argc++;
1915 1.1 christos }
1916 1.1 christos arglen += user_arg;
1917 1.1 christos if (fulltrace_arg >= 0 || no_filters >= 0)
1918 1.1 christos {
1919 1.6 christos if (arglen > 0)
1920 1.1 christos {
1921 1.1 christos arg = (char *) xmalloc (arglen + 1);
1922 1.1 christos make_cleanup (xfree, arg);
1923 1.1 christos arg[0] = 0;
1924 1.1 christos for (i = 0; i < argc; i++)
1925 1.1 christos {
1926 1.1 christos if (i != fulltrace_arg && i != no_filters)
1927 1.1 christos {
1928 1.1 christos strcat (arg, argv[i]);
1929 1.1 christos strcat (arg, " ");
1930 1.1 christos }
1931 1.1 christos }
1932 1.1 christos }
1933 1.1 christos else
1934 1.1 christos arg = NULL;
1935 1.1 christos }
1936 1.1 christos }
1937 1.1 christos
1938 1.1 christos backtrace_command_1 (arg, fulltrace_arg >= 0 /* show_locals */,
1939 1.1 christos no_filters >= 0 /* no frame-filters */, from_tty);
1940 1.1 christos
1941 1.1 christos do_cleanups (old_chain);
1942 1.1 christos }
1943 1.1 christos
1944 1.1 christos /* Iterate over the local variables of a block B, calling CB with
1945 1.1 christos CB_DATA. */
1946 1.3 christos
1947 1.1 christos static void
1948 1.1 christos iterate_over_block_locals (const struct block *b,
1949 1.1 christos iterate_over_block_arg_local_vars_cb cb,
1950 1.1 christos void *cb_data)
1951 1.1 christos {
1952 1.1 christos struct block_iterator iter;
1953 1.1 christos struct symbol *sym;
1954 1.1 christos
1955 1.1 christos ALL_BLOCK_SYMBOLS (b, iter, sym)
1956 1.1 christos {
1957 1.1 christos switch (SYMBOL_CLASS (sym))
1958 1.1 christos {
1959 1.1 christos case LOC_LOCAL:
1960 1.1 christos case LOC_REGISTER:
1961 1.1 christos case LOC_STATIC:
1962 1.1 christos case LOC_COMPUTED:
1963 1.1 christos if (SYMBOL_IS_ARGUMENT (sym))
1964 1.1 christos break;
1965 1.1 christos if (SYMBOL_DOMAIN (sym) == COMMON_BLOCK_DOMAIN)
1966 1.1 christos break;
1967 1.1 christos (*cb) (SYMBOL_PRINT_NAME (sym), sym, cb_data);
1968 1.1 christos break;
1969 1.1 christos
1970 1.1 christos default:
1971 1.1 christos /* Ignore symbols which are not locals. */
1972 1.1 christos break;
1973 1.1 christos }
1974 1.1 christos }
1975 1.1 christos }
1976 1.1 christos
1977 1.1 christos
1978 1.1 christos /* Same, but print labels. */
1979 1.1 christos
1980 1.1 christos #if 0
1981 1.1 christos /* Commented out, as the code using this function has also been
1982 1.1 christos commented out. FIXME:brobecker/2009-01-13: Find out why the code
1983 1.1 christos was commented out in the first place. The discussion introducing
1984 1.1 christos this change (2007-12-04: Support lexical blocks and function bodies
1985 1.1 christos that occupy non-contiguous address ranges) did not explain why
1986 1.1 christos this change was made. */
1987 1.1 christos static int
1988 1.1 christos print_block_frame_labels (struct gdbarch *gdbarch, struct block *b,
1989 1.1 christos int *have_default, struct ui_file *stream)
1990 1.1 christos {
1991 1.1 christos struct block_iterator iter;
1992 1.1 christos struct symbol *sym;
1993 1.1 christos int values_printed = 0;
1994 1.1 christos
1995 1.1 christos ALL_BLOCK_SYMBOLS (b, iter, sym)
1996 1.1 christos {
1997 1.1 christos if (strcmp (SYMBOL_LINKAGE_NAME (sym), "default") == 0)
1998 1.1 christos {
1999 1.1 christos if (*have_default)
2000 1.1 christos continue;
2001 1.1 christos *have_default = 1;
2002 1.1 christos }
2003 1.1 christos if (SYMBOL_CLASS (sym) == LOC_LABEL)
2004 1.1 christos {
2005 1.1 christos struct symtab_and_line sal;
2006 1.1 christos struct value_print_options opts;
2007 1.1 christos
2008 1.1 christos sal = find_pc_line (SYMBOL_VALUE_ADDRESS (sym), 0);
2009 1.1 christos values_printed = 1;
2010 1.1 christos fputs_filtered (SYMBOL_PRINT_NAME (sym), stream);
2011 1.1 christos get_user_print_options (&opts);
2012 1.1 christos if (opts.addressprint)
2013 1.1 christos {
2014 1.1 christos fprintf_filtered (stream, " ");
2015 1.1 christos fputs_filtered (paddress (gdbarch, SYMBOL_VALUE_ADDRESS (sym)),
2016 1.1 christos stream);
2017 1.1 christos }
2018 1.1 christos fprintf_filtered (stream, " in file %s, line %d\n",
2019 1.1 christos sal.symtab->filename, sal.line);
2020 1.1 christos }
2021 1.1 christos }
2022 1.1 christos
2023 1.1 christos return values_printed;
2024 1.1 christos }
2025 1.1 christos #endif
2026 1.1 christos
2027 1.1 christos /* Iterate over all the local variables in block B, including all its
2028 1.1 christos superblocks, stopping when the top-level block is reached. */
2029 1.3 christos
2030 1.1 christos void
2031 1.1 christos iterate_over_block_local_vars (const struct block *block,
2032 1.1 christos iterate_over_block_arg_local_vars_cb cb,
2033 1.1 christos void *cb_data)
2034 1.1 christos {
2035 1.1 christos while (block)
2036 1.1 christos {
2037 1.1 christos iterate_over_block_locals (block, cb, cb_data);
2038 1.1 christos /* After handling the function's top-level block, stop. Don't
2039 1.1 christos continue to its superblock, the block of per-file
2040 1.1 christos symbols. */
2041 1.1 christos if (BLOCK_FUNCTION (block))
2042 1.1 christos break;
2043 1.1 christos block = BLOCK_SUPERBLOCK (block);
2044 1.1 christos }
2045 1.1 christos }
2046 1.1 christos
2047 1.1 christos /* Data to be passed around in the calls to the locals and args
2048 1.1 christos iterators. */
2049 1.1 christos
2050 1.1 christos struct print_variable_and_value_data
2051 1.1 christos {
2052 1.1 christos struct frame_id frame_id;
2053 1.1 christos int num_tabs;
2054 1.1 christos struct ui_file *stream;
2055 1.1 christos int values_printed;
2056 1.1 christos };
2057 1.1 christos
2058 1.1 christos /* The callback for the locals and args iterators. */
2059 1.1 christos
2060 1.1 christos static void
2061 1.1 christos do_print_variable_and_value (const char *print_name,
2062 1.1 christos struct symbol *sym,
2063 1.6 christos void *cb_data)
2064 1.6 christos {
2065 1.1 christos struct print_variable_and_value_data *p
2066 1.1 christos = (struct print_variable_and_value_data *) cb_data;
2067 1.1 christos struct frame_info *frame;
2068 1.1 christos
2069 1.1 christos frame = frame_find_by_id (p->frame_id);
2070 1.1 christos if (frame == NULL)
2071 1.1 christos {
2072 1.1 christos warning (_("Unable to restore previously selected frame."));
2073 1.1 christos return;
2074 1.1 christos }
2075 1.1 christos
2076 1.1 christos print_variable_and_value (print_name, sym, frame, p->stream, p->num_tabs);
2077 1.1 christos
2078 1.1 christos /* print_variable_and_value invalidates FRAME. */
2079 1.1 christos frame = NULL;
2080 1.1 christos
2081 1.1 christos p->values_printed = 1;
2082 1.1 christos }
2083 1.1 christos
2084 1.1 christos /* Print all variables from the innermost up to the function block of FRAME.
2085 1.1 christos Print them with values to STREAM indented by NUM_TABS.
2086 1.1 christos
2087 1.1 christos This function will invalidate FRAME. */
2088 1.1 christos
2089 1.1 christos static void
2090 1.1 christos print_frame_local_vars (struct frame_info *frame, int num_tabs,
2091 1.1 christos struct ui_file *stream)
2092 1.3 christos {
2093 1.1 christos struct print_variable_and_value_data cb_data;
2094 1.6 christos const struct block *block;
2095 1.1 christos CORE_ADDR pc;
2096 1.1 christos struct gdb_exception except = exception_none;
2097 1.1 christos
2098 1.1 christos if (!get_frame_pc_if_available (frame, &pc))
2099 1.1 christos {
2100 1.1 christos fprintf_filtered (stream,
2101 1.1 christos _("PC unavailable, cannot determine locals.\n"));
2102 1.1 christos return;
2103 1.1 christos }
2104 1.1 christos
2105 1.1 christos block = get_frame_block (frame, 0);
2106 1.1 christos if (block == 0)
2107 1.1 christos {
2108 1.1 christos fprintf_filtered (stream, "No symbol table info available.\n");
2109 1.1 christos return;
2110 1.1 christos }
2111 1.1 christos
2112 1.1 christos cb_data.frame_id = get_frame_id (frame);
2113 1.1 christos cb_data.num_tabs = 4 * num_tabs;
2114 1.1 christos cb_data.stream = stream;
2115 1.6 christos cb_data.values_printed = 0;
2116 1.6 christos
2117 1.6 christos /* Temporarily change the selected frame to the given FRAME.
2118 1.6 christos This allows routines that rely on the selected frame instead
2119 1.6 christos of being given a frame as parameter to use the correct frame. */
2120 1.6 christos select_frame (frame);
2121 1.6 christos
2122 1.6 christos TRY
2123 1.6 christos {
2124 1.6 christos iterate_over_block_local_vars (block,
2125 1.6 christos do_print_variable_and_value,
2126 1.6 christos &cb_data);
2127 1.6 christos }
2128 1.6 christos CATCH (ex, RETURN_MASK_ALL)
2129 1.6 christos {
2130 1.6 christos except = ex;
2131 1.6 christos }
2132 1.6 christos END_CATCH
2133 1.6 christos
2134 1.6 christos /* Restore the selected frame, and then rethrow if there was a problem. */
2135 1.6 christos select_frame (frame_find_by_id (cb_data.frame_id));
2136 1.1 christos if (except.reason < 0)
2137 1.1 christos throw_exception (except);
2138 1.1 christos
2139 1.1 christos /* do_print_variable_and_value invalidates FRAME. */
2140 1.1 christos frame = NULL;
2141 1.1 christos
2142 1.1 christos if (!cb_data.values_printed)
2143 1.1 christos fprintf_filtered (stream, _("No locals.\n"));
2144 1.1 christos }
2145 1.1 christos
2146 1.1 christos void
2147 1.1 christos locals_info (char *args, int from_tty)
2148 1.1 christos {
2149 1.1 christos print_frame_local_vars (get_selected_frame (_("No frame selected.")),
2150 1.1 christos 0, gdb_stdout);
2151 1.1 christos }
2152 1.1 christos
2153 1.1 christos /* Iterate over all the argument variables in block B.
2154 1.1 christos
2155 1.1 christos Returns 1 if any argument was walked; 0 otherwise. */
2156 1.3 christos
2157 1.1 christos void
2158 1.1 christos iterate_over_block_arg_vars (const struct block *b,
2159 1.1 christos iterate_over_block_arg_local_vars_cb cb,
2160 1.1 christos void *cb_data)
2161 1.1 christos {
2162 1.1 christos struct block_iterator iter;
2163 1.1 christos struct symbol *sym, *sym2;
2164 1.1 christos
2165 1.1 christos ALL_BLOCK_SYMBOLS (b, iter, sym)
2166 1.1 christos {
2167 1.1 christos /* Don't worry about things which aren't arguments. */
2168 1.1 christos if (SYMBOL_IS_ARGUMENT (sym))
2169 1.1 christos {
2170 1.1 christos /* We have to look up the symbol because arguments can have
2171 1.1 christos two entries (one a parameter, one a local) and the one we
2172 1.1 christos want is the local, which lookup_symbol will find for us.
2173 1.1 christos This includes gcc1 (not gcc2) on the sparc when passing a
2174 1.1 christos small structure and gcc2 when the argument type is float
2175 1.1 christos and it is passed as a double and converted to float by
2176 1.1 christos the prologue (in the latter case the type of the LOC_ARG
2177 1.1 christos symbol is double and the type of the LOC_LOCAL symbol is
2178 1.1 christos float). There are also LOC_ARG/LOC_REGISTER pairs which
2179 1.1 christos are not combined in symbol-reading. */
2180 1.6 christos
2181 1.1 christos sym2 = lookup_symbol (SYMBOL_LINKAGE_NAME (sym),
2182 1.1 christos b, VAR_DOMAIN, NULL).symbol;
2183 1.1 christos (*cb) (SYMBOL_PRINT_NAME (sym), sym2, cb_data);
2184 1.1 christos }
2185 1.1 christos }
2186 1.1 christos }
2187 1.1 christos
2188 1.1 christos /* Print all argument variables of the function of FRAME.
2189 1.1 christos Print them with values to STREAM.
2190 1.1 christos
2191 1.1 christos This function will invalidate FRAME. */
2192 1.1 christos
2193 1.1 christos static void
2194 1.1 christos print_frame_arg_vars (struct frame_info *frame, struct ui_file *stream)
2195 1.1 christos {
2196 1.1 christos struct print_variable_and_value_data cb_data;
2197 1.1 christos struct symbol *func;
2198 1.1 christos CORE_ADDR pc;
2199 1.1 christos
2200 1.1 christos if (!get_frame_pc_if_available (frame, &pc))
2201 1.1 christos {
2202 1.1 christos fprintf_filtered (stream, _("PC unavailable, cannot determine args.\n"));
2203 1.1 christos return;
2204 1.1 christos }
2205 1.1 christos
2206 1.1 christos func = get_frame_function (frame);
2207 1.1 christos if (func == NULL)
2208 1.1 christos {
2209 1.1 christos fprintf_filtered (stream, _("No symbol table info available.\n"));
2210 1.1 christos return;
2211 1.1 christos }
2212 1.1 christos
2213 1.1 christos cb_data.frame_id = get_frame_id (frame);
2214 1.1 christos cb_data.num_tabs = 0;
2215 1.1 christos cb_data.stream = gdb_stdout;
2216 1.1 christos cb_data.values_printed = 0;
2217 1.1 christos
2218 1.1 christos iterate_over_block_arg_vars (SYMBOL_BLOCK_VALUE (func),
2219 1.1 christos do_print_variable_and_value, &cb_data);
2220 1.1 christos
2221 1.1 christos /* do_print_variable_and_value invalidates FRAME. */
2222 1.1 christos frame = NULL;
2223 1.1 christos
2224 1.1 christos if (!cb_data.values_printed)
2225 1.1 christos fprintf_filtered (stream, _("No arguments.\n"));
2226 1.1 christos }
2227 1.1 christos
2228 1.1 christos void
2229 1.1 christos args_info (char *ignore, int from_tty)
2230 1.1 christos {
2231 1.1 christos print_frame_arg_vars (get_selected_frame (_("No frame selected.")),
2232 1.1 christos gdb_stdout);
2233 1.1 christos }
2234 1.1 christos
2235 1.1 christos /* Select frame FRAME. Also print the stack frame and show the source
2236 1.1 christos if this is the tui version. */
2237 1.1 christos static void
2238 1.1 christos select_and_print_frame (struct frame_info *frame)
2239 1.1 christos {
2240 1.1 christos select_frame (frame);
2241 1.1 christos if (frame)
2242 1.1 christos print_stack_frame (frame, 1, SRC_AND_LOC, 1);
2243 1.1 christos }
2244 1.1 christos
2245 1.1 christos /* Return the symbol-block in which the selected frame is executing.
2247 1.1 christos Can return zero under various legitimate circumstances.
2248 1.1 christos
2249 1.1 christos If ADDR_IN_BLOCK is non-zero, set *ADDR_IN_BLOCK to the relevant
2250 1.3 christos code address within the block returned. We use this to decide
2251 1.1 christos which macros are in scope. */
2252 1.1 christos
2253 1.1 christos const struct block *
2254 1.1 christos get_selected_block (CORE_ADDR *addr_in_block)
2255 1.1 christos {
2256 1.1 christos if (!has_stack_frames ())
2257 1.1 christos return 0;
2258 1.1 christos
2259 1.1 christos return get_frame_block (get_selected_frame (NULL), addr_in_block);
2260 1.1 christos }
2261 1.1 christos
2262 1.1 christos /* Find a frame a certain number of levels away from FRAME.
2263 1.1 christos LEVEL_OFFSET_PTR points to an int containing the number of levels.
2264 1.1 christos Positive means go to earlier frames (up); negative, the reverse.
2265 1.1 christos The int that contains the number of levels is counted toward
2266 1.1 christos zero as the frames for those levels are found.
2267 1.1 christos If the top or bottom frame is reached, that frame is returned,
2268 1.1 christos but the final value of *LEVEL_OFFSET_PTR is nonzero and indicates
2269 1.1 christos how much farther the original request asked to go. */
2270 1.1 christos
2271 1.1 christos struct frame_info *
2272 1.1 christos find_relative_frame (struct frame_info *frame, int *level_offset_ptr)
2273 1.1 christos {
2274 1.1 christos /* Going up is simple: just call get_prev_frame enough times or
2275 1.1 christos until the initial frame is reached. */
2276 1.1 christos while (*level_offset_ptr > 0)
2277 1.1 christos {
2278 1.1 christos struct frame_info *prev = get_prev_frame (frame);
2279 1.1 christos
2280 1.1 christos if (!prev)
2281 1.1 christos break;
2282 1.1 christos (*level_offset_ptr)--;
2283 1.1 christos frame = prev;
2284 1.1 christos }
2285 1.1 christos
2286 1.1 christos /* Going down is just as simple. */
2287 1.1 christos while (*level_offset_ptr < 0)
2288 1.1 christos {
2289 1.1 christos struct frame_info *next = get_next_frame (frame);
2290 1.1 christos
2291 1.1 christos if (!next)
2292 1.1 christos break;
2293 1.1 christos (*level_offset_ptr)++;
2294 1.1 christos frame = next;
2295 1.1 christos }
2296 1.1 christos
2297 1.1 christos return frame;
2298 1.1 christos }
2299 1.1 christos
2300 1.1 christos /* The "select_frame" command. With no argument this is a NOP.
2301 1.1 christos Select the frame at level LEVEL_EXP if it is a valid level.
2302 1.1 christos Otherwise, treat LEVEL_EXP as an address expression and select it.
2303 1.1 christos
2304 1.1 christos See parse_frame_specification for more info on proper frame
2305 1.1 christos expressions. */
2306 1.1 christos
2307 1.6 christos void
2308 1.6 christos select_frame_command (char *level_exp, int from_tty)
2309 1.6 christos {
2310 1.6 christos struct frame_info *prev_frame = get_selected_frame_if_set ();
2311 1.6 christos
2312 1.1 christos select_frame (parse_frame_specification (level_exp, NULL));
2313 1.1 christos if (get_selected_frame_if_set () != prev_frame)
2314 1.1 christos observer_notify_user_selected_context_changed (USER_SELECTED_FRAME);
2315 1.1 christos }
2316 1.1 christos
2317 1.1 christos /* The "frame" command. With no argument, print the selected frame
2318 1.1 christos briefly. With an argument, behave like select_frame and then print
2319 1.1 christos the selected frame. */
2320 1.1 christos
2321 1.6 christos static void
2322 1.6 christos frame_command (char *level_exp, int from_tty)
2323 1.6 christos {
2324 1.6 christos struct frame_info *prev_frame = get_selected_frame_if_set ();
2325 1.6 christos
2326 1.6 christos select_frame (parse_frame_specification (level_exp, NULL));
2327 1.6 christos if (get_selected_frame_if_set () != prev_frame)
2328 1.1 christos observer_notify_user_selected_context_changed (USER_SELECTED_FRAME);
2329 1.1 christos else
2330 1.1 christos print_selected_thread_frame (current_uiout, USER_SELECTED_FRAME);
2331 1.1 christos }
2332 1.1 christos
2333 1.1 christos /* Select the frame up one or COUNT_EXP stack levels from the
2334 1.3 christos previously selected frame, and print it briefly. */
2335 1.1 christos
2336 1.1 christos static void
2337 1.1 christos up_silently_base (const char *count_exp)
2338 1.1 christos {
2339 1.1 christos struct frame_info *frame;
2340 1.1 christos int count = 1;
2341 1.1 christos
2342 1.1 christos if (count_exp)
2343 1.1 christos count = parse_and_eval_long (count_exp);
2344 1.1 christos
2345 1.1 christos frame = find_relative_frame (get_selected_frame ("No stack."), &count);
2346 1.1 christos if (count != 0 && count_exp == NULL)
2347 1.1 christos error (_("Initial frame selected; you cannot go up."));
2348 1.1 christos select_frame (frame);
2349 1.1 christos }
2350 1.1 christos
2351 1.1 christos static void
2352 1.1 christos up_silently_command (char *count_exp, int from_tty)
2353 1.1 christos {
2354 1.1 christos up_silently_base (count_exp);
2355 1.1 christos }
2356 1.1 christos
2357 1.1 christos static void
2358 1.6 christos up_command (char *count_exp, int from_tty)
2359 1.1 christos {
2360 1.1 christos up_silently_base (count_exp);
2361 1.1 christos observer_notify_user_selected_context_changed (USER_SELECTED_FRAME);
2362 1.1 christos }
2363 1.1 christos
2364 1.1 christos /* Select the frame down one or COUNT_EXP stack levels from the previously
2365 1.3 christos selected frame, and print it briefly. */
2366 1.1 christos
2367 1.1 christos static void
2368 1.1 christos down_silently_base (const char *count_exp)
2369 1.1 christos {
2370 1.1 christos struct frame_info *frame;
2371 1.1 christos int count = -1;
2372 1.1 christos
2373 1.1 christos if (count_exp)
2374 1.1 christos count = -parse_and_eval_long (count_exp);
2375 1.1 christos
2376 1.1 christos frame = find_relative_frame (get_selected_frame ("No stack."), &count);
2377 1.1 christos if (count != 0 && count_exp == NULL)
2378 1.1 christos {
2379 1.1 christos /* We only do this if COUNT_EXP is not specified. That way
2380 1.1 christos "down" means to really go down (and let me know if that is
2381 1.1 christos impossible), but "down 9999" can be used to mean go all the
2382 1.1 christos way down without getting an error. */
2383 1.1 christos
2384 1.1 christos error (_("Bottom (innermost) frame selected; you cannot go down."));
2385 1.1 christos }
2386 1.1 christos
2387 1.1 christos select_frame (frame);
2388 1.1 christos }
2389 1.1 christos
2390 1.1 christos static void
2391 1.1 christos down_silently_command (char *count_exp, int from_tty)
2392 1.1 christos {
2393 1.1 christos down_silently_base (count_exp);
2394 1.1 christos }
2395 1.1 christos
2396 1.1 christos static void
2397 1.6 christos down_command (char *count_exp, int from_tty)
2398 1.1 christos {
2399 1.1 christos down_silently_base (count_exp);
2400 1.1 christos observer_notify_user_selected_context_changed (USER_SELECTED_FRAME);
2401 1.1 christos }
2402 1.1 christos
2403 1.1 christos void
2404 1.1 christos return_command (char *retval_exp, int from_tty)
2405 1.1 christos {
2406 1.1 christos /* Initialize it just to avoid a GCC false warning. */
2407 1.1 christos enum return_value_convention rv_conv = RETURN_VALUE_STRUCT_CONVENTION;
2408 1.1 christos struct frame_info *thisframe;
2409 1.1 christos struct gdbarch *gdbarch;
2410 1.1 christos struct symbol *thisfun;
2411 1.1 christos struct value *return_value = NULL;
2412 1.1 christos struct value *function = NULL;
2413 1.1 christos const char *query_prefix = "";
2414 1.1 christos
2415 1.1 christos thisframe = get_selected_frame ("No selected frame.");
2416 1.1 christos thisfun = get_frame_function (thisframe);
2417 1.1 christos gdbarch = get_frame_arch (thisframe);
2418 1.1 christos
2419 1.1 christos if (get_frame_type (get_current_frame ()) == INLINE_FRAME)
2420 1.1 christos error (_("Can not force return from an inlined function."));
2421 1.1 christos
2422 1.1 christos /* Compute the return value. If the computation triggers an error,
2423 1.1 christos let it bail. If the return type can't be handled, set
2424 1.1 christos RETURN_VALUE to NULL, and QUERY_PREFIX to an informational
2425 1.7 christos message. */
2426 1.1 christos if (retval_exp)
2427 1.1 christos {
2428 1.1 christos expression_up retval_expr = parse_expression (retval_exp);
2429 1.1 christos struct type *return_type = NULL;
2430 1.7 christos
2431 1.1 christos /* Compute the return value. Should the computation fail, this
2432 1.1 christos call throws an error. */
2433 1.1 christos return_value = evaluate_expression (retval_expr.get ());
2434 1.1 christos
2435 1.1 christos /* Cast return value to the return type of the function. Should
2436 1.1 christos the cast fail, this call throws an error. */
2437 1.1 christos if (thisfun != NULL)
2438 1.1 christos return_type = TYPE_TARGET_TYPE (SYMBOL_TYPE (thisfun));
2439 1.1 christos if (return_type == NULL)
2440 1.1 christos {
2441 1.1 christos if (retval_expr->elts[0].opcode != UNOP_CAST
2442 1.1 christos && retval_expr->elts[0].opcode != UNOP_CAST_TYPE)
2443 1.1 christos error (_("Return value type not available for selected "
2444 1.1 christos "stack frame.\n"
2445 1.6 christos "Please use an explicit cast of the value to return."));
2446 1.1 christos return_type = value_type (return_value);
2447 1.1 christos }
2448 1.1 christos return_type = check_typedef (return_type);
2449 1.1 christos return_value = value_cast (return_type, return_value);
2450 1.1 christos
2451 1.1 christos /* Make sure the value is fully evaluated. It may live in the
2452 1.1 christos stack frame we're about to pop. */
2453 1.1 christos if (value_lazy (return_value))
2454 1.6 christos value_fetch_lazy (return_value);
2455 1.1 christos
2456 1.1 christos if (thisfun != NULL)
2457 1.1 christos function = read_var_value (thisfun, NULL, thisframe);
2458 1.1 christos
2459 1.1 christos rv_conv = RETURN_VALUE_REGISTER_CONVENTION;
2460 1.1 christos if (TYPE_CODE (return_type) == TYPE_CODE_VOID)
2461 1.1 christos /* If the return-type is "void", don't try to find the
2462 1.1 christos return-value's location. However, do still evaluate the
2463 1.1 christos return expression so that, even when the expression result
2464 1.1 christos is discarded, side effects such as "return i++" still
2465 1.1 christos occur. */
2466 1.1 christos return_value = NULL;
2467 1.1 christos else if (thisfun != NULL)
2468 1.1 christos {
2469 1.1 christos rv_conv = struct_return_convention (gdbarch, function, return_type);
2470 1.1 christos if (rv_conv == RETURN_VALUE_STRUCT_CONVENTION
2471 1.1 christos || rv_conv == RETURN_VALUE_ABI_RETURNS_ADDRESS)
2472 1.1 christos {
2473 1.1 christos query_prefix = "The location at which to store the "
2474 1.1 christos "function's return value is unknown.\n"
2475 1.1 christos "If you continue, the return value "
2476 1.1 christos "that you specified will be ignored.\n";
2477 1.1 christos return_value = NULL;
2478 1.1 christos }
2479 1.1 christos }
2480 1.1 christos }
2481 1.1 christos
2482 1.1 christos /* Does an interactive user really want to do this? Include
2483 1.1 christos information, such as how well GDB can handle the return value, in
2484 1.1 christos the query message. */
2485 1.1 christos if (from_tty)
2486 1.1 christos {
2487 1.1 christos int confirmed;
2488 1.1 christos
2489 1.1 christos if (thisfun == NULL)
2490 1.5 christos confirmed = query (_("%sMake selected stack frame return now? "),
2491 1.5 christos query_prefix);
2492 1.5 christos else
2493 1.5 christos {
2494 1.5 christos if (TYPE_NO_RETURN (thisfun->type))
2495 1.5 christos warning (_("Function does not return normally to caller."));
2496 1.1 christos confirmed = query (_("%sMake %s return now? "), query_prefix,
2497 1.1 christos SYMBOL_PRINT_NAME (thisfun));
2498 1.1 christos }
2499 1.1 christos if (!confirmed)
2500 1.1 christos error (_("Not confirmed"));
2501 1.1 christos }
2502 1.1 christos
2503 1.1 christos /* Discard the selected frame and all frames inner-to it. */
2504 1.1 christos frame_pop (get_selected_frame (NULL));
2505 1.1 christos
2506 1.1 christos /* Store RETURN_VALUE in the just-returned register set. */
2507 1.1 christos if (return_value != NULL)
2508 1.1 christos {
2509 1.1 christos struct type *return_type = value_type (return_value);
2510 1.1 christos struct gdbarch *gdbarch = get_regcache_arch (get_current_regcache ());
2511 1.1 christos
2512 1.1 christos gdb_assert (rv_conv != RETURN_VALUE_STRUCT_CONVENTION
2513 1.1 christos && rv_conv != RETURN_VALUE_ABI_RETURNS_ADDRESS);
2514 1.1 christos gdbarch_return_value (gdbarch, function, return_type,
2515 1.1 christos get_current_regcache (), NULL /*read*/,
2516 1.1 christos value_contents (return_value) /*write*/);
2517 1.1 christos }
2518 1.1 christos
2519 1.1 christos /* If we are at the end of a call dummy now, pop the dummy frame
2520 1.1 christos too. */
2521 1.6 christos if (get_frame_type (get_current_frame ()) == DUMMY_FRAME)
2522 1.1 christos frame_pop (get_current_frame ());
2523 1.1 christos
2524 1.6 christos select_frame (get_current_frame ());
2525 1.1 christos /* If interactive, print the frame that is now current. */
2526 1.1 christos if (from_tty)
2527 1.1 christos print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1);
2528 1.1 christos }
2529 1.1 christos
2530 1.1 christos /* Sets the scope to input function name, provided that the function
2531 1.1 christos is within the current stack frame. */
2532 1.1 christos
2533 1.1 christos struct function_bounds
2534 1.1 christos {
2535 1.1 christos CORE_ADDR low, high;
2536 1.1 christos };
2537 1.1 christos
2538 1.1 christos static void
2539 1.1 christos func_command (char *arg, int from_tty)
2540 1.1 christos {
2541 1.1 christos struct frame_info *frame;
2542 1.1 christos int found = 0;
2543 1.1 christos struct symtabs_and_lines sals;
2544 1.1 christos int i;
2545 1.1 christos int level = 1;
2546 1.6 christos struct function_bounds *func_bounds = NULL;
2547 1.1 christos struct cleanup *cleanups;
2548 1.1 christos
2549 1.6 christos if (arg == NULL)
2550 1.1 christos return;
2551 1.1 christos
2552 1.6 christos frame = get_current_frame ();
2553 1.1 christos sals = decode_line_with_current_source (arg, DECODE_LINE_FUNFIRSTLINE);
2554 1.1 christos cleanups = make_cleanup (xfree, sals.sals);
2555 1.1 christos func_bounds = XNEWVEC (struct function_bounds, sals.nelts);
2556 1.1 christos make_cleanup (xfree, func_bounds);
2557 1.1 christos for (i = 0; (i < sals.nelts && !found); i++)
2558 1.1 christos {
2559 1.1 christos if (sals.sals[i].pspace != current_program_space)
2560 1.1 christos func_bounds[i].low = func_bounds[i].high = 0;
2561 1.1 christos else if (sals.sals[i].pc == 0
2562 1.1 christos || find_pc_partial_function (sals.sals[i].pc, NULL,
2563 1.1 christos &func_bounds[i].low,
2564 1.1 christos &func_bounds[i].high) == 0)
2565 1.1 christos {
2566 1.1 christos func_bounds[i].low = func_bounds[i].high = 0;
2567 1.1 christos }
2568 1.1 christos }
2569 1.1 christos
2570 1.1 christos do
2571 1.1 christos {
2572 1.1 christos for (i = 0; (i < sals.nelts && !found); i++)
2573 1.1 christos found = (get_frame_pc (frame) >= func_bounds[i].low
2574 1.1 christos && get_frame_pc (frame) < func_bounds[i].high);
2575 1.1 christos if (!found)
2576 1.1 christos {
2577 1.1 christos level = 1;
2578 1.1 christos frame = find_relative_frame (frame, &level);
2579 1.1 christos }
2580 1.1 christos }
2581 1.1 christos while (!found && level == 0);
2582 1.1 christos
2583 1.1 christos do_cleanups (cleanups);
2584 1.1 christos
2585 1.1 christos if (!found)
2586 1.1 christos printf_filtered (_("'%s' not within current stack frame.\n"), arg);
2587 1.1 christos else if (frame != get_selected_frame (NULL))
2588 1.1 christos select_and_print_frame (frame);
2589 1.1 christos }
2590 1.1 christos
2591 1.1 christos
2593 1.1 christos /* Provide a prototype to silence -Wmissing-prototypes. */
2594 1.1 christos void _initialize_stack (void);
2595 1.1 christos
2596 1.1 christos void
2597 1.1 christos _initialize_stack (void)
2598 1.1 christos {
2599 1.1 christos add_com ("return", class_stack, return_command, _("\
2600 1.1 christos Make selected stack frame return to its caller.\n\
2601 1.1 christos Control remains in the debugger, but when you continue\n\
2602 1.1 christos execution will resume in the frame above the one now selected.\n\
2603 1.1 christos If an argument is given, it is an expression for the value to return."));
2604 1.1 christos
2605 1.1 christos add_com ("up", class_stack, up_command, _("\
2606 1.1 christos Select and print stack frame that called this one.\n\
2607 1.1 christos An argument says how many frames up to go."));
2608 1.1 christos add_com ("up-silently", class_support, up_silently_command, _("\
2609 1.1 christos Same as the `up' command, but does not print anything.\n\
2610 1.1 christos This is useful in command scripts."));
2611 1.1 christos
2612 1.1 christos add_com ("down", class_stack, down_command, _("\
2613 1.1 christos Select and print stack frame called by this one.\n\
2614 1.1 christos An argument says how many frames down to go."));
2615 1.1 christos add_com_alias ("do", "down", class_stack, 1);
2616 1.1 christos add_com_alias ("dow", "down", class_stack, 1);
2617 1.1 christos add_com ("down-silently", class_support, down_silently_command, _("\
2618 1.1 christos Same as the `down' command, but does not print anything.\n\
2619 1.1 christos This is useful in command scripts."));
2620 1.1 christos
2621 1.7 christos add_com ("frame", class_stack, frame_command, _("\
2622 1.1 christos Select and print a stack frame.\nWith no argument, \
2623 1.1 christos print the selected stack frame. (See also \"info frame\").\n\
2624 1.1 christos An argument specifies the frame to select.\n\
2625 1.6 christos It can be a stack frame number or the address of the frame.\n"));
2626 1.1 christos
2627 1.1 christos add_com_alias ("f", "frame", class_stack, 1);
2628 1.6 christos
2629 1.6 christos add_com_suppress_notification ("select-frame", class_stack, select_frame_command, _("\
2630 1.1 christos Select a stack frame without printing anything.\n\
2631 1.1 christos An argument specifies the frame to select.\n\
2632 1.1 christos It can be a stack frame number or the address of the frame.\n"),
2633 1.1 christos &cli_suppress_notification.user_selected_context);
2634 1.1 christos
2635 1.1 christos add_com ("backtrace", class_stack, backtrace_command, _("\
2636 1.1 christos Print backtrace of all stack frames, or innermost COUNT frames.\n\
2637 1.1 christos With a negative argument, print outermost -COUNT frames.\nUse of the \
2638 1.1 christos 'full' qualifier also prints the values of the local variables.\n\
2639 1.1 christos Use of the 'no-filters' qualifier prohibits frame filters from executing\n\
2640 1.1 christos on this backtrace.\n"));
2641 1.1 christos add_com_alias ("bt", "backtrace", class_stack, 0);
2642 1.1 christos
2643 1.1 christos add_com_alias ("where", "backtrace", class_alias, 0);
2644 1.1 christos add_info ("stack", backtrace_command,
2645 1.1 christos _("Backtrace of the stack, or innermost COUNT frames."));
2646 1.1 christos add_info_alias ("s", "stack", 1);
2647 1.1 christos add_info ("frame", frame_info,
2648 1.1 christos _("All about selected stack frame, or frame at ADDR."));
2649 1.1 christos add_info_alias ("f", "frame", 1);
2650 1.1 christos add_info ("locals", locals_info,
2651 1.1 christos _("Local variables of current stack frame."));
2652 1.1 christos add_info ("args", args_info,
2653 1.1 christos _("Argument variables of current stack frame."));
2654 1.1 christos
2655 1.1 christos if (dbx_commands)
2656 1.1 christos add_com ("func", class_stack, func_command, _("\
2657 1.1 christos Select the stack frame that contains <func>.\n\
2658 1.1 christos Usage: func <name>\n"));
2659 1.1 christos
2660 1.1 christos add_setshow_enum_cmd ("frame-arguments", class_stack,
2661 1.1 christos print_frame_arguments_choices, &print_frame_arguments,
2662 1.1 christos _("Set printing of non-scalar frame arguments"),
2663 1.1 christos _("Show printing of non-scalar frame arguments"),
2664 1.1 christos NULL, NULL, NULL, &setprintlist, &showprintlist);
2665 1.1 christos
2666 1.1 christos add_setshow_boolean_cmd ("frame-arguments", no_class,
2667 1.1 christos &print_raw_frame_arguments, _("\
2668 1.1 christos Set whether to print frame arguments in raw form."), _("\
2669 1.1 christos Show whether to print frame arguments in raw form."), _("\
2670 1.1 christos If set, frame arguments are printed in raw form, bypassing any\n\
2671 1.1 christos pretty-printers for that value."),
2672 1.1 christos NULL, NULL,
2673 1.1 christos &setprintrawlist, &showprintrawlist);
2674 1.1 christos
2675 1.1 christos add_setshow_auto_boolean_cmd ("disassemble-next-line", class_stack,
2676 1.1 christos &disassemble_next_line, _("\
2677 1.1 christos Set whether to disassemble next source line or insn when execution stops."),
2678 1.1 christos _("\
2679 1.1 christos Show whether to disassemble next source line or insn when execution stops."),
2680 1.1 christos _("\
2681 1.1 christos If ON, GDB will display disassembly of the next source line, in addition\n\
2682 1.1 christos to displaying the source line itself. If the next source line cannot\n\
2683 1.1 christos be displayed (e.g., source is unavailable or there's no line info), GDB\n\
2684 1.1 christos will display disassembly of next instruction instead of showing the\n\
2685 1.1 christos source line.\n\
2686 1.1 christos If AUTO, display disassembly of next instruction only if the source line\n\
2687 1.1 christos cannot be displayed.\n\
2688 1.1 christos If OFF (which is the default), never display the disassembly of the next\n\
2689 1.1 christos source line."),
2690 1.1 christos NULL,
2691 1.1 christos show_disassemble_next_line,
2692 1.1 christos &setlist, &showlist);
2693 1.1 christos disassemble_next_line = AUTO_BOOLEAN_FALSE;
2694 1.1 christos
2695 1.1 christos add_setshow_enum_cmd ("entry-values", class_stack,
2696 1.1 christos print_entry_values_choices, &print_entry_values,
2697 1.1 christos _("Set printing of function arguments at function "
2698 1.1 christos "entry"),
2699 1.1 christos _("Show printing of function arguments at function "
2700 1.1 christos "entry"),
2701 1.1 christos _("\
2702 1.1 christos GDB can sometimes determine the values of function arguments at entry,\n\
2703 1.1 christos in addition to their current values. This option tells GDB whether\n\
2704 to print the current value, the value at entry (marked as val@entry),\n\
2705 or both. Note that one or both of these values may be <optimized out>."),
2706 NULL, NULL, &setprintlist, &showprintlist);
2707 }
2708