/* Print and select stack frames for GDB, the GNU debugger.
- Copyright (C) 1986-2019 Free Software Foundation, Inc.
+ Copyright (C) 1986-2020 Free Software Foundation, Inc.
This file is part of GDB.
return false;
}
- return get_frame_pc (frame) != sal.pc;
+ return get_frame_pc (frame) != sal.pc || !sal.is_stmt;
}
/* See frame.h. */
annotate_arg_emitter arg_emitter;
ui_out_emit_tuple tuple_emitter (uiout, NULL);
fprintf_symbol_filtered (&stb, arg->sym->print_name (),
- SYMBOL_LANGUAGE (arg->sym), DMGL_PARAMS | DMGL_ANSI);
+ arg->sym->language (), DMGL_PARAMS | DMGL_ANSI);
if (arg->entry_kind == print_entry_values_compact)
{
/* It is OK to provide invalid MI-like stream as with
stb.puts ("=");
fprintf_symbol_filtered (&stb, arg->sym->print_name (),
- SYMBOL_LANGUAGE (arg->sym),
+ arg->sym->language (),
DMGL_PARAMS | DMGL_ANSI);
}
if (arg->entry_kind == print_entry_values_only
/* Use the appropriate language to display our symbol, unless the
user forced the language to a specific language. */
if (language_mode == language_mode_auto)
- language = language_def (SYMBOL_LANGUAGE (arg->sym));
+ language = language_def (arg->sym->language ());
else
language = current_language;
vp_opts.summary
= fp_opts.print_frame_arguments == print_frame_arguments_scalars;
- common_val_print (arg->val, &stb, 2, &vp_opts, language);
+ common_val_print_checked (arg->val, &stb, 2, &vp_opts, language);
}
catch (const gdb_exception_error &except)
{
print_source_lines (sal.symtab, sal.line, sal.line + 1, 0);
}
- }
- /* If disassemble-next-line is set to on and there is line debug
- messages, output assembly codes for next line. */
- if (disassemble_next_line == AUTO_BOOLEAN_TRUE)
- do_gdb_disassembly (get_frame_arch (frame), -1, sal.pc, sal.end);
+ /* If disassemble-next-line is set to on and there is line debug
+ messages, output assembly codes for next line. */
+ if (disassemble_next_line == AUTO_BOOLEAN_TRUE)
+ do_gdb_disassembly (get_frame_arch (frame), -1, sal.pc, sal.end);
+ }
if (set_current_sal)
{
{
const char *print_name = func->print_name ();
- *funlang = SYMBOL_LANGUAGE (func);
+ *funlang = func->language ();
if (funcp)
*funcp = func;
if (*funlang == language_cplus)
if (msymbol.minsym != NULL)
{
funname.reset (xstrdup (msymbol.minsym->print_name ()));
- *funlang = MSYMBOL_LANGUAGE (msymbol.minsym);
+ *funlang = msymbol.minsym->language ();
}
}
/* Completion function for "frame function", "info frame function", and
"select-frame function" commands. */
-void
+static void
frame_selection_by_function_completer (struct cmd_list_element *ignore,
completion_tracker &tracker,
const char *text, const char *word)
if (func)
{
funname = func->print_name ();
- funlang = SYMBOL_LANGUAGE (func);
+ funlang = func->language ();
if (funlang == language_cplus)
{
/* It seems appropriate to use print_name() here,
if (msymbol.minsym != NULL)
{
funname = msymbol.minsym->print_name ();
- funlang = MSYMBOL_LANGUAGE (msymbol.minsym);
+ funlang = msymbol.minsym->language ();
}
}
calling_frame_info = get_prev_frame (fi);
{
switch (SYMBOL_CLASS (sym))
{
+ case LOC_CONST:
case LOC_LOCAL:
case LOC_REGISTER:
case LOC_STATIC:
}
}
-
-/* Same, but print labels. */
-
-#if 0
-/* Commented out, as the code using this function has also been
- commented out. FIXME:brobecker/2009-01-13: Find out why the code
- was commented out in the first place. The discussion introducing
- this change (2007-12-04: Support lexical blocks and function bodies
- that occupy non-contiguous address ranges) did not explain why
- this change was made. */
-static int
-print_block_frame_labels (struct gdbarch *gdbarch, struct block *b,
- int *have_default, struct ui_file *stream)
-{
- struct block_iterator iter;
- struct symbol *sym;
- int values_printed = 0;
-
- ALL_BLOCK_SYMBOLS (b, iter, sym)
- {
- if (strcmp (sym->linkage_name (), "default") == 0)
- {
- if (*have_default)
- continue;
- *have_default = 1;
- }
- if (SYMBOL_CLASS (sym) == LOC_LABEL)
- {
- struct symtab_and_line sal;
- struct value_print_options opts;
-
- sal = find_pc_line (SYMBOL_VALUE_ADDRESS (sym), 0);
- values_printed = 1;
- fputs_filtered (sym->print_name (), stream);
- get_user_print_options (&opts);
- if (opts.addressprint)
- {
- fprintf_filtered (stream, " ");
- fputs_filtered (paddress (gdbarch, SYMBOL_VALUE_ADDRESS (sym)),
- stream);
- }
- fprintf_filtered (stream, " in file %s, line %d\n",
- sal.symtab->filename, sal.line);
- }
- }
-
- return values_printed;
-}
-#endif
-
/* Iterate over all the local variables in block B, including all its
superblocks, stopping when the top-level block is reached. */
static void
faas_command (const char *cmd, int from_tty)
{
+ if (cmd == NULL || *cmd == '\0')
+ error (_("Please specify a command to apply on all frames"));
std::string expanded = std::string ("frame apply all -s ") + cmd;
execute_command (expanded.c_str (), from_tty);
}
/* Commands with a prefix of `info frame'. */
static struct cmd_list_element *info_frame_cmd_list = NULL;
+void _initialize_stack ();
void
-_initialize_stack (void)
+_initialize_stack ()
{
struct cmd_list_element *cmd;