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