stack.c revision 1.12 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.12 christos #include "exceptions.h"
22 1.11 christos #include "extract-store-integer.h"
23 1.11 christos #include "top.h"
24 1.1 christos #include "value.h"
25 1.1 christos #include "symtab.h"
26 1.1 christos #include "gdbtypes.h"
27 1.1 christos #include "expression.h"
28 1.1 christos #include "language.h"
29 1.1 christos #include "frame.h"
30 1.11 christos #include "cli/cli-cmds.h"
31 1.1 christos #include "gdbcore.h"
32 1.1 christos #include "target.h"
33 1.1 christos #include "source.h"
34 1.1 christos #include "breakpoint.h"
35 1.1 christos #include "demangle.h"
36 1.1 christos #include "inferior.h"
37 1.1 christos #include "annotate.h"
38 1.1 christos #include "ui-out.h"
39 1.1 christos #include "block.h"
40 1.1 christos #include "stack.h"
41 1.1 christos #include "dictionary.h"
42 1.1 christos #include "reggroups.h"
43 1.1 christos #include "regcache.h"
44 1.1 christos #include "solib.h"
45 1.1 christos #include "valprint.h"
46 1.1 christos #include "gdbthread.h"
47 1.1 christos #include "cp-support.h"
48 1.1 christos #include "disasm.h"
49 1.1 christos #include "inline-frame.h"
50 1.1 christos #include "linespec.h"
51 1.1 christos #include "cli/cli-utils.h"
52 1.3 christos #include "objfiles.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 CORE_ADDR pc;
1303 1.1 christos
1304 1.8 christos if (!get_frame_address_in_block_if_available (frame, &pc))
1305 1.1 christos return funname;
1306 1.12 christos
1307 1.1 christos bound_minimal_symbol msymbol = lookup_minimal_symbol_by_pc (pc);
1308 1.1 christos if (msymbol.minsym != NULL)
1309 1.9 christos {
1310 1.9 christos funname.reset (xstrdup (msymbol.minsym->print_name ()));
1311 1.1 christos *funlang = msymbol.minsym->language ();
1312 1.1 christos }
1313 1.8 christos }
1314 1.8 christos
1315 1.1 christos return funname;
1316 1.1 christos }
1317 1.1 christos
1318 1.11 christos static void
1319 1.11 christos print_frame (struct ui_out *uiout,
1320 1.11 christos const frame_print_options &fp_opts,
1321 1.1 christos const frame_info_ptr &frame, int print_level,
1322 1.1 christos enum print_what print_what, int print_args,
1323 1.1 christos struct symtab_and_line sal)
1324 1.1 christos {
1325 1.1 christos struct gdbarch *gdbarch = get_frame_arch (frame);
1326 1.1 christos enum language funlang = language_unknown;
1327 1.1 christos struct value_print_options opts;
1328 1.1 christos struct symbol *func;
1329 1.1 christos CORE_ADDR pc = 0;
1330 1.1 christos int pc_p;
1331 1.1 christos
1332 1.1 christos pc_p = get_frame_pc_if_available (frame, &pc);
1333 1.8 christos
1334 1.8 christos gdb::unique_xmalloc_ptr<char> funname
1335 1.1 christos = find_frame_funname (frame, &funlang, &func);
1336 1.1 christos
1337 1.1 christos annotate_frame_begin (print_level ? frame_relative_level (frame) : 0,
1338 1.1 christos gdbarch, pc);
1339 1.8 christos
1340 1.8 christos {
1341 1.1 christos ui_out_emit_tuple tuple_emitter (uiout, "frame");
1342 1.8 christos
1343 1.1 christos if (print_level)
1344 1.8 christos {
1345 1.9 christos uiout->text ("#");
1346 1.9 christos uiout->field_fmt_signed (2, ui_left, "level",
1347 1.1 christos frame_relative_level (frame));
1348 1.8 christos }
1349 1.8 christos get_user_print_options (&opts);
1350 1.8 christos if (opts.addressprint)
1351 1.8 christos if (!sal.symtab
1352 1.8 christos || frame_show_address (frame, sal)
1353 1.8 christos || print_what == LOC_AND_ADDRESS)
1354 1.8 christos {
1355 1.8 christos annotate_frame_address ();
1356 1.9 christos if (pc_p)
1357 1.8 christos print_pc (uiout, gdbarch, frame, pc);
1358 1.8 christos else
1359 1.9 christos uiout->field_string ("addr", "<unavailable>",
1360 1.8 christos metadata_style.style ());
1361 1.8 christos annotate_frame_address_end ();
1362 1.8 christos uiout->text (" in ");
1363 1.8 christos }
1364 1.8 christos annotate_frame_function_name ();
1365 1.8 christos
1366 1.10 christos string_file stb;
1367 1.9 christos gdb_puts (funname ? funname.get () : "??", &stb);
1368 1.10 christos uiout->field_stream ("func", stb, function_name_style.style ());
1369 1.8 christos uiout->wrap_hint (3);
1370 1.7 christos annotate_frame_args ();
1371 1.8 christos
1372 1.8 christos uiout->text (" (");
1373 1.8 christos if (print_args)
1374 1.8 christos {
1375 1.1 christos int numargs;
1376 1.8 christos
1377 1.8 christos if (gdbarch_frame_num_args_p (gdbarch))
1378 1.8 christos {
1379 1.8 christos numargs = gdbarch_frame_num_args (gdbarch, frame);
1380 1.8 christos gdb_assert (numargs >= 0);
1381 1.8 christos }
1382 1.8 christos else
1383 1.1 christos numargs = -1;
1384 1.1 christos
1385 1.8 christos {
1386 1.9 christos ui_out_emit_list list_emitter (uiout, "args");
1387 1.8 christos try
1388 1.9 christos {
1389 1.8 christos print_frame_args (fp_opts, func, frame, numargs, gdb_stdout);
1390 1.9 christos }
1391 1.8 christos catch (const gdb_exception_error &e)
1392 1.8 christos {
1393 1.5 christos }
1394 1.8 christos
1395 1.8 christos /* FIXME: ARGS must be a list. If one argument is a string it
1396 1.8 christos will have " that will not be properly escaped. */
1397 1.8 christos }
1398 1.8 christos QUIT;
1399 1.8 christos }
1400 1.9 christos uiout->text (")");
1401 1.8 christos if (print_what != SHORT_LOCATION && sal.symtab)
1402 1.8 christos {
1403 1.1 christos const char *filename_display;
1404 1.8 christos
1405 1.8 christos filename_display = symtab_to_filename_for_display (sal.symtab);
1406 1.10 christos annotate_frame_source_begin ();
1407 1.8 christos uiout->wrap_hint (3);
1408 1.8 christos uiout->text (" at ");
1409 1.9 christos annotate_frame_source_file ();
1410 1.9 christos uiout->field_string ("file", filename_display,
1411 1.8 christos file_name_style.style ());
1412 1.8 christos if (uiout->is_mi_like_p ())
1413 1.8 christos {
1414 1.1 christos const char *fullname = symtab_to_fullname (sal.symtab);
1415 1.8 christos
1416 1.8 christos uiout->field_string ("fullname", fullname);
1417 1.8 christos }
1418 1.8 christos annotate_frame_source_file_end ();
1419 1.8 christos uiout->text (":");
1420 1.12 christos annotate_frame_source_line ();
1421 1.8 christos uiout->field_signed ("line", sal.line, line_number_style.style ());
1422 1.8 christos annotate_frame_source_end ();
1423 1.1 christos }
1424 1.9 christos
1425 1.9 christos if (print_what != SHORT_LOCATION
1426 1.8 christos && pc_p && (funname == NULL || sal.symtab == NULL))
1427 1.10 christos {
1428 1.10 christos const char *lib
1429 1.11 christos = solib_name_from_address (get_frame_program_space (frame),
1430 1.1 christos get_frame_address_in_block (frame));
1431 1.8 christos
1432 1.8 christos if (lib)
1433 1.8 christos {
1434 1.10 christos annotate_frame_where ();
1435 1.8 christos uiout->wrap_hint (2);
1436 1.9 christos uiout->text (" from ");
1437 1.8 christos uiout->field_string ("from", lib, file_name_style.style ());
1438 1.8 christos }
1439 1.8 christos }
1440 1.8 christos if (uiout->is_mi_like_p ())
1441 1.8 christos uiout->field_string ("arch",
1442 1.8 christos (gdbarch_bfd_arch_info (gdbarch))->printable_name);
1443 1.1 christos }
1444 1.7 christos
1445 1.1 christos uiout->text ("\n");
1446 1.1 christos }
1447 1.1 christos
1448 1.8 christos
1450 1.1 christos /* Completion function for "frame function", "info frame function", and
1451 1.9 christos "select-frame function" commands. */
1452 1.8 christos
1453 1.8 christos static void
1454 1.8 christos frame_selection_by_function_completer (struct cmd_list_element *ignore,
1455 1.8 christos completion_tracker &tracker,
1456 1.8 christos const char *text, const char *word)
1457 1.8 christos {
1458 1.8 christos /* This is used to complete function names within a stack. It would be
1459 1.8 christos nice if we only offered functions that were actually in the stack.
1460 1.8 christos However, this would mean unwinding the stack to completion, which
1461 1.8 christos could take too long, or on a corrupted stack, possibly not end.
1462 1.8 christos Instead, we offer all symbol names as a safer choice. */
1463 1.8 christos collect_symbol_completion_matches (tracker,
1464 1.8 christos complete_symbol_mode::EXPRESSION,
1465 1.8 christos symbol_name_match_type::EXPRESSION,
1466 1.8 christos text, word);
1467 1.8 christos }
1468 1.8 christos
1469 1.8 christos /* Core of all the "info frame" sub-commands. Print information about a
1470 1.8 christos frame FI. If SELECTED_FRAME_P is true then the user didn't provide a
1471 1.8 christos frame specification, they just entered 'info frame'. If the user did
1472 1.1 christos provide a frame specification (for example 'info frame 0', 'info frame
1473 1.1 christos level 1') then SELECTED_FRAME_P will be false. */
1474 1.11 christos
1475 1.1 christos static void
1476 1.1 christos info_frame_command_core (const frame_info_ptr &fi, bool selected_frame_p)
1477 1.1 christos {
1478 1.10 christos struct symbol *func;
1479 1.1 christos struct symtab *s;
1480 1.1 christos frame_info_ptr calling_frame_info;
1481 1.1 christos int numregs;
1482 1.1 christos const char *funname = 0;
1483 1.1 christos enum language funlang = language_unknown;
1484 1.1 christos const char *pc_regname;
1485 1.1 christos struct gdbarch *gdbarch;
1486 1.1 christos CORE_ADDR frame_pc;
1487 1.1 christos int frame_pc_p;
1488 1.5 christos /* Initialize it to avoid "may be used uninitialized" warning. */
1489 1.1 christos CORE_ADDR caller_pc = 0;
1490 1.1 christos int caller_pc_p = 0;
1491 1.1 christos
1492 1.1 christos gdbarch = get_frame_arch (fi);
1493 1.1 christos
1494 1.1 christos /* Name of the value returned by get_frame_pc(). Per comments, "pc"
1495 1.1 christos is not a good name. */
1496 1.1 christos if (gdbarch_pc_regnum (gdbarch) >= 0)
1497 1.1 christos /* OK, this is weird. The gdbarch_pc_regnum hardware register's value can
1498 1.1 christos easily not match that of the internal value returned by
1499 1.1 christos get_frame_pc(). */
1500 1.1 christos pc_regname = gdbarch_register_name (gdbarch, gdbarch_pc_regnum (gdbarch));
1501 1.1 christos else
1502 1.1 christos /* But then, this is weird to. Even without gdbarch_pc_regnum, an
1503 1.1 christos architectures will often have a hardware register called "pc",
1504 1.1 christos and that register's value, again, can easily not match
1505 1.1 christos get_frame_pc(). */
1506 1.1 christos pc_regname = "pc";
1507 1.1 christos
1508 1.8 christos frame_pc_p = get_frame_pc_if_available (fi, &frame_pc);
1509 1.1 christos func = get_frame_function (fi);
1510 1.8 christos symtab_and_line sal = find_frame_sal (fi);
1511 1.1 christos s = sal.symtab;
1512 1.1 christos gdb::unique_xmalloc_ptr<char> func_only;
1513 1.9 christos if (func)
1514 1.9 christos {
1515 1.1 christos funname = func->print_name ();
1516 1.1 christos funlang = func->language ();
1517 1.9 christos if (funlang == language_cplus)
1518 1.1 christos {
1519 1.1 christos /* It seems appropriate to use print_name() here,
1520 1.1 christos to display the demangled name that we already have
1521 1.1 christos stored in the symbol table, but we stored a version
1522 1.8 christos with DMGL_PARAMS turned on, and here we don't want to
1523 1.1 christos display parameters. So remove the parameters. */
1524 1.1 christos func_only = cp_remove_params (funname);
1525 1.8 christos
1526 1.1 christos if (func_only)
1527 1.1 christos funname = func_only.get ();
1528 1.1 christos }
1529 1.1 christos }
1530 1.12 christos else if (frame_pc_p)
1531 1.1 christos {
1532 1.1 christos bound_minimal_symbol msymbol = lookup_minimal_symbol_by_pc (frame_pc);
1533 1.9 christos if (msymbol.minsym != NULL)
1534 1.9 christos {
1535 1.1 christos funname = msymbol.minsym->print_name ();
1536 1.1 christos funlang = msymbol.minsym->language ();
1537 1.1 christos }
1538 1.1 christos }
1539 1.1 christos calling_frame_info = get_prev_frame (fi);
1540 1.1 christos
1541 1.10 christos if (selected_frame_p && frame_relative_level (fi) >= 0)
1542 1.10 christos {
1543 1.1 christos gdb_printf (_("Stack level %d, frame at "),
1544 1.1 christos frame_relative_level (fi));
1545 1.1 christos }
1546 1.10 christos else
1547 1.1 christos {
1548 1.10 christos gdb_printf (_("Stack frame at "));
1549 1.10 christos }
1550 1.10 christos gdb_puts (paddress (gdbarch, get_frame_base (fi)));
1551 1.1 christos gdb_printf (":\n");
1552 1.10 christos gdb_printf (" %s = ", pc_regname);
1553 1.1 christos if (frame_pc_p)
1554 1.9 christos gdb_puts (paddress (gdbarch, get_frame_pc (fi)));
1555 1.1 christos else
1556 1.10 christos fputs_styled ("<unavailable>", metadata_style.style (), gdb_stdout);
1557 1.1 christos
1558 1.1 christos gdb_stdout->wrap_here (3);
1559 1.10 christos if (funname)
1560 1.10 christos {
1561 1.1 christos gdb_printf (" in ");
1562 1.10 christos gdb_puts (funname);
1563 1.1 christos }
1564 1.10 christos gdb_stdout->wrap_here (3);
1565 1.9 christos if (sal.symtab)
1566 1.9 christos gdb_printf
1567 1.9 christos (" (%ps:%d)",
1568 1.9 christos styled_string (file_name_style.style (),
1569 1.10 christos symtab_to_filename_for_display (sal.symtab)),
1570 1.10 christos sal.line);
1571 1.10 christos gdb_puts ("; ");
1572 1.1 christos gdb_stdout->wrap_here (4);
1573 1.6 christos gdb_printf ("saved %s = ", pc_regname);
1574 1.6 christos
1575 1.6 christos if (!frame_id_p (frame_unwind_caller_id (fi)))
1576 1.1 christos val_print_not_saved (gdb_stdout);
1577 1.9 christos else
1578 1.6 christos {
1579 1.6 christos try
1580 1.6 christos {
1581 1.6 christos caller_pc = frame_unwind_caller_pc (fi);
1582 1.9 christos caller_pc_p = 1;
1583 1.1 christos }
1584 1.6 christos catch (const gdb_exception_error &ex)
1585 1.6 christos {
1586 1.6 christos switch (ex.error)
1587 1.6 christos {
1588 1.6 christos case NOT_AVAILABLE_ERROR:
1589 1.6 christos val_print_unavailable (gdb_stdout);
1590 1.6 christos break;
1591 1.6 christos case OPTIMIZED_OUT_ERROR:
1592 1.6 christos val_print_not_saved (gdb_stdout);
1593 1.9 christos break;
1594 1.9 christos default:
1595 1.9 christos fprintf_styled (gdb_stdout, metadata_style.style (),
1596 1.6 christos _("<error: %s>"),
1597 1.6 christos ex.what ());
1598 1.1 christos break;
1599 1.1 christos }
1600 1.5 christos }
1601 1.5 christos }
1602 1.10 christos
1603 1.10 christos if (caller_pc_p)
1604 1.1 christos gdb_puts (paddress (gdbarch, caller_pc));
1605 1.1 christos gdb_printf ("\n");
1606 1.1 christos
1607 1.1 christos if (calling_frame_info == NULL)
1608 1.1 christos {
1609 1.1 christos enum unwind_stop_reason reason;
1610 1.1 christos
1611 1.10 christos reason = get_frame_unwind_stop_reason (fi);
1612 1.10 christos if (reason != UNWIND_NO_REASON)
1613 1.1 christos gdb_printf (_(" Outermost frame: %s\n"),
1614 1.1 christos frame_stop_reason_string (fi));
1615 1.10 christos }
1616 1.1 christos else if (get_frame_type (fi) == TAILCALL_FRAME)
1617 1.10 christos gdb_puts (" tail call frame");
1618 1.10 christos else if (get_frame_type (fi) == INLINE_FRAME)
1619 1.1 christos gdb_printf (" inlined into frame %d",
1620 1.1 christos frame_relative_level (get_prev_frame (fi)));
1621 1.10 christos else
1622 1.10 christos {
1623 1.1 christos gdb_printf (" called by frame at ");
1624 1.1 christos gdb_puts (paddress (gdbarch, get_frame_base (calling_frame_info)));
1625 1.10 christos }
1626 1.10 christos if (get_next_frame (fi) && calling_frame_info)
1627 1.1 christos gdb_puts (",");
1628 1.1 christos gdb_stdout->wrap_here (3);
1629 1.10 christos if (get_next_frame (fi))
1630 1.10 christos {
1631 1.1 christos gdb_printf (" caller of frame at ");
1632 1.1 christos gdb_puts (paddress (gdbarch, get_frame_base (get_next_frame (fi))));
1633 1.10 christos }
1634 1.1 christos if (get_next_frame (fi) || calling_frame_info)
1635 1.1 christos gdb_puts ("\n");
1636 1.10 christos
1637 1.10 christos if (s)
1638 1.1 christos gdb_printf (" source language %s.\n",
1639 1.1 christos language_str (s->language ()));
1640 1.1 christos
1641 1.1 christos {
1642 1.1 christos /* Address of the argument list for this frame, or 0. */
1643 1.1 christos CORE_ADDR arg_list = get_frame_args_address (fi);
1644 1.1 christos /* Number of args for this frame, or -1 if unknown. */
1645 1.1 christos int numargs;
1646 1.10 christos
1647 1.1 christos if (arg_list == 0)
1648 1.1 christos gdb_printf (" Arglist at unknown address.\n");
1649 1.10 christos else
1650 1.10 christos {
1651 1.10 christos gdb_printf (" Arglist at ");
1652 1.1 christos gdb_puts (paddress (gdbarch, arg_list));
1653 1.1 christos gdb_printf (",");
1654 1.1 christos
1655 1.1 christos if (!gdbarch_frame_num_args_p (gdbarch))
1656 1.10 christos {
1657 1.1 christos numargs = -1;
1658 1.1 christos gdb_puts (" args: ");
1659 1.1 christos }
1660 1.1 christos else
1661 1.1 christos {
1662 1.1 christos numargs = gdbarch_frame_num_args (gdbarch, fi);
1663 1.10 christos gdb_assert (numargs >= 0);
1664 1.1 christos if (numargs == 0)
1665 1.10 christos gdb_puts (" no args.");
1666 1.1 christos else if (numargs == 1)
1667 1.10 christos gdb_puts (" 1 arg: ");
1668 1.1 christos else
1669 1.10 christos gdb_printf (" %d args: ", numargs);
1670 1.9 christos }
1671 1.9 christos
1672 1.10 christos print_frame_args (user_frame_print_options,
1673 1.1 christos func, fi, numargs, gdb_stdout);
1674 1.1 christos gdb_puts ("\n");
1675 1.1 christos }
1676 1.1 christos }
1677 1.1 christos {
1678 1.1 christos /* Address of the local variables for this frame, or 0. */
1679 1.1 christos CORE_ADDR arg_list = get_frame_locals_address (fi);
1680 1.10 christos
1681 1.1 christos if (arg_list == 0)
1682 1.1 christos gdb_printf (" Locals at unknown address,");
1683 1.10 christos else
1684 1.10 christos {
1685 1.10 christos gdb_printf (" Locals at ");
1686 1.1 christos gdb_puts (paddress (gdbarch, arg_list));
1687 1.1 christos gdb_printf (",");
1688 1.1 christos }
1689 1.1 christos }
1690 1.1 christos
1691 1.1 christos /* Print as much information as possible on the location of all the
1692 1.1 christos registers. */
1693 1.1 christos {
1694 1.1 christos int count;
1695 1.7 christos int i;
1696 1.1 christos int need_nl = 1;
1697 1.1 christos int sp_regnum = gdbarch_sp_regnum (gdbarch);
1698 1.1 christos
1699 1.1 christos /* The sp is special; what's displayed isn't the save address, but
1700 1.1 christos the value of the previous frame's sp. This is a legacy thing,
1701 1.1 christos at one stage the frame cached the previous frame's SP instead
1702 1.7 christos of its address, hence it was easiest to just display the cached
1703 1.1 christos value. */
1704 1.7 christos if (sp_regnum >= 0)
1705 1.7 christos {
1706 1.7 christos struct value *value = frame_unwind_register_value (fi, sp_regnum);
1707 1.11 christos gdb_assert (value != NULL);
1708 1.1 christos
1709 1.11 christos if (!value->optimized_out () && value->entirely_available ())
1710 1.7 christos {
1711 1.7 christos if (value->lval () == not_lval)
1712 1.7 christos {
1713 1.7 christos CORE_ADDR sp;
1714 1.7 christos enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1715 1.10 christos int sp_size = register_size (gdbarch, sp_regnum);
1716 1.11 christos
1717 1.7 christos sp = extract_unsigned_integer
1718 1.10 christos (value->contents_all ().data (), sp_size, byte_order);
1719 1.10 christos
1720 1.10 christos gdb_printf (" Previous frame's sp is ");
1721 1.7 christos gdb_puts (paddress (gdbarch, sp));
1722 1.11 christos gdb_printf ("\n");
1723 1.7 christos }
1724 1.10 christos else if (value->lval () == lval_memory)
1725 1.11 christos {
1726 1.10 christos gdb_printf (" Previous frame's sp at ");
1727 1.7 christos gdb_puts (paddress (gdbarch, value->address ()));
1728 1.11 christos gdb_printf ("\n");
1729 1.11 christos }
1730 1.11 christos else if (value->lval () == lval_register)
1731 1.7 christos gdb_printf (" Previous frame's sp in %s\n",
1732 1.7 christos gdbarch_register_name (gdbarch, value->regnum ()));
1733 1.1 christos
1734 1.1 christos release_value (value);
1735 1.1 christos need_nl = 0;
1736 1.1 christos }
1737 1.1 christos /* else keep quiet. */
1738 1.1 christos }
1739 1.8 christos
1740 1.1 christos count = 0;
1741 1.7 christos numregs = gdbarch_num_cooked_regs (gdbarch);
1742 1.1 christos for (i = 0; i < numregs; i++)
1743 1.1 christos if (i != sp_regnum
1744 1.7 christos && gdbarch_register_reggroup_p (gdbarch, i, all_reggroup))
1745 1.7 christos {
1746 1.7 christos enum lval_type lval;
1747 1.7 christos int optimized;
1748 1.7 christos int unavailable;
1749 1.7 christos CORE_ADDR addr;
1750 1.1 christos int realnum;
1751 1.10 christos
1752 1.1 christos /* Find out the location of the saved register without
1753 1.1 christos fetching the corresponding value. */
1754 1.1 christos frame_register_unwind (fi, i, &optimized, &unavailable,
1755 1.1 christos &lval, &addr, &realnum, NULL);
1756 1.1 christos /* For moment, only display registers that were saved on the
1757 1.1 christos stack. */
1758 1.1 christos if (!optimized && !unavailable && lval == lval_memory)
1759 1.10 christos {
1760 1.1 christos if (count == 0)
1761 1.10 christos gdb_puts (" Saved registers:\n ");
1762 1.10 christos else
1763 1.10 christos gdb_puts (",");
1764 1.10 christos gdb_stdout->wrap_here (1);
1765 1.10 christos gdb_printf (" %s at ",
1766 1.1 christos gdbarch_register_name (gdbarch, i));
1767 1.1 christos gdb_puts (paddress (gdbarch, addr));
1768 1.1 christos count++;
1769 1.1 christos }
1770 1.10 christos }
1771 1.1 christos if (count || need_nl)
1772 1.8 christos gdb_puts ("\n");
1773 1.8 christos }
1774 1.8 christos }
1775 1.8 christos
1776 1.10 christos /* Return the innermost frame at level LEVEL. */
1777 1.8 christos
1778 1.8 christos static frame_info_ptr
1779 1.10 christos leading_innermost_frame (int level)
1780 1.8 christos {
1781 1.8 christos frame_info_ptr leading;
1782 1.8 christos
1783 1.8 christos leading = get_current_frame ();
1784 1.8 christos
1785 1.8 christos gdb_assert (level >= 0);
1786 1.8 christos
1787 1.8 christos while (leading != nullptr && level)
1788 1.8 christos {
1789 1.8 christos QUIT;
1790 1.8 christos leading = get_prev_frame (leading);
1791 1.8 christos level--;
1792 1.8 christos }
1793 1.8 christos
1794 1.8 christos return leading;
1795 1.8 christos }
1796 1.8 christos
1797 1.10 christos /* Return the starting frame needed to handle COUNT outermost frames. */
1798 1.8 christos
1799 1.8 christos static frame_info_ptr
1800 1.10 christos trailing_outermost_frame (int count)
1801 1.10 christos {
1802 1.8 christos frame_info_ptr current;
1803 1.8 christos frame_info_ptr trailing;
1804 1.8 christos
1805 1.8 christos trailing = get_current_frame ();
1806 1.8 christos
1807 1.8 christos gdb_assert (count > 0);
1808 1.8 christos
1809 1.8 christos current = trailing;
1810 1.8 christos while (current != nullptr && count--)
1811 1.8 christos {
1812 1.8 christos QUIT;
1813 1.8 christos current = get_prev_frame (current);
1814 1.8 christos }
1815 1.8 christos
1816 1.8 christos /* Will stop when CURRENT reaches the top of the stack.
1817 1.8 christos TRAILING will be COUNT below it. */
1818 1.8 christos while (current != nullptr)
1819 1.8 christos {
1820 1.8 christos QUIT;
1821 1.8 christos trailing = get_prev_frame (trailing);
1822 1.8 christos current = get_prev_frame (current);
1823 1.8 christos }
1824 1.8 christos
1825 1.8 christos return trailing;
1826 1.8 christos }
1827 1.8 christos
1828 1.8 christos /* The core of all the "select-frame" sub-commands. Just wraps a call to
1829 1.8 christos SELECT_FRAME. */
1830 1.11 christos
1831 1.8 christos static void
1832 1.10 christos select_frame_command_core (const frame_info_ptr &fi, bool ignored)
1833 1.8 christos {
1834 1.10 christos frame_info_ptr prev_frame = get_selected_frame ();
1835 1.11 christos select_frame (fi);
1836 1.8 christos if (get_selected_frame () != prev_frame)
1837 1.8 christos notify_user_selected_context_changed (USER_SELECTED_FRAME);
1838 1.8 christos }
1839 1.8 christos
1840 1.8 christos /* The core of all the "frame" sub-commands. Select frame FI, and if this
1841 1.8 christos means we change frame send out a change notification (otherwise, just
1842 1.8 christos reprint the current frame summary). */
1843 1.11 christos
1844 1.8 christos static void
1845 1.10 christos frame_command_core (const frame_info_ptr &fi, bool ignored)
1846 1.8 christos {
1847 1.10 christos frame_info_ptr prev_frame = get_selected_frame ();
1848 1.11 christos select_frame (fi);
1849 1.8 christos if (get_selected_frame () != prev_frame)
1850 1.8 christos notify_user_selected_context_changed (USER_SELECTED_FRAME);
1851 1.1 christos else
1852 1.1 christos print_selected_thread_frame (current_uiout, USER_SELECTED_FRAME);
1853 1.8 christos }
1854 1.8 christos
1855 1.8 christos /* The three commands 'frame', 'select-frame', and 'info frame' all have a
1856 1.8 christos common set of sub-commands that allow a specific frame to be selected.
1857 1.8 christos All of the sub-command functions are static methods within this class
1858 1.8 christos template which is then instantiated below. The template parameter is a
1859 1.8 christos callback used to implement the functionality of the base command
1860 1.8 christos ('frame', 'select-frame', or 'info frame').
1861 1.8 christos
1862 1.8 christos In the template parameter FI is the frame being selected. The
1863 1.8 christos SELECTED_FRAME_P flag is true if the frame being selected was done by
1864 1.8 christos default, which happens when the user uses the base command with no
1865 1.8 christos arguments. For example the commands 'info frame', 'select-frame',
1866 1.8 christos 'frame' will all cause SELECTED_FRAME_P to be true. In all other cases
1867 1.11 christos SELECTED_FRAME_P is false. */
1868 1.8 christos
1869 1.8 christos template <void (*FPTR) (const frame_info_ptr &fi, bool selected_frame_p)>
1870 1.8 christos class frame_command_helper
1871 1.8 christos {
1872 1.8 christos public:
1873 1.8 christos
1874 1.8 christos /* The "frame level" family of commands. The ARG is an integer that is
1875 1.8 christos the frame's level in the stack. */
1876 1.8 christos static void
1877 1.8 christos level (const char *arg, int from_tty)
1878 1.10 christos {
1879 1.8 christos int level = value_as_long (parse_and_eval (arg));
1880 1.8 christos frame_info_ptr fid
1881 1.8 christos = find_relative_frame (get_current_frame (), &level);
1882 1.8 christos if (level != 0)
1883 1.8 christos error (_("No frame at level %s."), arg);
1884 1.8 christos FPTR (fid, false);
1885 1.8 christos }
1886 1.8 christos
1887 1.8 christos /* The "frame address" family of commands. ARG is a stack-pointer
1888 1.8 christos address for an existing frame. This command does not allow new
1889 1.8 christos frames to be created. */
1890 1.8 christos
1891 1.8 christos static void
1892 1.8 christos address (const char *arg, int from_tty)
1893 1.10 christos {
1894 1.8 christos CORE_ADDR addr = value_as_address (parse_and_eval (arg));
1895 1.8 christos frame_info_ptr fid = find_frame_for_address (addr);
1896 1.8 christos if (fid == NULL)
1897 1.8 christos error (_("No frame at address %s."), arg);
1898 1.8 christos FPTR (fid, false);
1899 1.8 christos }
1900 1.8 christos
1901 1.8 christos /* The "frame view" family of commands. ARG is one or two addresses and
1902 1.8 christos is used to view a frame that might be outside the current backtrace.
1903 1.8 christos The addresses are stack-pointer address, and (optional) pc-address. */
1904 1.8 christos
1905 1.8 christos static void
1906 1.10 christos view (const char *args, int from_tty)
1907 1.8 christos {
1908 1.8 christos frame_info_ptr fid;
1909 1.10 christos
1910 1.8 christos if (args == NULL)
1911 1.8 christos error (_("Missing address argument to view a frame"));
1912 1.8 christos
1913 1.8 christos gdb_argv argv (args);
1914 1.8 christos
1915 1.8 christos if (argv.count () == 2)
1916 1.8 christos {
1917 1.8 christos CORE_ADDR addr[2];
1918 1.8 christos
1919 1.8 christos addr [0] = value_as_address (parse_and_eval (argv[0]));
1920 1.8 christos addr [1] = value_as_address (parse_and_eval (argv[1]));
1921 1.8 christos fid = create_new_frame (addr[0], addr[1]);
1922 1.8 christos }
1923 1.8 christos else
1924 1.8 christos {
1925 1.8 christos CORE_ADDR addr = value_as_address (parse_and_eval (argv[0]));
1926 1.8 christos fid = create_new_frame (addr, false);
1927 1.8 christos }
1928 1.8 christos FPTR (fid, false);
1929 1.8 christos }
1930 1.8 christos
1931 1.8 christos /* The "frame function" family of commands. ARG is the name of a
1932 1.8 christos function within the stack, the first function (searching from frame
1933 1.8 christos 0) with that name will be selected. */
1934 1.8 christos
1935 1.8 christos static void
1936 1.8 christos function (const char *arg, int from_tty)
1937 1.8 christos {
1938 1.10 christos if (arg == NULL)
1939 1.8 christos error (_("Missing function name argument"));
1940 1.8 christos frame_info_ptr fid = find_frame_for_function (arg);
1941 1.8 christos if (fid == NULL)
1942 1.8 christos error (_("No frame for function \"%s\"."), arg);
1943 1.8 christos FPTR (fid, false);
1944 1.8 christos }
1945 1.8 christos
1946 1.8 christos /* The "frame" base command, that is, when no sub-command is specified.
1947 1.8 christos If one argument is provided then we assume that this is a frame's
1948 1.8 christos level as historically, this was the supported command syntax that was
1949 1.8 christos used most often.
1950 1.8 christos
1951 1.8 christos If no argument is provided, then the current frame is selected. */
1952 1.8 christos
1953 1.8 christos static void
1954 1.8 christos base_command (const char *arg, int from_tty)
1955 1.8 christos {
1956 1.8 christos if (arg == NULL)
1957 1.8 christos FPTR (get_selected_frame (_("No stack.")), true);
1958 1.8 christos else
1959 1.8 christos level (arg, from_tty);
1960 1.8 christos }
1961 1.8 christos };
1962 1.8 christos
1963 1.8 christos /* Instantiate three FRAME_COMMAND_HELPER instances to implement the
1964 1.8 christos sub-commands for 'info frame', 'frame', and 'select-frame' commands. */
1965 1.8 christos
1966 1.8 christos static frame_command_helper <info_frame_command_core> info_frame_cmd;
1967 1.8 christos static frame_command_helper <frame_command_core> frame_cmd;
1968 1.1 christos static frame_command_helper <select_frame_command_core> select_frame_cmd;
1969 1.1 christos
1970 1.1 christos /* Print briefly all stack frames or just the innermost COUNT_EXP
1971 1.1 christos frames. */
1972 1.9 christos
1973 1.9 christos static void
1974 1.9 christos backtrace_command_1 (const frame_print_options &fp_opts,
1975 1.9 christos const backtrace_cmd_options &bt_opts,
1976 1.1 christos const char *count_exp, int from_tty)
1977 1.10 christos
1978 1.1 christos {
1979 1.8 christos frame_info_ptr fi;
1980 1.3 christos int count;
1981 1.1 christos int py_start = 0, py_end = 0;
1982 1.10 christos enum ext_lang_bt_status result = EXT_LANG_BT_ERROR;
1983 1.1 christos
1984 1.1 christos if (!target_has_stack ())
1985 1.1 christos error (_("No stack."));
1986 1.1 christos
1987 1.1 christos if (count_exp)
1988 1.1 christos {
1989 1.8 christos count = parse_and_eval_long (count_exp);
1990 1.1 christos if (count < 0)
1991 1.1 christos py_start = count;
1992 1.1 christos else
1993 1.8 christos {
1994 1.8 christos py_start = 0;
1995 1.8 christos /* The argument to apply_ext_lang_frame_filter is the number
1996 1.1 christos of the final frame to print, and frames start at 0. */
1997 1.1 christos py_end = count - 1;
1998 1.1 christos }
1999 1.1 christos }
2000 1.1 christos else
2001 1.1 christos {
2002 1.1 christos py_end = -1;
2003 1.1 christos count = -1;
2004 1.9 christos }
2005 1.9 christos
2006 1.9 christos frame_filter_flags flags = 0;
2007 1.9 christos
2008 1.9 christos if (bt_opts.full)
2009 1.9 christos flags |= PRINT_LOCALS;
2010 1.11 christos if (bt_opts.hide)
2011 1.11 christos flags |= PRINT_HIDE;
2012 1.9 christos if (fp_opts.print_raw_frame_arguments)
2013 1.9 christos flags |= PRINT_RAW_FRAME_ARGUMENTS;
2014 1.1 christos
2015 1.3 christos if (!bt_opts.no_filters)
2016 1.1 christos {
2017 1.8 christos enum ext_lang_frame_args arg_type;
2018 1.8 christos
2019 1.8 christos flags |= PRINT_LEVEL | PRINT_FRAME_INFO | PRINT_ARGS;
2020 1.1 christos if (from_tty)
2021 1.9 christos flags |= PRINT_MORE_FRAMES;
2022 1.1 christos
2023 1.9 christos if (fp_opts.print_frame_arguments == print_frame_arguments_scalars)
2024 1.1 christos arg_type = CLI_SCALAR_VALUES;
2025 1.9 christos else if (fp_opts.print_frame_arguments == print_frame_arguments_all)
2026 1.9 christos arg_type = CLI_ALL_VALUES;
2027 1.9 christos else if (fp_opts.print_frame_arguments == print_frame_arguments_presence)
2028 1.9 christos arg_type = CLI_PRESENCE;
2029 1.1 christos else if (fp_opts.print_frame_arguments == print_frame_arguments_none)
2030 1.9 christos arg_type = NO_VALUES;
2031 1.1 christos else
2032 1.3 christos gdb_assert (0);
2033 1.3 christos
2034 1.3 christos result = apply_ext_lang_frame_filter (get_current_frame (), flags,
2035 1.3 christos arg_type, current_uiout,
2036 1.1 christos py_start, py_end);
2037 1.1 christos }
2038 1.9 christos
2039 1.9 christos /* Run the inbuilt backtrace if there are no filters registered, or
2040 1.1 christos "-no-filters" has been specified from the command. */
2041 1.10 christos if (bt_opts.no_filters || result == EXT_LANG_BT_NO_FILTERS)
2042 1.8 christos {
2043 1.8 christos frame_info_ptr trailing;
2044 1.8 christos
2045 1.8 christos /* The following code must do two things. First, it must set the
2046 1.8 christos variable TRAILING to the frame from which we should start
2047 1.8 christos printing. Second, it must set the variable count to the number
2048 1.8 christos of frames which we should print, or -1 if all of them. */
2049 1.8 christos
2050 1.8 christos if (count_exp != NULL && count < 0)
2051 1.8 christos {
2052 1.8 christos trailing = trailing_outermost_frame (-count);
2053 1.8 christos count = -1;
2054 1.8 christos }
2055 1.8 christos else
2056 1.8 christos trailing = get_current_frame ();
2057 1.1 christos
2058 1.1 christos for (fi = trailing; fi && count--; fi = get_prev_frame (fi))
2059 1.1 christos {
2060 1.1 christos QUIT;
2061 1.1 christos
2062 1.1 christos /* Don't use print_stack_frame; if an error() occurs it probably
2063 1.1 christos means further attempts to backtrace would fail (on the other
2064 1.1 christos hand, perhaps the code does or could be fixed to make sure
2065 1.9 christos the frame->prev field gets set to NULL in that case). */
2066 1.8 christos
2067 1.10 christos print_frame_info (fp_opts, fi, 1, LOCATION, 1, 0);
2068 1.1 christos if ((flags & PRINT_LOCALS) != 0)
2069 1.1 christos print_frame_local_vars (fi, false, NULL, NULL, 1, gdb_stdout);
2070 1.1 christos
2071 1.1 christos /* Save the last frame to check for error conditions. */
2072 1.1 christos trailing = fi;
2073 1.1 christos }
2074 1.1 christos
2075 1.10 christos /* If we've stopped before the end, mention that. */
2076 1.1 christos if (fi && from_tty)
2077 1.1 christos gdb_printf (_("(More stack frames follow...)\n"));
2078 1.1 christos
2079 1.1 christos /* If we've run out of frames, and the reason appears to be an error
2080 1.1 christos condition, print it. */
2081 1.1 christos if (fi == NULL && trailing != NULL)
2082 1.1 christos {
2083 1.1 christos enum unwind_stop_reason reason;
2084 1.1 christos
2085 1.10 christos reason = get_frame_unwind_stop_reason (trailing);
2086 1.10 christos if (reason >= UNWIND_FIRST_ERROR)
2087 1.1 christos gdb_printf (_("Backtrace stopped: %s\n"),
2088 1.1 christos frame_stop_reason_string (trailing));
2089 1.1 christos }
2090 1.1 christos }
2091 1.9 christos }
2092 1.9 christos
2093 1.9 christos /* Create an option_def_group array grouping all the "backtrace"
2094 1.9 christos options, with FP_OPTS, BT_CMD_OPT, SET_BT_OPTS as contexts. */
2095 1.9 christos
2096 1.9 christos static inline std::array<gdb::option::option_def_group, 3>
2097 1.9 christos make_backtrace_options_def_group (frame_print_options *fp_opts,
2098 1.1 christos backtrace_cmd_options *bt_cmd_opts,
2099 1.9 christos set_backtrace_options *set_bt_opts)
2100 1.9 christos {
2101 1.9 christos return {{
2102 1.9 christos { {frame_print_option_defs}, fp_opts },
2103 1.9 christos { {set_backtrace_option_defs}, set_bt_opts },
2104 1.9 christos { {backtrace_command_option_defs}, bt_cmd_opts }
2105 1.9 christos }};
2106 1.9 christos }
2107 1.9 christos
2108 1.9 christos /* Parse the backtrace command's qualifiers. Returns ARG advanced
2109 1.1 christos past the qualifiers, if any. BT_CMD_OPTS, if not null, is used to
2110 1.9 christos store the parsed qualifiers. */
2111 1.9 christos
2112 1.9 christos static const char *
2113 1.9 christos parse_backtrace_qualifiers (const char *arg,
2114 1.9 christos backtrace_cmd_options *bt_cmd_opts = nullptr)
2115 1.1 christos {
2116 1.9 christos while (true)
2117 1.9 christos {
2118 1.9 christos const char *save_arg = arg;
2119 1.9 christos std::string this_arg = extract_arg (&arg);
2120 1.9 christos
2121 1.1 christos if (this_arg.empty ())
2122 1.10 christos return arg;
2123 1.9 christos
2124 1.9 christos if (startswith ("no-filters", this_arg))
2125 1.9 christos {
2126 1.9 christos if (bt_cmd_opts != nullptr)
2127 1.10 christos bt_cmd_opts->no_filters = true;
2128 1.9 christos }
2129 1.9 christos else if (startswith ("full", this_arg))
2130 1.9 christos {
2131 1.9 christos if (bt_cmd_opts != nullptr)
2132 1.10 christos bt_cmd_opts->full = true;
2133 1.1 christos }
2134 1.9 christos else if (startswith ("hide", this_arg))
2135 1.9 christos {
2136 1.9 christos if (bt_cmd_opts != nullptr)
2137 1.9 christos bt_cmd_opts->hide = true;
2138 1.9 christos }
2139 1.9 christos else
2140 1.9 christos {
2141 1.1 christos /* Not a recognized qualifier, so stop. */
2142 1.9 christos return save_arg;
2143 1.9 christos }
2144 1.8 christos }
2145 1.9 christos }
2146 1.9 christos
2147 1.9 christos static void
2148 1.9 christos backtrace_command (const char *arg, int from_tty)
2149 1.9 christos {
2150 1.9 christos frame_print_options fp_opts = user_frame_print_options;
2151 1.9 christos backtrace_cmd_options bt_cmd_opts;
2152 1.9 christos set_backtrace_options set_bt_opts = user_set_backtrace_options;
2153 1.9 christos
2154 1.9 christos auto grp
2155 1.9 christos = make_backtrace_options_def_group (&fp_opts, &bt_cmd_opts, &set_bt_opts);
2156 1.9 christos gdb::option::process_options
2157 1.9 christos (&arg, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp);
2158 1.9 christos
2159 1.9 christos /* Parse non-'-'-prefixed qualifiers, for backwards
2160 1.9 christos compatibility. */
2161 1.9 christos if (arg != NULL)
2162 1.8 christos {
2163 1.8 christos arg = parse_backtrace_qualifiers (arg, &bt_cmd_opts);
2164 1.1 christos if (*arg == '\0')
2165 1.1 christos arg = NULL;
2166 1.9 christos }
2167 1.9 christos
2168 1.9 christos /* These options are handled quite deep in the unwind machinery, so
2169 1.9 christos we get to pass them down by swapping globals. */
2170 1.9 christos scoped_restore restore_set_backtrace_options
2171 1.9 christos = make_scoped_restore (&user_set_backtrace_options, set_bt_opts);
2172 1.9 christos
2173 1.9 christos backtrace_command_1 (fp_opts, bt_cmd_opts, arg, from_tty);
2174 1.9 christos }
2175 1.9 christos
2176 1.9 christos /* Completer for the "backtrace" command. */
2177 1.9 christos
2178 1.9 christos static void
2179 1.9 christos backtrace_command_completer (struct cmd_list_element *ignore,
2180 1.9 christos completion_tracker &tracker,
2181 1.9 christos const char *text, const char */*word*/)
2182 1.9 christos {
2183 1.9 christos const auto group
2184 1.9 christos = make_backtrace_options_def_group (nullptr, nullptr, nullptr);
2185 1.9 christos if (gdb::option::complete_options
2186 1.9 christos (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group))
2187 1.9 christos return;
2188 1.9 christos
2189 1.9 christos if (*text != '\0')
2190 1.9 christos {
2191 1.9 christos const char *p = skip_to_space (text);
2192 1.9 christos if (*p == '\0')
2193 1.9 christos {
2194 1.9 christos static const char *const backtrace_cmd_qualifier_choices[] = {
2195 1.9 christos "full", "no-filters", "hide", nullptr,
2196 1.9 christos };
2197 1.9 christos complete_on_enum (tracker, backtrace_cmd_qualifier_choices,
2198 1.9 christos text, text);
2199 1.9 christos
2200 1.9 christos if (tracker.have_completions ())
2201 1.9 christos return;
2202 1.9 christos }
2203 1.9 christos else
2204 1.9 christos {
2205 1.9 christos const char *cmd = parse_backtrace_qualifiers (text);
2206 1.9 christos tracker.advance_custom_word_point_by (cmd - text);
2207 1.9 christos text = cmd;
2208 1.9 christos }
2209 1.9 christos }
2210 1.9 christos
2211 1.1 christos const char *word = advance_to_expression_complete_word_point (tracker, text);
2212 1.1 christos expression_completer (ignore, tracker, text, word);
2213 1.10 christos }
2214 1.1 christos
2215 1.1 christos /* Iterate over the local variables of a block B, calling CB. */
2216 1.3 christos
2217 1.10 christos static void
2218 1.1 christos iterate_over_block_locals (const struct block *b,
2219 1.11 christos iterate_over_block_arg_local_vars_cb cb)
2220 1.1 christos {
2221 1.10 christos for (struct symbol *sym : block_iterator_range (b))
2222 1.1 christos {
2223 1.9 christos switch (sym->aclass ())
2224 1.1 christos {
2225 1.1 christos case LOC_CONST:
2226 1.1 christos case LOC_LOCAL:
2227 1.1 christos case LOC_REGISTER:
2228 1.8 christos case LOC_STATIC:
2229 1.10 christos case LOC_COMPUTED:
2230 1.1 christos case LOC_OPTIMIZED_OUT:
2231 1.10 christos if (sym->is_argument ())
2232 1.1 christos break;
2233 1.10 christos if (sym->domain () == COMMON_BLOCK_DOMAIN)
2234 1.1 christos break;
2235 1.1 christos cb (sym->print_name (), sym);
2236 1.1 christos break;
2237 1.1 christos
2238 1.1 christos default:
2239 1.1 christos /* Ignore symbols which are not locals. */
2240 1.1 christos break;
2241 1.1 christos }
2242 1.1 christos }
2243 1.1 christos }
2244 1.1 christos
2245 1.1 christos /* Iterate over all the local variables in block B, including all its
2246 1.1 christos superblocks, stopping when the top-level block is reached. */
2247 1.3 christos
2248 1.10 christos void
2249 1.1 christos iterate_over_block_local_vars (const struct block *block,
2250 1.1 christos iterate_over_block_arg_local_vars_cb cb)
2251 1.1 christos {
2252 1.10 christos while (block)
2253 1.1 christos {
2254 1.1 christos iterate_over_block_locals (block, cb);
2255 1.1 christos /* After handling the function's top-level block, stop. Don't
2256 1.10 christos continue to its superblock, the block of per-file
2257 1.1 christos symbols. */
2258 1.10 christos if (block->function ())
2259 1.1 christos break;
2260 1.1 christos block = block->superblock ();
2261 1.1 christos }
2262 1.1 christos }
2263 1.1 christos
2264 1.1 christos /* Data to be passed around in the calls to the locals and args
2265 1.1 christos iterators. */
2266 1.1 christos
2267 1.11 christos struct print_variable_and_value_data
2268 1.11 christos {
2269 1.1 christos std::optional<compiled_regex> preg;
2270 1.1 christos std::optional<compiled_regex> treg;
2271 1.1 christos struct frame_id frame_id;
2272 1.1 christos int num_tabs;
2273 1.10 christos struct ui_file *stream;
2274 1.10 christos int values_printed;
2275 1.1 christos
2276 1.1 christos void operator() (const char *print_name, struct symbol *sym);
2277 1.1 christos };
2278 1.1 christos
2279 1.10 christos /* The callback for the locals and args iterators. */
2280 1.10 christos
2281 1.10 christos void
2282 1.10 christos print_variable_and_value_data::operator() (const char *print_name,
2283 1.10 christos struct symbol *sym)
2284 1.1 christos {
2285 1.10 christos frame_info_ptr frame;
2286 1.10 christos
2287 1.10 christos if (preg.has_value ()
2288 1.10 christos && preg->exec (sym->natural_name (), 0, NULL, 0) != 0)
2289 1.10 christos return;
2290 1.8 christos if (treg.has_value ()
2291 1.10 christos && !treg_matches_sym_type_name (*treg, sym))
2292 1.8 christos return;
2293 1.8 christos if (language_def (sym->language ())->symbol_printing_suppressed (sym))
2294 1.10 christos return;
2295 1.1 christos
2296 1.1 christos frame = frame_find_by_id (frame_id);
2297 1.1 christos if (frame == NULL)
2298 1.1 christos {
2299 1.1 christos warning (_("Unable to restore previously selected frame."));
2300 1.1 christos return;
2301 1.10 christos }
2302 1.1 christos
2303 1.10 christos print_variable_and_value (print_name, sym, frame, stream, num_tabs);
2304 1.1 christos
2305 1.1 christos values_printed = 1;
2306 1.8 christos }
2307 1.8 christos
2308 1.8 christos /* Prepares the regular expression REG from REGEXP.
2309 1.8 christos If REGEXP is NULL, it results in an empty regular expression. */
2310 1.11 christos
2311 1.8 christos static void
2312 1.8 christos prepare_reg (const char *regexp, std::optional<compiled_regex> *reg)
2313 1.8 christos {
2314 1.8 christos if (regexp != NULL)
2315 1.8 christos {
2316 1.8 christos int cflags = REG_NOSUB | (case_sensitivity == case_sensitive_off
2317 1.8 christos ? REG_ICASE : 0);
2318 1.8 christos reg->emplace (regexp, cflags, _("Invalid regexp"));
2319 1.8 christos }
2320 1.8 christos else
2321 1.8 christos reg->reset ();
2322 1.1 christos }
2323 1.1 christos
2324 1.8 christos /* Print all variables from the innermost up to the function block of FRAME.
2325 1.8 christos Print them with values to STREAM indented by NUM_TABS.
2326 1.8 christos If REGEXP is not NULL, only print local variables whose name
2327 1.8 christos matches REGEXP.
2328 1.8 christos If T_REGEXP is not NULL, only print local variables whose type
2329 1.11 christos matches T_REGEXP.
2330 1.1 christos If no local variables have been printed and !QUIET, prints a message
2331 1.1 christos explaining why no local variables could be printed. */
2332 1.11 christos
2333 1.8 christos static void
2334 1.8 christos print_frame_local_vars (const frame_info_ptr &frame,
2335 1.8 christos bool quiet,
2336 1.1 christos const char *regexp, const char *t_regexp,
2337 1.1 christos int num_tabs, struct ui_file *stream)
2338 1.3 christos {
2339 1.1 christos struct print_variable_and_value_data cb_data;
2340 1.1 christos const struct block *block;
2341 1.1 christos CORE_ADDR pc;
2342 1.1 christos
2343 1.8 christos if (!get_frame_pc_if_available (frame, &pc))
2344 1.10 christos {
2345 1.10 christos if (!quiet)
2346 1.1 christos gdb_printf (stream,
2347 1.1 christos _("PC unavailable, cannot determine locals.\n"));
2348 1.1 christos return;
2349 1.1 christos }
2350 1.1 christos
2351 1.1 christos block = get_frame_block (frame, 0);
2352 1.8 christos if (block == 0)
2353 1.10 christos {
2354 1.1 christos if (!quiet)
2355 1.1 christos gdb_printf (stream, "No symbol table info available.\n");
2356 1.1 christos return;
2357 1.8 christos }
2358 1.8 christos
2359 1.1 christos prepare_reg (regexp, &cb_data.preg);
2360 1.1 christos prepare_reg (t_regexp, &cb_data.treg);
2361 1.1 christos cb_data.frame_id = get_frame_id (frame);
2362 1.1 christos cb_data.num_tabs = 4 * num_tabs;
2363 1.1 christos cb_data.stream = stream;
2364 1.6 christos cb_data.values_printed = 0;
2365 1.6 christos
2366 1.6 christos /* Temporarily change the selected frame to the given FRAME.
2367 1.8 christos This allows routines that rely on the selected frame instead
2368 1.6 christos of being given a frame as parameter to use the correct frame. */
2369 1.6 christos scoped_restore_selected_frame restore_selected_frame;
2370 1.10 christos select_frame (frame);
2371 1.8 christos
2372 1.8 christos iterate_over_block_local_vars (block, cb_data);
2373 1.6 christos
2374 1.8 christos if (!cb_data.values_printed && !quiet)
2375 1.10 christos {
2376 1.8 christos if (regexp == NULL && t_regexp == NULL)
2377 1.10 christos gdb_printf (stream, _("No locals.\n"));
2378 1.6 christos else
2379 1.1 christos gdb_printf (stream, _("No matching locals.\n"));
2380 1.1 christos }
2381 1.9 christos }
2382 1.9 christos
2383 1.9 christos /* Structure to hold the values of the options used by the 'info
2384 1.9 christos variables' command and other similar commands. These correspond to the
2385 1.9 christos -q and -t options. */
2386 1.1 christos
2387 1.8 christos struct info_print_options
2388 1.10 christos {
2389 1.9 christos bool quiet = false;
2390 1.9 christos std::string type_regexp;
2391 1.9 christos };
2392 1.9 christos
2393 1.9 christos /* The options used by the 'info locals' and 'info args' commands. */
2394 1.9 christos
2395 1.9 christos static const gdb::option::option_def info_print_options_defs[] = {
2396 1.9 christos gdb::option::boolean_option_def<info_print_options> {
2397 1.9 christos "q",
2398 1.9 christos [] (info_print_options *opt) { return &opt->quiet; },
2399 1.9 christos nullptr, /* show_cmd_cb */
2400 1.9 christos nullptr /* set_doc */
2401 1.9 christos },
2402 1.9 christos
2403 1.9 christos gdb::option::string_option_def<info_print_options> {
2404 1.9 christos "t",
2405 1.9 christos [] (info_print_options *opt) { return &opt->type_regexp; },
2406 1.9 christos nullptr, /* show_cmd_cb */
2407 1.9 christos nullptr /* set_doc */
2408 1.9 christos }
2409 1.9 christos };
2410 1.9 christos
2411 1.9 christos /* Returns the option group used by 'info locals' and 'info args'
2412 1.9 christos commands. */
2413 1.9 christos
2414 1.9 christos static gdb::option::option_def_group
2415 1.9 christos make_info_print_options_def_group (info_print_options *opts)
2416 1.9 christos {
2417 1.8 christos return {{info_print_options_defs}, opts};
2418 1.9 christos }
2419 1.8 christos
2420 1.9 christos /* Command completer for 'info locals' and 'info args'. */
2421 1.9 christos
2422 1.9 christos static void
2423 1.9 christos info_print_command_completer (struct cmd_list_element *ignore,
2424 1.9 christos completion_tracker &tracker,
2425 1.9 christos const char *text, const char * /* word */)
2426 1.9 christos {
2427 1.9 christos const auto group
2428 1.9 christos = make_info_print_options_def_group (nullptr);
2429 1.9 christos if (gdb::option::complete_options
2430 1.9 christos (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group))
2431 1.9 christos return;
2432 1.9 christos
2433 1.9 christos const char *word = advance_to_expression_complete_word_point (tracker, text);
2434 1.9 christos symbol_completer (ignore, tracker, text, word);
2435 1.9 christos }
2436 1.9 christos
2437 1.9 christos /* Implement the 'info locals' command. */
2438 1.9 christos
2439 1.9 christos void
2440 1.9 christos info_locals_command (const char *args, int from_tty)
2441 1.9 christos {
2442 1.9 christos info_print_options opts;
2443 1.9 christos auto grp = make_info_print_options_def_group (&opts);
2444 1.9 christos gdb::option::process_options
2445 1.9 christos (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp);
2446 1.8 christos if (args != nullptr && *args == '\0')
2447 1.10 christos args = nullptr;
2448 1.10 christos
2449 1.10 christos print_frame_local_vars
2450 1.10 christos (get_selected_frame (_("No frame selected.")),
2451 1.10 christos opts.quiet, args,
2452 1.1 christos opts.type_regexp.empty () ? nullptr : opts.type_regexp.c_str (),
2453 1.1 christos 0, gdb_stdout);
2454 1.8 christos }
2455 1.1 christos
2456 1.1 christos /* Iterate over all the argument variables in block B. */
2457 1.3 christos
2458 1.10 christos void
2459 1.1 christos iterate_over_block_arg_vars (const struct block *b,
2460 1.11 christos iterate_over_block_arg_local_vars_cb cb)
2461 1.1 christos {
2462 1.1 christos for (struct symbol *sym : block_iterator_range (b))
2463 1.10 christos {
2464 1.1 christos /* Don't worry about things which aren't arguments. */
2465 1.1 christos if (sym->is_argument ())
2466 1.1 christos {
2467 1.1 christos /* We have to look up the symbol because arguments can have
2468 1.1 christos two entries (one a parameter, one a local) and the one we
2469 1.1 christos want is the local, which lookup_symbol will find for us.
2470 1.1 christos This includes gcc1 (not gcc2) on the sparc when passing a
2471 1.1 christos small structure and gcc2 when the argument type is float
2472 1.1 christos and it is passed as a double and converted to float by
2473 1.1 christos the prologue (in the latter case the type of the LOC_ARG
2474 1.1 christos symbol is double and the type of the LOC_LOCAL symbol is
2475 1.1 christos float). There are also LOC_ARG/LOC_REGISTER pairs which
2476 1.11 christos are not combined in symbol-reading. */
2477 1.11 christos
2478 1.11 christos struct symbol *sym2
2479 1.10 christos = lookup_symbol_search_name (sym->search_name (),
2480 1.1 christos b, SEARCH_VAR_DOMAIN).symbol;
2481 1.1 christos cb (sym->print_name (), sym2);
2482 1.1 christos }
2483 1.1 christos }
2484 1.1 christos }
2485 1.1 christos
2486 1.8 christos /* Print all argument variables of the function of FRAME.
2487 1.8 christos Print them with values to STREAM.
2488 1.8 christos If REGEXP is not NULL, only print argument variables whose name
2489 1.8 christos matches REGEXP.
2490 1.8 christos If T_REGEXP is not NULL, only print argument variables whose type
2491 1.11 christos matches T_REGEXP.
2492 1.1 christos If no argument variables have been printed and !QUIET, prints a message
2493 1.1 christos explaining why no argument variables could be printed. */
2494 1.11 christos
2495 1.8 christos static void
2496 1.8 christos print_frame_arg_vars (const frame_info_ptr &frame,
2497 1.8 christos bool quiet,
2498 1.1 christos const char *regexp, const char *t_regexp,
2499 1.1 christos struct ui_file *stream)
2500 1.1 christos {
2501 1.1 christos struct print_variable_and_value_data cb_data;
2502 1.11 christos struct symbol *func;
2503 1.11 christos CORE_ADDR pc;
2504 1.1 christos std::optional<compiled_regex> preg;
2505 1.1 christos std::optional<compiled_regex> treg;
2506 1.1 christos
2507 1.8 christos if (!get_frame_pc_if_available (frame, &pc))
2508 1.10 christos {
2509 1.10 christos if (!quiet)
2510 1.1 christos gdb_printf (stream,
2511 1.1 christos _("PC unavailable, cannot determine args.\n"));
2512 1.1 christos return;
2513 1.1 christos }
2514 1.1 christos
2515 1.1 christos func = get_frame_function (frame);
2516 1.8 christos if (func == NULL)
2517 1.10 christos {
2518 1.1 christos if (!quiet)
2519 1.1 christos gdb_printf (stream, _("No symbol table info available.\n"));
2520 1.1 christos return;
2521 1.8 christos }
2522 1.8 christos
2523 1.1 christos prepare_reg (regexp, &cb_data.preg);
2524 1.1 christos prepare_reg (t_regexp, &cb_data.treg);
2525 1.8 christos cb_data.frame_id = get_frame_id (frame);
2526 1.1 christos cb_data.num_tabs = 0;
2527 1.1 christos cb_data.stream = stream;
2528 1.10 christos cb_data.values_printed = 0;
2529 1.1 christos
2530 1.8 christos iterate_over_block_arg_vars (func->value_block (), cb_data);
2531 1.8 christos
2532 1.8 christos if (!cb_data.values_printed && !quiet)
2533 1.10 christos {
2534 1.8 christos if (regexp == NULL && t_regexp == NULL)
2535 1.10 christos gdb_printf (stream, _("No arguments.\n"));
2536 1.8 christos else
2537 1.1 christos gdb_printf (stream, _("No matching arguments.\n"));
2538 1.1 christos }
2539 1.9 christos }
2540 1.9 christos
2541 1.1 christos /* Implement the 'info args' command. */
2542 1.8 christos
2543 1.1 christos void
2544 1.9 christos info_args_command (const char *args, int from_tty)
2545 1.9 christos {
2546 1.9 christos info_print_options opts;
2547 1.9 christos auto grp = make_info_print_options_def_group (&opts);
2548 1.9 christos gdb::option::process_options
2549 1.9 christos (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp);
2550 1.8 christos if (args != nullptr && *args == '\0')
2551 1.10 christos args = nullptr;
2552 1.10 christos
2553 1.10 christos print_frame_arg_vars
2554 1.10 christos (get_selected_frame (_("No frame selected.")),
2555 1.10 christos opts.quiet, args,
2556 1.1 christos opts.type_regexp.empty () ? nullptr : opts.type_regexp.c_str (),
2557 1.1 christos gdb_stdout);
2558 1.1 christos }
2559 1.1 christos
2560 1.1 christos /* Return the symbol-block in which the selected frame is executing.
2562 1.1 christos Can return zero under various legitimate circumstances.
2563 1.1 christos
2564 1.1 christos If ADDR_IN_BLOCK is non-zero, set *ADDR_IN_BLOCK to the relevant
2565 1.3 christos code address within the block returned. We use this to decide
2566 1.1 christos which macros are in scope. */
2567 1.1 christos
2568 1.1 christos const struct block *
2569 1.1 christos get_selected_block (CORE_ADDR *addr_in_block)
2570 1.1 christos {
2571 1.1 christos if (!has_stack_frames ())
2572 1.1 christos return 0;
2573 1.1 christos
2574 1.1 christos return get_frame_block (get_selected_frame (NULL), addr_in_block);
2575 1.1 christos }
2576 1.1 christos
2577 1.1 christos /* Find a frame a certain number of levels away from FRAME.
2578 1.1 christos LEVEL_OFFSET_PTR points to an int containing the number of levels.
2579 1.1 christos Positive means go to earlier frames (up); negative, the reverse.
2580 1.1 christos The int that contains the number of levels is counted toward
2581 1.1 christos zero as the frames for those levels are found.
2582 1.1 christos If the top or bottom frame is reached, that frame is returned,
2583 1.10 christos but the final value of *LEVEL_OFFSET_PTR is nonzero and indicates
2584 1.10 christos how much farther the original request asked to go. */
2585 1.1 christos
2586 1.1 christos frame_info_ptr
2587 1.1 christos find_relative_frame (frame_info_ptr frame, int *level_offset_ptr)
2588 1.1 christos {
2589 1.1 christos /* Going up is simple: just call get_prev_frame enough times or
2590 1.10 christos until the initial frame is reached. */
2591 1.1 christos while (*level_offset_ptr > 0)
2592 1.1 christos {
2593 1.1 christos frame_info_ptr prev = get_prev_frame (frame);
2594 1.1 christos
2595 1.1 christos if (!prev)
2596 1.1 christos break;
2597 1.1 christos (*level_offset_ptr)--;
2598 1.1 christos frame = prev;
2599 1.1 christos }
2600 1.1 christos
2601 1.10 christos /* Going down is just as simple. */
2602 1.1 christos while (*level_offset_ptr < 0)
2603 1.1 christos {
2604 1.1 christos frame_info_ptr next = get_next_frame (frame);
2605 1.1 christos
2606 1.1 christos if (!next)
2607 1.1 christos break;
2608 1.1 christos (*level_offset_ptr)++;
2609 1.1 christos frame = next;
2610 1.1 christos }
2611 1.1 christos
2612 1.1 christos return frame;
2613 1.1 christos }
2614 1.1 christos
2615 1.1 christos /* Select the frame up one or COUNT_EXP stack levels from the
2616 1.3 christos previously selected frame, and print it briefly. */
2617 1.1 christos
2618 1.10 christos static void
2619 1.1 christos up_silently_base (const char *count_exp)
2620 1.1 christos {
2621 1.1 christos frame_info_ptr frame;
2622 1.1 christos int count = 1;
2623 1.1 christos
2624 1.1 christos if (count_exp)
2625 1.1 christos count = parse_and_eval_long (count_exp);
2626 1.1 christos
2627 1.1 christos frame = find_relative_frame (get_selected_frame ("No stack."), &count);
2628 1.1 christos if (count != 0 && count_exp == NULL)
2629 1.1 christos error (_("Initial frame selected; you cannot go up."));
2630 1.1 christos select_frame (frame);
2631 1.8 christos }
2632 1.1 christos
2633 1.1 christos static void
2634 1.1 christos up_silently_command (const char *count_exp, int from_tty)
2635 1.1 christos {
2636 1.1 christos up_silently_base (count_exp);
2637 1.8 christos }
2638 1.1 christos
2639 1.1 christos static void
2640 1.11 christos up_command (const char *count_exp, int from_tty)
2641 1.1 christos {
2642 1.1 christos up_silently_base (count_exp);
2643 1.1 christos notify_user_selected_context_changed (USER_SELECTED_FRAME);
2644 1.1 christos }
2645 1.1 christos
2646 1.1 christos /* Select the frame down one or COUNT_EXP stack levels from the previously
2647 1.3 christos selected frame, and print it briefly. */
2648 1.1 christos
2649 1.10 christos static void
2650 1.1 christos down_silently_base (const char *count_exp)
2651 1.1 christos {
2652 1.1 christos frame_info_ptr frame;
2653 1.1 christos int count = -1;
2654 1.1 christos
2655 1.1 christos if (count_exp)
2656 1.1 christos count = -parse_and_eval_long (count_exp);
2657 1.1 christos
2658 1.1 christos frame = find_relative_frame (get_selected_frame ("No stack."), &count);
2659 1.10 christos if (count != 0 && count_exp == NULL)
2660 1.10 christos {
2661 1.10 christos /* We only do this if COUNT_EXP is not specified. That way
2662 1.1 christos "down" means to really go down (and let me know if that is
2663 1.1 christos impossible), but "down 9999" can be used to mean go all the
2664 1.1 christos way down without getting an error. */
2665 1.1 christos
2666 1.1 christos error (_("Bottom (innermost) frame selected; you cannot go down."));
2667 1.1 christos }
2668 1.1 christos
2669 1.1 christos select_frame (frame);
2670 1.8 christos }
2671 1.1 christos
2672 1.1 christos static void
2673 1.1 christos down_silently_command (const char *count_exp, int from_tty)
2674 1.1 christos {
2675 1.1 christos down_silently_base (count_exp);
2676 1.8 christos }
2677 1.1 christos
2678 1.1 christos static void
2679 1.11 christos down_command (const char *count_exp, int from_tty)
2680 1.1 christos {
2681 1.1 christos down_silently_base (count_exp);
2682 1.1 christos notify_user_selected_context_changed (USER_SELECTED_FRAME);
2683 1.8 christos }
2684 1.1 christos
2685 1.1 christos void
2686 1.1 christos return_command (const char *retval_exp, int from_tty)
2687 1.10 christos {
2688 1.1 christos /* Initialize it just to avoid a GCC false warning. */
2689 1.1 christos enum return_value_convention rv_conv = RETURN_VALUE_STRUCT_CONVENTION;
2690 1.1 christos frame_info_ptr thisframe;
2691 1.1 christos struct gdbarch *gdbarch;
2692 1.10 christos struct symbol *thisfun;
2693 1.1 christos struct value *return_value = NULL;
2694 1.1 christos struct value *function = NULL;
2695 1.1 christos std::string query_prefix;
2696 1.1 christos
2697 1.1 christos thisframe = get_selected_frame ("No selected frame.");
2698 1.1 christos thisfun = get_frame_function (thisframe);
2699 1.1 christos gdbarch = get_frame_arch (thisframe);
2700 1.1 christos
2701 1.1 christos if (get_frame_type (get_current_frame ()) == INLINE_FRAME)
2702 1.1 christos error (_("Can not force return from an inlined function."));
2703 1.1 christos
2704 1.1 christos /* Compute the return value. If the computation triggers an error,
2705 1.1 christos let it bail. If the return type can't be handled, set
2706 1.1 christos RETURN_VALUE to NULL, and QUERY_PREFIX to an informational
2707 1.7 christos message. */
2708 1.1 christos if (retval_exp)
2709 1.1 christos {
2710 1.1 christos expression_up retval_expr = parse_expression (retval_exp);
2711 1.10 christos struct type *return_type = NULL;
2712 1.11 christos
2713 1.1 christos /* Compute the return value. Should the computation fail, this
2714 1.1 christos call throws an error. */
2715 1.10 christos return_value = retval_expr->evaluate ();
2716 1.1 christos
2717 1.10 christos /* Cast return value to the return type of the function. Should
2718 1.1 christos the cast fail, this call throws an error. */
2719 1.10 christos if (thisfun != NULL)
2720 1.10 christos return_type = thisfun->type ()->target_type ();
2721 1.10 christos if (return_type == NULL)
2722 1.1 christos {
2723 1.1 christos if (retval_expr->first_opcode () != UNOP_CAST
2724 1.1 christos && retval_expr->first_opcode () != UNOP_CAST_TYPE)
2725 1.11 christos error (_("Return value type not available for selected "
2726 1.1 christos "stack frame.\n"
2727 1.6 christos "Please use an explicit cast of the value to return."));
2728 1.1 christos return_type = return_value->type ();
2729 1.1 christos }
2730 1.1 christos return_type = check_typedef (return_type);
2731 1.10 christos return_value = value_cast (return_type, return_value);
2732 1.11 christos
2733 1.11 christos /* Make sure the value is fully evaluated. It may live in the
2734 1.1 christos stack frame we're about to pop. */
2735 1.1 christos if (return_value->lazy ())
2736 1.6 christos return_value->fetch_lazy ();
2737 1.1 christos
2738 1.1 christos if (thisfun != NULL)
2739 1.9 christos function = read_var_value (thisfun, NULL, thisframe);
2740 1.1 christos
2741 1.10 christos rv_conv = RETURN_VALUE_REGISTER_CONVENTION;
2742 1.10 christos if (return_type->code () == TYPE_CODE_VOID)
2743 1.10 christos /* If the return-type is "void", don't try to find the
2744 1.10 christos return-value's location. However, do still evaluate the
2745 1.1 christos return expression so that, even when the expression result
2746 1.1 christos is discarded, side effects such as "return i++" still
2747 1.1 christos occur. */
2748 1.11 christos return_value = NULL;
2749 1.10 christos else if (thisfun != NULL)
2750 1.10 christos {
2751 1.10 christos if (is_nocall_function (check_typedef (function->type ())))
2752 1.10 christos {
2753 1.10 christos query_prefix =
2754 1.10 christos string_printf ("Function '%s' does not follow the target "
2755 1.10 christos "calling convention.\n"
2756 1.10 christos "If you continue, setting the return value "
2757 1.10 christos "will probably lead to unpredictable "
2758 1.10 christos "behaviors.\n",
2759 1.1 christos thisfun->print_name ());
2760 1.1 christos }
2761 1.1 christos
2762 1.1 christos rv_conv = struct_return_convention (gdbarch, function, return_type);
2763 1.1 christos if (rv_conv == RETURN_VALUE_STRUCT_CONVENTION
2764 1.1 christos || rv_conv == RETURN_VALUE_ABI_RETURNS_ADDRESS)
2765 1.1 christos {
2766 1.1 christos query_prefix = "The location at which to store the "
2767 1.1 christos "function's return value is unknown.\n"
2768 1.1 christos "If you continue, the return value "
2769 1.1 christos "that you specified will be ignored.\n";
2770 1.1 christos return_value = NULL;
2771 1.1 christos }
2772 1.1 christos }
2773 1.1 christos }
2774 1.1 christos
2775 1.1 christos /* Does an interactive user really want to do this? Include
2776 1.1 christos information, such as how well GDB can handle the return value, in
2777 1.1 christos the query message. */
2778 1.1 christos if (from_tty)
2779 1.1 christos {
2780 1.1 christos int confirmed;
2781 1.10 christos
2782 1.1 christos if (thisfun == NULL)
2783 1.5 christos confirmed = query (_("%sMake selected stack frame return now? "),
2784 1.10 christos query_prefix.c_str ());
2785 1.5 christos else
2786 1.10 christos {
2787 1.10 christos if (TYPE_NO_RETURN (thisfun->type ()))
2788 1.9 christos warning (_("Function does not return normally to caller."));
2789 1.5 christos confirmed = query (_("%sMake %s return now? "),
2790 1.1 christos query_prefix.c_str (),
2791 1.1 christos thisfun->print_name ());
2792 1.1 christos }
2793 1.1 christos if (!confirmed)
2794 1.1 christos error (_("Not confirmed"));
2795 1.1 christos }
2796 1.1 christos
2797 1.1 christos /* Discard the selected frame and all frames inner-to it. */
2798 1.1 christos frame_pop (get_selected_frame (NULL));
2799 1.1 christos
2800 1.11 christos /* Store RETURN_VALUE in the just-returned register set. */
2801 1.11 christos if (return_value != NULL)
2802 1.11 christos {
2803 1.1 christos struct type *return_type = return_value->type ();
2804 1.1 christos regcache *regcache = get_thread_regcache (inferior_thread ());
2805 1.1 christos struct gdbarch *cache_arch = regcache->arch ();
2806 1.11 christos
2807 1.11 christos gdb_assert (rv_conv != RETURN_VALUE_STRUCT_CONVENTION
2808 1.11 christos && rv_conv != RETURN_VALUE_ABI_RETURNS_ADDRESS);
2809 1.1 christos gdbarch_return_value_as_value
2810 1.1 christos (cache_arch, function, return_type, regcache, NULL /*read*/,
2811 1.1 christos return_value->contents ().data () /*write*/);
2812 1.1 christos }
2813 1.1 christos
2814 1.1 christos /* If we are at the end of a call dummy now, pop the dummy frame
2815 1.1 christos too. */
2816 1.6 christos if (get_frame_type (get_current_frame ()) == DUMMY_FRAME)
2817 1.1 christos frame_pop (get_current_frame ());
2818 1.1 christos
2819 1.6 christos select_frame (get_current_frame ());
2820 1.1 christos /* If interactive, print the frame that is now current. */
2821 1.1 christos if (from_tty)
2822 1.8 christos print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1);
2823 1.8 christos }
2824 1.1 christos
2825 1.10 christos /* Find the most inner frame in the current stack for a function called
2826 1.8 christos FUNCTION_NAME. If no matching frame is found return NULL. */
2827 1.1 christos
2828 1.8 christos static frame_info_ptr
2829 1.8 christos find_frame_for_function (const char *function_name)
2830 1.8 christos {
2831 1.8 christos /* Used to hold the lower and upper addresses for each of the
2832 1.8 christos SYMTAB_AND_LINEs found for functions matching FUNCTION_NAME. */
2833 1.8 christos struct function_bounds
2834 1.10 christos {
2835 1.8 christos CORE_ADDR low, high;
2836 1.1 christos };
2837 1.1 christos frame_info_ptr frame;
2838 1.8 christos bool found = false;
2839 1.1 christos int level = 1;
2840 1.6 christos
2841 1.8 christos gdb_assert (function_name != NULL);
2842 1.8 christos
2843 1.8 christos frame = get_current_frame ();
2844 1.8 christos std::vector<symtab_and_line> sals
2845 1.8 christos = decode_line_with_current_source (function_name,
2846 1.1 christos DECODE_LINE_FUNFIRSTLINE);
2847 1.8 christos gdb::def_vector<function_bounds> func_bounds (sals.size ());
2848 1.1 christos for (size_t i = 0; i < sals.size (); i++)
2849 1.8 christos {
2850 1.8 christos if (sals[i].pspace != current_program_space)
2851 1.1 christos func_bounds[i].low = func_bounds[i].high = 0;
2852 1.1 christos else if (sals[i].pc == 0
2853 1.8 christos || find_pc_partial_function (sals[i].pc, NULL,
2854 1.1 christos &func_bounds[i].low,
2855 1.1 christos &func_bounds[i].high) == 0)
2856 1.1 christos func_bounds[i].low = func_bounds[i].high = 0;
2857 1.1 christos }
2858 1.8 christos
2859 1.1 christos do
2860 1.1 christos {
2861 1.1 christos for (size_t i = 0; (i < sals.size () && !found); i++)
2862 1.1 christos found = (get_frame_pc (frame) >= func_bounds[i].low
2863 1.1 christos && get_frame_pc (frame) < func_bounds[i].high);
2864 1.1 christos if (!found)
2865 1.1 christos {
2866 1.1 christos level = 1;
2867 1.1 christos frame = find_relative_frame (frame, &level);
2868 1.1 christos }
2869 1.8 christos }
2870 1.8 christos while (!found && level == 0);
2871 1.1 christos
2872 1.8 christos if (!found)
2873 1.8 christos frame = NULL;
2874 1.8 christos
2875 1.9 christos return frame;
2876 1.9 christos }
2877 1.9 christos
2878 1.9 christos /* The qcs command line flags for the "frame apply" commands. Keep
2879 1.9 christos this in sync with the "thread apply" commands. */
2880 1.9 christos
2881 1.9 christos using qcs_flag_option_def
2882 1.9 christos = gdb::option::flag_option_def<qcs_flags>;
2883 1.9 christos
2884 1.9 christos static const gdb::option::option_def fr_qcs_flags_option_defs[] = {
2885 1.9 christos qcs_flag_option_def {
2886 1.9 christos "q", [] (qcs_flags *opt) { return &opt->quiet; },
2887 1.9 christos N_("Disables printing the frame location information."),
2888 1.9 christos },
2889 1.9 christos
2890 1.9 christos qcs_flag_option_def {
2891 1.9 christos "c", [] (qcs_flags *opt) { return &opt->cont; },
2892 1.9 christos N_("Print any error raised by COMMAND and continue."),
2893 1.9 christos },
2894 1.9 christos
2895 1.9 christos qcs_flag_option_def {
2896 1.9 christos "s", [] (qcs_flags *opt) { return &opt->silent; },
2897 1.9 christos N_("Silently ignore any errors or empty output produced by COMMAND."),
2898 1.9 christos },
2899 1.9 christos };
2900 1.9 christos
2901 1.9 christos /* Create an option_def_group array for all the "frame apply" options,
2902 1.9 christos with FLAGS and SET_BT_OPTS as context. */
2903 1.9 christos
2904 1.9 christos static inline std::array<gdb::option::option_def_group, 2>
2905 1.9 christos make_frame_apply_options_def_group (qcs_flags *flags,
2906 1.9 christos set_backtrace_options *set_bt_opts)
2907 1.9 christos {
2908 1.9 christos return {{
2909 1.9 christos { {fr_qcs_flags_option_defs}, flags },
2910 1.9 christos { {set_backtrace_option_defs}, set_bt_opts },
2911 1.8 christos }};
2912 1.8 christos }
2913 1.8 christos
2914 1.8 christos /* Apply a GDB command to all stack frames, or a set of identified frames,
2915 1.8 christos or innermost COUNT frames.
2916 1.8 christos With a negative COUNT, apply command on outermost -COUNT frames.
2917 1.8 christos
2918 1.8 christos frame apply 3 info frame Apply 'info frame' to frames 0, 1, 2
2919 1.10 christos frame apply -3 info frame Apply 'info frame' to outermost 3 frames.
2920 1.10 christos frame apply all x/i $pc Apply 'x/i $pc' cmd to all frames.
2921 1.10 christos frame apply all -s p local_var_no_idea_in_which_frame
2922 1.8 christos If a frame has a local variable called
2923 1.10 christos local_var_no_idea_in_which_frame, print frame
2924 1.8 christos and value of local_var_no_idea_in_which_frame.
2925 1.10 christos frame apply all -s -q p local_var_no_idea_in_which_frame
2926 1.10 christos Same as before, but only print the variable value.
2927 1.10 christos frame apply level 2-5 0 4-7 -s p i = i + 1
2928 1.8 christos Adds 1 to the variable i in the specified frames.
2929 1.8 christos Note that i will be incremented twice in
2930 1.8 christos frames 4 and 5. */
2931 1.8 christos
2932 1.8 christos /* Apply a GDB command to COUNT stack frames, starting at TRAILING.
2933 1.8 christos CMD starts with 0 or more qcs flags followed by the GDB command to apply.
2934 1.8 christos COUNT -1 means all frames starting at TRAILING. WHICH_COMMAND is used
2935 1.8 christos for error messages. */
2936 1.8 christos
2937 1.10 christos static void
2938 1.8 christos frame_apply_command_count (const char *which_command,
2939 1.8 christos const char *cmd, int from_tty,
2940 1.9 christos frame_info_ptr trailing, int count)
2941 1.9 christos {
2942 1.9 christos qcs_flags flags;
2943 1.9 christos set_backtrace_options set_bt_opts = user_set_backtrace_options;
2944 1.9 christos
2945 1.8 christos auto group = make_frame_apply_options_def_group (&flags, &set_bt_opts);
2946 1.9 christos gdb::option::process_options
2947 1.8 christos (&cmd, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group);
2948 1.8 christos
2949 1.8 christos validate_flags_qcs (which_command, &flags);
2950 1.8 christos
2951 1.8 christos if (cmd == NULL || *cmd == '\0')
2952 1.8 christos error (_("Please specify a command to apply on the selected frames"));
2953 1.8 christos
2954 1.8 christos /* The below will restore the current inferior/thread/frame.
2955 1.8 christos Usually, only the frame is effectively to be restored.
2956 1.8 christos But in case CMD switches of inferior/thread, better restore
2957 1.9 christos these also. */
2958 1.9 christos scoped_restore_current_thread restore_thread;
2959 1.9 christos
2960 1.9 christos /* These options are handled quite deep in the unwind machinery, so
2961 1.9 christos we get to pass them down by swapping globals. */
2962 1.10 christos scoped_restore restore_set_backtrace_options
2963 1.8 christos = make_scoped_restore (&user_set_backtrace_options, set_bt_opts);
2964 1.8 christos
2965 1.8 christos for (frame_info_ptr fi = trailing; fi && count--; fi = get_prev_frame (fi))
2966 1.8 christos {
2967 1.9 christos QUIT;
2968 1.8 christos
2969 1.8 christos select_frame (fi);
2970 1.8 christos try
2971 1.8 christos {
2972 1.8 christos std::string cmd_result;
2973 1.8 christos {
2974 1.8 christos /* In case CMD switches of inferior/thread/frame, the below
2975 1.8 christos restores the inferior/thread/frame. FI can then be
2976 1.10 christos set to the selected frame. */
2977 1.10 christos scoped_restore_current_thread restore_fi_current_frame;
2978 1.8 christos
2979 1.8 christos execute_command_to_string
2980 1.8 christos (cmd_result, cmd, from_tty, gdb_stdout->term_out ());
2981 1.8 christos }
2982 1.8 christos fi = get_selected_frame (_("frame apply "
2983 1.8 christos "unable to get selected frame."));
2984 1.8 christos if (!flags.silent || cmd_result.length () > 0)
2985 1.10 christos {
2986 1.8 christos if (!flags.quiet)
2987 1.8 christos print_stack_frame (fi, 1, LOCATION, 0);
2988 1.9 christos gdb_printf ("%s", cmd_result.c_str ());
2989 1.8 christos }
2990 1.8 christos }
2991 1.8 christos catch (const gdb_exception_error &ex)
2992 1.8 christos {
2993 1.8 christos fi = get_selected_frame (_("frame apply "
2994 1.8 christos "unable to get selected frame."));
2995 1.8 christos if (!flags.silent)
2996 1.8 christos {
2997 1.10 christos if (!flags.quiet)
2998 1.8 christos print_stack_frame (fi, 1, LOCATION, 0);
2999 1.9 christos if (flags.cont)
3000 1.8 christos gdb_printf ("%s\n", ex.what ());
3001 1.8 christos else
3002 1.8 christos throw;
3003 1.8 christos }
3004 1.8 christos }
3005 1.9 christos }
3006 1.9 christos }
3007 1.9 christos
3008 1.9 christos /* Completer for the "frame apply ..." commands. */
3009 1.9 christos
3010 1.9 christos static void
3011 1.9 christos frame_apply_completer (completion_tracker &tracker, const char *text)
3012 1.9 christos {
3013 1.9 christos const auto group = make_frame_apply_options_def_group (nullptr, nullptr);
3014 1.9 christos if (gdb::option::complete_options
3015 1.9 christos (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group))
3016 1.9 christos return;
3017 1.9 christos
3018 1.9 christos complete_nested_command_line (tracker, text);
3019 1.9 christos }
3020 1.9 christos
3021 1.9 christos /* Completer for the "frame apply" commands. */
3022 1.9 christos
3023 1.9 christos static void
3024 1.9 christos frame_apply_level_cmd_completer (struct cmd_list_element *ignore,
3025 1.9 christos completion_tracker &tracker,
3026 1.9 christos const char *text, const char */*word*/)
3027 1.9 christos {
3028 1.9 christos /* Do this explicitly because there's an early return below. */
3029 1.9 christos tracker.set_use_custom_word_point (true);
3030 1.9 christos
3031 1.9 christos number_or_range_parser levels (text);
3032 1.9 christos
3033 1.9 christos /* Skip the LEVEL list to find the options and command args. */
3034 1.9 christos try
3035 1.9 christos {
3036 1.9 christos while (!levels.finished ())
3037 1.9 christos {
3038 1.9 christos /* Call for effect. */
3039 1.9 christos levels.get_number ();
3040 1.9 christos
3041 1.9 christos if (levels.in_range ())
3042 1.9 christos levels.skip_range ();
3043 1.9 christos }
3044 1.9 christos }
3045 1.9 christos catch (const gdb_exception_error &ex)
3046 1.9 christos {
3047 1.9 christos /* get_number throws if it parses a negative number, for
3048 1.9 christos example. But a seemingly negative number may be the start of
3049 1.9 christos an option instead. */
3050 1.9 christos }
3051 1.9 christos
3052 1.9 christos const char *cmd = levels.cur_tok ();
3053 1.9 christos
3054 1.9 christos if (cmd == text)
3055 1.9 christos {
3056 1.9 christos /* No level list yet. */
3057 1.9 christos return;
3058 1.9 christos }
3059 1.11 christos
3060 1.9 christos /* Check if we're past a valid LEVEL already. */
3061 1.9 christos if (levels.finished ()
3062 1.9 christos && cmd > text && !isspace ((unsigned char)cmd[-1]))
3063 1.9 christos return;
3064 1.9 christos
3065 1.9 christos /* We're past LEVELs, advance word point. */
3066 1.9 christos tracker.advance_custom_word_point_by (cmd - text);
3067 1.9 christos text = cmd;
3068 1.9 christos
3069 1.9 christos frame_apply_completer (tracker, text);
3070 1.9 christos }
3071 1.9 christos
3072 1.9 christos /* Completer for the "frame apply all" command. */
3073 1.9 christos
3074 1.9 christos void
3075 1.9 christos frame_apply_all_cmd_completer (struct cmd_list_element *ignore,
3076 1.9 christos completion_tracker &tracker,
3077 1.9 christos const char *text, const char */*word*/)
3078 1.9 christos {
3079 1.9 christos frame_apply_completer (tracker, text);
3080 1.9 christos }
3081 1.9 christos
3082 1.9 christos /* Completer for the "frame apply COUNT" command. */
3083 1.9 christos
3084 1.9 christos static void
3085 1.9 christos frame_apply_cmd_completer (struct cmd_list_element *ignore,
3086 1.9 christos completion_tracker &tracker,
3087 1.9 christos const char *text, const char */*word*/)
3088 1.9 christos {
3089 1.9 christos const char *cmd = text;
3090 1.9 christos
3091 1.9 christos int count = get_number_trailer (&cmd, 0);
3092 1.9 christos if (count == 0)
3093 1.11 christos return;
3094 1.9 christos
3095 1.9 christos /* Check if we're past a valid COUNT already. */
3096 1.9 christos if (cmd > text && !isspace ((unsigned char)cmd[-1]))
3097 1.9 christos return;
3098 1.9 christos
3099 1.9 christos /* We're past COUNT, advance word point. */
3100 1.9 christos tracker.advance_custom_word_point_by (cmd - text);
3101 1.9 christos text = cmd;
3102 1.9 christos
3103 1.8 christos frame_apply_completer (tracker, text);
3104 1.8 christos }
3105 1.8 christos
3106 1.8 christos /* Implementation of the "frame apply level" command. */
3107 1.8 christos
3108 1.10 christos static void
3109 1.8 christos frame_apply_level_command (const char *cmd, int from_tty)
3110 1.8 christos {
3111 1.8 christos if (!target_has_stack ())
3112 1.8 christos error (_("No stack."));
3113 1.8 christos
3114 1.8 christos bool level_found = false;
3115 1.8 christos const char *levels_str = cmd;
3116 1.8 christos number_or_range_parser levels (levels_str);
3117 1.8 christos
3118 1.8 christos /* Skip the LEVEL list to find the flags and command args. */
3119 1.8 christos while (!levels.finished ())
3120 1.8 christos {
3121 1.8 christos /* Call for effect. */
3122 1.8 christos levels.get_number ();
3123 1.8 christos
3124 1.8 christos level_found = true;
3125 1.8 christos if (levels.in_range ())
3126 1.8 christos levels.skip_range ();
3127 1.8 christos }
3128 1.8 christos
3129 1.8 christos if (!level_found)
3130 1.8 christos error (_("Missing or invalid LEVEL... argument"));
3131 1.8 christos
3132 1.8 christos cmd = levels.cur_tok ();
3133 1.8 christos
3134 1.8 christos /* Redo the LEVELS parsing, but applying COMMAND. */
3135 1.8 christos levels.init (levels_str);
3136 1.8 christos while (!levels.finished ())
3137 1.8 christos {
3138 1.8 christos const int level_beg = levels.get_number ();
3139 1.8 christos int n_frames;
3140 1.8 christos
3141 1.8 christos if (levels.in_range ())
3142 1.8 christos {
3143 1.8 christos n_frames = levels.end_value () - level_beg + 1;
3144 1.8 christos levels.skip_range ();
3145 1.8 christos }
3146 1.8 christos else
3147 1.8 christos n_frames = 1;
3148 1.8 christos
3149 1.8 christos frame_apply_command_count ("frame apply level", cmd, from_tty,
3150 1.8 christos leading_innermost_frame (level_beg), n_frames);
3151 1.8 christos }
3152 1.8 christos }
3153 1.8 christos
3154 1.8 christos /* Implementation of the "frame apply all" command. */
3155 1.8 christos
3156 1.10 christos static void
3157 1.8 christos frame_apply_all_command (const char *cmd, int from_tty)
3158 1.8 christos {
3159 1.8 christos if (!target_has_stack ())
3160 1.8 christos error (_("No stack."));
3161 1.8 christos
3162 1.8 christos frame_apply_command_count ("frame apply all", cmd, from_tty,
3163 1.8 christos get_current_frame (), INT_MAX);
3164 1.8 christos }
3165 1.8 christos
3166 1.8 christos /* Implementation of the "frame apply" command. */
3167 1.8 christos
3168 1.8 christos static void
3169 1.10 christos frame_apply_command (const char* cmd, int from_tty)
3170 1.8 christos {
3171 1.10 christos int count;
3172 1.8 christos frame_info_ptr trailing;
3173 1.8 christos
3174 1.8 christos if (!target_has_stack ())
3175 1.8 christos error (_("No stack."));
3176 1.8 christos
3177 1.8 christos if (cmd == NULL)
3178 1.8 christos error (_("Missing COUNT argument."));
3179 1.8 christos count = get_number_trailer (&cmd, 0);
3180 1.8 christos if (count == 0)
3181 1.8 christos error (_("Invalid COUNT argument."));
3182 1.8 christos
3183 1.8 christos if (count < 0)
3184 1.8 christos {
3185 1.8 christos trailing = trailing_outermost_frame (-count);
3186 1.8 christos count = -1;
3187 1.8 christos }
3188 1.8 christos else
3189 1.8 christos trailing = get_current_frame ();
3190 1.8 christos
3191 1.8 christos frame_apply_command_count ("frame apply", cmd, from_tty,
3192 1.8 christos trailing, count);
3193 1.8 christos }
3194 1.8 christos
3195 1.8 christos /* Implementation of the "faas" command. */
3196 1.8 christos
3197 1.9 christos static void
3198 1.9 christos faas_command (const char *cmd, int from_tty)
3199 1.8 christos {
3200 1.8 christos if (cmd == NULL || *cmd == '\0')
3201 1.8 christos error (_("Please specify a command to apply on all frames"));
3202 1.8 christos std::string expanded = std::string ("frame apply all -s ") + cmd;
3203 1.8 christos execute_command (expanded.c_str (), from_tty);
3204 1.8 christos }
3205 1.8 christos
3206 1.8 christos
3207 1.10 christos /* Find inner-mode frame with frame address ADDRESS. Return NULL if no
3208 1.8 christos matching frame can be found. */
3209 1.8 christos
3210 1.8 christos static frame_info_ptr
3211 1.10 christos find_frame_for_address (CORE_ADDR address)
3212 1.8 christos {
3213 1.8 christos struct frame_id id;
3214 1.8 christos frame_info_ptr fid;
3215 1.8 christos
3216 1.8 christos id = frame_id_build_wild (address);
3217 1.8 christos
3218 1.8 christos /* If (s)he specifies the frame with an address, he deserves
3219 1.8 christos what (s)he gets. Still, give the highest one that matches.
3220 1.8 christos (NOTE: cagney/2004-10-29: Why highest, or outer-most, I don't
3221 1.8 christos know). */
3222 1.8 christos for (fid = get_current_frame ();
3223 1.10 christos fid != NULL;
3224 1.8 christos fid = get_prev_frame (fid))
3225 1.10 christos {
3226 1.8 christos if (id == get_frame_id (fid))
3227 1.8 christos {
3228 1.8 christos frame_info_ptr prev_frame;
3229 1.8 christos
3230 1.8 christos while (1)
3231 1.10 christos {
3232 1.8 christos prev_frame = get_prev_frame (fid);
3233 1.8 christos if (!prev_frame
3234 1.8 christos || id != get_frame_id (prev_frame))
3235 1.8 christos break;
3236 1.8 christos fid = prev_frame;
3237 1.8 christos }
3238 1.8 christos return fid;
3239 1.1 christos }
3240 1.8 christos }
3241 1.1 christos return NULL;
3242 1.1 christos }
3243 1.8 christos
3244 1.8 christos
3245 1.8 christos
3247 1.8 christos /* Commands with a prefix of `frame apply'. */
3248 1.8 christos static struct cmd_list_element *frame_apply_cmd_list = NULL;
3249 1.8 christos
3250 1.8 christos /* Commands with a prefix of `frame'. */
3251 1.8 christos static struct cmd_list_element *frame_cmd_list = NULL;
3252 1.8 christos
3253 1.8 christos /* Commands with a prefix of `select frame'. */
3254 1.1 christos static struct cmd_list_element *select_frame_cmd_list = NULL;
3255 1.9 christos
3256 1.1 christos /* Commands with a prefix of `info frame'. */
3257 1.9 christos static struct cmd_list_element *info_frame_cmd_list = NULL;
3258 1.1 christos
3259 1.8 christos void _initialize_stack ();
3260 1.8 christos void
3261 1.1 christos _initialize_stack ()
3262 1.1 christos {
3263 1.1 christos struct cmd_list_element *cmd;
3264 1.1 christos
3265 1.1 christos add_com ("return", class_stack, return_command, _("\
3266 1.1 christos Make selected stack frame return to its caller.\n\
3267 1.1 christos Control remains in the debugger, but when you continue\n\
3268 1.1 christos execution will resume in the frame above the one now selected.\n\
3269 1.1 christos If an argument is given, it is an expression for the value to return."));
3270 1.1 christos
3271 1.1 christos add_com ("up", class_stack, up_command, _("\
3272 1.1 christos Select and print stack frame that called this one.\n\
3273 1.1 christos An argument says how many frames up to go."));
3274 1.10 christos add_com ("up-silently", class_support, up_silently_command, _("\
3275 1.10 christos Same as the `up' command, but does not print anything.\n\
3276 1.1 christos This is useful in command scripts."));
3277 1.1 christos
3278 1.10 christos cmd_list_element *down_cmd
3279 1.10 christos = add_com ("down", class_stack, down_command, _("\
3280 1.1 christos Select and print stack frame called by this one.\n\
3281 1.1 christos An argument says how many frames down to go."));
3282 1.1 christos add_com_alias ("do", down_cmd, class_stack, 1);
3283 1.1 christos add_com_alias ("dow", down_cmd, class_stack, 1);
3284 1.10 christos add_com ("down-silently", class_support, down_silently_command, _("\
3285 1.10 christos Same as the `down' command, but does not print anything.\n\
3286 1.10 christos This is useful in command scripts."));
3287 1.8 christos
3288 1.8 christos cmd_list_element *frame_cmd_el
3289 1.8 christos = add_prefix_cmd ("frame", class_stack,
3290 1.10 christos &frame_cmd.base_command, _("\
3291 1.10 christos Select and print a stack frame.\n\
3292 1.1 christos With no argument, print the selected stack frame. (See also \"info frame\").\n\
3293 1.9 christos A single numerical argument specifies the frame to select."),
3294 1.8 christos &frame_cmd_list, 1, &cmdlist);
3295 1.9 christos add_com_alias ("f", frame_cmd_el, class_stack, 1);
3296 1.9 christos
3297 1.9 christos #define FRAME_APPLY_OPTION_HELP "\
3298 1.9 christos Prints the frame location information followed by COMMAND output.\n\
3299 1.9 christos \n\
3300 1.9 christos By default, an error raised during the execution of COMMAND\n\
3301 1.9 christos aborts \"frame apply\".\n\
3302 1.9 christos \n\
3303 1.9 christos Options:\n\
3304 1.9 christos %OPTIONS%"
3305 1.9 christos
3306 1.9 christos const auto frame_apply_opts
3307 1.9 christos = make_frame_apply_options_def_group (nullptr, nullptr);
3308 1.8 christos
3309 1.9 christos static std::string frame_apply_cmd_help = gdb::option::build_help (_("\
3310 1.9 christos Apply a command to a number of frames.\n\
3311 1.9 christos Usage: frame apply COUNT [OPTION]... COMMAND\n\
3312 1.9 christos With a negative COUNT argument, applies the command on outermost -COUNT frames.\n"
3313 1.9 christos FRAME_APPLY_OPTION_HELP),
3314 1.10 christos frame_apply_opts);
3315 1.9 christos
3316 1.9 christos cmd = add_prefix_cmd ("apply", class_stack, frame_apply_command,
3317 1.8 christos frame_apply_cmd_help.c_str (),
3318 1.9 christos &frame_apply_cmd_list, 1,
3319 1.8 christos &frame_cmd_list);
3320 1.8 christos set_cmd_completer_handle_brkchars (cmd, frame_apply_cmd_completer);
3321 1.9 christos
3322 1.9 christos static std::string frame_apply_all_cmd_help = gdb::option::build_help (_("\
3323 1.9 christos Apply a command to all frames.\n\
3324 1.9 christos \n\
3325 1.9 christos Usage: frame apply all [OPTION]... COMMAND\n"
3326 1.9 christos FRAME_APPLY_OPTION_HELP),
3327 1.9 christos frame_apply_opts);
3328 1.9 christos
3329 1.8 christos cmd = add_cmd ("all", class_stack, frame_apply_all_command,
3330 1.9 christos frame_apply_all_cmd_help.c_str (),
3331 1.8 christos &frame_apply_cmd_list);
3332 1.8 christos set_cmd_completer_handle_brkchars (cmd, frame_apply_all_cmd_completer);
3333 1.9 christos
3334 1.9 christos static std::string frame_apply_level_cmd_help = gdb::option::build_help (_("\
3335 1.9 christos Apply a command to a list of frames.\n\
3336 1.9 christos \n\
3337 1.9 christos Usage: frame apply level LEVEL... [OPTION]... COMMAND\n\
3338 1.9 christos LEVEL is a space-separated list of levels of frames to apply COMMAND on.\n"
3339 1.9 christos FRAME_APPLY_OPTION_HELP),
3340 1.8 christos frame_apply_opts);
3341 1.9 christos
3342 1.8 christos cmd = add_cmd ("level", class_stack, frame_apply_level_command,
3343 1.9 christos frame_apply_level_cmd_help.c_str (),
3344 1.8 christos &frame_apply_cmd_list);
3345 1.9 christos set_cmd_completer_handle_brkchars (cmd, frame_apply_level_cmd_completer);
3346 1.9 christos
3347 1.9 christos cmd = add_com ("faas", class_stack, faas_command, _("\
3348 1.9 christos Apply a command to all frames (ignoring errors and empty output).\n\
3349 1.8 christos Usage: faas [OPTION]... COMMAND\n\
3350 1.8 christos shortcut for 'frame apply all -s [OPTION]... COMMAND'\n\
3351 1.8 christos See \"help frame apply all\" for available options."));
3352 1.9 christos set_cmd_completer_handle_brkchars (cmd, frame_apply_all_cmd_completer);
3353 1.8 christos
3354 1.8 christos add_cmd ("address", class_stack, &frame_cmd.address,
3355 1.8 christos _("\
3356 1.8 christos Select and print a stack frame by stack address.\n\
3357 1.8 christos \n\
3358 1.8 christos Usage: frame address STACK-ADDRESS"),
3359 1.8 christos &frame_cmd_list);
3360 1.8 christos
3361 1.8 christos add_cmd ("view", class_stack, &frame_cmd.view,
3362 1.8 christos _("\
3363 1.8 christos View a stack frame that might be outside the current backtrace.\n\
3364 1.8 christos \n\
3365 1.8 christos Usage: frame view STACK-ADDRESS\n\
3366 1.8 christos frame view STACK-ADDRESS PC-ADDRESS"),
3367 1.8 christos &frame_cmd_list);
3368 1.8 christos
3369 1.8 christos cmd = add_cmd ("function", class_stack, &frame_cmd.function,
3370 1.8 christos _("\
3371 1.8 christos Select and print a stack frame by function name.\n\
3372 1.8 christos \n\
3373 1.8 christos Usage: frame function NAME\n\
3374 1.8 christos \n\
3375 1.8 christos The innermost frame that visited function NAME is selected."),
3376 1.8 christos &frame_cmd_list);
3377 1.8 christos set_cmd_completer (cmd, frame_selection_by_function_completer);
3378 1.8 christos
3379 1.8 christos
3380 1.8 christos add_cmd ("level", class_stack, &frame_cmd.level,
3381 1.8 christos _("\
3382 1.8 christos Select and print a stack frame by level.\n\
3383 1.8 christos \n\
3384 1.8 christos Usage: frame level LEVEL"),
3385 1.1 christos &frame_cmd_list);
3386 1.8 christos
3387 1.10 christos cmd = add_prefix_cmd_suppress_notification ("select-frame", class_stack,
3388 1.8 christos &select_frame_cmd.base_command, _("\
3389 1.8 christos Select a stack frame without printing anything.\n\
3390 1.8 christos A single numerical argument specifies the frame to select."),
3391 1.8 christos &select_frame_cmd_list, 1, &cmdlist,
3392 1.8 christos &cli_suppress_notification.user_selected_context);
3393 1.8 christos
3394 1.8 christos add_cmd_suppress_notification ("address", class_stack,
3395 1.8 christos &select_frame_cmd.address, _("\
3396 1.8 christos Select a stack frame by stack address.\n\
3397 1.8 christos \n\
3398 1.8 christos Usage: select-frame address STACK-ADDRESS"),
3399 1.8 christos &select_frame_cmd_list,
3400 1.8 christos &cli_suppress_notification.user_selected_context);
3401 1.8 christos
3402 1.8 christos
3403 1.8 christos add_cmd_suppress_notification ("view", class_stack,
3404 1.8 christos &select_frame_cmd.view, _("\
3405 1.8 christos Select a stack frame that might be outside the current backtrace.\n\
3406 1.6 christos \n\
3407 1.1 christos Usage: select-frame view STACK-ADDRESS\n\
3408 1.8 christos select-frame view STACK-ADDRESS PC-ADDRESS"),
3409 1.8 christos &select_frame_cmd_list,
3410 1.8 christos &cli_suppress_notification.user_selected_context);
3411 1.8 christos
3412 1.8 christos cmd = add_cmd_suppress_notification ("function", class_stack,
3413 1.8 christos &select_frame_cmd.function, _("\
3414 1.8 christos Select a stack frame by function name.\n\
3415 1.8 christos \n\
3416 1.8 christos Usage: select-frame function NAME"),
3417 1.8 christos &select_frame_cmd_list,
3418 1.8 christos &cli_suppress_notification.user_selected_context);
3419 1.8 christos set_cmd_completer (cmd, frame_selection_by_function_completer);
3420 1.8 christos
3421 1.8 christos add_cmd_suppress_notification ("level", class_stack,
3422 1.8 christos &select_frame_cmd.level, _("\
3423 1.8 christos Select a stack frame by level.\n\
3424 1.8 christos \n\
3425 1.9 christos Usage: select-frame level LEVEL"),
3426 1.9 christos &select_frame_cmd_list,
3427 1.9 christos &cli_suppress_notification.user_selected_context);
3428 1.9 christos
3429 1.9 christos const auto backtrace_opts
3430 1.1 christos = make_backtrace_options_def_group (nullptr, nullptr, nullptr);
3431 1.9 christos
3432 1.9 christos static std::string backtrace_help
3433 1.9 christos = gdb::option::build_help (_("\
3434 1.9 christos Print backtrace of all stack frames, or innermost COUNT frames.\n\
3435 1.9 christos Usage: backtrace [OPTION]... [QUALIFIER]... [COUNT | -COUNT]\n\
3436 1.9 christos \n\
3437 1.9 christos Options:\n\
3438 1.9 christos %OPTIONS%\n\
3439 1.9 christos \n\
3440 1.9 christos For backward compatibility, the following qualifiers are supported:\n\
3441 1.9 christos \n\
3442 1.9 christos full - same as -full option.\n\
3443 1.9 christos no-filters - same as -no-filters option.\n\
3444 1.9 christos hide - same as -hide.\n\
3445 1.10 christos \n\
3446 1.10 christos With a negative COUNT, print outermost -COUNT frames."),
3447 1.10 christos backtrace_opts);
3448 1.10 christos
3449 1.10 christos cmd_list_element *backtrace_cmd
3450 1.10 christos = add_com ("backtrace", class_stack, backtrace_command,
3451 1.10 christos backtrace_help.c_str ());
3452 1.10 christos set_cmd_completer_handle_brkchars (backtrace_cmd, backtrace_command_completer);
3453 1.10 christos
3454 1.10 christos add_com_alias ("bt", backtrace_cmd, class_stack, 0);
3455 1.10 christos
3456 1.10 christos add_com_alias ("where", backtrace_cmd, class_stack, 0);
3457 1.10 christos cmd_list_element *info_stack_cmd
3458 1.10 christos = add_info ("stack", backtrace_command,
3459 1.10 christos _("Backtrace of the stack, or innermost COUNT frames."));
3460 1.10 christos add_info_alias ("s", info_stack_cmd, 1);
3461 1.8 christos
3462 1.8 christos cmd_list_element *info_frame_cmd_el
3463 1.8 christos = add_prefix_cmd ("frame", class_info, &info_frame_cmd.base_command,
3464 1.10 christos _("All about the selected stack frame.\n\
3465 1.10 christos With no arguments, displays information about the currently selected stack\n\
3466 1.8 christos frame. Alternatively a frame specification may be provided (See \"frame\")\n\
3467 1.8 christos the information is then printed about the specified frame."),
3468 1.8 christos &info_frame_cmd_list, 1, &infolist);
3469 1.8 christos add_info_alias ("f", info_frame_cmd_el, 1);
3470 1.8 christos
3471 1.8 christos add_cmd ("address", class_stack, &info_frame_cmd.address,
3472 1.8 christos _("\
3473 1.8 christos Print information about a stack frame selected by stack address.\n\
3474 1.8 christos \n\
3475 1.8 christos Usage: info frame address STACK-ADDRESS"),
3476 1.8 christos &info_frame_cmd_list);
3477 1.8 christos
3478 1.8 christos add_cmd ("view", class_stack, &info_frame_cmd.view,
3479 1.8 christos _("\
3480 1.8 christos Print information about a stack frame outside the current backtrace.\n\
3481 1.8 christos \n\
3482 1.8 christos Usage: info frame view STACK-ADDRESS\n\
3483 1.8 christos info frame view STACK-ADDRESS PC-ADDRESS"),
3484 1.8 christos &info_frame_cmd_list);
3485 1.8 christos
3486 1.8 christos cmd = add_cmd ("function", class_stack, &info_frame_cmd.function,
3487 1.8 christos _("\
3488 1.8 christos Print information about a stack frame selected by function name.\n\
3489 1.8 christos \n\
3490 1.8 christos Usage: info frame function NAME"),
3491 1.8 christos &info_frame_cmd_list);
3492 1.8 christos set_cmd_completer (cmd, frame_selection_by_function_completer);
3493 1.8 christos
3494 1.8 christos add_cmd ("level", class_stack, &info_frame_cmd.level,
3495 1.8 christos _("\
3496 1.8 christos Print information about a stack frame selected by level.\n\
3497 1.9 christos \n\
3498 1.9 christos Usage: info frame level LEVEL"),
3499 1.8 christos &info_frame_cmd_list);
3500 1.8 christos
3501 1.8 christos cmd = add_info ("locals", info_locals_command,
3502 1.9 christos info_print_args_help (_("\
3503 1.9 christos All local variables of current stack frame or those matching REGEXPs.\n\
3504 1.9 christos Usage: info locals [-q] [-t TYPEREGEXP] [NAMEREGEXP]\n\
3505 1.9 christos Prints the local variables of the current stack frame.\n"),
3506 1.9 christos _("local variables"),
3507 1.8 christos false));
3508 1.8 christos set_cmd_completer_handle_brkchars (cmd, info_print_command_completer);
3509 1.8 christos cmd = add_info ("args", info_args_command,
3510 1.9 christos info_print_args_help (_("\
3511 1.9 christos All argument variables of current stack frame or those matching REGEXPs.\n\
3512 1.9 christos Usage: info args [-q] [-t TYPEREGEXP] [NAMEREGEXP]\n\
3513 1.1 christos Prints the argument variables of the current stack frame.\n"),
3514 1.9 christos _("argument variables"),
3515 1.9 christos false));
3516 1.10 christos set_cmd_completer_handle_brkchars (cmd, info_print_command_completer);
3517 1.10 christos
3518 1.10 christos /* Install "set print raw frame-arguments", a deprecated spelling of
3519 1.10 christos "set print raw-frame-arguments". */
3520 1.10 christos set_show_commands set_show_frame_args
3521 1.1 christos = add_setshow_boolean_cmd
3522 1.1 christos ("frame-arguments", no_class,
3523 1.1 christos &user_frame_print_options.print_raw_frame_arguments,
3524 1.1 christos _("\
3525 1.10 christos Set whether to print frame arguments in raw form."), _("\
3526 1.10 christos Show whether to print frame arguments in raw form."), _("\
3527 1.10 christos If set, frame arguments are printed in raw form, bypassing any\n\
3528 1.1 christos pretty-printers for that value."),
3529 1.1 christos NULL, NULL,
3530 1.10 christos &setprintrawlist, &showprintrawlist);
3531 1.1 christos deprecate_cmd (set_show_frame_args.set, "set print raw-frame-arguments");
3532 1.1 christos
3533 1.1 christos add_setshow_auto_boolean_cmd ("disassemble-next-line", class_stack,
3534 1.1 christos &disassemble_next_line, _("\
3535 1.1 christos Set whether to disassemble next source line or insn when execution stops."),
3536 1.1 christos _("\
3537 1.1 christos Show whether to disassemble next source line or insn when execution stops."),
3538 1.1 christos _("\
3539 1.1 christos If ON, GDB will display disassembly of the next source line, in addition\n\
3540 1.1 christos to displaying the source line itself. If the next source line cannot\n\
3541 1.1 christos be displayed (e.g., source is unavailable or there's no line info), GDB\n\
3542 1.1 christos will display disassembly of next instruction instead of showing the\n\
3543 1.1 christos source line.\n\
3544 1.10 christos If AUTO, display disassembly of next instruction only if the source line\n\
3545 1.10 christos cannot be displayed.\n\
3546 1.10 christos If OFF (which is the default), never display the disassembly of the next\n\
3547 1.1 christos source line."),
3548 1.1 christos NULL,
3549 1.9 christos show_disassemble_next_line,
3550 1.9 christos &setlist, &showlist);
3551 1.9 christos disassemble_next_line = AUTO_BOOLEAN_FALSE;
3552 1.1 christos
3553 gdb::option::add_setshow_cmds_for_options
3554 (class_stack, &user_frame_print_options,
3555 frame_print_option_defs, &setprintlist, &showprintlist);
3556 }
3557