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