You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

586 lines
11 KiB

/* Annotation routines for GDB.
Copyright 1986, 1989, 1990, 1991, 1992, 1994, 1995, 1996, 1998, 1999,
2000 Free Software Foundation, Inc.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "defs.h"
#include "annotate.h"
#include "value.h"
#include "target.h"
#include "gdbtypes.h"
#include "breakpoint.h"
/* Prototypes for local functions. */
27 years ago
extern void _initialize_annotate (void);
27 years ago
static void print_value_flags (struct type *);
27 years ago
static void breakpoint_changed (struct breakpoint *);
void (*annotate_starting_hook) (void);
void (*annotate_stopped_hook) (void);
void (*annotate_signalled_hook) (void);
void (*annotate_signal_hook) (void);
void (*annotate_exited_hook) (void);
static int ignore_count_changed = 0;
static void
26 years ago
print_value_flags (struct type *t)
{
if (can_dereference (t))
printf_filtered ("*");
else
printf_filtered ("-");
}
void
26 years ago
breakpoints_changed (void)
{
if (annotation_level > 1)
{
target_terminal_ours ();
printf_unfiltered ("\n\032\032breakpoints-invalid\n");
if (ignore_count_changed)
ignore_count_changed = 0; /* Avoid multiple break annotations. */
}
}
/* The GUI needs to be informed of ignore_count changes, but we don't
want to provide successive multiple breakpoints-invalid messages
that are all caused by the fact that the ignore count is changing
(which could keep the GUI very busy). One is enough, after the
target actually "stops". */
void
annotate_ignore_count_change (void)
{
if (annotation_level > 1)
ignore_count_changed = 1;
}
void
26 years ago
annotate_breakpoint (int num)
{
if (annotation_level > 1)
printf_filtered ("\n\032\032breakpoint %d\n", num);
}
void
26 years ago
annotate_catchpoint (int num)
{
if (annotation_level > 1)
printf_filtered ("\n\032\032catchpoint %d\n", num);
}
void
26 years ago
annotate_watchpoint (int num)
{
if (annotation_level > 1)
printf_filtered ("\n\032\032watchpoint %d\n", num);
}
void
26 years ago
annotate_starting (void)
{
if (annotate_starting_hook)
annotate_starting_hook ();
else
{
if (annotation_level > 1)
{
printf_filtered ("\n\032\032starting\n");
}
}
}
void
26 years ago
annotate_stopped (void)
{
if (annotate_stopped_hook)
annotate_stopped_hook ();
else
{
if (annotation_level > 1)
printf_filtered ("\n\032\032stopped\n");
}
if (annotation_level > 1 && ignore_count_changed)
{
ignore_count_changed = 0;
breakpoints_changed ();
}
}
void
26 years ago
annotate_exited (int exitstatus)
{
if (annotate_exited_hook)
annotate_exited_hook ();
else
{
if (annotation_level > 1)
printf_filtered ("\n\032\032exited %d\n", exitstatus);
}
}
void
26 years ago
annotate_signalled (void)
{
if (annotate_signalled_hook)
annotate_signalled_hook ();
if (annotation_level > 1)
printf_filtered ("\n\032\032signalled\n");
}
void
26 years ago
annotate_signal_name (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032signal-name\n");
}
void
26 years ago
annotate_signal_name_end (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032signal-name-end\n");
}
void
26 years ago
annotate_signal_string (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032signal-string\n");
}
void
26 years ago
annotate_signal_string_end (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032signal-string-end\n");
}
void
26 years ago
annotate_signal (void)
{
if (annotate_signal_hook)
annotate_signal_hook ();
if (annotation_level > 1)
printf_filtered ("\n\032\032signal\n");
}
void
26 years ago
annotate_breakpoints_headers (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032breakpoints-headers\n");
}
void
26 years ago
annotate_field (int num)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032field %d\n", num);
}
void
26 years ago
annotate_breakpoints_table (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032breakpoints-table\n");
}
void
26 years ago
annotate_record (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032record\n");
}
void
26 years ago
annotate_breakpoints_table_end (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032breakpoints-table-end\n");
}
void
26 years ago
annotate_frames_invalid (void)
{
if (annotation_level > 1)
{
target_terminal_ours ();
printf_unfiltered ("\n\032\032frames-invalid\n");
}
}
void
26 years ago
annotate_field_begin (struct type *type)
{
if (annotation_level == 2)
{
printf_filtered ("\n\032\032field-begin ");
print_value_flags (type);
printf_filtered ("\n");
}
}
void
26 years ago
annotate_field_name_end (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032field-name-end\n");
}
void
26 years ago
annotate_field_value (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032field-value\n");
}
void
26 years ago
annotate_field_end (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032field-end\n");
}
void
26 years ago
annotate_quit (void)
{
if (annotation_level > 1)
printf_filtered ("\n\032\032quit\n");
}
void
26 years ago
annotate_error (void)
{
if (annotation_level > 1)
printf_filtered ("\n\032\032error\n");
}
void
26 years ago
annotate_error_begin (void)
{
if (annotation_level > 1)
fprintf_filtered (gdb_stderr, "\n\032\032error-begin\n");
}
void
26 years ago
annotate_value_history_begin (int histindex, struct type *type)
{
if (annotation_level == 2)
{
printf_filtered ("\n\032\032value-history-begin %d ", histindex);
print_value_flags (type);
printf_filtered ("\n");
}
}
void
26 years ago
annotate_value_begin (struct type *type)
{
if (annotation_level == 2)
{
printf_filtered ("\n\032\032value-begin ");
print_value_flags (type);
printf_filtered ("\n");
}
}
void
26 years ago
annotate_value_history_value (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032value-history-value\n");
}
void
26 years ago
annotate_value_history_end (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032value-history-end\n");
}
void
26 years ago
annotate_value_end (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032value-end\n");
}
void
26 years ago
annotate_display_begin (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032display-begin\n");
}
void
26 years ago
annotate_display_number_end (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032display-number-end\n");
}
void
26 years ago
annotate_display_format (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032display-format\n");
}
void
26 years ago
annotate_display_expression (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032display-expression\n");
}
void
26 years ago
annotate_display_expression_end (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032display-expression-end\n");
}
void
26 years ago
annotate_display_value (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032display-value\n");
}
void
26 years ago
annotate_display_end (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032display-end\n");
}
void
26 years ago
annotate_arg_begin (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032arg-begin\n");
}
void
26 years ago
annotate_arg_name_end (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032arg-name-end\n");
}
void
26 years ago
annotate_arg_value (struct type *type)
{
if (annotation_level == 2)
{
printf_filtered ("\n\032\032arg-value ");
print_value_flags (type);
printf_filtered ("\n");
}
}
void
26 years ago
annotate_arg_end (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032arg-end\n");
}
void
26 years ago
annotate_source (char *filename, int line, int character, int mid, CORE_ADDR pc)
{
if (annotation_level > 1)
printf_filtered ("\n\032\032source ");
else
printf_filtered ("\032\032");
printf_filtered ("%s:%d:%d:%s:0x", filename,
line, character,
mid ? "middle" : "beg");
print_address_numeric (pc, 0, gdb_stdout);
printf_filtered ("\n");
}
void
26 years ago
annotate_frame_begin (int level, CORE_ADDR pc)
{
if (annotation_level == 2)
{
printf_filtered ("\n\032\032frame-begin %d 0x", level);
print_address_numeric (pc, 0, gdb_stdout);
printf_filtered ("\n");
}
}
void
26 years ago
annotate_function_call (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032function-call\n");
}
void
26 years ago
annotate_signal_handler_caller (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032signal-handler-caller\n");
}
void
26 years ago
annotate_frame_address (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032frame-address\n");
}
void
26 years ago
annotate_frame_address_end (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032frame-address-end\n");
}
void
26 years ago
annotate_frame_function_name (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032frame-function-name\n");
}
void
26 years ago
annotate_frame_args (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032frame-args\n");
}
void
26 years ago
annotate_frame_source_begin (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032frame-source-begin\n");
}
void
26 years ago
annotate_frame_source_file (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032frame-source-file\n");
}
void
26 years ago
annotate_frame_source_file_end (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032frame-source-file-end\n");
}
void
26 years ago
annotate_frame_source_line (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032frame-source-line\n");
}
void
26 years ago
annotate_frame_source_end (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032frame-source-end\n");
}
void
26 years ago
annotate_frame_where (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032frame-where\n");
}
void
26 years ago
annotate_frame_end (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032frame-end\n");
}
void
26 years ago
annotate_array_section_begin (int index, struct type *elttype)
{
if (annotation_level == 2)
{
printf_filtered ("\n\032\032array-section-begin %d ", index);
print_value_flags (elttype);
printf_filtered ("\n");
}
}
void
26 years ago
annotate_elt_rep (unsigned int repcount)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032elt-rep %u\n", repcount);
}
void
26 years ago
annotate_elt_rep_end (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032elt-rep-end\n");
}
void
26 years ago
annotate_elt (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032elt\n");
}
void
26 years ago
annotate_array_section_end (void)
{
if (annotation_level == 2)
printf_filtered ("\n\032\032array-section-end\n");
}
static void
26 years ago
breakpoint_changed (struct breakpoint *b)
{
breakpoints_changed ();
}
void
26 years ago
_initialize_annotate (void)
{
if (annotation_level > 1)
{
delete_breakpoint_hook = breakpoint_changed;
modify_breakpoint_hook = breakpoint_changed;
}
}