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