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