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