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