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