#include "annotate.h"
#include "symfile.h"
#include "objfiles.h"
+#ifdef UI_OUT
+#include "ui-out.h"
+#endif
/* Prototypes for exported functions. */
-void args_info PARAMS ((char *, int));
+void args_info (char *, int);
-void locals_info PARAMS ((char *, int));
+void locals_info (char *, int);
-void (*selected_frame_level_changed_hook) PARAMS ((int));
+void (*selected_frame_level_changed_hook) (int);
-void _initialize_stack PARAMS ((void));
+void _initialize_stack (void);
/* Prototypes for local functions. */
-static void return_command PARAMS ((char *, int));
+static void return_command (char *, int);
-static void down_command PARAMS ((char *, int));
+static void down_command (char *, int);
-static void down_silently_base PARAMS ((char *));
+static void down_silently_base (char *);
-static void down_silently_command PARAMS ((char *, int));
+static void down_silently_command (char *, int);
-static void up_command PARAMS ((char *, int));
+static void up_command (char *, int);
-static void up_silently_base PARAMS ((char *));
+static void up_silently_base (char *);
-static void up_silently_command PARAMS ((char *, int));
+static void up_silently_command (char *, int);
-void frame_command PARAMS ((char *, int));
+void frame_command (char *, int);
-static void current_frame_command PARAMS ((char *, int));
+static void current_frame_command (char *, int);
-static void select_frame_command PARAMS ((char *, int));
+static void select_frame_command (char *, int);
static void print_frame_arg_vars (struct frame_info *, struct ui_file *);
-static void catch_info PARAMS ((char *, int));
+static void catch_info (char *, int);
-static void args_plus_locals_info PARAMS ((char *, int));
+static void args_plus_locals_info (char *, int);
static void print_frame_label_vars (struct frame_info *, int,
struct ui_file *);
int args,
struct symtab_and_line sal);
-static void print_frame_info_base PARAMS ((struct frame_info *, int, int, int));
+static void print_frame_info_base (struct frame_info *, int, int, int);
-static void print_stack_frame_base PARAMS ((struct frame_info *, int, int));
+static void print_stack_frame_base (struct frame_info *, int, int);
-static void backtrace_command PARAMS ((char *, int));
+static void backtrace_command (char *, int);
-struct frame_info *parse_frame_specification PARAMS ((char *));
+struct frame_info *parse_frame_specification (char *);
-static void frame_info PARAMS ((char *, int));
+static void frame_info (char *, int);
extern int addressprint; /* Print addresses, or stay symbolic only? */
extern int info_verbose; /* Verbosity of symbol reading msgs */
int args;
};
-static int print_stack_frame_base_stub PARAMS ((char *));
+static int print_stack_frame_base_stub (char *);
/* Show and print the frame arguments.
Pass the args the way catch_errors wants them. */
-static int show_and_print_stack_frame_stub PARAMS ((void *args));
+static int show_and_print_stack_frame_stub (void *args);
static int
-show_and_print_stack_frame_stub (args)
- void *args;
+show_and_print_stack_frame_stub (void *args)
{
struct print_stack_frame_args *p = (struct print_stack_frame_args *) args;
/* Show or print the frame arguments.
Pass the args the way catch_errors wants them. */
-static int print_stack_frame_stub PARAMS ((void *args));
+static int print_stack_frame_stub (void *args);
static int
-print_stack_frame_stub (args)
- void *args;
+print_stack_frame_stub (void *args)
{
struct print_stack_frame_args *p = (struct print_stack_frame_args *) args;
/* Pass the args the way catch_errors wants them. */
static int
-print_stack_frame_base_stub (args)
- char *args;
+print_stack_frame_base_stub (char *args)
{
struct print_stack_frame_args *p = (struct print_stack_frame_args *) args;
/* print the frame arguments to the terminal.
Pass the args the way catch_errors wants them. */
-static int print_only_stack_frame_stub PARAMS ((void *));
+static int print_only_stack_frame_stub (void *);
static int
-print_only_stack_frame_stub (args)
- void *args;
+print_only_stack_frame_stub (void *args)
{
struct print_stack_frame_args *p = (struct print_stack_frame_args *) args;
If SOURCE is -1, print ONLY the source line. */
static void
-print_stack_frame_base (fi, level, source)
- struct frame_info *fi;
- int level;
- int source;
+print_stack_frame_base (struct frame_info *fi, int level, int source)
{
struct print_stack_frame_args args;
If SOURCE is -1, print ONLY the source line. */
void
-show_and_print_stack_frame (fi, level, source)
- struct frame_info *fi;
- int level;
- int source;
+show_and_print_stack_frame (struct frame_info *fi, int level, int source)
{
struct print_stack_frame_args args;
If SOURCE is -1, print ONLY the source line. */
void
-print_stack_frame (fi, level, source)
- struct frame_info *fi;
- int level;
- int source;
+print_stack_frame (struct frame_info *fi, int level, int source)
{
struct print_stack_frame_args args;
If SOURCE is -1, print ONLY the source line. */
void
-print_only_stack_frame (fi, level, source)
- struct frame_info *fi;
- int level;
- int source;
+print_only_stack_frame (struct frame_info *fi, int level, int source)
{
struct print_stack_frame_args args;
struct ui_file *stream;
};
-static int print_args_stub PARAMS ((PTR));
+static int print_args_stub (PTR);
/* Pass the args the way catch_errors wants them. */
static int
-print_args_stub (args)
- PTR args;
+print_args_stub (PTR args)
{
int numargs;
struct print_args_args *p = (struct print_args_args *) args;
LOC_AND_SRC: Print location and source line. */
static void
-print_frame_info_base (fi, level, source, args)
- struct frame_info *fi;
- int level;
- int source;
- int args;
+print_frame_info_base (struct frame_info *fi, int level, int source, int args)
{
struct symtab_and_line sal;
int source_print;
{
if (addressprint && mid_statement && !tui_version)
{
+#ifdef UI_OUT
+ ui_out_field_core_addr (uiout, "addr", fi->pc);
+ ui_out_text (uiout, "\t");
+#else
print_address_numeric (fi->pc, 1, gdb_stdout);
printf_filtered ("\t");
+#endif
}
if (print_frame_info_listing_hook)
print_frame_info_listing_hook (sal.symtab, sal.line, sal.line + 1, 0);
struct symbol *func;
register char *funname = 0;
enum language funlang = language_unknown;
+#ifdef UI_OUT
+ struct ui_stream *stb;
+ struct cleanup *old_chain;
+
+ stb = ui_out_stream_new (uiout);
+ old_chain = make_cleanup_ui_out_stream_delete (stb);
+#endif /* UI_OUT */
func = find_pc_function (fi->pc);
if (func)
annotate_frame_begin (level == -1 ? 0 : level, fi->pc);
+#ifdef UI_OUT
+ ui_out_list_begin (uiout, "frame");
+#endif
if (level >= 0)
- printf_filtered ("#%-2d ", level);
+ {
+#ifdef UI_OUT
+ ui_out_text (uiout, "#");
+ ui_out_field_fmt (uiout, "level", "%-2d", level);
+ ui_out_spaces (uiout, 1);
+#else
+ printf_filtered ("#%-2d ", level);
+#endif
+ }
if (addressprint)
if (fi->pc != sal.pc || !sal.symtab || source == LOC_AND_ADDRESS)
{
annotate_frame_address ();
+#ifdef UI_OUT
+ ui_out_field_core_addr (uiout, "addr", fi->pc);
+ annotate_frame_address_end ();
+ ui_out_text (uiout, " in ");
+#else
print_address_numeric (fi->pc, 1, gdb_stdout);
annotate_frame_address_end ();
printf_filtered (" in ");
+#endif
}
annotate_frame_function_name ();
+#ifdef UI_OUT
+ fprintf_symbol_filtered (stb->stream, funname ? funname : "??", funlang,
+ DMGL_ANSI);
+ ui_out_field_stream (uiout, "func", stb);
+ ui_out_wrap_hint (uiout, " ");
+#else
fprintf_symbol_filtered (gdb_stdout, funname ? funname : "??", funlang,
DMGL_ANSI);
wrap_here (" ");
+#endif
annotate_frame_args ();
+#ifdef UI_OUT
+ ui_out_text (uiout, " (");
+#else
fputs_filtered (" (", gdb_stdout);
+#endif
if (args)
{
struct print_args_args args;
args.fi = fi;
args.func = func;
args.stream = gdb_stdout;
+#ifdef UI_OUT
+ ui_out_list_begin (uiout, "args");
+ catch_errors (print_args_stub, &args, "", RETURN_MASK_ALL);
+ /* FIXME: args must be a list. If one argument is a string it will
+ have " that will not be properly escaped. */
+ ui_out_list_end (uiout);
+#else
catch_errors (print_args_stub, &args, "", RETURN_MASK_ALL);
+#endif
QUIT;
}
+#ifdef UI_OUT
+ ui_out_text (uiout, ")");
+#else
printf_filtered (")");
+#endif
if (sal.symtab && sal.symtab->filename)
{
annotate_frame_source_begin ();
+#ifdef UI_OUT
+ ui_out_wrap_hint (uiout, " ");
+ ui_out_text (uiout, " at ");
+ annotate_frame_source_file ();
+ ui_out_field_string (uiout, "file", sal.symtab->filename);
+ annotate_frame_source_file_end ();
+ ui_out_text (uiout, ":");
+ annotate_frame_source_line ();
+ ui_out_field_int (uiout, "line", sal.line);
+#else
wrap_here (" ");
printf_filtered (" at ");
annotate_frame_source_file ();
printf_filtered (":");
annotate_frame_source_line ();
printf_filtered ("%d", sal.line);
+#endif
annotate_frame_source_end ();
}
if (!funname)
{
annotate_frame_where ();
+#ifdef UI_OUT
+ ui_out_wrap_hint (uiout, " ");
+ ui_out_text (uiout, " from ");
+ ui_out_field_string (uiout, "from", PC_LOAD_SEGMENT (fi->pc));
+#else
wrap_here (" ");
printf_filtered (" from %s", PC_LOAD_SEGMENT (fi->pc));
+#endif
}
#endif /* PC_LOAD_SEGMENT */
if (lib)
{
annotate_frame_where ();
+#ifdef UI_OUT
+ ui_out_wrap_hint (uiout, " ");
+ ui_out_text (uiout, " from ");
+ ui_out_field_string (uiout, "from", lib);
+#else
wrap_here (" ");
printf_filtered (" from %s", lib);
+#endif
}
}
#endif /* PC_SOLIB */
+#ifdef UI_OUT
+ ui_out_list_end (uiout);
+ ui_out_text (uiout, "\n");
+ do_cleanups (old_chain);
+#else
printf_filtered ("\n");
+#endif
}
\f
#if 0
void
-stack_publish_stopped_with_no_frame ()
+stack_publish_stopped_with_no_frame (void)
{
TUIDO (((TuiOpaqueFuncPtr) tuiUpdateOnEnd));
/* Show or print the frame info. If this is the tui, it will be shown in
the source display */
void
-print_frame_info (fi, level, source, args)
- struct frame_info *fi;
- register int level;
- int source;
- int args;
+print_frame_info (struct frame_info *fi, register int level, int source,
+ int args)
{
if (!tui_version)
print_frame_info_base (fi, level, source, args);
/* Show the frame info. If this is the tui, it will be shown in
the source display otherwise, nothing is done */
void
-show_stack_frame (fi)
- struct frame_info *fi;
+show_stack_frame (struct frame_info *fi)
{
TUIDO (((TuiOpaqueFuncPtr) tui_vShowFrameInfo, fi));
}
this function never returns NULL). */
struct frame_info *
-parse_frame_specification (frame_exp)
- char *frame_exp;
+parse_frame_specification (char *frame_exp)
{
int numargs = 0;
#define MAXARGS 4
This means absolutely all information in the frame is printed. */
static void
-frame_info (addr_exp, from_tty)
- char *addr_exp;
- int from_tty;
+frame_info (char *addr_exp, int from_tty)
{
struct frame_info *fi;
struct symtab_and_line sal;
static int backtrace_limit;
static void
-set_backtrace_limit_command (count_exp, from_tty)
- char *count_exp;
- int from_tty;
+set_backtrace_limit_command (char *count_exp, int from_tty)
{
- int count = parse_and_eval_address (count_exp);
+ int count = parse_and_eval_long (count_exp);
if (count < 0)
error ("Negative argument not meaningful as backtrace limit.");
}
static void
-backtrace_limit_info (arg, from_tty)
- char *arg;
- int from_tty;
+backtrace_limit_info (char *arg, int from_tty)
{
if (arg)
error ("\"Info backtrace-limit\" takes no arguments.");
/* Print briefly all stack frames or just the innermost COUNT frames. */
-static void backtrace_command_1 PARAMS ((char *count_exp, int show_locals, int from_tty));
+static void backtrace_command_1 (char *count_exp, int show_locals,
+ int from_tty);
static void
-backtrace_command_1 (count_exp, show_locals, from_tty)
- char *count_exp;
- int show_locals;
- int from_tty;
+backtrace_command_1 (char *count_exp, int show_locals, int from_tty)
{
struct frame_info *fi;
register int count;
printing. Second, it must set the variable count to the number
of frames which we should print, or -1 if all of them. */
trailing = get_current_frame ();
+
+ /* The target can be in a state where there is no valid frames
+ (e.g., just connected). */
+ if (trailing == NULL)
+ error ("No stack.");
+
trailing_level = 0;
if (count_exp)
{
- count = parse_and_eval_address (count_exp);
+ count = parse_and_eval_long (count_exp);
if (count < 0)
{
struct frame_info *current;
}
static void
-backtrace_command (arg, from_tty)
- char *arg;
- int from_tty;
+backtrace_command (char *arg, int from_tty)
{
struct cleanup *old_chain = (struct cleanup *) NULL;
char **argv = (char **) NULL;
argc = 0;
for (i = 0; (argv[i] != (char *) NULL); i++)
{
- int j;
+ unsigned int j;
for (j = 0; (j < strlen (argv[i])); j++)
argv[i][j] = tolower (argv[i][j]);
do_cleanups (old_chain);
}
-static void backtrace_full_command PARAMS ((char *arg, int from_tty));
+static void backtrace_full_command (char *arg, int from_tty);
static void
-backtrace_full_command (arg, from_tty)
- char *arg;
- int from_tty;
+backtrace_full_command (char *arg, int from_tty)
{
backtrace_command_1 (arg, 1, from_tty);
}
Return 1 if any variables were printed; 0 otherwise. */
static int
-print_block_frame_locals (b, fi, num_tabs, stream)
- struct block *b;
- register struct frame_info *fi;
- int num_tabs;
- register struct ui_file *stream;
+print_block_frame_locals (struct block *b, register struct frame_info *fi,
+ int num_tabs, register struct ui_file *stream)
{
int nsyms;
register int i, j;
/* Same, but print labels. */
static int
-print_block_frame_labels (b, have_default, stream)
- struct block *b;
- int *have_default;
- register struct ui_file *stream;
+print_block_frame_labels (struct block *b, int *have_default,
+ register struct ui_file *stream)
{
int nsyms;
register int i;
on the function running in FRAME. */
static void
-print_frame_local_vars (fi, num_tabs, stream)
- register struct frame_info *fi;
- register int num_tabs;
- register struct ui_file *stream;
+print_frame_local_vars (register struct frame_info *fi, register int num_tabs,
+ register struct ui_file *stream)
{
register struct block *block = get_frame_block (fi);
register int values_printed = 0;
/* Same, but print labels. */
static void
-print_frame_label_vars (fi, this_level_only, stream)
- register struct frame_info *fi;
- int this_level_only;
- register struct ui_file *stream;
+print_frame_label_vars (register struct frame_info *fi, int this_level_only,
+ register struct ui_file *stream)
{
register struct blockvector *bl;
register struct block *block = get_frame_block (fi);
/* ARGSUSED */
void
-locals_info (args, from_tty)
- char *args;
- int from_tty;
+locals_info (char *args, int from_tty)
{
if (!selected_frame)
error ("No frame selected.");
}
static void
-catch_info (ignore, from_tty)
- char *ignore;
- int from_tty;
+catch_info (char *ignore, int from_tty)
{
struct symtab_and_line *sal;
}
static void
-print_frame_arg_vars (fi, stream)
- register struct frame_info *fi;
- register struct ui_file *stream;
+print_frame_arg_vars (register struct frame_info *fi,
+ register struct ui_file *stream)
{
struct symbol *func = get_frame_function (fi);
register struct block *b;
}
void
-args_info (ignore, from_tty)
- char *ignore;
- int from_tty;
+args_info (char *ignore, int from_tty)
{
if (!selected_frame)
error ("No frame selected.");
static void
-args_plus_locals_info (ignore, from_tty)
- char *ignore;
- int from_tty;
+args_plus_locals_info (char *ignore, int from_tty)
{
args_info (ignore, from_tty);
locals_info (ignore, from_tty);
LEVEL may be -1 if an actual level number is not known. */
void
-select_frame (fi, level)
- struct frame_info *fi;
- int level;
+select_frame (struct frame_info *fi, int level)
{
register struct symtab *s;
/* Select frame FI, noting that its stack level is LEVEL. Also print
the stack frame and show the source if this is the tui version. */
void
-select_and_print_frame (fi, level)
- struct frame_info *fi;
- int level;
+select_and_print_frame (struct frame_info *fi, int level)
{
select_frame (fi, level);
if (fi)
not the TUI */
#if 0
void
-select_and_maybe_print_frame (fi, level)
- struct frame_info *fi;
- int level;
+select_and_maybe_print_frame (struct frame_info *fi, int level)
{
if (!tui_version)
select_frame (fi, level);
If there is no selected frame, *FRAMEP is set to NULL. */
void
-record_selected_frame (frameaddrp, levelp)
- CORE_ADDR *frameaddrp;
- int *levelp;
+record_selected_frame (CORE_ADDR *frameaddrp, int *levelp)
{
*frameaddrp = selected_frame ? selected_frame->frame : 0;
*levelp = selected_frame_level;
Can return zero under various legitimate circumstances. */
struct block *
-get_selected_block ()
+get_selected_block (void)
{
if (!target_has_stack)
return 0;
how much farther the original request asked to go. */
struct frame_info *
-find_relative_frame (frame, level_offset_ptr)
- register struct frame_info *frame;
- register int *level_offset_ptr;
+find_relative_frame (register struct frame_info *frame,
+ register int *level_offset_ptr)
{
register struct frame_info *prev;
register struct frame_info *frame1;
frame expressions. */
/* ARGSUSED */
+#ifdef UI_OUT
+void
+select_frame_command_wrapper (char *level_exp, int from_tty)
+{
+ select_frame_command (level_exp, from_tty);
+}
+#endif
static void
-select_frame_command (level_exp, from_tty)
- char *level_exp;
- int from_tty;
+select_frame_command (char *level_exp, int from_tty)
{
register struct frame_info *frame, *frame1;
unsigned int level = 0;
frame. */
void
-frame_command (level_exp, from_tty)
- char *level_exp;
- int from_tty;
+frame_command (char *level_exp, int from_tty)
{
select_frame_command (level_exp, from_tty);
show_and_print_stack_frame (selected_frame, selected_frame_level, 1);
/* The XDB Compatibility command to print the current frame. */
static void
-current_frame_command (level_exp, from_tty)
- char *level_exp;
- int from_tty;
+current_frame_command (char *level_exp, int from_tty)
{
if (target_has_stack == 0 || selected_frame == 0)
error ("No stack.");
/* ARGSUSED */
static void
-up_silently_base (count_exp)
- char *count_exp;
+up_silently_base (char *count_exp)
{
register struct frame_info *fi;
int count = 1, count1;
if (count_exp)
- count = parse_and_eval_address (count_exp);
+ count = parse_and_eval_long (count_exp);
count1 = count;
if (target_has_stack == 0 || selected_frame == 0)
}
static void
-up_silently_command (count_exp, from_tty)
- char *count_exp;
- int from_tty;
+up_silently_command (char *count_exp, int from_tty)
{
up_silently_base (count_exp);
if (tui_version)
}
static void
-up_command (count_exp, from_tty)
- char *count_exp;
- int from_tty;
+up_command (char *count_exp, int from_tty)
{
up_silently_base (count_exp);
show_and_print_stack_frame (selected_frame, selected_frame_level, 1);
/* ARGSUSED */
static void
-down_silently_base (count_exp)
- char *count_exp;
+down_silently_base (char *count_exp)
{
register struct frame_info *frame;
int count = -1, count1;
if (count_exp)
- count = -parse_and_eval_address (count_exp);
+ count = -parse_and_eval_long (count_exp);
count1 = count;
if (target_has_stack == 0 || selected_frame == 0)
/* ARGSUSED */
static void
-down_silently_command (count_exp, from_tty)
- char *count_exp;
- int from_tty;
+down_silently_command (char *count_exp, int from_tty)
{
down_silently_base (count_exp);
if (tui_version)
}
static void
-down_command (count_exp, from_tty)
- char *count_exp;
- int from_tty;
+down_command (char *count_exp, int from_tty)
{
down_silently_base (count_exp);
show_and_print_stack_frame (selected_frame, selected_frame_level, 1);
}
\f
+#ifdef UI_OUT
+void
+return_command_wrapper (char *retval_exp, int from_tty)
+{
+ return_command (retval_exp, from_tty);
+}
+#endif
static void
-return_command (retval_exp, from_tty)
- char *retval_exp;
- int from_tty;
+return_command (char *retval_exp, int from_tty)
{
struct symbol *thisfun;
CORE_ADDR selected_frame_addr;
if (retval_exp)
set_return_value (return_value);
+ /* If we are at the end of a call dummy now, pop the dummy frame too. */
+
+ if (CALL_DUMMY_HAS_COMPLETED (read_pc(), read_sp (),
+ FRAME_FP (get_current_frame ())))
+ POP_FRAME;
+
/* If interactive, print the frame that is now current. */
if (from_tty)
CORE_ADDR low, high;
};
-static void func_command PARAMS ((char *arg, int from_tty));
+static void func_command (char *arg, int from_tty);
static void
-func_command (arg, from_tty)
- char *arg;
- int from_tty;
+func_command (char *arg, int from_tty)
{
struct frame_info *fp;
int found = 0;
/* Gets the language of the current frame. */
enum language
-get_frame_language ()
+get_frame_language (void)
{
register struct symtab *s;
enum language flang; /* The language of the current frame */
}
\f
void
-_initialize_stack ()
+_initialize_stack (void)
{
#if 0
backtrace_limit = 30;