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