stack.c revision 1.9 1 1.1 christos /* Print and select stack frames for GDB, the GNU debugger.
2 1.1 christos
3 1.9 christos Copyright (C) 1986-2020 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.9 christos #include "annotate.h"
51 1.1 christos
52 1.1 christos #include "symfile.h"
53 1.3 christos #include "extension.h"
54 1.8 christos #include "observable.h"
55 1.9 christos #include "gdbsupport/def-vector.h"
56 1.9 christos #include "cli/cli-option.h"
57 1.9 christos #include "cli/cli-style.h"
58 1.1 christos
59 1.1 christos /* The possible choices of "set print frame-arguments", and the value
60 1.1 christos of this setting. */
61 1.1 christos
62 1.9 christos const char print_frame_arguments_all[] = "all";
63 1.9 christos const char print_frame_arguments_scalars[] = "scalars";
64 1.9 christos const char print_frame_arguments_none[] = "none";
65 1.9 christos const char print_frame_arguments_presence[] = "presence";
66 1.9 christos
67 1.1 christos static const char *const print_frame_arguments_choices[] =
68 1.9 christos {
69 1.9 christos print_frame_arguments_all,
70 1.9 christos print_frame_arguments_scalars,
71 1.9 christos print_frame_arguments_none,
72 1.9 christos print_frame_arguments_presence,
73 1.9 christos NULL
74 1.9 christos };
75 1.9 christos
76 1.9 christos /* The possible choices of "set print frame-info", and the value
77 1.9 christos of this setting. */
78 1.9 christos
79 1.9 christos const char print_frame_info_auto[] = "auto";
80 1.9 christos const char print_frame_info_source_line[] = "source-line";
81 1.9 christos const char print_frame_info_location[] = "location";
82 1.9 christos const char print_frame_info_source_and_location[] = "source-and-location";
83 1.9 christos const char print_frame_info_location_and_address[] = "location-and-address";
84 1.9 christos const char print_frame_info_short_location[] = "short-location";
85 1.9 christos
86 1.9 christos static const char *const print_frame_info_choices[] =
87 1.9 christos {
88 1.9 christos print_frame_info_auto,
89 1.9 christos print_frame_info_source_line,
90 1.9 christos print_frame_info_location,
91 1.9 christos print_frame_info_source_and_location,
92 1.9 christos print_frame_info_location_and_address,
93 1.9 christos print_frame_info_short_location,
94 1.9 christos NULL
95 1.9 christos };
96 1.1 christos
97 1.9 christos /* print_frame_info_print_what[i] maps a choice to the corresponding
98 1.9 christos print_what enum. */
99 1.9 christos static const gdb::optional<enum print_what> print_frame_info_print_what[] =
100 1.9 christos {{}, /* Empty value for "auto". */
101 1.9 christos SRC_LINE, LOCATION, SRC_AND_LOC, LOC_AND_ADDRESS, SHORT_LOCATION};
102 1.1 christos
103 1.1 christos /* The possible choices of "set print entry-values", and the value
104 1.1 christos of this setting. */
105 1.1 christos
106 1.1 christos const char print_entry_values_no[] = "no";
107 1.1 christos const char print_entry_values_only[] = "only";
108 1.1 christos const char print_entry_values_preferred[] = "preferred";
109 1.1 christos const char print_entry_values_if_needed[] = "if-needed";
110 1.1 christos const char print_entry_values_both[] = "both";
111 1.1 christos const char print_entry_values_compact[] = "compact";
112 1.1 christos const char print_entry_values_default[] = "default";
113 1.1 christos static const char *const print_entry_values_choices[] =
114 1.1 christos {
115 1.1 christos print_entry_values_no,
116 1.1 christos print_entry_values_only,
117 1.1 christos print_entry_values_preferred,
118 1.1 christos print_entry_values_if_needed,
119 1.1 christos print_entry_values_both,
120 1.1 christos print_entry_values_compact,
121 1.1 christos print_entry_values_default,
122 1.1 christos NULL
123 1.1 christos };
124 1.9 christos
125 1.9 christos /* See frame.h. */
126 1.9 christos frame_print_options user_frame_print_options;
127 1.9 christos
128 1.9 christos /* Option definitions for some frame-related "set print ..."
129 1.9 christos settings. */
130 1.9 christos
131 1.9 christos using boolean_option_def
132 1.9 christos = gdb::option::boolean_option_def<frame_print_options>;
133 1.9 christos using enum_option_def
134 1.9 christos = gdb::option::enum_option_def<frame_print_options>;
135 1.9 christos
136 1.9 christos static const gdb::option::option_def frame_print_option_defs[] = {
137 1.9 christos
138 1.9 christos enum_option_def {
139 1.9 christos "entry-values",
140 1.9 christos print_entry_values_choices,
141 1.9 christos [] (frame_print_options *opt) { return &opt->print_entry_values; },
142 1.9 christos NULL, /* show_cmd_cb */
143 1.9 christos N_("Set printing of function arguments at function entry."),
144 1.9 christos N_("Show printing of function arguments at function entry."),
145 1.9 christos N_("GDB can sometimes determine the values of function arguments at entry,\n\
146 1.9 christos in addition to their current values. This option tells GDB whether\n\
147 1.9 christos to print the current value, the value at entry (marked as val@entry),\n\
148 1.9 christos or both. Note that one or both of these values may be <optimized out>."),
149 1.9 christos },
150 1.9 christos
151 1.9 christos enum_option_def {
152 1.9 christos "frame-arguments",
153 1.9 christos print_frame_arguments_choices,
154 1.9 christos [] (frame_print_options *opt) { return &opt->print_frame_arguments; },
155 1.9 christos NULL, /* show_cmd_cb */
156 1.9 christos N_("Set printing of non-scalar frame arguments."),
157 1.9 christos N_("Show printing of non-scalar frame arguments."),
158 1.9 christos NULL /* help_doc */
159 1.9 christos },
160 1.9 christos
161 1.9 christos boolean_option_def {
162 1.9 christos "raw-frame-arguments",
163 1.9 christos [] (frame_print_options *opt) { return &opt->print_raw_frame_arguments; },
164 1.9 christos NULL, /* show_cmd_cb */
165 1.9 christos N_("Set whether to print frame arguments in raw form."),
166 1.9 christos N_("Show whether to print frame arguments in raw form."),
167 1.9 christos N_("If set, frame arguments are printed in raw form, bypassing any\n\
168 1.9 christos pretty-printers for that value.")
169 1.9 christos },
170 1.9 christos
171 1.9 christos enum_option_def {
172 1.9 christos "frame-info",
173 1.9 christos print_frame_info_choices,
174 1.9 christos [] (frame_print_options *opt) { return &opt->print_frame_info; },
175 1.9 christos NULL, /* show_cmd_cb */
176 1.9 christos N_("Set printing of frame information."),
177 1.9 christos N_("Show printing of frame information."),
178 1.9 christos NULL /* help_doc */
179 1.9 christos }
180 1.9 christos
181 1.9 christos };
182 1.9 christos
183 1.9 christos /* Options for the "backtrace" command. */
184 1.9 christos
185 1.9 christos struct backtrace_cmd_options
186 1.9 christos {
187 1.9 christos bool full = false;
188 1.9 christos bool no_filters = false;
189 1.9 christos bool hide = false;
190 1.9 christos };
191 1.9 christos
192 1.9 christos using bt_flag_option_def
193 1.9 christos = gdb::option::flag_option_def<backtrace_cmd_options>;
194 1.9 christos
195 1.9 christos static const gdb::option::option_def backtrace_command_option_defs[] = {
196 1.9 christos bt_flag_option_def {
197 1.9 christos "full",
198 1.9 christos [] (backtrace_cmd_options *opt) { return &opt->full; },
199 1.9 christos N_("Print values of local variables.")
200 1.9 christos },
201 1.9 christos
202 1.9 christos bt_flag_option_def {
203 1.9 christos "no-filters",
204 1.9 christos [] (backtrace_cmd_options *opt) { return &opt->no_filters; },
205 1.9 christos N_("Prohibit frame filters from executing on a backtrace."),
206 1.9 christos },
207 1.9 christos
208 1.9 christos bt_flag_option_def {
209 1.9 christos "hide",
210 1.9 christos [] (backtrace_cmd_options *opt) { return &opt->hide; },
211 1.9 christos N_("Causes Python frame filter elided frames to not be printed."),
212 1.9 christos },
213 1.9 christos };
214 1.1 christos
215 1.1 christos /* Prototypes for local functions. */
216 1.1 christos
217 1.8 christos static void print_frame_local_vars (struct frame_info *frame,
218 1.8 christos bool quiet,
219 1.8 christos const char *regexp, const char *t_regexp,
220 1.8 christos int num_tabs, struct ui_file *stream);
221 1.1 christos
222 1.9 christos static void print_frame (const frame_print_options &opts,
223 1.9 christos frame_info *frame, int print_level,
224 1.1 christos enum print_what print_what, int print_args,
225 1.1 christos struct symtab_and_line sal);
226 1.1 christos
227 1.8 christos static struct frame_info *find_frame_for_function (const char *);
228 1.8 christos static struct frame_info *find_frame_for_address (CORE_ADDR);
229 1.8 christos
230 1.1 christos /* Zero means do things normally; we are interacting directly with the
231 1.1 christos user. One means print the full filename and linenumber when a
232 1.1 christos frame is printed, and do so in a format emacs18/emacs19.22 can
233 1.1 christos parse. Two means print similar annotations, but in many more
234 1.1 christos cases and in a slightly different syntax. */
235 1.1 christos
236 1.1 christos int annotation_level = 0;
237 1.1 christos
238 1.9 christos /* Class used to manage tracking the last symtab we displayed. */
239 1.9 christos
240 1.9 christos class last_displayed_symtab_info_type
241 1.9 christos {
242 1.9 christos public:
243 1.9 christos /* True if the cached information is valid. */
244 1.9 christos bool is_valid () const
245 1.9 christos { return m_valid; }
246 1.9 christos
247 1.9 christos /* Return the cached program_space. If the cache is invalid nullptr is
248 1.9 christos returned. */
249 1.9 christos struct program_space *pspace () const
250 1.9 christos { return m_pspace; }
251 1.9 christos
252 1.9 christos /* Return the cached CORE_ADDR address. If the cache is invalid 0 is
253 1.9 christos returned. */
254 1.9 christos CORE_ADDR address () const
255 1.9 christos { return m_address; }
256 1.9 christos
257 1.9 christos /* Return the cached symtab. If the cache is invalid nullptr is
258 1.9 christos returned. */
259 1.9 christos struct symtab *symtab () const
260 1.9 christos { return m_symtab; }
261 1.9 christos
262 1.9 christos /* Return the cached line number. If the cache is invalid 0 is
263 1.9 christos returned. */
264 1.9 christos int line () const
265 1.9 christos { return m_line; }
266 1.9 christos
267 1.9 christos /* Invalidate the cache, reset all the members to their default value. */
268 1.9 christos void invalidate ()
269 1.9 christos {
270 1.9 christos m_valid = false;
271 1.9 christos m_pspace = nullptr;
272 1.9 christos m_address = 0;
273 1.9 christos m_symtab = nullptr;
274 1.9 christos m_line = 0;
275 1.9 christos }
276 1.9 christos
277 1.9 christos /* Store a new set of values in the cache. */
278 1.9 christos void set (struct program_space *pspace, CORE_ADDR address,
279 1.9 christos struct symtab *symtab, int line)
280 1.9 christos {
281 1.9 christos gdb_assert (pspace != nullptr);
282 1.9 christos
283 1.9 christos m_valid = true;
284 1.9 christos m_pspace = pspace;
285 1.9 christos m_address = address;
286 1.9 christos m_symtab = symtab;
287 1.9 christos m_line = line;
288 1.9 christos }
289 1.9 christos
290 1.9 christos private:
291 1.9 christos /* True when the cache is valid. */
292 1.9 christos bool m_valid = false;
293 1.9 christos
294 1.9 christos /* The last program space displayed. */
295 1.9 christos struct program_space *m_pspace = nullptr;
296 1.9 christos
297 1.9 christos /* The last address displayed. */
298 1.9 christos CORE_ADDR m_address = 0;
299 1.9 christos
300 1.9 christos /* The last symtab displayed. */
301 1.9 christos struct symtab *m_symtab = nullptr;
302 1.9 christos
303 1.9 christos /* The last line number displayed. */
304 1.9 christos int m_line = 0;
305 1.9 christos };
306 1.9 christos
307 1.9 christos /* An actual instance of the cache, holds information about the last symtab
308 1.9 christos displayed. */
309 1.9 christos static last_displayed_symtab_info_type last_displayed_symtab_info;
310 1.9 christos
311 1.1 christos
312 1.1 christos
314 1.1 christos /* See stack.h. */
315 1.9 christos
316 1.1 christos bool
317 1.1 christos frame_show_address (struct frame_info *frame,
318 1.1 christos struct symtab_and_line sal)
319 1.1 christos {
320 1.1 christos /* If there is a line number, but no PC, then there is no location
321 1.1 christos information associated with this sal. The only way that should
322 1.1 christos happen is for the call sites of inlined functions (SAL comes from
323 1.1 christos find_frame_sal). Otherwise, we would have some PC range if the
324 1.1 christos SAL came from a line table. */
325 1.1 christos if (sal.line != 0 && sal.pc == 0 && sal.end == 0)
326 1.1 christos {
327 1.8 christos if (get_next_frame (frame) == NULL)
328 1.1 christos gdb_assert (inline_skipped_frames (inferior_thread ()) > 0);
329 1.1 christos else
330 1.9 christos gdb_assert (get_frame_type (get_next_frame (frame)) == INLINE_FRAME);
331 1.1 christos return false;
332 1.1 christos }
333 1.9 christos
334 1.1 christos return get_frame_pc (frame) != sal.pc || !sal.is_stmt;
335 1.1 christos }
336 1.6 christos
337 1.6 christos /* See frame.h. */
338 1.6 christos
339 1.6 christos void
340 1.6 christos print_stack_frame_to_uiout (struct ui_out *uiout, struct frame_info *frame,
341 1.6 christos int print_level, enum print_what print_what,
342 1.6 christos int set_current_sal)
343 1.7 christos {
344 1.6 christos scoped_restore save_uiout = make_scoped_restore (¤t_uiout, uiout);
345 1.6 christos
346 1.6 christos print_stack_frame (frame, print_level, print_what, set_current_sal);
347 1.6 christos }
348 1.6 christos
349 1.1 christos /* Show or print a stack frame FRAME briefly. The output is formatted
350 1.1 christos according to PRINT_LEVEL and PRINT_WHAT printing the frame's
351 1.1 christos relative level, function name, argument list, and file name and
352 1.1 christos line number. If the frame's PC is not at the beginning of the
353 1.1 christos source line, the actual PC is printed at the beginning. */
354 1.1 christos
355 1.1 christos void
356 1.1 christos print_stack_frame (struct frame_info *frame, int print_level,
357 1.1 christos enum print_what print_what,
358 1.1 christos int set_current_sal)
359 1.1 christos {
360 1.9 christos
361 1.7 christos /* For mi, always print location and address. */
362 1.1 christos if (current_uiout->is_mi_like_p ())
363 1.1 christos print_what = LOC_AND_ADDRESS;
364 1.9 christos
365 1.1 christos try
366 1.9 christos {
367 1.9 christos print_frame_info (user_frame_print_options,
368 1.1 christos frame, print_level, print_what, 1 /* print_args */,
369 1.1 christos set_current_sal);
370 1.3 christos if (set_current_sal)
371 1.1 christos set_current_sal_from_frame (frame);
372 1.9 christos }
373 1.5 christos catch (const gdb_exception_error &e)
374 1.5 christos {
375 1.1 christos }
376 1.1 christos }
377 1.1 christos
378 1.1 christos /* Print nameless arguments of frame FRAME on STREAM, where START is
379 1.1 christos the offset of the first nameless argument, and NUM is the number of
380 1.1 christos nameless arguments to print. FIRST is nonzero if this is the first
381 1.1 christos argument (not just the first nameless argument). */
382 1.1 christos
383 1.1 christos static void
384 1.1 christos print_frame_nameless_args (struct frame_info *frame, long start, int num,
385 1.1 christos int first, struct ui_file *stream)
386 1.1 christos {
387 1.1 christos struct gdbarch *gdbarch = get_frame_arch (frame);
388 1.1 christos enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
389 1.1 christos int i;
390 1.1 christos CORE_ADDR argsaddr;
391 1.1 christos long arg_value;
392 1.1 christos
393 1.1 christos for (i = 0; i < num; i++)
394 1.1 christos {
395 1.1 christos QUIT;
396 1.1 christos argsaddr = get_frame_args_address (frame);
397 1.1 christos if (!argsaddr)
398 1.1 christos return;
399 1.1 christos arg_value = read_memory_integer (argsaddr + start,
400 1.1 christos sizeof (int), byte_order);
401 1.1 christos if (!first)
402 1.1 christos fprintf_filtered (stream, ", ");
403 1.1 christos fprintf_filtered (stream, "%ld", arg_value);
404 1.1 christos first = 0;
405 1.1 christos start += sizeof (int);
406 1.1 christos }
407 1.1 christos }
408 1.1 christos
409 1.1 christos /* Print single argument of inferior function. ARG must be already
410 1.1 christos read in.
411 1.1 christos
412 1.9 christos Errors are printed as if they would be the parameter value. Use zeroed ARG
413 1.1 christos iff it should not be printed according to user settings. */
414 1.1 christos
415 1.9 christos static void
416 1.9 christos print_frame_arg (const frame_print_options &fp_opts,
417 1.1 christos const struct frame_arg *arg)
418 1.1 christos {
419 1.1 christos struct ui_out *uiout = current_uiout;
420 1.7 christos
421 1.1 christos string_file stb;
422 1.1 christos
423 1.1 christos gdb_assert (!arg->val || !arg->error);
424 1.1 christos gdb_assert (arg->entry_kind == print_entry_values_no
425 1.7 christos || arg->entry_kind == print_entry_values_only
426 1.1 christos || (!uiout->is_mi_like_p ()
427 1.1 christos && arg->entry_kind == print_entry_values_compact));
428 1.8 christos
429 1.8 christos annotate_arg_emitter arg_emitter;
430 1.9 christos ui_out_emit_tuple tuple_emitter (uiout, NULL);
431 1.9 christos fprintf_symbol_filtered (&stb, arg->sym->print_name (),
432 1.1 christos arg->sym->language (), DMGL_PARAMS | DMGL_ANSI);
433 1.1 christos if (arg->entry_kind == print_entry_values_compact)
434 1.1 christos {
435 1.1 christos /* It is OK to provide invalid MI-like stream as with
436 1.7 christos PRINT_ENTRY_VALUE_COMPACT we never use MI. */
437 1.1 christos stb.puts ("=");
438 1.9 christos
439 1.9 christos fprintf_symbol_filtered (&stb, arg->sym->print_name (),
440 1.1 christos arg->sym->language (),
441 1.1 christos DMGL_PARAMS | DMGL_ANSI);
442 1.1 christos }
443 1.1 christos if (arg->entry_kind == print_entry_values_only
444 1.7 christos || arg->entry_kind == print_entry_values_compact)
445 1.9 christos stb.puts ("@entry");
446 1.1 christos uiout->field_stream ("name", stb, variable_name_style.style ());
447 1.7 christos annotate_arg_name_end ();
448 1.1 christos uiout->text ("=");
449 1.9 christos
450 1.1 christos ui_file_style style;
451 1.7 christos if (!arg->val && !arg->error)
452 1.1 christos uiout->text ("...");
453 1.1 christos else
454 1.1 christos {
455 1.9 christos if (arg->error)
456 1.9 christos {
457 1.9 christos stb.printf (_("<error reading variable: %s>"), arg->error.get ());
458 1.9 christos style = metadata_style.style ();
459 1.1 christos }
460 1.1 christos else
461 1.9 christos {
462 1.1 christos try
463 1.1 christos {
464 1.9 christos const struct language_defn *language;
465 1.1 christos struct value_print_options vp_opts;
466 1.1 christos
467 1.1 christos /* Avoid value_print because it will deref ref parameters. We
468 1.1 christos just want to print their addresses. Print ??? for args whose
469 1.1 christos address we do not know. We pass 2 as "recurse" to val_print
470 1.1 christos because our standard indentation here is 4 spaces, and
471 1.1 christos val_print indents 2 for each recurse. */
472 1.1 christos
473 1.1 christos annotate_arg_value (value_type (arg->val));
474 1.1 christos
475 1.1 christos /* Use the appropriate language to display our symbol, unless the
476 1.1 christos user forced the language to a specific language. */
477 1.9 christos if (language_mode == language_mode_auto)
478 1.1 christos language = language_def (arg->sym->language ());
479 1.1 christos else
480 1.1 christos language = current_language;
481 1.9 christos
482 1.9 christos get_no_prettyformat_print_options (&vp_opts);
483 1.9 christos vp_opts.deref_ref = 1;
484 1.1 christos vp_opts.raw = fp_opts.print_raw_frame_arguments;
485 1.1 christos
486 1.9 christos /* True in "summary" mode, false otherwise. */
487 1.9 christos vp_opts.summary
488 1.1 christos = fp_opts.print_frame_arguments == print_frame_arguments_scalars;
489 1.9 christos
490 1.1 christos common_val_print_checked (arg->val, &stb, 2, &vp_opts, language);
491 1.9 christos }
492 1.5 christos catch (const gdb_exception_error &except)
493 1.9 christos {
494 1.9 christos stb.printf (_("<error reading variable: %s>"),
495 1.9 christos except.what ());
496 1.5 christos style = metadata_style.style ();
497 1.1 christos }
498 1.1 christos }
499 1.1 christos }
500 1.9 christos
501 1.1 christos uiout->field_stream ("value", stb, style);
502 1.1 christos }
503 1.1 christos
504 1.1 christos /* Read in inferior function local SYM at FRAME into ARGP. Caller is
505 1.1 christos responsible for xfree of ARGP->ERROR. This function never throws an
506 1.1 christos exception. */
507 1.1 christos
508 1.1 christos void
509 1.1 christos read_frame_local (struct symbol *sym, struct frame_info *frame,
510 1.1 christos struct frame_arg *argp)
511 1.5 christos {
512 1.5 christos argp->sym = sym;
513 1.5 christos argp->val = NULL;
514 1.5 christos argp->error = NULL;
515 1.9 christos
516 1.5 christos try
517 1.6 christos {
518 1.5 christos argp->val = read_var_value (sym, NULL, frame);
519 1.9 christos }
520 1.1 christos catch (const gdb_exception_error &except)
521 1.9 christos {
522 1.1 christos argp->error.reset (xstrdup (except.what ()));
523 1.1 christos }
524 1.1 christos }
525 1.9 christos
526 1.9 christos /* Read in inferior function parameter SYM at FRAME into ARGP. This
527 1.1 christos function never throws an exception. */
528 1.1 christos
529 1.9 christos void
530 1.9 christos read_frame_arg (const frame_print_options &fp_opts,
531 1.1 christos symbol *sym, frame_info *frame,
532 1.1 christos struct frame_arg *argp, struct frame_arg *entryargp)
533 1.1 christos {
534 1.1 christos struct value *val = NULL, *entryval = NULL;
535 1.1 christos char *val_error = NULL, *entryval_error = NULL;
536 1.1 christos int val_equal = 0;
537 1.9 christos
538 1.9 christos if (fp_opts.print_entry_values != print_entry_values_only
539 1.1 christos && fp_opts.print_entry_values != print_entry_values_preferred)
540 1.9 christos {
541 1.1 christos try
542 1.6 christos {
543 1.1 christos val = read_var_value (sym, NULL, frame);
544 1.9 christos }
545 1.1 christos catch (const gdb_exception_error &except)
546 1.9 christos {
547 1.9 christos val_error = (char *) alloca (except.message->size () + 1);
548 1.1 christos strcpy (val_error, except.what ());
549 1.1 christos }
550 1.1 christos }
551 1.1 christos
552 1.1 christos if (SYMBOL_COMPUTED_OPS (sym) != NULL
553 1.9 christos && SYMBOL_COMPUTED_OPS (sym)->read_variable_at_entry != NULL
554 1.9 christos && fp_opts.print_entry_values != print_entry_values_no
555 1.1 christos && (fp_opts.print_entry_values != print_entry_values_if_needed
556 1.1 christos || !val || value_optimized_out (val)))
557 1.9 christos {
558 1.1 christos try
559 1.1 christos {
560 1.1 christos const struct symbol_computed_ops *ops;
561 1.1 christos
562 1.1 christos ops = SYMBOL_COMPUTED_OPS (sym);
563 1.1 christos entryval = ops->read_variable_at_entry (sym, frame);
564 1.9 christos }
565 1.1 christos catch (const gdb_exception_error &except)
566 1.5 christos {
567 1.5 christos if (except.error != NO_ENTRY_VALUE_ERROR)
568 1.9 christos {
569 1.9 christos entryval_error = (char *) alloca (except.message->size () + 1);
570 1.5 christos strcpy (entryval_error, except.what ());
571 1.1 christos }
572 1.1 christos }
573 1.5 christos
574 1.5 christos if (entryval != NULL && value_optimized_out (entryval))
575 1.1 christos entryval = NULL;
576 1.9 christos
577 1.9 christos if (fp_opts.print_entry_values == print_entry_values_compact
578 1.1 christos || fp_opts.print_entry_values == print_entry_values_default)
579 1.1 christos {
580 1.1 christos /* For MI do not try to use print_entry_values_compact for ARGP. */
581 1.7 christos
582 1.1 christos if (val && entryval && !current_uiout->is_mi_like_p ())
583 1.1 christos {
584 1.1 christos struct type *type = value_type (val);
585 1.3 christos
586 1.3 christos if (value_lazy (val))
587 1.3 christos value_fetch_lazy (val);
588 1.3 christos if (value_lazy (entryval))
589 1.3 christos value_fetch_lazy (entryval);
590 1.3 christos
591 1.1 christos if (value_contents_eq (val, 0, entryval, 0, TYPE_LENGTH (type)))
592 1.1 christos {
593 1.1 christos /* Initialize it just to avoid a GCC false warning. */
594 1.1 christos struct value *val_deref = NULL, *entryval_deref;
595 1.7 christos
596 1.1 christos /* DW_AT_call_value does match with the current
597 1.7 christos value. If it is a reference still try to verify if
598 1.1 christos dereferenced DW_AT_call_data_value does not differ. */
599 1.9 christos
600 1.1 christos try
601 1.1 christos {
602 1.1 christos struct type *type_deref;
603 1.1 christos
604 1.1 christos val_deref = coerce_ref (val);
605 1.1 christos if (value_lazy (val_deref))
606 1.1 christos value_fetch_lazy (val_deref);
607 1.1 christos type_deref = value_type (val_deref);
608 1.1 christos
609 1.1 christos entryval_deref = coerce_ref (entryval);
610 1.1 christos if (value_lazy (entryval_deref))
611 1.1 christos value_fetch_lazy (entryval_deref);
612 1.1 christos
613 1.1 christos /* If the reference addresses match but dereferenced
614 1.1 christos content does not match print them. */
615 1.3 christos if (val != val_deref
616 1.3 christos && value_contents_eq (val_deref, 0,
617 1.3 christos entryval_deref, 0,
618 1.1 christos TYPE_LENGTH (type_deref)))
619 1.1 christos val_equal = 1;
620 1.9 christos }
621 1.5 christos catch (const gdb_exception_error &except)
622 1.5 christos {
623 1.5 christos /* If the dereferenced content could not be
624 1.5 christos fetched do not display anything. */
625 1.5 christos if (except.error == NO_ENTRY_VALUE_ERROR)
626 1.5 christos val_equal = 1;
627 1.5 christos else if (except.message != NULL)
628 1.9 christos {
629 1.9 christos entryval_error
630 1.9 christos = (char *) alloca (except.message->size () + 1);
631 1.5 christos strcpy (entryval_error, except.what ());
632 1.5 christos }
633 1.1 christos }
634 1.1 christos
635 1.1 christos /* Value was not a reference; and its content matches. */
636 1.1 christos if (val == val_deref)
637 1.1 christos val_equal = 1;
638 1.1 christos
639 1.1 christos if (val_equal)
640 1.1 christos entryval = NULL;
641 1.1 christos }
642 1.1 christos }
643 1.1 christos
644 1.1 christos /* Try to remove possibly duplicate error message for ENTRYARGP even
645 1.1 christos in MI mode. */
646 1.1 christos
647 1.1 christos if (val_error && entryval_error
648 1.1 christos && strcmp (val_error, entryval_error) == 0)
649 1.1 christos {
650 1.1 christos entryval_error = NULL;
651 1.1 christos
652 1.1 christos /* Do not se VAL_EQUAL as the same error message may be shown for
653 1.1 christos the entry value even if no entry values are present in the
654 1.1 christos inferior. */
655 1.1 christos }
656 1.1 christos }
657 1.1 christos }
658 1.1 christos
659 1.1 christos if (entryval == NULL)
660 1.9 christos {
661 1.1 christos if (fp_opts.print_entry_values == print_entry_values_preferred)
662 1.5 christos {
663 1.5 christos gdb_assert (val == NULL);
664 1.9 christos
665 1.1 christos try
666 1.6 christos {
667 1.1 christos val = read_var_value (sym, NULL, frame);
668 1.9 christos }
669 1.1 christos catch (const gdb_exception_error &except)
670 1.9 christos {
671 1.9 christos val_error = (char *) alloca (except.message->size () + 1);
672 1.1 christos strcpy (val_error, except.what ());
673 1.1 christos }
674 1.9 christos }
675 1.9 christos if (fp_opts.print_entry_values == print_entry_values_only
676 1.9 christos || fp_opts.print_entry_values == print_entry_values_both
677 1.1 christos || (fp_opts.print_entry_values == print_entry_values_preferred
678 1.1 christos && (!val || value_optimized_out (val))))
679 1.1 christos {
680 1.1 christos entryval = allocate_optimized_out_value (SYMBOL_TYPE (sym));
681 1.1 christos entryval_error = NULL;
682 1.1 christos }
683 1.9 christos }
684 1.9 christos if ((fp_opts.print_entry_values == print_entry_values_compact
685 1.9 christos || fp_opts.print_entry_values == print_entry_values_if_needed
686 1.1 christos || fp_opts.print_entry_values == print_entry_values_preferred)
687 1.1 christos && (!val || value_optimized_out (val)) && entryval != NULL)
688 1.1 christos {
689 1.1 christos val = NULL;
690 1.1 christos val_error = NULL;
691 1.1 christos }
692 1.1 christos
693 1.1 christos argp->sym = sym;
694 1.9 christos argp->val = val;
695 1.1 christos argp->error.reset (val_error ? xstrdup (val_error) : NULL);
696 1.1 christos if (!val && !val_error)
697 1.9 christos argp->entry_kind = print_entry_values_only;
698 1.9 christos else if ((fp_opts.print_entry_values == print_entry_values_compact
699 1.9 christos || fp_opts.print_entry_values == print_entry_values_default)
700 1.1 christos && val_equal)
701 1.1 christos {
702 1.7 christos argp->entry_kind = print_entry_values_compact;
703 1.1 christos gdb_assert (!current_uiout->is_mi_like_p ());
704 1.1 christos }
705 1.1 christos else
706 1.1 christos argp->entry_kind = print_entry_values_no;
707 1.1 christos
708 1.1 christos entryargp->sym = sym;
709 1.9 christos entryargp->val = entryval;
710 1.1 christos entryargp->error.reset (entryval_error ? xstrdup (entryval_error) : NULL);
711 1.1 christos if (!entryval && !entryval_error)
712 1.1 christos entryargp->entry_kind = print_entry_values_no;
713 1.1 christos else
714 1.1 christos entryargp->entry_kind = print_entry_values_only;
715 1.1 christos }
716 1.1 christos
717 1.1 christos /* Print the arguments of frame FRAME on STREAM, given the function
718 1.1 christos FUNC running in that frame (as a symbol), where NUM is the number
719 1.1 christos of arguments according to the stack frame (or -1 if the number of
720 1.1 christos arguments is unknown). */
721 1.1 christos
722 1.1 christos /* Note that currently the "number of arguments according to the
723 1.1 christos stack frame" is only known on VAX where i refers to the "number of
724 1.1 christos ints of arguments according to the stack frame". */
725 1.1 christos
726 1.9 christos static void
727 1.9 christos print_frame_args (const frame_print_options &fp_opts,
728 1.1 christos struct symbol *func, struct frame_info *frame,
729 1.1 christos int num, struct ui_file *stream)
730 1.1 christos {
731 1.1 christos struct ui_out *uiout = current_uiout;
732 1.1 christos int first = 1;
733 1.1 christos /* Offset of next stack argument beyond the one we have seen that is
734 1.1 christos at the highest offset, or -1 if we haven't come to a stack
735 1.1 christos argument yet. */
736 1.1 christos long highest_offset = -1;
737 1.1 christos /* Number of ints of arguments that we have printed so far. */
738 1.9 christos int args_printed = 0;
739 1.9 christos /* True if we should print arg names. If false, we only indicate
740 1.9 christos the presence of arguments by printing ellipsis. */
741 1.9 christos bool print_names
742 1.1 christos = fp_opts.print_frame_arguments != print_frame_arguments_presence;
743 1.9 christos /* True if we should print arguments, false otherwise. */
744 1.9 christos bool print_args
745 1.9 christos = (print_names
746 1.9 christos && fp_opts.print_frame_arguments != print_frame_arguments_none);
747 1.9 christos
748 1.9 christos /* Temporarily change the selected frame to the given FRAME.
749 1.9 christos This allows routines that rely on the selected frame instead
750 1.9 christos of being given a frame as parameter to use the correct frame. */
751 1.9 christos scoped_restore_selected_frame restore_selected_frame;
752 1.1 christos select_frame (frame);
753 1.1 christos
754 1.1 christos if (func)
755 1.3 christos {
756 1.1 christos const struct block *b = SYMBOL_BLOCK_VALUE (func);
757 1.1 christos struct block_iterator iter;
758 1.1 christos struct symbol *sym;
759 1.1 christos
760 1.1 christos ALL_BLOCK_SYMBOLS (b, iter, sym)
761 1.1 christos {
762 1.1 christos struct frame_arg arg, entryarg;
763 1.1 christos
764 1.1 christos QUIT;
765 1.1 christos
766 1.1 christos /* Keep track of the highest stack argument offset seen, and
767 1.1 christos skip over any kinds of symbols we don't care about. */
768 1.1 christos
769 1.1 christos if (!SYMBOL_IS_ARGUMENT (sym))
770 1.1 christos continue;
771 1.9 christos
772 1.9 christos if (!print_names)
773 1.9 christos {
774 1.9 christos uiout->text ("...");
775 1.9 christos first = 0;
776 1.9 christos break;
777 1.9 christos }
778 1.1 christos
779 1.1 christos switch (SYMBOL_CLASS (sym))
780 1.1 christos {
781 1.1 christos case LOC_ARG:
782 1.1 christos case LOC_REF_ARG:
783 1.1 christos {
784 1.1 christos long current_offset = SYMBOL_VALUE (sym);
785 1.1 christos int arg_size = TYPE_LENGTH (SYMBOL_TYPE (sym));
786 1.1 christos
787 1.1 christos /* Compute address of next argument by adding the size of
788 1.1 christos this argument and rounding to an int boundary. */
789 1.1 christos current_offset =
790 1.1 christos ((current_offset + arg_size + sizeof (int) - 1)
791 1.1 christos & ~(sizeof (int) - 1));
792 1.1 christos
793 1.1 christos /* If this is the highest offset seen yet, set
794 1.1 christos highest_offset. */
795 1.1 christos if (highest_offset == -1
796 1.1 christos || (current_offset > highest_offset))
797 1.1 christos highest_offset = current_offset;
798 1.1 christos
799 1.1 christos /* Add the number of ints we're about to print to
800 1.1 christos args_printed. */
801 1.1 christos args_printed += (arg_size + sizeof (int) - 1) / sizeof (int);
802 1.1 christos }
803 1.1 christos
804 1.1 christos /* We care about types of symbols, but don't need to
805 1.1 christos keep track of stack offsets in them. */
806 1.1 christos case LOC_REGISTER:
807 1.1 christos case LOC_REGPARM_ADDR:
808 1.1 christos case LOC_COMPUTED:
809 1.1 christos case LOC_OPTIMIZED_OUT:
810 1.1 christos default:
811 1.1 christos break;
812 1.1 christos }
813 1.1 christos
814 1.1 christos /* We have to look up the symbol because arguments can have
815 1.1 christos two entries (one a parameter, one a local) and the one we
816 1.1 christos want is the local, which lookup_symbol will find for us.
817 1.1 christos This includes gcc1 (not gcc2) on SPARC when passing a
818 1.1 christos small structure and gcc2 when the argument type is float
819 1.1 christos and it is passed as a double and converted to float by
820 1.1 christos the prologue (in the latter case the type of the LOC_ARG
821 1.1 christos symbol is double and the type of the LOC_LOCAL symbol is
822 1.1 christos float). */
823 1.1 christos /* But if the parameter name is null, don't try it. Null
824 1.1 christos parameter names occur on the RS/6000, for traceback
825 1.1 christos tables. FIXME, should we even print them? */
826 1.9 christos
827 1.1 christos if (*sym->linkage_name ())
828 1.1 christos {
829 1.1 christos struct symbol *nsym;
830 1.9 christos
831 1.8 christos nsym = lookup_symbol_search_name (sym->search_name (),
832 1.1 christos b, VAR_DOMAIN).symbol;
833 1.1 christos gdb_assert (nsym != NULL);
834 1.1 christos if (SYMBOL_CLASS (nsym) == LOC_REGISTER
835 1.1 christos && !SYMBOL_IS_ARGUMENT (nsym))
836 1.1 christos {
837 1.1 christos /* There is a LOC_ARG/LOC_REGISTER pair. This means
838 1.1 christos that it was passed on the stack and loaded into a
839 1.1 christos register, or passed in a register and stored in a
840 1.1 christos stack slot. GDB 3.x used the LOC_ARG; GDB
841 1.1 christos 4.0-4.11 used the LOC_REGISTER.
842 1.1 christos
843 1.1 christos Reasons for using the LOC_ARG:
844 1.1 christos
845 1.1 christos (1) Because find_saved_registers may be slow for
846 1.1 christos remote debugging.
847 1.1 christos
848 1.1 christos (2) Because registers are often re-used and stack
849 1.1 christos slots rarely (never?) are. Therefore using
850 1.1 christos the stack slot is much less likely to print
851 1.1 christos garbage.
852 1.1 christos
853 1.1 christos Reasons why we might want to use the LOC_REGISTER:
854 1.1 christos
855 1.1 christos (1) So that the backtrace prints the same value
856 1.1 christos as "print foo". I see no compelling reason
857 1.1 christos why this needs to be the case; having the
858 1.1 christos backtrace print the value which was passed
859 1.1 christos in, and "print foo" print the value as
860 1.1 christos modified within the called function, makes
861 1.1 christos perfect sense to me.
862 1.1 christos
863 1.1 christos Additional note: It might be nice if "info args"
864 1.1 christos displayed both values.
865 1.1 christos
866 1.1 christos One more note: There is a case with SPARC
867 1.1 christos structure passing where we need to use the
868 1.1 christos LOC_REGISTER, but this is dealt with by creating
869 1.1 christos a single LOC_REGPARM in symbol reading. */
870 1.1 christos
871 1.1 christos /* Leave sym (the LOC_ARG) alone. */
872 1.1 christos ;
873 1.1 christos }
874 1.1 christos else
875 1.1 christos sym = nsym;
876 1.1 christos }
877 1.1 christos
878 1.1 christos /* Print the current arg. */
879 1.7 christos if (!first)
880 1.7 christos uiout->text (", ");
881 1.1 christos uiout->wrap_hint (" ");
882 1.1 christos
883 1.1 christos if (!print_args)
884 1.1 christos {
885 1.1 christos arg.sym = sym;
886 1.1 christos arg.entry_kind = print_entry_values_no;
887 1.1 christos entryarg.sym = sym;
888 1.1 christos entryarg.entry_kind = print_entry_values_no;
889 1.1 christos }
890 1.9 christos else
891 1.1 christos read_frame_arg (fp_opts, sym, frame, &arg, &entryarg);
892 1.1 christos
893 1.9 christos if (arg.entry_kind != print_entry_values_only)
894 1.1 christos print_frame_arg (fp_opts, &arg);
895 1.1 christos
896 1.1 christos if (entryarg.entry_kind != print_entry_values_no)
897 1.1 christos {
898 1.1 christos if (arg.entry_kind != print_entry_values_only)
899 1.7 christos {
900 1.7 christos uiout->text (", ");
901 1.1 christos uiout->wrap_hint (" ");
902 1.1 christos }
903 1.9 christos
904 1.1 christos print_frame_arg (fp_opts, &entryarg);
905 1.1 christos }
906 1.1 christos
907 1.1 christos first = 0;
908 1.1 christos }
909 1.1 christos }
910 1.1 christos
911 1.1 christos /* Don't print nameless args in situations where we don't know
912 1.1 christos enough about the stack to find them. */
913 1.1 christos if (num != -1)
914 1.1 christos {
915 1.1 christos long start;
916 1.1 christos
917 1.1 christos if (highest_offset == -1)
918 1.1 christos start = gdbarch_frame_args_skip (get_frame_arch (frame));
919 1.1 christos else
920 1.1 christos start = highest_offset;
921 1.9 christos
922 1.9 christos if (!print_names && !first && num > 0)
923 1.9 christos uiout->text ("...");
924 1.9 christos else
925 1.9 christos print_frame_nameless_args (frame, start, num - args_printed,
926 1.1 christos first, stream);
927 1.1 christos }
928 1.1 christos }
929 1.1 christos
930 1.1 christos /* Set the current source and line to the location given by frame
931 1.1 christos FRAME, if possible. When CENTER is true, adjust so the relevant
932 1.1 christos line is in the center of the next 'list'. */
933 1.1 christos
934 1.3 christos void
935 1.1 christos set_current_sal_from_frame (struct frame_info *frame)
936 1.8 christos {
937 1.3 christos symtab_and_line sal = find_frame_sal (frame);
938 1.8 christos if (sal.symtab != NULL)
939 1.1 christos set_current_source_symtab_and_line (sal);
940 1.1 christos }
941 1.1 christos
942 1.1 christos /* If ON, GDB will display disassembly of the next source line when
943 1.1 christos execution of the program being debugged stops.
944 1.1 christos If AUTO (which is the default), or there's no line info to determine
945 1.1 christos the source line of the next instruction, display disassembly of next
946 1.1 christos instruction instead. */
947 1.1 christos
948 1.1 christos static enum auto_boolean disassemble_next_line;
949 1.1 christos
950 1.1 christos static void
951 1.1 christos show_disassemble_next_line (struct ui_file *file, int from_tty,
952 1.1 christos struct cmd_list_element *c,
953 1.1 christos const char *value)
954 1.1 christos {
955 1.1 christos fprintf_filtered (file,
956 1.1 christos _("Debugger's willingness to use "
957 1.1 christos "disassemble-next-line is %s.\n"),
958 1.1 christos value);
959 1.1 christos }
960 1.1 christos
961 1.1 christos /* Use TRY_CATCH to catch the exception from the gdb_disassembly
962 1.1 christos because it will be broken by filter sometime. */
963 1.1 christos
964 1.1 christos static void
965 1.1 christos do_gdb_disassembly (struct gdbarch *gdbarch,
966 1.1 christos int how_many, CORE_ADDR low, CORE_ADDR high)
967 1.1 christos {
968 1.9 christos
969 1.1 christos try
970 1.7 christos {
971 1.1 christos gdb_disassembly (gdbarch, current_uiout,
972 1.1 christos DISASSEMBLY_RAW_INSN, how_many,
973 1.1 christos low, high);
974 1.9 christos }
975 1.1 christos catch (const gdb_exception_error &exception)
976 1.1 christos {
977 1.1 christos /* If an exception was thrown while doing the disassembly, print
978 1.1 christos the error message, to give the user a clue of what happened. */
979 1.1 christos exception_print (gdb_stderr, exception);
980 1.9 christos }
981 1.9 christos }
982 1.9 christos
983 1.9 christos /* Converts the PRINT_FRAME_INFO choice to an optional enum print_what.
984 1.9 christos Value not present indicates to the caller to use default values
985 1.9 christos specific to the command being executed. */
986 1.9 christos
987 1.9 christos static gdb::optional<enum print_what>
988 1.9 christos print_frame_info_to_print_what (const char *print_frame_info)
989 1.9 christos {
990 1.9 christos for (int i = 0; print_frame_info_choices[i] != NULL; i++)
991 1.9 christos if (print_frame_info == print_frame_info_choices[i])
992 1.9 christos return print_frame_info_print_what[i];
993 1.9 christos
994 1.9 christos internal_error (__FILE__, __LINE__,
995 1.9 christos "Unexpected print frame-info value `%s'.",
996 1.9 christos print_frame_info);
997 1.9 christos }
998 1.9 christos
999 1.9 christos /* Print the PC from FRAME, plus any flags, to UIOUT. */
1000 1.9 christos
1001 1.9 christos static void
1002 1.9 christos print_pc (struct ui_out *uiout, struct gdbarch *gdbarch, frame_info *frame,
1003 1.9 christos CORE_ADDR pc)
1004 1.9 christos {
1005 1.9 christos uiout->field_core_addr ("addr", gdbarch, pc);
1006 1.9 christos
1007 1.9 christos std::string flags = gdbarch_get_pc_address_flags (gdbarch, frame, pc);
1008 1.9 christos if (!flags.empty ())
1009 1.9 christos {
1010 1.9 christos uiout->text (" [");
1011 1.9 christos uiout->field_string ("addr_flags", flags);
1012 1.9 christos uiout->text ("]");
1013 1.9 christos }
1014 1.9 christos }
1015 1.9 christos
1016 1.9 christos /* See stack.h. */
1017 1.9 christos
1018 1.9 christos void
1019 1.9 christos get_user_print_what_frame_info (gdb::optional<enum print_what> *what)
1020 1.9 christos {
1021 1.9 christos *what
1022 1.9 christos = print_frame_info_to_print_what
1023 1.1 christos (user_frame_print_options.print_frame_info);
1024 1.1 christos }
1025 1.1 christos
1026 1.9 christos /* Print information about frame FRAME. The output is format according
1027 1.9 christos to PRINT_LEVEL and PRINT_WHAT and PRINT_ARGS. For the meaning of
1028 1.9 christos PRINT_WHAT, see enum print_what comments in frame.h.
1029 1.9 christos Note that PRINT_WHAT is overridden if FP_OPTS.print_frame_info
1030 1.1 christos != print_frame_info_auto.
1031 1.1 christos
1032 1.1 christos Used in "where" output, and to emit breakpoint or step
1033 1.1 christos messages. */
1034 1.1 christos
1035 1.9 christos void
1036 1.9 christos print_frame_info (const frame_print_options &fp_opts,
1037 1.1 christos frame_info *frame, int print_level,
1038 1.1 christos enum print_what print_what, int print_args,
1039 1.1 christos int set_current_sal)
1040 1.1 christos {
1041 1.1 christos struct gdbarch *gdbarch = get_frame_arch (frame);
1042 1.1 christos int source_print;
1043 1.1 christos int location_print;
1044 1.1 christos struct ui_out *uiout = current_uiout;
1045 1.9 christos
1046 1.9 christos if (!current_uiout->is_mi_like_p ()
1047 1.9 christos && fp_opts.print_frame_info != print_frame_info_auto)
1048 1.9 christos {
1049 1.9 christos /* Use the specific frame information desired by the user. */
1050 1.9 christos print_what = *print_frame_info_to_print_what (fp_opts.print_frame_info);
1051 1.9 christos }
1052 1.1 christos
1053 1.1 christos if (get_frame_type (frame) == DUMMY_FRAME
1054 1.1 christos || get_frame_type (frame) == SIGTRAMP_FRAME
1055 1.1 christos || get_frame_type (frame) == ARCH_FRAME)
1056 1.8 christos {
1057 1.1 christos ui_out_emit_tuple tuple_emitter (uiout, "frame");
1058 1.1 christos
1059 1.1 christos annotate_frame_begin (print_level ? frame_relative_level (frame) : 0,
1060 1.1 christos gdbarch, get_frame_pc (frame));
1061 1.1 christos
1062 1.1 christos /* Do this regardless of SOURCE because we don't have any source
1063 1.1 christos to list for this frame. */
1064 1.1 christos if (print_level)
1065 1.7 christos {
1066 1.9 christos uiout->text ("#");
1067 1.9 christos uiout->field_fmt_signed (2, ui_left, "level",
1068 1.1 christos frame_relative_level (frame));
1069 1.7 christos }
1070 1.1 christos if (uiout->is_mi_like_p ())
1071 1.1 christos {
1072 1.9 christos annotate_frame_address ();
1073 1.1 christos print_pc (uiout, gdbarch, frame, get_frame_pc (frame));
1074 1.1 christos annotate_frame_address_end ();
1075 1.1 christos }
1076 1.1 christos
1077 1.1 christos if (get_frame_type (frame) == DUMMY_FRAME)
1078 1.1 christos {
1079 1.8 christos annotate_function_call ();
1080 1.9 christos uiout->field_string ("func", "<function called from gdb>",
1081 1.1 christos metadata_style.style ());
1082 1.1 christos }
1083 1.1 christos else if (get_frame_type (frame) == SIGTRAMP_FRAME)
1084 1.1 christos {
1085 1.8 christos annotate_signal_handler_caller ();
1086 1.9 christos uiout->field_string ("func", "<signal handler called>",
1087 1.1 christos metadata_style.style ());
1088 1.1 christos }
1089 1.1 christos else if (get_frame_type (frame) == ARCH_FRAME)
1090 1.8 christos {
1091 1.9 christos uiout->field_string ("func", "<cross-architecture call>",
1092 1.1 christos metadata_style.style ());
1093 1.7 christos }
1094 1.1 christos uiout->text ("\n");
1095 1.1 christos annotate_frame_end ();
1096 1.3 christos
1097 1.3 christos /* If disassemble-next-line is set to auto or on output the next
1098 1.3 christos instruction. */
1099 1.3 christos if (disassemble_next_line == AUTO_BOOLEAN_AUTO
1100 1.3 christos || disassemble_next_line == AUTO_BOOLEAN_TRUE)
1101 1.3 christos do_gdb_disassembly (get_frame_arch (frame), 1,
1102 1.3 christos get_frame_pc (frame), get_frame_pc (frame) + 1);
1103 1.1 christos
1104 1.1 christos return;
1105 1.1 christos }
1106 1.1 christos
1107 1.1 christos /* If FRAME is not the innermost frame, that normally means that
1108 1.1 christos FRAME->pc points to *after* the call instruction, and we want to
1109 1.1 christos get the line containing the call, never the next line. But if
1110 1.1 christos the next frame is a SIGTRAMP_FRAME or a DUMMY_FRAME, then the
1111 1.1 christos next frame was not entered as the result of a call, and we want
1112 1.8 christos to get the line containing FRAME->pc. */
1113 1.1 christos symtab_and_line sal = find_frame_sal (frame);
1114 1.9 christos
1115 1.9 christos location_print = (print_what == LOCATION
1116 1.1 christos || print_what == SRC_AND_LOC
1117 1.9 christos || print_what == LOC_AND_ADDRESS
1118 1.1 christos || print_what == SHORT_LOCATION);
1119 1.9 christos if (location_print || !sal.symtab)
1120 1.1 christos print_frame (fp_opts, frame, print_level, print_what, print_args, sal);
1121 1.1 christos
1122 1.1 christos source_print = (print_what == SRC_LINE || print_what == SRC_AND_LOC);
1123 1.1 christos
1124 1.1 christos /* If disassemble-next-line is set to auto or on and doesn't have
1125 1.1 christos the line debug messages for $pc, output the next instruction. */
1126 1.1 christos if ((disassemble_next_line == AUTO_BOOLEAN_AUTO
1127 1.1 christos || disassemble_next_line == AUTO_BOOLEAN_TRUE)
1128 1.1 christos && source_print && !sal.symtab)
1129 1.1 christos do_gdb_disassembly (get_frame_arch (frame), 1,
1130 1.1 christos get_frame_pc (frame), get_frame_pc (frame) + 1);
1131 1.1 christos
1132 1.1 christos if (source_print && sal.symtab)
1133 1.1 christos {
1134 1.1 christos int mid_statement = ((print_what == SRC_LINE)
1135 1.9 christos && frame_show_address (frame, sal));
1136 1.9 christos if (annotation_level > 0
1137 1.9 christos && annotate_source_line (sal.symtab, sal.line, mid_statement,
1138 1.9 christos get_frame_pc (frame)))
1139 1.9 christos {
1140 1.9 christos /* The call to ANNOTATE_SOURCE_LINE already printed the
1141 1.9 christos annotation for this source line, so we avoid the two cases
1142 1.9 christos below and do not print the actual source line. The
1143 1.9 christos documentation for annotations makes it clear that the source
1144 1.9 christos line annotation is printed __instead__ of printing the source
1145 1.9 christos line, not as well as.
1146 1.9 christos
1147 1.9 christos However, if we fail to print the source line, which usually
1148 1.9 christos means either the source file is missing, or the requested
1149 1.9 christos line is out of range of the file, then we don't print the
1150 1.9 christos source annotation, and will pass through the "normal" print
1151 1.9 christos source line code below, the expectation is that this code
1152 1.9 christos will print an appropriate error. */
1153 1.9 christos }
1154 1.9 christos else if (deprecated_print_frame_info_listing_hook)
1155 1.9 christos deprecated_print_frame_info_listing_hook (sal.symtab, sal.line,
1156 1.9 christos sal.line + 1, 0);
1157 1.9 christos else
1158 1.9 christos {
1159 1.1 christos struct value_print_options opts;
1160 1.9 christos
1161 1.9 christos get_user_print_options (&opts);
1162 1.9 christos /* We used to do this earlier, but that is clearly
1163 1.9 christos wrong. This function is used by many different
1164 1.9 christos parts of gdb, including normal_stop in infrun.c,
1165 1.9 christos which uses this to print out the current PC
1166 1.9 christos when we stepi/nexti into the middle of a source
1167 1.9 christos line. Only the command line really wants this
1168 1.9 christos behavior. Other UIs probably would like the
1169 1.9 christos ability to decide for themselves if it is desired. */
1170 1.1 christos if (opts.addressprint && mid_statement)
1171 1.9 christos {
1172 1.9 christos print_pc (uiout, gdbarch, frame, get_frame_pc (frame));
1173 1.9 christos uiout->text ("\t");
1174 1.1 christos }
1175 1.9 christos
1176 1.1 christos print_source_lines (sal.symtab, sal.line, sal.line + 1, 0);
1177 1.1 christos }
1178 1.1 christos
1179 1.9 christos /* If disassemble-next-line is set to on and there is line debug
1180 1.1 christos messages, output assembly codes for next line. */
1181 1.1 christos if (disassemble_next_line == AUTO_BOOLEAN_TRUE)
1182 1.1 christos do_gdb_disassembly (get_frame_arch (frame), -1, sal.pc, sal.end);
1183 1.1 christos }
1184 1.1 christos
1185 1.1 christos if (set_current_sal)
1186 1.1 christos {
1187 1.1 christos CORE_ADDR pc;
1188 1.1 christos
1189 1.9 christos if (get_frame_pc_if_available (frame, &pc))
1190 1.1 christos last_displayed_symtab_info.set (sal.pspace, pc, sal.symtab, sal.line);
1191 1.9 christos else
1192 1.1 christos last_displayed_symtab_info.invalidate ();
1193 1.1 christos }
1194 1.1 christos
1195 1.1 christos annotate_frame_end ();
1196 1.1 christos
1197 1.1 christos gdb_flush (gdb_stdout);
1198 1.1 christos }
1199 1.9 christos
1200 1.1 christos /* See stack.h. */
1201 1.1 christos
1202 1.1 christos void
1203 1.1 christos clear_last_displayed_sal (void)
1204 1.9 christos {
1205 1.1 christos last_displayed_symtab_info.invalidate ();
1206 1.1 christos }
1207 1.9 christos
1208 1.1 christos /* See stack.h. */
1209 1.9 christos
1210 1.1 christos bool
1211 1.1 christos last_displayed_sal_is_valid (void)
1212 1.9 christos {
1213 1.1 christos return last_displayed_symtab_info.is_valid ();
1214 1.1 christos }
1215 1.9 christos
1216 1.1 christos /* See stack.h. */
1217 1.1 christos
1218 1.1 christos struct program_space *
1219 1.1 christos get_last_displayed_pspace (void)
1220 1.9 christos {
1221 1.1 christos return last_displayed_symtab_info.pspace ();
1222 1.1 christos }
1223 1.9 christos
1224 1.1 christos /* See stack.h. */
1225 1.1 christos
1226 1.1 christos CORE_ADDR
1227 1.1 christos get_last_displayed_addr (void)
1228 1.9 christos {
1229 1.1 christos return last_displayed_symtab_info.address ();
1230 1.1 christos }
1231 1.9 christos
1232 1.1 christos /* See stack.h. */
1233 1.1 christos
1234 1.1 christos struct symtab*
1235 1.1 christos get_last_displayed_symtab (void)
1236 1.9 christos {
1237 1.1 christos return last_displayed_symtab_info.symtab ();
1238 1.1 christos }
1239 1.9 christos
1240 1.1 christos /* See stack.h. */
1241 1.1 christos
1242 1.1 christos int
1243 1.1 christos get_last_displayed_line (void)
1244 1.9 christos {
1245 1.1 christos return last_displayed_symtab_info.line ();
1246 1.1 christos }
1247 1.9 christos
1248 1.1 christos /* See stack.h. */
1249 1.8 christos
1250 1.8 christos symtab_and_line
1251 1.1 christos get_last_displayed_sal ()
1252 1.8 christos {
1253 1.8 christos symtab_and_line sal;
1254 1.9 christos
1255 1.1 christos if (last_displayed_symtab_info.is_valid ())
1256 1.9 christos {
1257 1.9 christos sal.pspace = last_displayed_symtab_info.pspace ();
1258 1.9 christos sal.pc = last_displayed_symtab_info.address ();
1259 1.9 christos sal.symtab = last_displayed_symtab_info.symtab ();
1260 1.1 christos sal.line = last_displayed_symtab_info.line ();
1261 1.8 christos }
1262 1.8 christos
1263 1.1 christos return sal;
1264 1.1 christos }
1265 1.1 christos
1266 1.8 christos
1267 1.8 christos /* Attempt to obtain the name, FUNLANG and optionally FUNCP of the function
1268 1.1 christos corresponding to FRAME. */
1269 1.8 christos
1270 1.8 christos gdb::unique_xmalloc_ptr<char>
1271 1.8 christos find_frame_funname (struct frame_info *frame, enum language *funlang,
1272 1.1 christos struct symbol **funcp)
1273 1.1 christos {
1274 1.8 christos struct symbol *func;
1275 1.1 christos gdb::unique_xmalloc_ptr<char> funname;
1276 1.1 christos
1277 1.1 christos *funlang = language_unknown;
1278 1.1 christos if (funcp)
1279 1.1 christos *funcp = NULL;
1280 1.1 christos
1281 1.1 christos func = get_frame_function (frame);
1282 1.1 christos if (func)
1283 1.9 christos {
1284 1.1 christos const char *print_name = func->print_name ();
1285 1.9 christos
1286 1.9 christos *funlang = func->language ();
1287 1.9 christos if (funcp)
1288 1.9 christos *funcp = func;
1289 1.9 christos if (*funlang == language_cplus)
1290 1.9 christos {
1291 1.9 christos /* It seems appropriate to use print_name() here,
1292 1.9 christos to display the demangled name that we already have
1293 1.9 christos stored in the symbol table, but we stored a version
1294 1.9 christos with DMGL_PARAMS turned on, and here we don't want to
1295 1.9 christos display parameters. So remove the parameters. */
1296 1.1 christos funname = cp_remove_params (print_name);
1297 1.6 christos }
1298 1.9 christos
1299 1.9 christos /* If we didn't hit the C++ case above, set *funname
1300 1.9 christos here. */
1301 1.9 christos if (funname == NULL)
1302 1.1 christos funname.reset (xstrdup (print_name));
1303 1.1 christos }
1304 1.1 christos else
1305 1.1 christos {
1306 1.1 christos struct bound_minimal_symbol msymbol;
1307 1.1 christos CORE_ADDR pc;
1308 1.1 christos
1309 1.8 christos if (!get_frame_address_in_block_if_available (frame, &pc))
1310 1.1 christos return funname;
1311 1.1 christos
1312 1.1 christos msymbol = lookup_minimal_symbol_by_pc (pc);
1313 1.1 christos if (msymbol.minsym != NULL)
1314 1.9 christos {
1315 1.9 christos funname.reset (xstrdup (msymbol.minsym->print_name ()));
1316 1.1 christos *funlang = msymbol.minsym->language ();
1317 1.1 christos }
1318 1.8 christos }
1319 1.8 christos
1320 1.1 christos return funname;
1321 1.1 christos }
1322 1.1 christos
1323 1.9 christos static void
1324 1.9 christos print_frame (const frame_print_options &fp_opts,
1325 1.1 christos frame_info *frame, int print_level,
1326 1.1 christos enum print_what print_what, int print_args,
1327 1.1 christos struct symtab_and_line sal)
1328 1.1 christos {
1329 1.1 christos struct gdbarch *gdbarch = get_frame_arch (frame);
1330 1.1 christos struct ui_out *uiout = current_uiout;
1331 1.1 christos enum language funlang = language_unknown;
1332 1.1 christos struct value_print_options opts;
1333 1.1 christos struct symbol *func;
1334 1.1 christos CORE_ADDR pc = 0;
1335 1.1 christos int pc_p;
1336 1.1 christos
1337 1.1 christos pc_p = get_frame_pc_if_available (frame, &pc);
1338 1.8 christos
1339 1.8 christos gdb::unique_xmalloc_ptr<char> funname
1340 1.1 christos = find_frame_funname (frame, &funlang, &func);
1341 1.1 christos
1342 1.1 christos annotate_frame_begin (print_level ? frame_relative_level (frame) : 0,
1343 1.1 christos gdbarch, pc);
1344 1.8 christos
1345 1.8 christos {
1346 1.1 christos ui_out_emit_tuple tuple_emitter (uiout, "frame");
1347 1.8 christos
1348 1.1 christos if (print_level)
1349 1.8 christos {
1350 1.9 christos uiout->text ("#");
1351 1.9 christos uiout->field_fmt_signed (2, ui_left, "level",
1352 1.1 christos frame_relative_level (frame));
1353 1.8 christos }
1354 1.8 christos get_user_print_options (&opts);
1355 1.8 christos if (opts.addressprint)
1356 1.8 christos if (!sal.symtab
1357 1.8 christos || frame_show_address (frame, sal)
1358 1.8 christos || print_what == LOC_AND_ADDRESS)
1359 1.8 christos {
1360 1.8 christos annotate_frame_address ();
1361 1.9 christos if (pc_p)
1362 1.8 christos print_pc (uiout, gdbarch, frame, pc);
1363 1.8 christos else
1364 1.9 christos uiout->field_string ("addr", "<unavailable>",
1365 1.8 christos metadata_style.style ());
1366 1.8 christos annotate_frame_address_end ();
1367 1.8 christos uiout->text (" in ");
1368 1.8 christos }
1369 1.8 christos annotate_frame_function_name ();
1370 1.8 christos
1371 1.8 christos string_file stb;
1372 1.8 christos fprintf_symbol_filtered (&stb, funname ? funname.get () : "??",
1373 1.9 christos funlang, DMGL_ANSI);
1374 1.8 christos uiout->field_stream ("func", stb, function_name_style.style ());
1375 1.8 christos uiout->wrap_hint (" ");
1376 1.7 christos annotate_frame_args ();
1377 1.8 christos
1378 1.8 christos uiout->text (" (");
1379 1.8 christos if (print_args)
1380 1.8 christos {
1381 1.1 christos int numargs;
1382 1.8 christos
1383 1.8 christos if (gdbarch_frame_num_args_p (gdbarch))
1384 1.8 christos {
1385 1.8 christos numargs = gdbarch_frame_num_args (gdbarch, frame);
1386 1.8 christos gdb_assert (numargs >= 0);
1387 1.8 christos }
1388 1.8 christos else
1389 1.1 christos numargs = -1;
1390 1.1 christos
1391 1.8 christos {
1392 1.9 christos ui_out_emit_list list_emitter (uiout, "args");
1393 1.8 christos try
1394 1.9 christos {
1395 1.8 christos print_frame_args (fp_opts, func, frame, numargs, gdb_stdout);
1396 1.9 christos }
1397 1.8 christos catch (const gdb_exception_error &e)
1398 1.8 christos {
1399 1.5 christos }
1400 1.8 christos
1401 1.8 christos /* FIXME: ARGS must be a list. If one argument is a string it
1402 1.8 christos will have " that will not be properly escaped. */
1403 1.8 christos }
1404 1.8 christos QUIT;
1405 1.8 christos }
1406 1.9 christos uiout->text (")");
1407 1.8 christos if (print_what != SHORT_LOCATION && sal.symtab)
1408 1.8 christos {
1409 1.1 christos const char *filename_display;
1410 1.8 christos
1411 1.8 christos filename_display = symtab_to_filename_for_display (sal.symtab);
1412 1.8 christos annotate_frame_source_begin ();
1413 1.8 christos uiout->wrap_hint (" ");
1414 1.8 christos uiout->text (" at ");
1415 1.9 christos annotate_frame_source_file ();
1416 1.9 christos uiout->field_string ("file", filename_display,
1417 1.8 christos file_name_style.style ());
1418 1.8 christos if (uiout->is_mi_like_p ())
1419 1.8 christos {
1420 1.1 christos const char *fullname = symtab_to_fullname (sal.symtab);
1421 1.8 christos
1422 1.8 christos uiout->field_string ("fullname", fullname);
1423 1.8 christos }
1424 1.8 christos annotate_frame_source_file_end ();
1425 1.8 christos uiout->text (":");
1426 1.9 christos annotate_frame_source_line ();
1427 1.8 christos uiout->field_signed ("line", sal.line);
1428 1.8 christos annotate_frame_source_end ();
1429 1.1 christos }
1430 1.9 christos
1431 1.9 christos if (print_what != SHORT_LOCATION
1432 1.8 christos && pc_p && (funname == NULL || sal.symtab == NULL))
1433 1.8 christos {
1434 1.8 christos char *lib = solib_name_from_address (get_frame_program_space (frame),
1435 1.1 christos get_frame_pc (frame));
1436 1.8 christos
1437 1.8 christos if (lib)
1438 1.8 christos {
1439 1.8 christos annotate_frame_where ();
1440 1.8 christos uiout->wrap_hint (" ");
1441 1.9 christos uiout->text (" from ");
1442 1.8 christos uiout->field_string ("from", lib, file_name_style.style ());
1443 1.8 christos }
1444 1.8 christos }
1445 1.8 christos if (uiout->is_mi_like_p ())
1446 1.8 christos uiout->field_string ("arch",
1447 1.8 christos (gdbarch_bfd_arch_info (gdbarch))->printable_name);
1448 1.1 christos }
1449 1.7 christos
1450 1.1 christos uiout->text ("\n");
1451 1.1 christos }
1452 1.1 christos
1453 1.8 christos
1455 1.1 christos /* Completion function for "frame function", "info frame function", and
1456 1.9 christos "select-frame function" commands. */
1457 1.8 christos
1458 1.8 christos static void
1459 1.8 christos frame_selection_by_function_completer (struct cmd_list_element *ignore,
1460 1.8 christos completion_tracker &tracker,
1461 1.8 christos const char *text, const char *word)
1462 1.8 christos {
1463 1.8 christos /* This is used to complete function names within a stack. It would be
1464 1.8 christos nice if we only offered functions that were actually in the stack.
1465 1.8 christos However, this would mean unwinding the stack to completion, which
1466 1.8 christos could take too long, or on a corrupted stack, possibly not end.
1467 1.8 christos Instead, we offer all symbol names as a safer choice. */
1468 1.8 christos collect_symbol_completion_matches (tracker,
1469 1.8 christos complete_symbol_mode::EXPRESSION,
1470 1.8 christos symbol_name_match_type::EXPRESSION,
1471 1.8 christos text, word);
1472 1.8 christos }
1473 1.8 christos
1474 1.8 christos /* Core of all the "info frame" sub-commands. Print information about a
1475 1.8 christos frame FI. If SELECTED_FRAME_P is true then the user didn't provide a
1476 1.8 christos frame specification, they just entered 'info frame'. If the user did
1477 1.1 christos provide a frame specification (for example 'info frame 0', 'info frame
1478 1.1 christos level 1') then SELECTED_FRAME_P will be false. */
1479 1.8 christos
1480 1.1 christos static void
1481 1.1 christos info_frame_command_core (struct frame_info *fi, bool selected_frame_p)
1482 1.1 christos {
1483 1.1 christos struct symbol *func;
1484 1.1 christos struct symtab *s;
1485 1.1 christos struct frame_info *calling_frame_info;
1486 1.1 christos int numregs;
1487 1.1 christos const char *funname = 0;
1488 1.1 christos enum language funlang = language_unknown;
1489 1.1 christos const char *pc_regname;
1490 1.1 christos struct gdbarch *gdbarch;
1491 1.1 christos CORE_ADDR frame_pc;
1492 1.1 christos int frame_pc_p;
1493 1.5 christos /* Initialize it to avoid "may be used uninitialized" warning. */
1494 1.1 christos CORE_ADDR caller_pc = 0;
1495 1.1 christos int caller_pc_p = 0;
1496 1.1 christos
1497 1.1 christos gdbarch = get_frame_arch (fi);
1498 1.1 christos
1499 1.1 christos /* Name of the value returned by get_frame_pc(). Per comments, "pc"
1500 1.1 christos is not a good name. */
1501 1.1 christos if (gdbarch_pc_regnum (gdbarch) >= 0)
1502 1.1 christos /* OK, this is weird. The gdbarch_pc_regnum hardware register's value can
1503 1.1 christos easily not match that of the internal value returned by
1504 1.1 christos get_frame_pc(). */
1505 1.1 christos pc_regname = gdbarch_register_name (gdbarch, gdbarch_pc_regnum (gdbarch));
1506 1.1 christos else
1507 1.1 christos /* But then, this is weird to. Even without gdbarch_pc_regnum, an
1508 1.1 christos architectures will often have a hardware register called "pc",
1509 1.1 christos and that register's value, again, can easily not match
1510 1.1 christos get_frame_pc(). */
1511 1.1 christos pc_regname = "pc";
1512 1.1 christos
1513 1.8 christos frame_pc_p = get_frame_pc_if_available (fi, &frame_pc);
1514 1.1 christos func = get_frame_function (fi);
1515 1.8 christos symtab_and_line sal = find_frame_sal (fi);
1516 1.1 christos s = sal.symtab;
1517 1.1 christos gdb::unique_xmalloc_ptr<char> func_only;
1518 1.9 christos if (func)
1519 1.9 christos {
1520 1.1 christos funname = func->print_name ();
1521 1.1 christos funlang = func->language ();
1522 1.9 christos if (funlang == language_cplus)
1523 1.1 christos {
1524 1.1 christos /* It seems appropriate to use print_name() here,
1525 1.1 christos to display the demangled name that we already have
1526 1.1 christos stored in the symbol table, but we stored a version
1527 1.8 christos with DMGL_PARAMS turned on, and here we don't want to
1528 1.1 christos display parameters. So remove the parameters. */
1529 1.1 christos func_only = cp_remove_params (funname);
1530 1.8 christos
1531 1.1 christos if (func_only)
1532 1.1 christos funname = func_only.get ();
1533 1.1 christos }
1534 1.1 christos }
1535 1.1 christos else if (frame_pc_p)
1536 1.1 christos {
1537 1.1 christos struct bound_minimal_symbol msymbol;
1538 1.1 christos
1539 1.1 christos msymbol = lookup_minimal_symbol_by_pc (frame_pc);
1540 1.9 christos if (msymbol.minsym != NULL)
1541 1.9 christos {
1542 1.1 christos funname = msymbol.minsym->print_name ();
1543 1.1 christos funlang = msymbol.minsym->language ();
1544 1.1 christos }
1545 1.1 christos }
1546 1.1 christos calling_frame_info = get_prev_frame (fi);
1547 1.1 christos
1548 1.1 christos if (selected_frame_p && frame_relative_level (fi) >= 0)
1549 1.1 christos {
1550 1.1 christos printf_filtered (_("Stack level %d, frame at "),
1551 1.1 christos frame_relative_level (fi));
1552 1.1 christos }
1553 1.1 christos else
1554 1.1 christos {
1555 1.1 christos printf_filtered (_("Stack frame at "));
1556 1.1 christos }
1557 1.1 christos fputs_filtered (paddress (gdbarch, get_frame_base (fi)), gdb_stdout);
1558 1.1 christos printf_filtered (":\n");
1559 1.1 christos printf_filtered (" %s = ", pc_regname);
1560 1.1 christos if (frame_pc_p)
1561 1.9 christos fputs_filtered (paddress (gdbarch, get_frame_pc (fi)), gdb_stdout);
1562 1.1 christos else
1563 1.1 christos fputs_styled ("<unavailable>", metadata_style.style (), gdb_stdout);
1564 1.1 christos
1565 1.1 christos wrap_here (" ");
1566 1.1 christos if (funname)
1567 1.1 christos {
1568 1.1 christos printf_filtered (" in ");
1569 1.1 christos fprintf_symbol_filtered (gdb_stdout, funname, funlang,
1570 1.1 christos DMGL_ANSI | DMGL_PARAMS);
1571 1.1 christos }
1572 1.9 christos wrap_here (" ");
1573 1.9 christos if (sal.symtab)
1574 1.9 christos printf_filtered
1575 1.9 christos (" (%ps:%d)",
1576 1.9 christos styled_string (file_name_style.style (),
1577 1.1 christos symtab_to_filename_for_display (sal.symtab)),
1578 1.1 christos sal.line);
1579 1.1 christos puts_filtered ("; ");
1580 1.1 christos wrap_here (" ");
1581 1.6 christos printf_filtered ("saved %s = ", pc_regname);
1582 1.6 christos
1583 1.6 christos if (!frame_id_p (frame_unwind_caller_id (fi)))
1584 1.1 christos val_print_not_saved (gdb_stdout);
1585 1.9 christos else
1586 1.6 christos {
1587 1.6 christos try
1588 1.6 christos {
1589 1.6 christos caller_pc = frame_unwind_caller_pc (fi);
1590 1.9 christos caller_pc_p = 1;
1591 1.1 christos }
1592 1.6 christos catch (const gdb_exception_error &ex)
1593 1.6 christos {
1594 1.6 christos switch (ex.error)
1595 1.6 christos {
1596 1.6 christos case NOT_AVAILABLE_ERROR:
1597 1.6 christos val_print_unavailable (gdb_stdout);
1598 1.6 christos break;
1599 1.6 christos case OPTIMIZED_OUT_ERROR:
1600 1.6 christos val_print_not_saved (gdb_stdout);
1601 1.9 christos break;
1602 1.9 christos default:
1603 1.9 christos fprintf_styled (gdb_stdout, metadata_style.style (),
1604 1.6 christos _("<error: %s>"),
1605 1.6 christos ex.what ());
1606 1.1 christos break;
1607 1.1 christos }
1608 1.5 christos }
1609 1.5 christos }
1610 1.1 christos
1611 1.1 christos if (caller_pc_p)
1612 1.1 christos fputs_filtered (paddress (gdbarch, caller_pc), gdb_stdout);
1613 1.1 christos printf_filtered ("\n");
1614 1.1 christos
1615 1.1 christos if (calling_frame_info == NULL)
1616 1.1 christos {
1617 1.1 christos enum unwind_stop_reason reason;
1618 1.1 christos
1619 1.1 christos reason = get_frame_unwind_stop_reason (fi);
1620 1.3 christos if (reason != UNWIND_NO_REASON)
1621 1.1 christos printf_filtered (_(" Outermost frame: %s\n"),
1622 1.1 christos frame_stop_reason_string (fi));
1623 1.1 christos }
1624 1.1 christos else if (get_frame_type (fi) == TAILCALL_FRAME)
1625 1.1 christos puts_filtered (" tail call frame");
1626 1.1 christos else if (get_frame_type (fi) == INLINE_FRAME)
1627 1.1 christos printf_filtered (" inlined into frame %d",
1628 1.1 christos frame_relative_level (get_prev_frame (fi)));
1629 1.1 christos else
1630 1.1 christos {
1631 1.1 christos printf_filtered (" called by frame at ");
1632 1.1 christos fputs_filtered (paddress (gdbarch, get_frame_base (calling_frame_info)),
1633 1.1 christos gdb_stdout);
1634 1.1 christos }
1635 1.1 christos if (get_next_frame (fi) && calling_frame_info)
1636 1.1 christos puts_filtered (",");
1637 1.1 christos wrap_here (" ");
1638 1.1 christos if (get_next_frame (fi))
1639 1.1 christos {
1640 1.1 christos printf_filtered (" caller of frame at ");
1641 1.1 christos fputs_filtered (paddress (gdbarch, get_frame_base (get_next_frame (fi))),
1642 1.1 christos gdb_stdout);
1643 1.1 christos }
1644 1.1 christos if (get_next_frame (fi) || calling_frame_info)
1645 1.1 christos puts_filtered ("\n");
1646 1.1 christos
1647 1.1 christos if (s)
1648 1.1 christos printf_filtered (" source language %s.\n",
1649 1.1 christos language_str (s->language));
1650 1.1 christos
1651 1.1 christos {
1652 1.1 christos /* Address of the argument list for this frame, or 0. */
1653 1.1 christos CORE_ADDR arg_list = get_frame_args_address (fi);
1654 1.1 christos /* Number of args for this frame, or -1 if unknown. */
1655 1.1 christos int numargs;
1656 1.1 christos
1657 1.1 christos if (arg_list == 0)
1658 1.1 christos printf_filtered (" Arglist at unknown address.\n");
1659 1.1 christos else
1660 1.1 christos {
1661 1.1 christos printf_filtered (" Arglist at ");
1662 1.1 christos fputs_filtered (paddress (gdbarch, arg_list), gdb_stdout);
1663 1.1 christos printf_filtered (",");
1664 1.1 christos
1665 1.1 christos if (!gdbarch_frame_num_args_p (gdbarch))
1666 1.1 christos {
1667 1.1 christos numargs = -1;
1668 1.1 christos puts_filtered (" args: ");
1669 1.1 christos }
1670 1.1 christos else
1671 1.1 christos {
1672 1.1 christos numargs = gdbarch_frame_num_args (gdbarch, fi);
1673 1.1 christos gdb_assert (numargs >= 0);
1674 1.1 christos if (numargs == 0)
1675 1.1 christos puts_filtered (" no args.");
1676 1.1 christos else if (numargs == 1)
1677 1.1 christos puts_filtered (" 1 arg: ");
1678 1.1 christos else
1679 1.9 christos printf_filtered (" %d args: ", numargs);
1680 1.9 christos }
1681 1.1 christos print_frame_args (user_frame_print_options,
1682 1.1 christos func, fi, numargs, gdb_stdout);
1683 1.1 christos puts_filtered ("\n");
1684 1.1 christos }
1685 1.1 christos }
1686 1.1 christos {
1687 1.1 christos /* Address of the local variables for this frame, or 0. */
1688 1.1 christos CORE_ADDR arg_list = get_frame_locals_address (fi);
1689 1.1 christos
1690 1.1 christos if (arg_list == 0)
1691 1.1 christos printf_filtered (" Locals at unknown address,");
1692 1.1 christos else
1693 1.1 christos {
1694 1.1 christos printf_filtered (" Locals at ");
1695 1.1 christos fputs_filtered (paddress (gdbarch, arg_list), gdb_stdout);
1696 1.1 christos printf_filtered (",");
1697 1.1 christos }
1698 1.1 christos }
1699 1.1 christos
1700 1.1 christos /* Print as much information as possible on the location of all the
1701 1.1 christos registers. */
1702 1.1 christos {
1703 1.1 christos int count;
1704 1.7 christos int i;
1705 1.1 christos int need_nl = 1;
1706 1.1 christos int sp_regnum = gdbarch_sp_regnum (gdbarch);
1707 1.1 christos
1708 1.1 christos /* The sp is special; what's displayed isn't the save address, but
1709 1.1 christos the value of the previous frame's sp. This is a legacy thing,
1710 1.1 christos at one stage the frame cached the previous frame's SP instead
1711 1.7 christos of its address, hence it was easiest to just display the cached
1712 1.1 christos value. */
1713 1.7 christos if (sp_regnum >= 0)
1714 1.7 christos {
1715 1.7 christos struct value *value = frame_unwind_register_value (fi, sp_regnum);
1716 1.7 christos gdb_assert (value != NULL);
1717 1.1 christos
1718 1.7 christos if (!value_optimized_out (value) && value_entirely_available (value))
1719 1.7 christos {
1720 1.7 christos if (VALUE_LVAL (value) == not_lval)
1721 1.7 christos {
1722 1.7 christos CORE_ADDR sp;
1723 1.7 christos enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1724 1.7 christos int sp_size = register_size (gdbarch, sp_regnum);
1725 1.7 christos
1726 1.7 christos sp = extract_unsigned_integer (value_contents_all (value),
1727 1.7 christos sp_size, byte_order);
1728 1.7 christos
1729 1.7 christos printf_filtered (" Previous frame's sp is ");
1730 1.7 christos fputs_filtered (paddress (gdbarch, sp), gdb_stdout);
1731 1.7 christos printf_filtered ("\n");
1732 1.7 christos }
1733 1.7 christos else if (VALUE_LVAL (value) == lval_memory)
1734 1.7 christos {
1735 1.7 christos printf_filtered (" Previous frame's sp at ");
1736 1.7 christos fputs_filtered (paddress (gdbarch, value_address (value)),
1737 1.7 christos gdb_stdout);
1738 1.7 christos printf_filtered ("\n");
1739 1.7 christos }
1740 1.7 christos else if (VALUE_LVAL (value) == lval_register)
1741 1.7 christos {
1742 1.7 christos printf_filtered (" Previous frame's sp in %s\n",
1743 1.7 christos gdbarch_register_name (gdbarch,
1744 1.7 christos VALUE_REGNUM (value)));
1745 1.7 christos }
1746 1.1 christos
1747 1.1 christos release_value (value);
1748 1.1 christos need_nl = 0;
1749 1.1 christos }
1750 1.1 christos /* else keep quiet. */
1751 1.1 christos }
1752 1.8 christos
1753 1.1 christos count = 0;
1754 1.7 christos numregs = gdbarch_num_cooked_regs (gdbarch);
1755 1.1 christos for (i = 0; i < numregs; i++)
1756 1.1 christos if (i != sp_regnum
1757 1.7 christos && gdbarch_register_reggroup_p (gdbarch, i, all_reggroup))
1758 1.7 christos {
1759 1.7 christos enum lval_type lval;
1760 1.7 christos int optimized;
1761 1.7 christos int unavailable;
1762 1.7 christos CORE_ADDR addr;
1763 1.1 christos int realnum;
1764 1.1 christos
1765 1.1 christos /* Find out the location of the saved register without
1766 1.1 christos fetching the corresponding value. */
1767 1.1 christos frame_register_unwind (fi, i, &optimized, &unavailable,
1768 1.1 christos &lval, &addr, &realnum, NULL);
1769 1.1 christos /* For moment, only display registers that were saved on the
1770 1.1 christos stack. */
1771 1.1 christos if (!optimized && !unavailable && lval == lval_memory)
1772 1.1 christos {
1773 1.1 christos if (count == 0)
1774 1.1 christos puts_filtered (" Saved registers:\n ");
1775 1.1 christos else
1776 1.1 christos puts_filtered (",");
1777 1.1 christos wrap_here (" ");
1778 1.1 christos printf_filtered (" %s at ",
1779 1.1 christos gdbarch_register_name (gdbarch, i));
1780 1.1 christos fputs_filtered (paddress (gdbarch, addr), gdb_stdout);
1781 1.1 christos count++;
1782 1.1 christos }
1783 1.1 christos }
1784 1.1 christos if (count || need_nl)
1785 1.8 christos puts_filtered ("\n");
1786 1.8 christos }
1787 1.8 christos }
1788 1.8 christos
1789 1.8 christos /* Return the innermost frame at level LEVEL. */
1790 1.8 christos
1791 1.8 christos static struct frame_info *
1792 1.8 christos leading_innermost_frame (int level)
1793 1.8 christos {
1794 1.8 christos struct frame_info *leading;
1795 1.8 christos
1796 1.8 christos leading = get_current_frame ();
1797 1.8 christos
1798 1.8 christos gdb_assert (level >= 0);
1799 1.8 christos
1800 1.8 christos while (leading != nullptr && level)
1801 1.8 christos {
1802 1.8 christos QUIT;
1803 1.8 christos leading = get_prev_frame (leading);
1804 1.8 christos level--;
1805 1.8 christos }
1806 1.8 christos
1807 1.8 christos return leading;
1808 1.8 christos }
1809 1.8 christos
1810 1.8 christos /* Return the starting frame needed to handle COUNT outermost frames. */
1811 1.8 christos
1812 1.8 christos static struct frame_info *
1813 1.8 christos trailing_outermost_frame (int count)
1814 1.8 christos {
1815 1.8 christos struct frame_info *current;
1816 1.8 christos struct frame_info *trailing;
1817 1.8 christos
1818 1.8 christos trailing = get_current_frame ();
1819 1.8 christos
1820 1.8 christos gdb_assert (count > 0);
1821 1.8 christos
1822 1.8 christos current = trailing;
1823 1.8 christos while (current != nullptr && count--)
1824 1.8 christos {
1825 1.8 christos QUIT;
1826 1.8 christos current = get_prev_frame (current);
1827 1.8 christos }
1828 1.8 christos
1829 1.8 christos /* Will stop when CURRENT reaches the top of the stack.
1830 1.8 christos TRAILING will be COUNT below it. */
1831 1.8 christos while (current != nullptr)
1832 1.8 christos {
1833 1.8 christos QUIT;
1834 1.8 christos trailing = get_prev_frame (trailing);
1835 1.8 christos current = get_prev_frame (current);
1836 1.8 christos }
1837 1.8 christos
1838 1.8 christos return trailing;
1839 1.8 christos }
1840 1.8 christos
1841 1.8 christos /* The core of all the "select-frame" sub-commands. Just wraps a call to
1842 1.8 christos SELECT_FRAME. */
1843 1.8 christos
1844 1.8 christos static void
1845 1.8 christos select_frame_command_core (struct frame_info *fi, bool ignored)
1846 1.8 christos {
1847 1.8 christos struct frame_info *prev_frame = get_selected_frame_if_set ();
1848 1.8 christos select_frame (fi);
1849 1.8 christos if (get_selected_frame_if_set () != prev_frame)
1850 1.8 christos gdb::observers::user_selected_context_changed.notify (USER_SELECTED_FRAME);
1851 1.8 christos }
1852 1.8 christos
1853 1.8 christos /* See stack.h. */
1854 1.8 christos
1855 1.8 christos void
1856 1.9 christos select_frame_for_mi (struct frame_info *fi)
1857 1.8 christos {
1858 1.1 christos select_frame_command_core (fi, false /* Ignored. */);
1859 1.8 christos }
1860 1.8 christos
1861 1.8 christos /* The core of all the "frame" sub-commands. Select frame FI, and if this
1862 1.8 christos means we change frame send out a change notification (otherwise, just
1863 1.8 christos reprint the current frame summary). */
1864 1.8 christos
1865 1.8 christos static void
1866 1.8 christos frame_command_core (struct frame_info *fi, bool ignored)
1867 1.8 christos {
1868 1.8 christos struct frame_info *prev_frame = get_selected_frame_if_set ();
1869 1.8 christos
1870 1.8 christos select_frame (fi);
1871 1.8 christos if (get_selected_frame_if_set () != prev_frame)
1872 1.8 christos gdb::observers::user_selected_context_changed.notify (USER_SELECTED_FRAME);
1873 1.1 christos else
1874 1.1 christos print_selected_thread_frame (current_uiout, USER_SELECTED_FRAME);
1875 1.8 christos }
1876 1.8 christos
1877 1.8 christos /* The three commands 'frame', 'select-frame', and 'info frame' all have a
1878 1.8 christos common set of sub-commands that allow a specific frame to be selected.
1879 1.8 christos All of the sub-command functions are static methods within this class
1880 1.8 christos template which is then instantiated below. The template parameter is a
1881 1.8 christos callback used to implement the functionality of the base command
1882 1.8 christos ('frame', 'select-frame', or 'info frame').
1883 1.8 christos
1884 1.8 christos In the template parameter FI is the frame being selected. The
1885 1.8 christos SELECTED_FRAME_P flag is true if the frame being selected was done by
1886 1.8 christos default, which happens when the user uses the base command with no
1887 1.8 christos arguments. For example the commands 'info frame', 'select-frame',
1888 1.8 christos 'frame' will all cause SELECTED_FRAME_P to be true. In all other cases
1889 1.8 christos SELECTED_FRAME_P is false. */
1890 1.8 christos
1891 1.8 christos template <void (*FPTR) (struct frame_info *fi, bool selected_frame_p)>
1892 1.8 christos class frame_command_helper
1893 1.8 christos {
1894 1.8 christos public:
1895 1.8 christos
1896 1.8 christos /* The "frame level" family of commands. The ARG is an integer that is
1897 1.8 christos the frame's level in the stack. */
1898 1.8 christos static void
1899 1.8 christos level (const char *arg, int from_tty)
1900 1.8 christos {
1901 1.8 christos int level = value_as_long (parse_and_eval (arg));
1902 1.8 christos struct frame_info *fid
1903 1.8 christos = find_relative_frame (get_current_frame (), &level);
1904 1.8 christos if (level != 0)
1905 1.8 christos error (_("No frame at level %s."), arg);
1906 1.8 christos FPTR (fid, false);
1907 1.8 christos }
1908 1.8 christos
1909 1.8 christos /* The "frame address" family of commands. ARG is a stack-pointer
1910 1.8 christos address for an existing frame. This command does not allow new
1911 1.8 christos frames to be created. */
1912 1.8 christos
1913 1.8 christos static void
1914 1.8 christos address (const char *arg, int from_tty)
1915 1.8 christos {
1916 1.8 christos CORE_ADDR addr = value_as_address (parse_and_eval (arg));
1917 1.8 christos struct frame_info *fid = find_frame_for_address (addr);
1918 1.8 christos if (fid == NULL)
1919 1.8 christos error (_("No frame at address %s."), arg);
1920 1.8 christos FPTR (fid, false);
1921 1.8 christos }
1922 1.8 christos
1923 1.8 christos /* The "frame view" family of commands. ARG is one or two addresses and
1924 1.8 christos is used to view a frame that might be outside the current backtrace.
1925 1.8 christos The addresses are stack-pointer address, and (optional) pc-address. */
1926 1.8 christos
1927 1.8 christos static void
1928 1.8 christos view (const char *args, int from_tty)
1929 1.8 christos {
1930 1.8 christos struct frame_info *fid;
1931 1.8 christos
1932 1.8 christos if (args == NULL)
1933 1.8 christos error (_("Missing address argument to view a frame"));
1934 1.8 christos
1935 1.8 christos gdb_argv argv (args);
1936 1.8 christos
1937 1.8 christos if (argv.count () == 2)
1938 1.8 christos {
1939 1.8 christos CORE_ADDR addr[2];
1940 1.8 christos
1941 1.8 christos addr [0] = value_as_address (parse_and_eval (argv[0]));
1942 1.8 christos addr [1] = value_as_address (parse_and_eval (argv[1]));
1943 1.8 christos fid = create_new_frame (addr[0], addr[1]);
1944 1.8 christos }
1945 1.8 christos else
1946 1.8 christos {
1947 1.8 christos CORE_ADDR addr = value_as_address (parse_and_eval (argv[0]));
1948 1.8 christos fid = create_new_frame (addr, false);
1949 1.8 christos }
1950 1.8 christos FPTR (fid, false);
1951 1.8 christos }
1952 1.8 christos
1953 1.8 christos /* The "frame function" family of commands. ARG is the name of a
1954 1.8 christos function within the stack, the first function (searching from frame
1955 1.8 christos 0) with that name will be selected. */
1956 1.8 christos
1957 1.8 christos static void
1958 1.8 christos function (const char *arg, int from_tty)
1959 1.8 christos {
1960 1.8 christos if (arg == NULL)
1961 1.8 christos error (_("Missing function name argument"));
1962 1.8 christos struct frame_info *fid = find_frame_for_function (arg);
1963 1.8 christos if (fid == NULL)
1964 1.8 christos error (_("No frame for function \"%s\"."), arg);
1965 1.8 christos FPTR (fid, false);
1966 1.8 christos }
1967 1.8 christos
1968 1.8 christos /* The "frame" base command, that is, when no sub-command is specified.
1969 1.8 christos If one argument is provided then we assume that this is a frame's
1970 1.8 christos level as historically, this was the supported command syntax that was
1971 1.8 christos used most often.
1972 1.8 christos
1973 1.8 christos If no argument is provided, then the current frame is selected. */
1974 1.8 christos
1975 1.8 christos static void
1976 1.8 christos base_command (const char *arg, int from_tty)
1977 1.8 christos {
1978 1.8 christos if (arg == NULL)
1979 1.8 christos FPTR (get_selected_frame (_("No stack.")), true);
1980 1.8 christos else
1981 1.8 christos level (arg, from_tty);
1982 1.8 christos }
1983 1.8 christos };
1984 1.8 christos
1985 1.8 christos /* Instantiate three FRAME_COMMAND_HELPER instances to implement the
1986 1.8 christos sub-commands for 'info frame', 'frame', and 'select-frame' commands. */
1987 1.8 christos
1988 1.8 christos static frame_command_helper <info_frame_command_core> info_frame_cmd;
1989 1.8 christos static frame_command_helper <frame_command_core> frame_cmd;
1990 1.1 christos static frame_command_helper <select_frame_command_core> select_frame_cmd;
1991 1.1 christos
1992 1.1 christos /* Print briefly all stack frames or just the innermost COUNT_EXP
1993 1.1 christos frames. */
1994 1.9 christos
1995 1.9 christos static void
1996 1.9 christos backtrace_command_1 (const frame_print_options &fp_opts,
1997 1.9 christos const backtrace_cmd_options &bt_opts,
1998 1.1 christos const char *count_exp, int from_tty)
1999 1.1 christos
2000 1.1 christos {
2001 1.8 christos struct frame_info *fi;
2002 1.3 christos int count;
2003 1.1 christos int py_start = 0, py_end = 0;
2004 1.1 christos enum ext_lang_bt_status result = EXT_LANG_BT_ERROR;
2005 1.1 christos
2006 1.1 christos if (!target_has_stack)
2007 1.1 christos error (_("No stack."));
2008 1.1 christos
2009 1.1 christos if (count_exp)
2010 1.1 christos {
2011 1.8 christos count = parse_and_eval_long (count_exp);
2012 1.1 christos if (count < 0)
2013 1.1 christos py_start = count;
2014 1.1 christos else
2015 1.8 christos {
2016 1.8 christos py_start = 0;
2017 1.8 christos /* The argument to apply_ext_lang_frame_filter is the number
2018 1.1 christos of the final frame to print, and frames start at 0. */
2019 1.1 christos py_end = count - 1;
2020 1.1 christos }
2021 1.1 christos }
2022 1.1 christos else
2023 1.1 christos {
2024 1.1 christos py_end = -1;
2025 1.1 christos count = -1;
2026 1.9 christos }
2027 1.9 christos
2028 1.9 christos frame_filter_flags flags = 0;
2029 1.9 christos
2030 1.9 christos if (bt_opts.full)
2031 1.9 christos flags |= PRINT_LOCALS;
2032 1.9 christos if (bt_opts.hide)
2033 1.9 christos flags |= PRINT_HIDE;
2034 1.1 christos
2035 1.3 christos if (!bt_opts.no_filters)
2036 1.1 christos {
2037 1.8 christos enum ext_lang_frame_args arg_type;
2038 1.8 christos
2039 1.8 christos flags |= PRINT_LEVEL | PRINT_FRAME_INFO | PRINT_ARGS;
2040 1.1 christos if (from_tty)
2041 1.9 christos flags |= PRINT_MORE_FRAMES;
2042 1.1 christos
2043 1.9 christos if (fp_opts.print_frame_arguments == print_frame_arguments_scalars)
2044 1.1 christos arg_type = CLI_SCALAR_VALUES;
2045 1.9 christos else if (fp_opts.print_frame_arguments == print_frame_arguments_all)
2046 1.9 christos arg_type = CLI_ALL_VALUES;
2047 1.9 christos else if (fp_opts.print_frame_arguments == print_frame_arguments_presence)
2048 1.9 christos arg_type = CLI_PRESENCE;
2049 1.1 christos else if (fp_opts.print_frame_arguments == print_frame_arguments_none)
2050 1.9 christos arg_type = NO_VALUES;
2051 1.1 christos else
2052 1.3 christos gdb_assert (0);
2053 1.3 christos
2054 1.3 christos result = apply_ext_lang_frame_filter (get_current_frame (), flags,
2055 1.3 christos arg_type, current_uiout,
2056 1.1 christos py_start, py_end);
2057 1.1 christos }
2058 1.9 christos
2059 1.9 christos /* Run the inbuilt backtrace if there are no filters registered, or
2060 1.1 christos "-no-filters" has been specified from the command. */
2061 1.8 christos if (bt_opts.no_filters || result == EXT_LANG_BT_NO_FILTERS)
2062 1.8 christos {
2063 1.8 christos struct frame_info *trailing;
2064 1.8 christos
2065 1.8 christos /* The following code must do two things. First, it must set the
2066 1.8 christos variable TRAILING to the frame from which we should start
2067 1.8 christos printing. Second, it must set the variable count to the number
2068 1.8 christos of frames which we should print, or -1 if all of them. */
2069 1.8 christos
2070 1.8 christos if (count_exp != NULL && count < 0)
2071 1.8 christos {
2072 1.8 christos trailing = trailing_outermost_frame (-count);
2073 1.8 christos count = -1;
2074 1.8 christos }
2075 1.8 christos else
2076 1.8 christos trailing = get_current_frame ();
2077 1.1 christos
2078 1.1 christos for (fi = trailing; fi && count--; fi = get_prev_frame (fi))
2079 1.1 christos {
2080 1.1 christos QUIT;
2081 1.1 christos
2082 1.1 christos /* Don't use print_stack_frame; if an error() occurs it probably
2083 1.1 christos means further attempts to backtrace would fail (on the other
2084 1.1 christos hand, perhaps the code does or could be fixed to make sure
2085 1.9 christos the frame->prev field gets set to NULL in that case). */
2086 1.8 christos
2087 1.1 christos print_frame_info (fp_opts, fi, 1, LOCATION, 1, 0);
2088 1.1 christos if ((flags & PRINT_LOCALS) != 0)
2089 1.1 christos {
2090 1.8 christos struct frame_id frame_id = get_frame_id (fi);
2091 1.1 christos
2092 1.1 christos print_frame_local_vars (fi, false, NULL, NULL, 1, gdb_stdout);
2093 1.1 christos
2094 1.1 christos /* print_frame_local_vars invalidates FI. */
2095 1.1 christos fi = frame_find_by_id (frame_id);
2096 1.1 christos if (fi == NULL)
2097 1.1 christos {
2098 1.1 christos trailing = NULL;
2099 1.1 christos warning (_("Unable to restore previously selected frame."));
2100 1.1 christos break;
2101 1.1 christos }
2102 1.1 christos }
2103 1.1 christos
2104 1.1 christos /* Save the last frame to check for error conditions. */
2105 1.1 christos trailing = fi;
2106 1.1 christos }
2107 1.1 christos
2108 1.1 christos /* If we've stopped before the end, mention that. */
2109 1.1 christos if (fi && from_tty)
2110 1.1 christos printf_filtered (_("(More stack frames follow...)\n"));
2111 1.1 christos
2112 1.1 christos /* If we've run out of frames, and the reason appears to be an error
2113 1.1 christos condition, print it. */
2114 1.1 christos if (fi == NULL && trailing != NULL)
2115 1.1 christos {
2116 1.1 christos enum unwind_stop_reason reason;
2117 1.1 christos
2118 1.1 christos reason = get_frame_unwind_stop_reason (trailing);
2119 1.3 christos if (reason >= UNWIND_FIRST_ERROR)
2120 1.1 christos printf_filtered (_("Backtrace stopped: %s\n"),
2121 1.1 christos frame_stop_reason_string (trailing));
2122 1.1 christos }
2123 1.1 christos }
2124 1.9 christos }
2125 1.9 christos
2126 1.9 christos /* Create an option_def_group array grouping all the "backtrace"
2127 1.9 christos options, with FP_OPTS, BT_CMD_OPT, SET_BT_OPTS as contexts. */
2128 1.9 christos
2129 1.9 christos static inline std::array<gdb::option::option_def_group, 3>
2130 1.9 christos make_backtrace_options_def_group (frame_print_options *fp_opts,
2131 1.1 christos backtrace_cmd_options *bt_cmd_opts,
2132 1.9 christos set_backtrace_options *set_bt_opts)
2133 1.9 christos {
2134 1.9 christos return {{
2135 1.9 christos { {frame_print_option_defs}, fp_opts },
2136 1.9 christos { {set_backtrace_option_defs}, set_bt_opts },
2137 1.9 christos { {backtrace_command_option_defs}, bt_cmd_opts }
2138 1.9 christos }};
2139 1.9 christos }
2140 1.9 christos
2141 1.9 christos /* Parse the backtrace command's qualifiers. Returns ARG advanced
2142 1.1 christos past the qualifiers, if any. BT_CMD_OPTS, if not null, is used to
2143 1.9 christos store the parsed qualifiers. */
2144 1.9 christos
2145 1.9 christos static const char *
2146 1.9 christos parse_backtrace_qualifiers (const char *arg,
2147 1.9 christos backtrace_cmd_options *bt_cmd_opts = nullptr)
2148 1.1 christos {
2149 1.9 christos while (true)
2150 1.9 christos {
2151 1.9 christos const char *save_arg = arg;
2152 1.9 christos std::string this_arg = extract_arg (&arg);
2153 1.9 christos
2154 1.1 christos if (this_arg.empty ())
2155 1.9 christos return arg;
2156 1.9 christos
2157 1.9 christos if (subset_compare (this_arg.c_str (), "no-filters"))
2158 1.9 christos {
2159 1.9 christos if (bt_cmd_opts != nullptr)
2160 1.9 christos bt_cmd_opts->no_filters = true;
2161 1.9 christos }
2162 1.9 christos else if (subset_compare (this_arg.c_str (), "full"))
2163 1.9 christos {
2164 1.9 christos if (bt_cmd_opts != nullptr)
2165 1.9 christos bt_cmd_opts->full = true;
2166 1.1 christos }
2167 1.9 christos else if (subset_compare (this_arg.c_str (), "hide"))
2168 1.9 christos {
2169 1.9 christos if (bt_cmd_opts != nullptr)
2170 1.9 christos bt_cmd_opts->hide = true;
2171 1.9 christos }
2172 1.9 christos else
2173 1.9 christos {
2174 1.1 christos /* Not a recognized qualifier, so stop. */
2175 1.9 christos return save_arg;
2176 1.9 christos }
2177 1.8 christos }
2178 1.9 christos }
2179 1.9 christos
2180 1.9 christos static void
2181 1.9 christos backtrace_command (const char *arg, int from_tty)
2182 1.9 christos {
2183 1.9 christos frame_print_options fp_opts = user_frame_print_options;
2184 1.9 christos backtrace_cmd_options bt_cmd_opts;
2185 1.9 christos set_backtrace_options set_bt_opts = user_set_backtrace_options;
2186 1.9 christos
2187 1.9 christos auto grp
2188 1.9 christos = make_backtrace_options_def_group (&fp_opts, &bt_cmd_opts, &set_bt_opts);
2189 1.9 christos gdb::option::process_options
2190 1.9 christos (&arg, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp);
2191 1.9 christos
2192 1.9 christos /* Parse non-'-'-prefixed qualifiers, for backwards
2193 1.9 christos compatibility. */
2194 1.9 christos if (arg != NULL)
2195 1.8 christos {
2196 1.8 christos arg = parse_backtrace_qualifiers (arg, &bt_cmd_opts);
2197 1.1 christos if (*arg == '\0')
2198 1.1 christos arg = NULL;
2199 1.9 christos }
2200 1.9 christos
2201 1.9 christos /* These options are handled quite deep in the unwind machinery, so
2202 1.9 christos we get to pass them down by swapping globals. */
2203 1.9 christos scoped_restore restore_set_backtrace_options
2204 1.9 christos = make_scoped_restore (&user_set_backtrace_options, set_bt_opts);
2205 1.9 christos
2206 1.9 christos backtrace_command_1 (fp_opts, bt_cmd_opts, arg, from_tty);
2207 1.9 christos }
2208 1.9 christos
2209 1.9 christos /* Completer for the "backtrace" command. */
2210 1.9 christos
2211 1.9 christos static void
2212 1.9 christos backtrace_command_completer (struct cmd_list_element *ignore,
2213 1.9 christos completion_tracker &tracker,
2214 1.9 christos const char *text, const char */*word*/)
2215 1.9 christos {
2216 1.9 christos const auto group
2217 1.9 christos = make_backtrace_options_def_group (nullptr, nullptr, nullptr);
2218 1.9 christos if (gdb::option::complete_options
2219 1.9 christos (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group))
2220 1.9 christos return;
2221 1.9 christos
2222 1.9 christos if (*text != '\0')
2223 1.9 christos {
2224 1.9 christos const char *p = skip_to_space (text);
2225 1.9 christos if (*p == '\0')
2226 1.9 christos {
2227 1.9 christos static const char *const backtrace_cmd_qualifier_choices[] = {
2228 1.9 christos "full", "no-filters", "hide", nullptr,
2229 1.9 christos };
2230 1.9 christos complete_on_enum (tracker, backtrace_cmd_qualifier_choices,
2231 1.9 christos text, text);
2232 1.9 christos
2233 1.9 christos if (tracker.have_completions ())
2234 1.9 christos return;
2235 1.9 christos }
2236 1.9 christos else
2237 1.9 christos {
2238 1.9 christos const char *cmd = parse_backtrace_qualifiers (text);
2239 1.9 christos tracker.advance_custom_word_point_by (cmd - text);
2240 1.9 christos text = cmd;
2241 1.9 christos }
2242 1.9 christos }
2243 1.9 christos
2244 1.1 christos const char *word = advance_to_expression_complete_word_point (tracker, text);
2245 1.1 christos expression_completer (ignore, tracker, text, word);
2246 1.1 christos }
2247 1.1 christos
2248 1.1 christos /* Iterate over the local variables of a block B, calling CB with
2249 1.1 christos CB_DATA. */
2250 1.3 christos
2251 1.1 christos static void
2252 1.1 christos iterate_over_block_locals (const struct block *b,
2253 1.1 christos iterate_over_block_arg_local_vars_cb cb,
2254 1.1 christos void *cb_data)
2255 1.1 christos {
2256 1.1 christos struct block_iterator iter;
2257 1.1 christos struct symbol *sym;
2258 1.1 christos
2259 1.1 christos ALL_BLOCK_SYMBOLS (b, iter, sym)
2260 1.1 christos {
2261 1.9 christos switch (SYMBOL_CLASS (sym))
2262 1.1 christos {
2263 1.1 christos case LOC_CONST:
2264 1.1 christos case LOC_LOCAL:
2265 1.1 christos case LOC_REGISTER:
2266 1.8 christos case LOC_STATIC:
2267 1.1 christos case LOC_COMPUTED:
2268 1.1 christos case LOC_OPTIMIZED_OUT:
2269 1.1 christos if (SYMBOL_IS_ARGUMENT (sym))
2270 1.1 christos break;
2271 1.9 christos if (SYMBOL_DOMAIN (sym) == COMMON_BLOCK_DOMAIN)
2272 1.1 christos break;
2273 1.1 christos (*cb) (sym->print_name (), sym, cb_data);
2274 1.1 christos break;
2275 1.1 christos
2276 1.1 christos default:
2277 1.1 christos /* Ignore symbols which are not locals. */
2278 1.1 christos break;
2279 1.1 christos }
2280 1.1 christos }
2281 1.1 christos }
2282 1.1 christos
2283 1.1 christos /* Iterate over all the local variables in block B, including all its
2284 1.1 christos superblocks, stopping when the top-level block is reached. */
2285 1.3 christos
2286 1.1 christos void
2287 1.1 christos iterate_over_block_local_vars (const struct block *block,
2288 1.1 christos iterate_over_block_arg_local_vars_cb cb,
2289 1.1 christos void *cb_data)
2290 1.1 christos {
2291 1.1 christos while (block)
2292 1.1 christos {
2293 1.1 christos iterate_over_block_locals (block, cb, cb_data);
2294 1.1 christos /* After handling the function's top-level block, stop. Don't
2295 1.1 christos continue to its superblock, the block of per-file
2296 1.1 christos symbols. */
2297 1.1 christos if (BLOCK_FUNCTION (block))
2298 1.1 christos break;
2299 1.1 christos block = BLOCK_SUPERBLOCK (block);
2300 1.1 christos }
2301 1.1 christos }
2302 1.1 christos
2303 1.1 christos /* Data to be passed around in the calls to the locals and args
2304 1.1 christos iterators. */
2305 1.1 christos
2306 1.8 christos struct print_variable_and_value_data
2307 1.8 christos {
2308 1.1 christos gdb::optional<compiled_regex> preg;
2309 1.1 christos gdb::optional<compiled_regex> treg;
2310 1.1 christos struct frame_id frame_id;
2311 1.1 christos int num_tabs;
2312 1.1 christos struct ui_file *stream;
2313 1.1 christos int values_printed;
2314 1.1 christos };
2315 1.1 christos
2316 1.1 christos /* The callback for the locals and args iterators. */
2317 1.1 christos
2318 1.1 christos static void
2319 1.1 christos do_print_variable_and_value (const char *print_name,
2320 1.1 christos struct symbol *sym,
2321 1.6 christos void *cb_data)
2322 1.6 christos {
2323 1.1 christos struct print_variable_and_value_data *p
2324 1.1 christos = (struct print_variable_and_value_data *) cb_data;
2325 1.8 christos struct frame_info *frame;
2326 1.9 christos
2327 1.8 christos if (p->preg.has_value ()
2328 1.8 christos && p->preg->exec (sym->natural_name (), 0, NULL, 0) != 0)
2329 1.8 christos return;
2330 1.8 christos if (p->treg.has_value ()
2331 1.8 christos && !treg_matches_sym_type_name (*p->treg, sym))
2332 1.1 christos return;
2333 1.1 christos
2334 1.1 christos frame = frame_find_by_id (p->frame_id);
2335 1.1 christos if (frame == NULL)
2336 1.1 christos {
2337 1.1 christos warning (_("Unable to restore previously selected frame."));
2338 1.1 christos return;
2339 1.1 christos }
2340 1.1 christos
2341 1.1 christos print_variable_and_value (print_name, sym, frame, p->stream, p->num_tabs);
2342 1.1 christos
2343 1.1 christos /* print_variable_and_value invalidates FRAME. */
2344 1.1 christos frame = NULL;
2345 1.1 christos
2346 1.1 christos p->values_printed = 1;
2347 1.8 christos }
2348 1.8 christos
2349 1.8 christos /* Prepares the regular expression REG from REGEXP.
2350 1.8 christos If REGEXP is NULL, it results in an empty regular expression. */
2351 1.8 christos
2352 1.8 christos static void
2353 1.8 christos prepare_reg (const char *regexp, gdb::optional<compiled_regex> *reg)
2354 1.8 christos {
2355 1.8 christos if (regexp != NULL)
2356 1.8 christos {
2357 1.8 christos int cflags = REG_NOSUB | (case_sensitivity == case_sensitive_off
2358 1.8 christos ? REG_ICASE : 0);
2359 1.8 christos reg->emplace (regexp, cflags, _("Invalid regexp"));
2360 1.8 christos }
2361 1.8 christos else
2362 1.8 christos reg->reset ();
2363 1.1 christos }
2364 1.1 christos
2365 1.8 christos /* Print all variables from the innermost up to the function block of FRAME.
2366 1.8 christos Print them with values to STREAM indented by NUM_TABS.
2367 1.8 christos If REGEXP is not NULL, only print local variables whose name
2368 1.8 christos matches REGEXP.
2369 1.8 christos If T_REGEXP is not NULL, only print local variables whose type
2370 1.8 christos matches T_REGEXP.
2371 1.1 christos If no local variables have been printed and !QUIET, prints a message
2372 1.1 christos explaining why no local variables could be printed.
2373 1.1 christos
2374 1.1 christos This function will invalidate FRAME. */
2375 1.8 christos
2376 1.8 christos static void
2377 1.8 christos print_frame_local_vars (struct frame_info *frame,
2378 1.8 christos bool quiet,
2379 1.1 christos const char *regexp, const char *t_regexp,
2380 1.1 christos int num_tabs, struct ui_file *stream)
2381 1.3 christos {
2382 1.1 christos struct print_variable_and_value_data cb_data;
2383 1.1 christos const struct block *block;
2384 1.1 christos CORE_ADDR pc;
2385 1.1 christos
2386 1.8 christos if (!get_frame_pc_if_available (frame, &pc))
2387 1.8 christos {
2388 1.8 christos if (!quiet)
2389 1.1 christos fprintf_filtered (stream,
2390 1.1 christos _("PC unavailable, cannot determine locals.\n"));
2391 1.1 christos return;
2392 1.1 christos }
2393 1.1 christos
2394 1.1 christos block = get_frame_block (frame, 0);
2395 1.8 christos if (block == 0)
2396 1.8 christos {
2397 1.1 christos if (!quiet)
2398 1.1 christos fprintf_filtered (stream, "No symbol table info available.\n");
2399 1.1 christos return;
2400 1.8 christos }
2401 1.8 christos
2402 1.1 christos prepare_reg (regexp, &cb_data.preg);
2403 1.1 christos prepare_reg (t_regexp, &cb_data.treg);
2404 1.1 christos cb_data.frame_id = get_frame_id (frame);
2405 1.1 christos cb_data.num_tabs = 4 * num_tabs;
2406 1.1 christos cb_data.stream = stream;
2407 1.6 christos cb_data.values_printed = 0;
2408 1.6 christos
2409 1.6 christos /* Temporarily change the selected frame to the given FRAME.
2410 1.8 christos This allows routines that rely on the selected frame instead
2411 1.6 christos of being given a frame as parameter to use the correct frame. */
2412 1.6 christos scoped_restore_selected_frame restore_selected_frame;
2413 1.8 christos select_frame (frame);
2414 1.8 christos
2415 1.8 christos iterate_over_block_local_vars (block,
2416 1.8 christos do_print_variable_and_value,
2417 1.8 christos &cb_data);
2418 1.6 christos
2419 1.8 christos if (!cb_data.values_printed && !quiet)
2420 1.8 christos {
2421 1.8 christos if (regexp == NULL && t_regexp == NULL)
2422 1.8 christos fprintf_filtered (stream, _("No locals.\n"));
2423 1.6 christos else
2424 1.1 christos fprintf_filtered (stream, _("No matching locals.\n"));
2425 1.1 christos }
2426 1.9 christos }
2427 1.9 christos
2428 1.9 christos /* Structure to hold the values of the options used by the 'info
2429 1.9 christos variables' command and other similar commands. These correspond to the
2430 1.9 christos -q and -t options. */
2431 1.1 christos
2432 1.8 christos struct info_print_options
2433 1.9 christos {
2434 1.9 christos bool quiet = false;
2435 1.9 christos char *type_regexp = nullptr;
2436 1.9 christos
2437 1.9 christos ~info_print_options ()
2438 1.9 christos {
2439 1.9 christos xfree (type_regexp);
2440 1.9 christos }
2441 1.9 christos };
2442 1.9 christos
2443 1.9 christos /* The options used by the 'info locals' and 'info args' commands. */
2444 1.9 christos
2445 1.9 christos static const gdb::option::option_def info_print_options_defs[] = {
2446 1.9 christos gdb::option::boolean_option_def<info_print_options> {
2447 1.9 christos "q",
2448 1.9 christos [] (info_print_options *opt) { return &opt->quiet; },
2449 1.9 christos nullptr, /* show_cmd_cb */
2450 1.9 christos nullptr /* set_doc */
2451 1.9 christos },
2452 1.9 christos
2453 1.9 christos gdb::option::string_option_def<info_print_options> {
2454 1.9 christos "t",
2455 1.9 christos [] (info_print_options *opt) { return &opt->type_regexp; },
2456 1.9 christos nullptr, /* show_cmd_cb */
2457 1.9 christos nullptr /* set_doc */
2458 1.9 christos }
2459 1.9 christos };
2460 1.9 christos
2461 1.9 christos /* Returns the option group used by 'info locals' and 'info args'
2462 1.9 christos commands. */
2463 1.9 christos
2464 1.9 christos static gdb::option::option_def_group
2465 1.9 christos make_info_print_options_def_group (info_print_options *opts)
2466 1.9 christos {
2467 1.8 christos return {{info_print_options_defs}, opts};
2468 1.9 christos }
2469 1.8 christos
2470 1.9 christos /* Command completer for 'info locals' and 'info args'. */
2471 1.9 christos
2472 1.9 christos static void
2473 1.9 christos info_print_command_completer (struct cmd_list_element *ignore,
2474 1.9 christos completion_tracker &tracker,
2475 1.9 christos const char *text, const char * /* word */)
2476 1.9 christos {
2477 1.9 christos const auto group
2478 1.9 christos = make_info_print_options_def_group (nullptr);
2479 1.9 christos if (gdb::option::complete_options
2480 1.9 christos (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group))
2481 1.9 christos return;
2482 1.9 christos
2483 1.9 christos const char *word = advance_to_expression_complete_word_point (tracker, text);
2484 1.9 christos symbol_completer (ignore, tracker, text, word);
2485 1.9 christos }
2486 1.9 christos
2487 1.9 christos /* Implement the 'info locals' command. */
2488 1.9 christos
2489 1.9 christos void
2490 1.9 christos info_locals_command (const char *args, int from_tty)
2491 1.9 christos {
2492 1.9 christos info_print_options opts;
2493 1.9 christos auto grp = make_info_print_options_def_group (&opts);
2494 1.9 christos gdb::option::process_options
2495 1.9 christos (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp);
2496 1.8 christos if (args != nullptr && *args == '\0')
2497 1.1 christos args = nullptr;
2498 1.9 christos
2499 1.1 christos print_frame_local_vars (get_selected_frame (_("No frame selected.")),
2500 1.1 christos opts.quiet, args, opts.type_regexp,
2501 1.1 christos 0, gdb_stdout);
2502 1.8 christos }
2503 1.1 christos
2504 1.1 christos /* Iterate over all the argument variables in block B. */
2505 1.3 christos
2506 1.1 christos void
2507 1.1 christos iterate_over_block_arg_vars (const struct block *b,
2508 1.1 christos iterate_over_block_arg_local_vars_cb cb,
2509 1.1 christos void *cb_data)
2510 1.1 christos {
2511 1.1 christos struct block_iterator iter;
2512 1.1 christos struct symbol *sym, *sym2;
2513 1.1 christos
2514 1.1 christos ALL_BLOCK_SYMBOLS (b, iter, sym)
2515 1.1 christos {
2516 1.1 christos /* Don't worry about things which aren't arguments. */
2517 1.1 christos if (SYMBOL_IS_ARGUMENT (sym))
2518 1.1 christos {
2519 1.1 christos /* We have to look up the symbol because arguments can have
2520 1.1 christos two entries (one a parameter, one a local) and the one we
2521 1.1 christos want is the local, which lookup_symbol will find for us.
2522 1.1 christos This includes gcc1 (not gcc2) on the sparc when passing a
2523 1.1 christos small structure and gcc2 when the argument type is float
2524 1.1 christos and it is passed as a double and converted to float by
2525 1.1 christos the prologue (in the latter case the type of the LOC_ARG
2526 1.1 christos symbol is double and the type of the LOC_LOCAL symbol is
2527 1.1 christos float). There are also LOC_ARG/LOC_REGISTER pairs which
2528 1.9 christos are not combined in symbol-reading. */
2529 1.8 christos
2530 1.9 christos sym2 = lookup_symbol_search_name (sym->search_name (),
2531 1.1 christos b, VAR_DOMAIN).symbol;
2532 1.1 christos (*cb) (sym->print_name (), sym2, cb_data);
2533 1.1 christos }
2534 1.1 christos }
2535 1.1 christos }
2536 1.1 christos
2537 1.8 christos /* Print all argument variables of the function of FRAME.
2538 1.8 christos Print them with values to STREAM.
2539 1.8 christos If REGEXP is not NULL, only print argument variables whose name
2540 1.8 christos matches REGEXP.
2541 1.8 christos If T_REGEXP is not NULL, only print argument variables whose type
2542 1.8 christos matches T_REGEXP.
2543 1.1 christos If no argument variables have been printed and !QUIET, prints a message
2544 1.1 christos explaining why no argument variables could be printed.
2545 1.1 christos
2546 1.1 christos This function will invalidate FRAME. */
2547 1.8 christos
2548 1.8 christos static void
2549 1.8 christos print_frame_arg_vars (struct frame_info *frame,
2550 1.8 christos bool quiet,
2551 1.1 christos const char *regexp, const char *t_regexp,
2552 1.1 christos struct ui_file *stream)
2553 1.1 christos {
2554 1.1 christos struct print_variable_and_value_data cb_data;
2555 1.8 christos struct symbol *func;
2556 1.8 christos CORE_ADDR pc;
2557 1.1 christos gdb::optional<compiled_regex> preg;
2558 1.1 christos gdb::optional<compiled_regex> treg;
2559 1.1 christos
2560 1.8 christos if (!get_frame_pc_if_available (frame, &pc))
2561 1.8 christos {
2562 1.8 christos if (!quiet)
2563 1.1 christos fprintf_filtered (stream,
2564 1.1 christos _("PC unavailable, cannot determine args.\n"));
2565 1.1 christos return;
2566 1.1 christos }
2567 1.1 christos
2568 1.1 christos func = get_frame_function (frame);
2569 1.8 christos if (func == NULL)
2570 1.8 christos {
2571 1.1 christos if (!quiet)
2572 1.1 christos fprintf_filtered (stream, _("No symbol table info available.\n"));
2573 1.1 christos return;
2574 1.8 christos }
2575 1.8 christos
2576 1.1 christos prepare_reg (regexp, &cb_data.preg);
2577 1.1 christos prepare_reg (t_regexp, &cb_data.treg);
2578 1.8 christos cb_data.frame_id = get_frame_id (frame);
2579 1.1 christos cb_data.num_tabs = 0;
2580 1.1 christos cb_data.stream = stream;
2581 1.1 christos cb_data.values_printed = 0;
2582 1.1 christos
2583 1.1 christos iterate_over_block_arg_vars (SYMBOL_BLOCK_VALUE (func),
2584 1.1 christos do_print_variable_and_value, &cb_data);
2585 1.1 christos
2586 1.1 christos /* do_print_variable_and_value invalidates FRAME. */
2587 1.8 christos frame = NULL;
2588 1.8 christos
2589 1.8 christos if (!cb_data.values_printed && !quiet)
2590 1.8 christos {
2591 1.8 christos if (regexp == NULL && t_regexp == NULL)
2592 1.8 christos fprintf_filtered (stream, _("No arguments.\n"));
2593 1.8 christos else
2594 1.1 christos fprintf_filtered (stream, _("No matching arguments.\n"));
2595 1.1 christos }
2596 1.9 christos }
2597 1.9 christos
2598 1.1 christos /* Implement the 'info args' command. */
2599 1.8 christos
2600 1.1 christos void
2601 1.9 christos info_args_command (const char *args, int from_tty)
2602 1.9 christos {
2603 1.9 christos info_print_options opts;
2604 1.9 christos auto grp = make_info_print_options_def_group (&opts);
2605 1.9 christos gdb::option::process_options
2606 1.9 christos (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp);
2607 1.8 christos if (args != nullptr && *args == '\0')
2608 1.1 christos args = nullptr;
2609 1.9 christos
2610 1.1 christos print_frame_arg_vars (get_selected_frame (_("No frame selected.")),
2611 1.1 christos opts.quiet, args, opts.type_regexp, gdb_stdout);
2612 1.1 christos }
2613 1.1 christos
2614 1.1 christos /* Return the symbol-block in which the selected frame is executing.
2616 1.1 christos Can return zero under various legitimate circumstances.
2617 1.1 christos
2618 1.1 christos If ADDR_IN_BLOCK is non-zero, set *ADDR_IN_BLOCK to the relevant
2619 1.3 christos code address within the block returned. We use this to decide
2620 1.1 christos which macros are in scope. */
2621 1.1 christos
2622 1.1 christos const struct block *
2623 1.1 christos get_selected_block (CORE_ADDR *addr_in_block)
2624 1.1 christos {
2625 1.1 christos if (!has_stack_frames ())
2626 1.1 christos return 0;
2627 1.1 christos
2628 1.1 christos return get_frame_block (get_selected_frame (NULL), addr_in_block);
2629 1.1 christos }
2630 1.1 christos
2631 1.1 christos /* Find a frame a certain number of levels away from FRAME.
2632 1.1 christos LEVEL_OFFSET_PTR points to an int containing the number of levels.
2633 1.1 christos Positive means go to earlier frames (up); negative, the reverse.
2634 1.1 christos The int that contains the number of levels is counted toward
2635 1.1 christos zero as the frames for those levels are found.
2636 1.1 christos If the top or bottom frame is reached, that frame is returned,
2637 1.1 christos but the final value of *LEVEL_OFFSET_PTR is nonzero and indicates
2638 1.1 christos how much farther the original request asked to go. */
2639 1.1 christos
2640 1.1 christos struct frame_info *
2641 1.1 christos find_relative_frame (struct frame_info *frame, int *level_offset_ptr)
2642 1.1 christos {
2643 1.1 christos /* Going up is simple: just call get_prev_frame enough times or
2644 1.1 christos until the initial frame is reached. */
2645 1.1 christos while (*level_offset_ptr > 0)
2646 1.1 christos {
2647 1.1 christos struct frame_info *prev = get_prev_frame (frame);
2648 1.1 christos
2649 1.1 christos if (!prev)
2650 1.1 christos break;
2651 1.1 christos (*level_offset_ptr)--;
2652 1.1 christos frame = prev;
2653 1.1 christos }
2654 1.1 christos
2655 1.1 christos /* Going down is just as simple. */
2656 1.1 christos while (*level_offset_ptr < 0)
2657 1.1 christos {
2658 1.1 christos struct frame_info *next = get_next_frame (frame);
2659 1.1 christos
2660 1.1 christos if (!next)
2661 1.1 christos break;
2662 1.1 christos (*level_offset_ptr)++;
2663 1.1 christos frame = next;
2664 1.1 christos }
2665 1.1 christos
2666 1.1 christos return frame;
2667 1.1 christos }
2668 1.1 christos
2669 1.1 christos /* Select the frame up one or COUNT_EXP stack levels from the
2670 1.3 christos previously selected frame, and print it briefly. */
2671 1.1 christos
2672 1.1 christos static void
2673 1.1 christos up_silently_base (const char *count_exp)
2674 1.1 christos {
2675 1.1 christos struct frame_info *frame;
2676 1.1 christos int count = 1;
2677 1.1 christos
2678 1.1 christos if (count_exp)
2679 1.1 christos count = parse_and_eval_long (count_exp);
2680 1.1 christos
2681 1.1 christos frame = find_relative_frame (get_selected_frame ("No stack."), &count);
2682 1.1 christos if (count != 0 && count_exp == NULL)
2683 1.1 christos error (_("Initial frame selected; you cannot go up."));
2684 1.1 christos select_frame (frame);
2685 1.8 christos }
2686 1.1 christos
2687 1.1 christos static void
2688 1.1 christos up_silently_command (const char *count_exp, int from_tty)
2689 1.1 christos {
2690 1.1 christos up_silently_base (count_exp);
2691 1.8 christos }
2692 1.1 christos
2693 1.1 christos static void
2694 1.8 christos up_command (const char *count_exp, int from_tty)
2695 1.1 christos {
2696 1.1 christos up_silently_base (count_exp);
2697 1.1 christos gdb::observers::user_selected_context_changed.notify (USER_SELECTED_FRAME);
2698 1.1 christos }
2699 1.1 christos
2700 1.1 christos /* Select the frame down one or COUNT_EXP stack levels from the previously
2701 1.3 christos selected frame, and print it briefly. */
2702 1.1 christos
2703 1.1 christos static void
2704 1.1 christos down_silently_base (const char *count_exp)
2705 1.1 christos {
2706 1.1 christos struct frame_info *frame;
2707 1.1 christos int count = -1;
2708 1.1 christos
2709 1.1 christos if (count_exp)
2710 1.1 christos count = -parse_and_eval_long (count_exp);
2711 1.1 christos
2712 1.1 christos frame = find_relative_frame (get_selected_frame ("No stack."), &count);
2713 1.1 christos if (count != 0 && count_exp == NULL)
2714 1.1 christos {
2715 1.1 christos /* We only do this if COUNT_EXP is not specified. That way
2716 1.1 christos "down" means to really go down (and let me know if that is
2717 1.1 christos impossible), but "down 9999" can be used to mean go all the
2718 1.1 christos way down without getting an error. */
2719 1.1 christos
2720 1.1 christos error (_("Bottom (innermost) frame selected; you cannot go down."));
2721 1.1 christos }
2722 1.1 christos
2723 1.1 christos select_frame (frame);
2724 1.8 christos }
2725 1.1 christos
2726 1.1 christos static void
2727 1.1 christos down_silently_command (const char *count_exp, int from_tty)
2728 1.1 christos {
2729 1.1 christos down_silently_base (count_exp);
2730 1.8 christos }
2731 1.1 christos
2732 1.1 christos static void
2733 1.8 christos down_command (const char *count_exp, int from_tty)
2734 1.1 christos {
2735 1.1 christos down_silently_base (count_exp);
2736 1.1 christos gdb::observers::user_selected_context_changed.notify (USER_SELECTED_FRAME);
2737 1.8 christos }
2738 1.1 christos
2739 1.1 christos void
2740 1.1 christos return_command (const char *retval_exp, int from_tty)
2741 1.1 christos {
2742 1.1 christos /* Initialize it just to avoid a GCC false warning. */
2743 1.1 christos enum return_value_convention rv_conv = RETURN_VALUE_STRUCT_CONVENTION;
2744 1.1 christos struct frame_info *thisframe;
2745 1.1 christos struct gdbarch *gdbarch;
2746 1.1 christos struct symbol *thisfun;
2747 1.1 christos struct value *return_value = NULL;
2748 1.1 christos struct value *function = NULL;
2749 1.1 christos const char *query_prefix = "";
2750 1.1 christos
2751 1.1 christos thisframe = get_selected_frame ("No selected frame.");
2752 1.1 christos thisfun = get_frame_function (thisframe);
2753 1.1 christos gdbarch = get_frame_arch (thisframe);
2754 1.1 christos
2755 1.1 christos if (get_frame_type (get_current_frame ()) == INLINE_FRAME)
2756 1.1 christos error (_("Can not force return from an inlined function."));
2757 1.1 christos
2758 1.1 christos /* Compute the return value. If the computation triggers an error,
2759 1.1 christos let it bail. If the return type can't be handled, set
2760 1.1 christos RETURN_VALUE to NULL, and QUERY_PREFIX to an informational
2761 1.7 christos message. */
2762 1.1 christos if (retval_exp)
2763 1.1 christos {
2764 1.1 christos expression_up retval_expr = parse_expression (retval_exp);
2765 1.1 christos struct type *return_type = NULL;
2766 1.7 christos
2767 1.1 christos /* Compute the return value. Should the computation fail, this
2768 1.1 christos call throws an error. */
2769 1.1 christos return_value = evaluate_expression (retval_expr.get ());
2770 1.1 christos
2771 1.1 christos /* Cast return value to the return type of the function. Should
2772 1.1 christos the cast fail, this call throws an error. */
2773 1.1 christos if (thisfun != NULL)
2774 1.1 christos return_type = TYPE_TARGET_TYPE (SYMBOL_TYPE (thisfun));
2775 1.1 christos if (return_type == NULL)
2776 1.1 christos {
2777 1.1 christos if (retval_expr->elts[0].opcode != UNOP_CAST
2778 1.1 christos && retval_expr->elts[0].opcode != UNOP_CAST_TYPE)
2779 1.1 christos error (_("Return value type not available for selected "
2780 1.1 christos "stack frame.\n"
2781 1.6 christos "Please use an explicit cast of the value to return."));
2782 1.1 christos return_type = value_type (return_value);
2783 1.1 christos }
2784 1.1 christos return_type = check_typedef (return_type);
2785 1.1 christos return_value = value_cast (return_type, return_value);
2786 1.1 christos
2787 1.1 christos /* Make sure the value is fully evaluated. It may live in the
2788 1.1 christos stack frame we're about to pop. */
2789 1.1 christos if (value_lazy (return_value))
2790 1.6 christos value_fetch_lazy (return_value);
2791 1.1 christos
2792 1.1 christos if (thisfun != NULL)
2793 1.9 christos function = read_var_value (thisfun, NULL, thisframe);
2794 1.1 christos
2795 1.1 christos rv_conv = RETURN_VALUE_REGISTER_CONVENTION;
2796 1.1 christos if (return_type->code () == TYPE_CODE_VOID)
2797 1.1 christos /* If the return-type is "void", don't try to find the
2798 1.1 christos return-value's location. However, do still evaluate the
2799 1.1 christos return expression so that, even when the expression result
2800 1.1 christos is discarded, side effects such as "return i++" still
2801 1.1 christos occur. */
2802 1.1 christos return_value = NULL;
2803 1.1 christos else if (thisfun != NULL)
2804 1.1 christos {
2805 1.1 christos rv_conv = struct_return_convention (gdbarch, function, return_type);
2806 1.1 christos if (rv_conv == RETURN_VALUE_STRUCT_CONVENTION
2807 1.1 christos || rv_conv == RETURN_VALUE_ABI_RETURNS_ADDRESS)
2808 1.1 christos {
2809 1.1 christos query_prefix = "The location at which to store the "
2810 1.1 christos "function's return value is unknown.\n"
2811 1.1 christos "If you continue, the return value "
2812 1.1 christos "that you specified will be ignored.\n";
2813 1.1 christos return_value = NULL;
2814 1.1 christos }
2815 1.1 christos }
2816 1.1 christos }
2817 1.1 christos
2818 1.1 christos /* Does an interactive user really want to do this? Include
2819 1.1 christos information, such as how well GDB can handle the return value, in
2820 1.1 christos the query message. */
2821 1.1 christos if (from_tty)
2822 1.1 christos {
2823 1.1 christos int confirmed;
2824 1.1 christos
2825 1.1 christos if (thisfun == NULL)
2826 1.5 christos confirmed = query (_("%sMake selected stack frame return now? "),
2827 1.5 christos query_prefix);
2828 1.5 christos else
2829 1.5 christos {
2830 1.9 christos if (TYPE_NO_RETURN (thisfun->type))
2831 1.5 christos warning (_("Function does not return normally to caller."));
2832 1.1 christos confirmed = query (_("%sMake %s return now? "), query_prefix,
2833 1.1 christos thisfun->print_name ());
2834 1.1 christos }
2835 1.1 christos if (!confirmed)
2836 1.1 christos error (_("Not confirmed"));
2837 1.1 christos }
2838 1.1 christos
2839 1.1 christos /* Discard the selected frame and all frames inner-to it. */
2840 1.1 christos frame_pop (get_selected_frame (NULL));
2841 1.1 christos
2842 1.1 christos /* Store RETURN_VALUE in the just-returned register set. */
2843 1.8 christos if (return_value != NULL)
2844 1.1 christos {
2845 1.1 christos struct type *return_type = value_type (return_value);
2846 1.1 christos struct gdbarch *cache_arch = get_current_regcache ()->arch ();
2847 1.8 christos
2848 1.1 christos gdb_assert (rv_conv != RETURN_VALUE_STRUCT_CONVENTION
2849 1.1 christos && rv_conv != RETURN_VALUE_ABI_RETURNS_ADDRESS);
2850 1.1 christos gdbarch_return_value (cache_arch, function, return_type,
2851 1.1 christos get_current_regcache (), NULL /*read*/,
2852 1.1 christos value_contents (return_value) /*write*/);
2853 1.1 christos }
2854 1.1 christos
2855 1.1 christos /* If we are at the end of a call dummy now, pop the dummy frame
2856 1.1 christos too. */
2857 1.6 christos if (get_frame_type (get_current_frame ()) == DUMMY_FRAME)
2858 1.1 christos frame_pop (get_current_frame ());
2859 1.1 christos
2860 1.6 christos select_frame (get_current_frame ());
2861 1.1 christos /* If interactive, print the frame that is now current. */
2862 1.1 christos if (from_tty)
2863 1.8 christos print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1);
2864 1.8 christos }
2865 1.1 christos
2866 1.8 christos /* Find the most inner frame in the current stack for a function called
2867 1.8 christos FUNCTION_NAME. If no matching frame is found return NULL. */
2868 1.1 christos
2869 1.8 christos static struct frame_info *
2870 1.8 christos find_frame_for_function (const char *function_name)
2871 1.8 christos {
2872 1.8 christos /* Used to hold the lower and upper addresses for each of the
2873 1.8 christos SYMTAB_AND_LINEs found for functions matching FUNCTION_NAME. */
2874 1.8 christos struct function_bounds
2875 1.1 christos {
2876 1.8 christos CORE_ADDR low, high;
2877 1.1 christos };
2878 1.1 christos struct frame_info *frame;
2879 1.8 christos bool found = false;
2880 1.1 christos int level = 1;
2881 1.6 christos
2882 1.8 christos gdb_assert (function_name != NULL);
2883 1.8 christos
2884 1.8 christos frame = get_current_frame ();
2885 1.8 christos std::vector<symtab_and_line> sals
2886 1.8 christos = decode_line_with_current_source (function_name,
2887 1.1 christos DECODE_LINE_FUNFIRSTLINE);
2888 1.8 christos gdb::def_vector<function_bounds> func_bounds (sals.size ());
2889 1.1 christos for (size_t i = 0; i < sals.size (); i++)
2890 1.8 christos {
2891 1.8 christos if (sals[i].pspace != current_program_space)
2892 1.1 christos func_bounds[i].low = func_bounds[i].high = 0;
2893 1.1 christos else if (sals[i].pc == 0
2894 1.8 christos || find_pc_partial_function (sals[i].pc, NULL,
2895 1.1 christos &func_bounds[i].low,
2896 1.1 christos &func_bounds[i].high) == 0)
2897 1.1 christos func_bounds[i].low = func_bounds[i].high = 0;
2898 1.1 christos }
2899 1.8 christos
2900 1.1 christos do
2901 1.1 christos {
2902 1.1 christos for (size_t i = 0; (i < sals.size () && !found); i++)
2903 1.1 christos found = (get_frame_pc (frame) >= func_bounds[i].low
2904 1.1 christos && get_frame_pc (frame) < func_bounds[i].high);
2905 1.1 christos if (!found)
2906 1.1 christos {
2907 1.1 christos level = 1;
2908 1.1 christos frame = find_relative_frame (frame, &level);
2909 1.1 christos }
2910 1.8 christos }
2911 1.8 christos while (!found && level == 0);
2912 1.1 christos
2913 1.8 christos if (!found)
2914 1.8 christos frame = NULL;
2915 1.8 christos
2916 1.8 christos return frame;
2917 1.8 christos }
2918 1.8 christos
2919 1.8 christos /* Implements the dbx 'func' command. */
2920 1.8 christos
2921 1.8 christos static void
2922 1.8 christos func_command (const char *arg, int from_tty)
2923 1.8 christos {
2924 1.8 christos if (arg == NULL)
2925 1.8 christos return;
2926 1.8 christos
2927 1.8 christos struct frame_info *frame = find_frame_for_function (arg);
2928 1.8 christos if (frame == NULL)
2929 1.8 christos error (_("'%s' not within current stack frame."), arg);
2930 1.8 christos if (frame != get_selected_frame (NULL))
2931 1.8 christos {
2932 1.8 christos select_frame (frame);
2933 1.8 christos print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1);
2934 1.9 christos }
2935 1.9 christos }
2936 1.9 christos
2937 1.9 christos /* The qcs command line flags for the "frame apply" commands. Keep
2938 1.9 christos this in sync with the "thread apply" commands. */
2939 1.9 christos
2940 1.9 christos using qcs_flag_option_def
2941 1.9 christos = gdb::option::flag_option_def<qcs_flags>;
2942 1.9 christos
2943 1.9 christos static const gdb::option::option_def fr_qcs_flags_option_defs[] = {
2944 1.9 christos qcs_flag_option_def {
2945 1.9 christos "q", [] (qcs_flags *opt) { return &opt->quiet; },
2946 1.9 christos N_("Disables printing the frame location information."),
2947 1.9 christos },
2948 1.9 christos
2949 1.9 christos qcs_flag_option_def {
2950 1.9 christos "c", [] (qcs_flags *opt) { return &opt->cont; },
2951 1.9 christos N_("Print any error raised by COMMAND and continue."),
2952 1.9 christos },
2953 1.9 christos
2954 1.9 christos qcs_flag_option_def {
2955 1.9 christos "s", [] (qcs_flags *opt) { return &opt->silent; },
2956 1.9 christos N_("Silently ignore any errors or empty output produced by COMMAND."),
2957 1.9 christos },
2958 1.9 christos };
2959 1.9 christos
2960 1.9 christos /* Create an option_def_group array for all the "frame apply" options,
2961 1.9 christos with FLAGS and SET_BT_OPTS as context. */
2962 1.9 christos
2963 1.9 christos static inline std::array<gdb::option::option_def_group, 2>
2964 1.9 christos make_frame_apply_options_def_group (qcs_flags *flags,
2965 1.9 christos set_backtrace_options *set_bt_opts)
2966 1.9 christos {
2967 1.9 christos return {{
2968 1.9 christos { {fr_qcs_flags_option_defs}, flags },
2969 1.9 christos { {set_backtrace_option_defs}, set_bt_opts },
2970 1.8 christos }};
2971 1.8 christos }
2972 1.8 christos
2973 1.8 christos /* Apply a GDB command to all stack frames, or a set of identified frames,
2974 1.8 christos or innermost COUNT frames.
2975 1.8 christos With a negative COUNT, apply command on outermost -COUNT frames.
2976 1.8 christos
2977 1.8 christos frame apply 3 info frame Apply 'info frame' to frames 0, 1, 2
2978 1.8 christos frame apply -3 info frame Apply 'info frame' to outermost 3 frames.
2979 1.8 christos frame apply all x/i $pc Apply 'x/i $pc' cmd to all frames.
2980 1.8 christos frame apply all -s p local_var_no_idea_in_which_frame
2981 1.8 christos If a frame has a local variable called
2982 1.8 christos local_var_no_idea_in_which_frame, print frame
2983 1.8 christos and value of local_var_no_idea_in_which_frame.
2984 1.8 christos frame apply all -s -q p local_var_no_idea_in_which_frame
2985 1.8 christos Same as before, but only print the variable value.
2986 1.8 christos frame apply level 2-5 0 4-7 -s p i = i + 1
2987 1.8 christos Adds 1 to the variable i in the specified frames.
2988 1.8 christos Note that i will be incremented twice in
2989 1.8 christos frames 4 and 5. */
2990 1.8 christos
2991 1.8 christos /* Apply a GDB command to COUNT stack frames, starting at TRAILING.
2992 1.8 christos CMD starts with 0 or more qcs flags followed by the GDB command to apply.
2993 1.8 christos COUNT -1 means all frames starting at TRAILING. WHICH_COMMAND is used
2994 1.8 christos for error messages. */
2995 1.8 christos
2996 1.8 christos static void
2997 1.8 christos frame_apply_command_count (const char *which_command,
2998 1.8 christos const char *cmd, int from_tty,
2999 1.9 christos struct frame_info *trailing, int count)
3000 1.9 christos {
3001 1.9 christos qcs_flags flags;
3002 1.9 christos set_backtrace_options set_bt_opts = user_set_backtrace_options;
3003 1.9 christos
3004 1.8 christos auto group = make_frame_apply_options_def_group (&flags, &set_bt_opts);
3005 1.9 christos gdb::option::process_options
3006 1.8 christos (&cmd, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group);
3007 1.8 christos
3008 1.8 christos validate_flags_qcs (which_command, &flags);
3009 1.8 christos
3010 1.8 christos if (cmd == NULL || *cmd == '\0')
3011 1.8 christos error (_("Please specify a command to apply on the selected frames"));
3012 1.8 christos
3013 1.8 christos /* The below will restore the current inferior/thread/frame.
3014 1.8 christos Usually, only the frame is effectively to be restored.
3015 1.8 christos But in case CMD switches of inferior/thread, better restore
3016 1.9 christos these also. */
3017 1.9 christos scoped_restore_current_thread restore_thread;
3018 1.9 christos
3019 1.9 christos /* These options are handled quite deep in the unwind machinery, so
3020 1.9 christos we get to pass them down by swapping globals. */
3021 1.9 christos scoped_restore restore_set_backtrace_options
3022 1.8 christos = make_scoped_restore (&user_set_backtrace_options, set_bt_opts);
3023 1.8 christos
3024 1.8 christos for (frame_info *fi = trailing; fi && count--; fi = get_prev_frame (fi))
3025 1.8 christos {
3026 1.9 christos QUIT;
3027 1.8 christos
3028 1.8 christos select_frame (fi);
3029 1.8 christos try
3030 1.8 christos {
3031 1.8 christos std::string cmd_result;
3032 1.8 christos {
3033 1.8 christos /* In case CMD switches of inferior/thread/frame, the below
3034 1.8 christos restores the inferior/thread/frame. FI can then be
3035 1.9 christos set to the selected frame. */
3036 1.9 christos scoped_restore_current_thread restore_fi_current_frame;
3037 1.8 christos
3038 1.8 christos cmd_result = execute_command_to_string
3039 1.8 christos (cmd, from_tty, gdb_stdout->term_out ());
3040 1.8 christos }
3041 1.8 christos fi = get_selected_frame (_("frame apply "
3042 1.8 christos "unable to get selected frame."));
3043 1.8 christos if (!flags.silent || cmd_result.length () > 0)
3044 1.8 christos {
3045 1.8 christos if (!flags.quiet)
3046 1.8 christos print_stack_frame (fi, 1, LOCATION, 0);
3047 1.9 christos printf_filtered ("%s", cmd_result.c_str ());
3048 1.8 christos }
3049 1.8 christos }
3050 1.8 christos catch (const gdb_exception_error &ex)
3051 1.8 christos {
3052 1.8 christos fi = get_selected_frame (_("frame apply "
3053 1.8 christos "unable to get selected frame."));
3054 1.8 christos if (!flags.silent)
3055 1.8 christos {
3056 1.9 christos if (!flags.quiet)
3057 1.8 christos print_stack_frame (fi, 1, LOCATION, 0);
3058 1.9 christos if (flags.cont)
3059 1.8 christos printf_filtered ("%s\n", ex.what ());
3060 1.8 christos else
3061 1.8 christos throw;
3062 1.8 christos }
3063 1.8 christos }
3064 1.9 christos }
3065 1.9 christos }
3066 1.9 christos
3067 1.9 christos /* Completer for the "frame apply ..." commands. */
3068 1.9 christos
3069 1.9 christos static void
3070 1.9 christos frame_apply_completer (completion_tracker &tracker, const char *text)
3071 1.9 christos {
3072 1.9 christos const auto group = make_frame_apply_options_def_group (nullptr, nullptr);
3073 1.9 christos if (gdb::option::complete_options
3074 1.9 christos (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group))
3075 1.9 christos return;
3076 1.9 christos
3077 1.9 christos complete_nested_command_line (tracker, text);
3078 1.9 christos }
3079 1.9 christos
3080 1.9 christos /* Completer for the "frame apply" commands. */
3081 1.9 christos
3082 1.9 christos static void
3083 1.9 christos frame_apply_level_cmd_completer (struct cmd_list_element *ignore,
3084 1.9 christos completion_tracker &tracker,
3085 1.9 christos const char *text, const char */*word*/)
3086 1.9 christos {
3087 1.9 christos /* Do this explicitly because there's an early return below. */
3088 1.9 christos tracker.set_use_custom_word_point (true);
3089 1.9 christos
3090 1.9 christos number_or_range_parser levels (text);
3091 1.9 christos
3092 1.9 christos /* Skip the LEVEL list to find the options and command args. */
3093 1.9 christos try
3094 1.9 christos {
3095 1.9 christos while (!levels.finished ())
3096 1.9 christos {
3097 1.9 christos /* Call for effect. */
3098 1.9 christos levels.get_number ();
3099 1.9 christos
3100 1.9 christos if (levels.in_range ())
3101 1.9 christos levels.skip_range ();
3102 1.9 christos }
3103 1.9 christos }
3104 1.9 christos catch (const gdb_exception_error &ex)
3105 1.9 christos {
3106 1.9 christos /* get_number throws if it parses a negative number, for
3107 1.9 christos example. But a seemingly negative number may be the start of
3108 1.9 christos an option instead. */
3109 1.9 christos }
3110 1.9 christos
3111 1.9 christos const char *cmd = levels.cur_tok ();
3112 1.9 christos
3113 1.9 christos if (cmd == text)
3114 1.9 christos {
3115 1.9 christos /* No level list yet. */
3116 1.9 christos return;
3117 1.9 christos }
3118 1.9 christos
3119 1.9 christos /* Check if we're past a valid LEVEL already. */
3120 1.9 christos if (levels.finished ()
3121 1.9 christos && cmd > text && !isspace (cmd[-1]))
3122 1.9 christos return;
3123 1.9 christos
3124 1.9 christos /* We're past LEVELs, advance word point. */
3125 1.9 christos tracker.advance_custom_word_point_by (cmd - text);
3126 1.9 christos text = cmd;
3127 1.9 christos
3128 1.9 christos frame_apply_completer (tracker, text);
3129 1.9 christos }
3130 1.9 christos
3131 1.9 christos /* Completer for the "frame apply all" command. */
3132 1.9 christos
3133 1.9 christos void
3134 1.9 christos frame_apply_all_cmd_completer (struct cmd_list_element *ignore,
3135 1.9 christos completion_tracker &tracker,
3136 1.9 christos const char *text, const char */*word*/)
3137 1.9 christos {
3138 1.9 christos frame_apply_completer (tracker, text);
3139 1.9 christos }
3140 1.9 christos
3141 1.9 christos /* Completer for the "frame apply COUNT" command. */
3142 1.9 christos
3143 1.9 christos static void
3144 1.9 christos frame_apply_cmd_completer (struct cmd_list_element *ignore,
3145 1.9 christos completion_tracker &tracker,
3146 1.9 christos const char *text, const char */*word*/)
3147 1.9 christos {
3148 1.9 christos const char *cmd = text;
3149 1.9 christos
3150 1.9 christos int count = get_number_trailer (&cmd, 0);
3151 1.9 christos if (count == 0)
3152 1.9 christos return;
3153 1.9 christos
3154 1.9 christos /* Check if we're past a valid COUNT already. */
3155 1.9 christos if (cmd > text && !isspace (cmd[-1]))
3156 1.9 christos return;
3157 1.9 christos
3158 1.9 christos /* We're past COUNT, advance word point. */
3159 1.9 christos tracker.advance_custom_word_point_by (cmd - text);
3160 1.9 christos text = cmd;
3161 1.9 christos
3162 1.8 christos frame_apply_completer (tracker, text);
3163 1.8 christos }
3164 1.8 christos
3165 1.8 christos /* Implementation of the "frame apply level" command. */
3166 1.8 christos
3167 1.8 christos static void
3168 1.8 christos frame_apply_level_command (const char *cmd, int from_tty)
3169 1.8 christos {
3170 1.8 christos if (!target_has_stack)
3171 1.8 christos error (_("No stack."));
3172 1.8 christos
3173 1.8 christos bool level_found = false;
3174 1.8 christos const char *levels_str = cmd;
3175 1.8 christos number_or_range_parser levels (levels_str);
3176 1.8 christos
3177 1.8 christos /* Skip the LEVEL list to find the flags and command args. */
3178 1.8 christos while (!levels.finished ())
3179 1.8 christos {
3180 1.8 christos /* Call for effect. */
3181 1.8 christos levels.get_number ();
3182 1.8 christos
3183 1.8 christos level_found = true;
3184 1.8 christos if (levels.in_range ())
3185 1.8 christos levels.skip_range ();
3186 1.8 christos }
3187 1.8 christos
3188 1.8 christos if (!level_found)
3189 1.8 christos error (_("Missing or invalid LEVEL... argument"));
3190 1.8 christos
3191 1.8 christos cmd = levels.cur_tok ();
3192 1.8 christos
3193 1.8 christos /* Redo the LEVELS parsing, but applying COMMAND. */
3194 1.8 christos levels.init (levels_str);
3195 1.8 christos while (!levels.finished ())
3196 1.8 christos {
3197 1.8 christos const int level_beg = levels.get_number ();
3198 1.8 christos int n_frames;
3199 1.8 christos
3200 1.8 christos if (levels.in_range ())
3201 1.8 christos {
3202 1.8 christos n_frames = levels.end_value () - level_beg + 1;
3203 1.8 christos levels.skip_range ();
3204 1.8 christos }
3205 1.8 christos else
3206 1.8 christos n_frames = 1;
3207 1.8 christos
3208 1.8 christos frame_apply_command_count ("frame apply level", cmd, from_tty,
3209 1.8 christos leading_innermost_frame (level_beg), n_frames);
3210 1.8 christos }
3211 1.8 christos }
3212 1.8 christos
3213 1.8 christos /* Implementation of the "frame apply all" command. */
3214 1.8 christos
3215 1.8 christos static void
3216 1.8 christos frame_apply_all_command (const char *cmd, int from_tty)
3217 1.8 christos {
3218 1.8 christos if (!target_has_stack)
3219 1.8 christos error (_("No stack."));
3220 1.8 christos
3221 1.8 christos frame_apply_command_count ("frame apply all", cmd, from_tty,
3222 1.8 christos get_current_frame (), INT_MAX);
3223 1.8 christos }
3224 1.8 christos
3225 1.8 christos /* Implementation of the "frame apply" command. */
3226 1.8 christos
3227 1.8 christos static void
3228 1.8 christos frame_apply_command (const char* cmd, int from_tty)
3229 1.8 christos {
3230 1.8 christos int count;
3231 1.8 christos struct frame_info *trailing;
3232 1.8 christos
3233 1.8 christos if (!target_has_stack)
3234 1.8 christos error (_("No stack."));
3235 1.8 christos
3236 1.8 christos if (cmd == NULL)
3237 1.8 christos error (_("Missing COUNT argument."));
3238 1.8 christos count = get_number_trailer (&cmd, 0);
3239 1.8 christos if (count == 0)
3240 1.8 christos error (_("Invalid COUNT argument."));
3241 1.8 christos
3242 1.8 christos if (count < 0)
3243 1.8 christos {
3244 1.8 christos trailing = trailing_outermost_frame (-count);
3245 1.8 christos count = -1;
3246 1.8 christos }
3247 1.8 christos else
3248 1.8 christos trailing = get_current_frame ();
3249 1.8 christos
3250 1.8 christos frame_apply_command_count ("frame apply", cmd, from_tty,
3251 1.8 christos trailing, count);
3252 1.8 christos }
3253 1.8 christos
3254 1.8 christos /* Implementation of the "faas" command. */
3255 1.8 christos
3256 1.9 christos static void
3257 1.9 christos faas_command (const char *cmd, int from_tty)
3258 1.8 christos {
3259 1.8 christos if (cmd == NULL || *cmd == '\0')
3260 1.8 christos error (_("Please specify a command to apply on all frames"));
3261 1.8 christos std::string expanded = std::string ("frame apply all -s ") + cmd;
3262 1.8 christos execute_command (expanded.c_str (), from_tty);
3263 1.8 christos }
3264 1.8 christos
3265 1.8 christos
3266 1.8 christos /* Find inner-mode frame with frame address ADDRESS. Return NULL if no
3267 1.8 christos matching frame can be found. */
3268 1.8 christos
3269 1.8 christos static struct frame_info *
3270 1.8 christos find_frame_for_address (CORE_ADDR address)
3271 1.8 christos {
3272 1.8 christos struct frame_id id;
3273 1.8 christos struct frame_info *fid;
3274 1.8 christos
3275 1.8 christos id = frame_id_build_wild (address);
3276 1.8 christos
3277 1.8 christos /* If (s)he specifies the frame with an address, he deserves
3278 1.8 christos what (s)he gets. Still, give the highest one that matches.
3279 1.8 christos (NOTE: cagney/2004-10-29: Why highest, or outer-most, I don't
3280 1.8 christos know). */
3281 1.8 christos for (fid = get_current_frame ();
3282 1.8 christos fid != NULL;
3283 1.8 christos fid = get_prev_frame (fid))
3284 1.8 christos {
3285 1.8 christos if (frame_id_eq (id, get_frame_id (fid)))
3286 1.8 christos {
3287 1.8 christos struct frame_info *prev_frame;
3288 1.8 christos
3289 1.8 christos while (1)
3290 1.8 christos {
3291 1.8 christos prev_frame = get_prev_frame (fid);
3292 1.8 christos if (!prev_frame
3293 1.8 christos || !frame_id_eq (id, get_frame_id (prev_frame)))
3294 1.8 christos break;
3295 1.8 christos fid = prev_frame;
3296 1.8 christos }
3297 1.8 christos return fid;
3298 1.1 christos }
3299 1.8 christos }
3300 1.1 christos return NULL;
3301 1.1 christos }
3302 1.8 christos
3303 1.8 christos
3304 1.8 christos
3306 1.8 christos /* Commands with a prefix of `frame apply'. */
3307 1.8 christos static struct cmd_list_element *frame_apply_cmd_list = NULL;
3308 1.8 christos
3309 1.8 christos /* Commands with a prefix of `frame'. */
3310 1.8 christos static struct cmd_list_element *frame_cmd_list = NULL;
3311 1.8 christos
3312 1.8 christos /* Commands with a prefix of `select frame'. */
3313 1.1 christos static struct cmd_list_element *select_frame_cmd_list = NULL;
3314 1.9 christos
3315 1.1 christos /* Commands with a prefix of `info frame'. */
3316 1.9 christos static struct cmd_list_element *info_frame_cmd_list = NULL;
3317 1.1 christos
3318 1.8 christos void _initialize_stack ();
3319 1.8 christos void
3320 1.1 christos _initialize_stack ()
3321 1.1 christos {
3322 1.1 christos struct cmd_list_element *cmd;
3323 1.1 christos
3324 1.1 christos add_com ("return", class_stack, return_command, _("\
3325 1.1 christos Make selected stack frame return to its caller.\n\
3326 1.1 christos Control remains in the debugger, but when you continue\n\
3327 1.1 christos execution will resume in the frame above the one now selected.\n\
3328 1.1 christos If an argument is given, it is an expression for the value to return."));
3329 1.1 christos
3330 1.1 christos add_com ("up", class_stack, up_command, _("\
3331 1.1 christos Select and print stack frame that called this one.\n\
3332 1.1 christos An argument says how many frames up to go."));
3333 1.1 christos add_com ("up-silently", class_support, up_silently_command, _("\
3334 1.1 christos Same as the `up' command, but does not print anything.\n\
3335 1.1 christos This is useful in command scripts."));
3336 1.1 christos
3337 1.1 christos add_com ("down", class_stack, down_command, _("\
3338 1.1 christos Select and print stack frame called by this one.\n\
3339 1.1 christos An argument says how many frames down to go."));
3340 1.1 christos add_com_alias ("do", "down", class_stack, 1);
3341 1.1 christos add_com_alias ("dow", "down", class_stack, 1);
3342 1.8 christos add_com ("down-silently", class_support, down_silently_command, _("\
3343 1.8 christos Same as the `down' command, but does not print anything.\n\
3344 1.8 christos This is useful in command scripts."));
3345 1.8 christos
3346 1.8 christos add_prefix_cmd ("frame", class_stack,
3347 1.8 christos &frame_cmd.base_command, _("\
3348 1.1 christos Select and print a stack frame.\n\
3349 1.1 christos With no argument, print the selected stack frame. (See also \"info frame\").\n\
3350 1.9 christos A single numerical argument specifies the frame to select."),
3351 1.8 christos &frame_cmd_list, "frame ", 1, &cmdlist);
3352 1.9 christos add_com_alias ("f", "frame", class_stack, 1);
3353 1.9 christos
3354 1.9 christos #define FRAME_APPLY_OPTION_HELP "\
3355 1.9 christos Prints the frame location information followed by COMMAND output.\n\
3356 1.9 christos \n\
3357 1.9 christos By default, an error raised during the execution of COMMAND\n\
3358 1.9 christos aborts \"frame apply\".\n\
3359 1.9 christos \n\
3360 1.9 christos Options:\n\
3361 1.9 christos %OPTIONS%"
3362 1.9 christos
3363 1.9 christos const auto frame_apply_opts
3364 1.9 christos = make_frame_apply_options_def_group (nullptr, nullptr);
3365 1.8 christos
3366 1.9 christos static std::string frame_apply_cmd_help = gdb::option::build_help (_("\
3367 1.9 christos Apply a command to a number of frames.\n\
3368 1.9 christos Usage: frame apply COUNT [OPTION]... COMMAND\n\
3369 1.9 christos With a negative COUNT argument, applies the command on outermost -COUNT frames.\n"
3370 1.9 christos FRAME_APPLY_OPTION_HELP),
3371 1.9 christos frame_apply_opts);
3372 1.9 christos
3373 1.9 christos cmd = add_prefix_cmd ("apply", class_stack, frame_apply_command,
3374 1.8 christos frame_apply_cmd_help.c_str (),
3375 1.9 christos &frame_apply_cmd_list, "frame apply ", 1,
3376 1.8 christos &frame_cmd_list);
3377 1.8 christos set_cmd_completer_handle_brkchars (cmd, frame_apply_cmd_completer);
3378 1.9 christos
3379 1.9 christos static std::string frame_apply_all_cmd_help = gdb::option::build_help (_("\
3380 1.9 christos Apply a command to all frames.\n\
3381 1.9 christos \n\
3382 1.9 christos Usage: frame apply all [OPTION]... COMMAND\n"
3383 1.9 christos FRAME_APPLY_OPTION_HELP),
3384 1.9 christos frame_apply_opts);
3385 1.9 christos
3386 1.8 christos cmd = add_cmd ("all", class_stack, frame_apply_all_command,
3387 1.9 christos frame_apply_all_cmd_help.c_str (),
3388 1.8 christos &frame_apply_cmd_list);
3389 1.8 christos set_cmd_completer_handle_brkchars (cmd, frame_apply_all_cmd_completer);
3390 1.9 christos
3391 1.9 christos static std::string frame_apply_level_cmd_help = gdb::option::build_help (_("\
3392 1.9 christos Apply a command to a list of frames.\n\
3393 1.9 christos \n\
3394 1.9 christos Usage: frame apply level LEVEL... [OPTION]... COMMAND\n\
3395 1.9 christos LEVEL is a space-separated list of levels of frames to apply COMMAND on.\n"
3396 1.9 christos FRAME_APPLY_OPTION_HELP),
3397 1.8 christos frame_apply_opts);
3398 1.9 christos
3399 1.8 christos cmd = add_cmd ("level", class_stack, frame_apply_level_command,
3400 1.9 christos frame_apply_level_cmd_help.c_str (),
3401 1.8 christos &frame_apply_cmd_list);
3402 1.9 christos set_cmd_completer_handle_brkchars (cmd, frame_apply_level_cmd_completer);
3403 1.9 christos
3404 1.9 christos cmd = add_com ("faas", class_stack, faas_command, _("\
3405 1.9 christos Apply a command to all frames (ignoring errors and empty output).\n\
3406 1.8 christos Usage: faas [OPTION]... COMMAND\n\
3407 1.8 christos shortcut for 'frame apply all -s [OPTION]... COMMAND'\n\
3408 1.8 christos See \"help frame apply all\" for available options."));
3409 1.9 christos set_cmd_completer_handle_brkchars (cmd, frame_apply_all_cmd_completer);
3410 1.8 christos
3411 1.8 christos add_cmd ("address", class_stack, &frame_cmd.address,
3412 1.8 christos _("\
3413 1.8 christos Select and print a stack frame by stack address.\n\
3414 1.8 christos \n\
3415 1.8 christos Usage: frame address STACK-ADDRESS"),
3416 1.8 christos &frame_cmd_list);
3417 1.8 christos
3418 1.8 christos add_cmd ("view", class_stack, &frame_cmd.view,
3419 1.8 christos _("\
3420 1.8 christos View a stack frame that might be outside the current backtrace.\n\
3421 1.8 christos \n\
3422 1.8 christos Usage: frame view STACK-ADDRESS\n\
3423 1.8 christos frame view STACK-ADDRESS PC-ADDRESS"),
3424 1.8 christos &frame_cmd_list);
3425 1.8 christos
3426 1.8 christos cmd = add_cmd ("function", class_stack, &frame_cmd.function,
3427 1.8 christos _("\
3428 1.8 christos Select and print a stack frame by function name.\n\
3429 1.8 christos \n\
3430 1.8 christos Usage: frame function NAME\n\
3431 1.8 christos \n\
3432 1.8 christos The innermost frame that visited function NAME is selected."),
3433 1.8 christos &frame_cmd_list);
3434 1.8 christos set_cmd_completer (cmd, frame_selection_by_function_completer);
3435 1.8 christos
3436 1.8 christos
3437 1.8 christos add_cmd ("level", class_stack, &frame_cmd.level,
3438 1.8 christos _("\
3439 1.8 christos Select and print a stack frame by level.\n\
3440 1.8 christos \n\
3441 1.8 christos Usage: frame level LEVEL"),
3442 1.1 christos &frame_cmd_list);
3443 1.8 christos
3444 1.8 christos cmd = add_prefix_cmd_suppress_notification ("select-frame", class_stack,
3445 1.8 christos &select_frame_cmd.base_command, _("\
3446 1.8 christos Select a stack frame without printing anything.\n\
3447 1.8 christos A single numerical argument specifies the frame to select."),
3448 1.8 christos &select_frame_cmd_list, "select-frame ", 1, &cmdlist,
3449 1.8 christos &cli_suppress_notification.user_selected_context);
3450 1.8 christos
3451 1.8 christos add_cmd_suppress_notification ("address", class_stack,
3452 1.8 christos &select_frame_cmd.address, _("\
3453 1.8 christos Select a stack frame by stack address.\n\
3454 1.8 christos \n\
3455 1.8 christos Usage: select-frame address STACK-ADDRESS"),
3456 1.8 christos &select_frame_cmd_list,
3457 1.8 christos &cli_suppress_notification.user_selected_context);
3458 1.8 christos
3459 1.8 christos
3460 1.8 christos add_cmd_suppress_notification ("view", class_stack,
3461 1.8 christos &select_frame_cmd.view, _("\
3462 1.8 christos Select a stack frame that might be outside the current backtrace.\n\
3463 1.6 christos \n\
3464 1.1 christos Usage: select-frame view STACK-ADDRESS\n\
3465 1.8 christos select-frame view STACK-ADDRESS PC-ADDRESS"),
3466 1.8 christos &select_frame_cmd_list,
3467 1.8 christos &cli_suppress_notification.user_selected_context);
3468 1.8 christos
3469 1.8 christos cmd = add_cmd_suppress_notification ("function", class_stack,
3470 1.8 christos &select_frame_cmd.function, _("\
3471 1.8 christos Select a stack frame by function name.\n\
3472 1.8 christos \n\
3473 1.8 christos Usage: select-frame function NAME"),
3474 1.8 christos &select_frame_cmd_list,
3475 1.8 christos &cli_suppress_notification.user_selected_context);
3476 1.8 christos set_cmd_completer (cmd, frame_selection_by_function_completer);
3477 1.8 christos
3478 1.8 christos add_cmd_suppress_notification ("level", class_stack,
3479 1.8 christos &select_frame_cmd.level, _("\
3480 1.8 christos Select a stack frame by level.\n\
3481 1.8 christos \n\
3482 1.9 christos Usage: select-frame level LEVEL"),
3483 1.9 christos &select_frame_cmd_list,
3484 1.9 christos &cli_suppress_notification.user_selected_context);
3485 1.9 christos
3486 1.9 christos const auto backtrace_opts
3487 1.1 christos = make_backtrace_options_def_group (nullptr, nullptr, nullptr);
3488 1.9 christos
3489 1.9 christos static std::string backtrace_help
3490 1.9 christos = gdb::option::build_help (_("\
3491 1.9 christos Print backtrace of all stack frames, or innermost COUNT frames.\n\
3492 1.9 christos Usage: backtrace [OPTION]... [QUALIFIER]... [COUNT | -COUNT]\n\
3493 1.9 christos \n\
3494 1.9 christos Options:\n\
3495 1.9 christos %OPTIONS%\n\
3496 1.9 christos \n\
3497 1.9 christos For backward compatibility, the following qualifiers are supported:\n\
3498 1.9 christos \n\
3499 1.9 christos full - same as -full option.\n\
3500 1.9 christos no-filters - same as -no-filters option.\n\
3501 1.9 christos hide - same as -hide.\n\
3502 1.9 christos \n\
3503 1.9 christos With a negative COUNT, print outermost -COUNT frames."),
3504 1.9 christos backtrace_opts);
3505 1.9 christos
3506 1.9 christos cmd_list_element *c = add_com ("backtrace", class_stack,
3507 1.1 christos backtrace_command,
3508 1.1 christos backtrace_help.c_str ());
3509 1.9 christos set_cmd_completer_handle_brkchars (c, backtrace_command_completer);
3510 1.1 christos
3511 1.1 christos add_com_alias ("bt", "backtrace", class_stack, 0);
3512 1.1 christos
3513 1.8 christos add_com_alias ("where", "backtrace", class_stack, 0);
3514 1.8 christos add_info ("stack", backtrace_command,
3515 1.8 christos _("Backtrace of the stack, or innermost COUNT frames."));
3516 1.8 christos add_info_alias ("s", "stack", 1);
3517 1.8 christos
3518 1.8 christos add_prefix_cmd ("frame", class_info, &info_frame_cmd.base_command,
3519 1.8 christos _("All about the selected stack frame.\n\
3520 1.1 christos With no arguments, displays information about the currently selected stack\n\
3521 1.8 christos frame. Alternatively a frame specification may be provided (See \"frame\")\n\
3522 1.8 christos the information is then printed about the specified frame."),
3523 1.8 christos &info_frame_cmd_list, "info frame ", 1, &infolist);
3524 1.8 christos add_info_alias ("f", "frame", 1);
3525 1.8 christos
3526 1.8 christos add_cmd ("address", class_stack, &info_frame_cmd.address,
3527 1.8 christos _("\
3528 1.8 christos Print information about a stack frame selected by stack address.\n\
3529 1.8 christos \n\
3530 1.8 christos Usage: info frame address STACK-ADDRESS"),
3531 1.8 christos &info_frame_cmd_list);
3532 1.8 christos
3533 1.8 christos add_cmd ("view", class_stack, &info_frame_cmd.view,
3534 1.8 christos _("\
3535 1.8 christos Print information about a stack frame outside the current backtrace.\n\
3536 1.8 christos \n\
3537 1.8 christos Usage: info frame view STACK-ADDRESS\n\
3538 1.8 christos info frame view STACK-ADDRESS PC-ADDRESS"),
3539 1.8 christos &info_frame_cmd_list);
3540 1.8 christos
3541 1.8 christos cmd = add_cmd ("function", class_stack, &info_frame_cmd.function,
3542 1.8 christos _("\
3543 1.8 christos Print information about a stack frame selected by function name.\n\
3544 1.8 christos \n\
3545 1.8 christos Usage: info frame function NAME"),
3546 1.8 christos &info_frame_cmd_list);
3547 1.8 christos set_cmd_completer (cmd, frame_selection_by_function_completer);
3548 1.8 christos
3549 1.8 christos add_cmd ("level", class_stack, &info_frame_cmd.level,
3550 1.8 christos _("\
3551 1.8 christos Print information about a stack frame selected by level.\n\
3552 1.9 christos \n\
3553 1.9 christos Usage: info frame level LEVEL"),
3554 1.8 christos &info_frame_cmd_list);
3555 1.8 christos
3556 1.8 christos cmd = add_info ("locals", info_locals_command,
3557 1.9 christos info_print_args_help (_("\
3558 1.9 christos All local variables of current stack frame or those matching REGEXPs.\n\
3559 1.9 christos Usage: info locals [-q] [-t TYPEREGEXP] [NAMEREGEXP]\n\
3560 1.9 christos Prints the local variables of the current stack frame.\n"),
3561 1.9 christos _("local variables"),
3562 1.8 christos false));
3563 1.8 christos set_cmd_completer_handle_brkchars (cmd, info_print_command_completer);
3564 1.8 christos cmd = add_info ("args", info_args_command,
3565 1.9 christos info_print_args_help (_("\
3566 1.9 christos All argument variables of current stack frame or those matching REGEXPs.\n\
3567 1.9 christos Usage: info args [-q] [-t TYPEREGEXP] [NAMEREGEXP]\n\
3568 1.1 christos Prints the argument variables of the current stack frame.\n"),
3569 1.1 christos _("argument variables"),
3570 1.1 christos false));
3571 1.8 christos set_cmd_completer_handle_brkchars (cmd, info_print_command_completer);
3572 1.8 christos
3573 1.1 christos if (dbx_commands)
3574 1.9 christos add_com ("func", class_stack, func_command, _("\
3575 1.9 christos Select the stack frame that contains NAME.\n\
3576 1.9 christos Usage: func NAME"));
3577 1.9 christos
3578 1.9 christos /* Install "set print raw frame-arguments", a deprecated spelling of
3579 1.9 christos "set print raw-frame-arguments". */
3580 1.1 christos cmd = add_setshow_boolean_cmd
3581 1.1 christos ("frame-arguments", no_class,
3582 1.1 christos &user_frame_print_options.print_raw_frame_arguments,
3583 1.1 christos _("\
3584 1.9 christos Set whether to print frame arguments in raw form."), _("\
3585 1.9 christos Show whether to print frame arguments in raw form."), _("\
3586 1.9 christos If set, frame arguments are printed in raw form, bypassing any\n\
3587 1.1 christos pretty-printers for that value."),
3588 1.1 christos NULL, NULL,
3589 1.1 christos &setprintrawlist, &showprintrawlist);
3590 1.1 christos deprecate_cmd (cmd, "set print raw-frame-arguments");
3591 1.1 christos
3592 1.1 christos add_setshow_auto_boolean_cmd ("disassemble-next-line", class_stack,
3593 1.1 christos &disassemble_next_line, _("\
3594 1.1 christos Set whether to disassemble next source line or insn when execution stops."),
3595 1.1 christos _("\
3596 1.1 christos Show whether to disassemble next source line or insn when execution stops."),
3597 1.1 christos _("\
3598 1.1 christos If ON, GDB will display disassembly of the next source line, in addition\n\
3599 1.1 christos to displaying the source line itself. If the next source line cannot\n\
3600 1.1 christos be displayed (e.g., source is unavailable or there's no line info), GDB\n\
3601 1.1 christos will display disassembly of next instruction instead of showing the\n\
3602 1.1 christos source line.\n\
3603 1.1 christos If AUTO, display disassembly of next instruction only if the source line\n\
3604 1.1 christos cannot be displayed.\n\
3605 1.1 christos If OFF (which is the default), never display the disassembly of the next\n\
3606 1.1 christos source line."),
3607 1.1 christos NULL,
3608 1.9 christos show_disassemble_next_line,
3609 1.9 christos &setlist, &showlist);
3610 1.9 christos disassemble_next_line = AUTO_BOOLEAN_FALSE;
3611 1.1 christos
3612 gdb::option::add_setshow_cmds_for_options
3613 (class_stack, &user_frame_print_options,
3614 frame_print_option_defs, &setprintlist, &showprintlist);
3615 }
3616