* ld-selective/selective.exp <no CXX>: Fix typo for argument to
[deliverable/binutils-gdb.git] / gdb / breakpoint.c
index 6edfc62491ba9c4f9ac524d0390d1aca555b901d..31c6c6ea6f5235fa56645c8e258754645aa6d3c5 100644 (file)
@@ -1,5 +1,5 @@
 /* Everything about breakpoints, for GDB.
-   Copyright 1986, 87, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 1999
+   Copyright 1986, 87, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 1999, 2000
    Free Software Foundation, Inc.
 
    This file is part of GDB.
@@ -39,6 +39,9 @@
 #include "annotate.h"
 #include "symfile.h"
 #include "objfiles.h"
+#ifdef UI_OUT
+#include "ui-out.h"
+#endif
 
 #include "gdb-events.h"
 
 
 static void until_break_command_continuation (struct continuation_arg *arg);
 
-static void
-catch_command_1 PARAMS ((char *, int, int));
+static void catch_command_1 (char *, int, int);
 
-static void
-enable_delete_command PARAMS ((char *, int));
+static void enable_delete_command (char *, int);
 
-static void
-enable_delete_breakpoint PARAMS ((struct breakpoint *));
+static void enable_delete_breakpoint (struct breakpoint *);
 
-static void
-enable_once_command PARAMS ((char *, int));
+static void enable_once_command (char *, int);
 
-static void
-enable_once_breakpoint PARAMS ((struct breakpoint *));
+static void enable_once_breakpoint (struct breakpoint *);
 
-static void
-disable_command PARAMS ((char *, int));
+static void disable_command (char *, int);
 
-static void
-enable_command PARAMS ((char *, int));
+static void enable_command (char *, int);
 
-static void
-map_breakpoint_numbers PARAMS ((char *, void (*)(struct breakpoint *)));
+static void map_breakpoint_numbers (char *, void (*)(struct breakpoint *));
 
-static void
-ignore_command PARAMS ((char *, int));
+static void ignore_command (char *, int);
 
-static int breakpoint_re_set_one PARAMS ((PTR));
+static int breakpoint_re_set_one (PTR);
 
-static void
-clear_command PARAMS ((char *, int));
+static void clear_command (char *, int);
 
-static void
-catch_command PARAMS ((char *, int));
+static void catch_command (char *, int);
 
-static void
-handle_gnu_4_16_catch_command PARAMS ((char *, int, int));
+static void handle_gnu_4_16_catch_command (char *, int, int);
 
-static struct symtabs_and_lines
-get_catch_sals PARAMS ((int));
+static struct symtabs_and_lines get_catch_sals (int);
 
-static void
-watch_command PARAMS ((char *, int));
+static void watch_command (char *, int);
 
-static int
-can_use_hardware_watchpoint PARAMS ((struct value *));
+static int can_use_hardware_watchpoint (struct value *);
 
-static void break_at_finish_command PARAMS ((char *, int));
-static void break_at_finish_at_depth_command PARAMS ((char *, int));
+static void break_at_finish_command (char *, int);
+static void break_at_finish_at_depth_command (char *, int);
 
-void
-tbreak_command PARAMS ((char *, int));
+void tbreak_command (char *, int);
 
-static void tbreak_at_finish_command PARAMS ((char *, int));
+static void tbreak_at_finish_command (char *, int);
 
-static void
-break_command_1 PARAMS ((char *, int, int));
+static void break_command_1 (char *, int, int);
 
-static void
-mention PARAMS ((struct breakpoint *));
+static void mention (struct breakpoint *);
 
-struct breakpoint *
-  set_raw_breakpoint PARAMS ((struct symtab_and_line));
+struct breakpoint *set_raw_breakpoint (struct symtab_and_line);
 
-static void
-check_duplicates PARAMS ((CORE_ADDR, asection *));
+static void check_duplicates (CORE_ADDR, asection *);
 
-static void
-describe_other_breakpoints PARAMS ((CORE_ADDR, asection *));
+static void describe_other_breakpoints (CORE_ADDR, asection *);
 
-static void
-breakpoints_info PARAMS ((char *, int));
+static void breakpoints_info (char *, int);
 
-static void
-breakpoint_1 PARAMS ((int, int));
+static void breakpoint_1 (int, int);
 
-static bpstat
-  bpstat_alloc PARAMS ((struct breakpoint *, bpstat));
+static bpstat bpstat_alloc (struct breakpoint *, bpstat);
 
-static int breakpoint_cond_eval PARAMS ((PTR));
+static int breakpoint_cond_eval (PTR);
 
-static void
-cleanup_executing_breakpoints PARAMS ((PTR));
+static void cleanup_executing_breakpoints (PTR);
 
-static void
-commands_command PARAMS ((char *, int));
+static void commands_command (char *, int);
 
-static void
-condition_command PARAMS ((char *, int));
+static void condition_command (char *, int);
 
-static int
-get_number_trailer PARAMS ((char **, int));
+static int get_number_trailer (char **, int);
 
-void
-set_breakpoint_count PARAMS ((int));
+void set_breakpoint_count (int);
 
 #if 0
-static struct breakpoint *
-  create_temp_exception_breakpoint PARAMS ((CORE_ADDR));
+static struct breakpoint *create_temp_exception_breakpoint (CORE_ADDR);
 #endif
 
 typedef enum
@@ -154,10 +127,9 @@ typedef enum
   }
 insertion_state_t;
 
-static int
-remove_breakpoint PARAMS ((struct breakpoint *, insertion_state_t));
+static int remove_breakpoint (struct breakpoint *, insertion_state_t);
 
-static enum print_stop_action print_it_typical PARAMS ((bpstat));
+static enum print_stop_action print_it_typical (bpstat);
 
 static enum print_stop_action print_bp_stop_message (bpstat bs);
 
@@ -168,95 +140,86 @@ typedef struct
   }
 args_for_catchpoint_enable;
 
-static int watchpoint_check PARAMS ((PTR));
+static int watchpoint_check (PTR);
 
-static int cover_target_enable_exception_callback PARAMS ((PTR));
+static int cover_target_enable_exception_callback (PTR);
 
-static void maintenance_info_breakpoints PARAMS ((char *, int));
+static void maintenance_info_breakpoints (char *, int);
 
 #ifdef GET_LONGJMP_TARGET
-static void create_longjmp_breakpoint PARAMS ((char *));
+static void create_longjmp_breakpoint (char *);
 #endif
 
-static int hw_breakpoint_used_count PARAMS ((void));
+static int hw_breakpoint_used_count (void);
 
-static int hw_watchpoint_used_count PARAMS ((enum bptype, int *));
+static int hw_watchpoint_used_count (enum bptype, int *);
 
-static void hbreak_command PARAMS ((char *, int));
+static void hbreak_command (char *, int);
 
-static void thbreak_command PARAMS ((char *, int));
+static void thbreak_command (char *, int);
 
-static void watch_command_1 PARAMS ((char *, int, int));
+static void watch_command_1 (char *, int, int);
 
-static void rwatch_command PARAMS ((char *, int));
+static void rwatch_command (char *, int);
 
-static void awatch_command PARAMS ((char *, int));
+static void awatch_command (char *, int);
 
-static void do_enable_breakpoint PARAMS ((struct breakpoint *, enum bpdisp));
+static void do_enable_breakpoint (struct breakpoint *, enum bpdisp);
 
-static void solib_load_unload_1 PARAMS ((char *hookname,
-                                        int tempflag,
-                                        char *dll_pathname,
-                                        char *cond_string,
-                                        enum bptype bp_kind));
+static void solib_load_unload_1 (char *hookname,
+                                int tempflag,
+                                char *dll_pathname,
+                                char *cond_string, enum bptype bp_kind);
 
-static void create_fork_vfork_event_catchpoint PARAMS ((int tempflag, 
-                                                       char *cond_string,
-                                                       enum bptype bp_kind));
+static void create_fork_vfork_event_catchpoint (int tempflag,
+                                               char *cond_string,
+                                               enum bptype bp_kind);
 
-static void break_at_finish_at_depth_command_1 PARAMS ((char *arg, 
-                                                       int flag, 
-                                                       int from_tty));
+static void break_at_finish_at_depth_command_1 (char *arg,
+                                               int flag, int from_tty);
 
-static void break_at_finish_command_1 PARAMS ((char *arg, 
-                                              int flag, 
-                                              int from_tty));
+static void break_at_finish_command_1 (char *arg, int flag, int from_tty);
 
-static void stop_command PARAMS ((char *arg, int from_tty));
+static void stop_command (char *arg, int from_tty);
 
-static void stopin_command PARAMS ((char *arg, int from_tty));
+static void stopin_command (char *arg, int from_tty);
 
-static void stopat_command PARAMS ((char *arg, int from_tty));
+static void stopat_command (char *arg, int from_tty);
 
-static char *ep_find_event_name_end PARAMS ((char *arg));
+static char *ep_find_event_name_end (char *arg);
 
-static char *ep_parse_optional_if_clause PARAMS ((char **arg));
+static char *ep_parse_optional_if_clause (char **arg);
 
-static char *ep_parse_optional_filename PARAMS ((char **arg));
+static char *ep_parse_optional_filename (char **arg);
 
 #if defined(CHILD_INSERT_EXEC_CATCHPOINT)
-static void catch_exec_command_1 PARAMS ((char *arg, int tempflag, 
-                                         int from_tty));
+static void catch_exec_command_1 (char *arg, int tempflag, int from_tty);
 #endif
 
-static void create_exception_catchpoint 
-  PARAMS ((int tempflag, char *cond_string,
-          enum exception_event_kind ex_event,
-          struct symtab_and_line * sal));
+static void create_exception_catchpoint
+  (int tempflag, char *cond_string,
+   enum exception_event_kind ex_event, struct symtab_and_line *sal);
 
-static void catch_exception_command_1 
-  PARAMS ((enum exception_event_kind ex_event,
-          char *arg, int tempflag, int from_tty));
+static void catch_exception_command_1
+  (enum exception_event_kind ex_event, char *arg, int tempflag, int from_tty);
 
-static void tcatch_command PARAMS ((char *arg, int from_tty));
+static void tcatch_command (char *arg, int from_tty);
 
-static void ep_skip_leading_whitespace PARAMS ((char **s));
+static void ep_skip_leading_whitespace (char **s);
 
 /* Prototypes for exported functions. */
 
-static void
-awatch_command PARAMS ((char *, int));
+static void awatch_command (char *, int);
 
-static void
-do_enable_breakpoint PARAMS ((struct breakpoint *, enum bpdisp));
+static void do_enable_breakpoint (struct breakpoint *, enum bpdisp);
 
 /* If FALSE, gdb will not use hardware support for watchpoints, even
    if such is available. */
 static int can_use_hw_watchpoints;
 
-void _initialize_breakpoint PARAMS ((void));
+void _initialize_breakpoint (void);
 
-void set_breakpoint_count PARAMS ((int));
+void set_breakpoint_count (int);
 
 extern int addressprint;       /* Print machine addresses? */
 
@@ -365,8 +328,7 @@ int exception_support_initialized = 0;
 /* Set breakpoint count to NUM.  */
 
 void
-set_breakpoint_count (num)
-     int num;
+set_breakpoint_count (int num)
 {
   breakpoint_count = num;
   set_internalvar (lookup_internalvar ("bpnum"),
@@ -376,7 +338,7 @@ set_breakpoint_count (num)
 /* Used in run_command to zero the hit count when a new run starts. */
 
 void
-clear_breakpoint_hit_counts ()
+clear_breakpoint_hit_counts (void)
 {
   struct breakpoint *b;
 
@@ -406,9 +368,7 @@ int default_breakpoint_line;
    TRAILER is a character which can be found after the number; most
    commonly this is `-'.  If you don't want a trailer, use \0.  */ 
 static int
-get_number_trailer (pp, trailer)
-     char **pp;
-     int trailer;
+get_number_trailer (char **pp, int trailer)
 {
   int retval = 0;      /* default */
   char *p = *pp;
@@ -472,8 +432,7 @@ get_number_trailer (pp, trailer)
 
 /* Like get_number_trailer, but don't allow a trailer.  */
 int
-get_number (pp)
-     char **pp;
+get_number (char **pp)
 {
   return get_number_trailer (pp, '\0');
 }
@@ -495,8 +454,7 @@ get_number (pp)
  */
 
 int 
-get_number_or_range (pp)
-     char **pp;
+get_number_or_range (char **pp)
 {
   static int last_retval, end_value;
   static char *end_ptr;
@@ -560,9 +518,7 @@ get_number_or_range (pp)
 /* condition N EXP -- set break condition of breakpoint N to EXP.  */
 
 static void
-condition_command (arg, from_tty)
-     char *arg;
-     int from_tty;
+condition_command (char *arg, int from_tty)
 {
   register struct breakpoint *b;
   char *p;
@@ -613,9 +569,7 @@ condition_command (arg, from_tty)
 
 /* ARGSUSED */
 static void
-commands_command (arg, from_tty)
-     char *arg;
-     int from_tty;
+commands_command (char *arg, int from_tty)
 {
   register struct breakpoint *b;
   char *p;
@@ -660,10 +614,7 @@ commands_command (arg, from_tty)
    shadow contents, not the breakpoints themselves.  From breakpoint.c.  */
 
 int
-read_memory_nobpt (memaddr, myaddr, len)
-     CORE_ADDR memaddr;
-     char *myaddr;
-     unsigned len;
+read_memory_nobpt (CORE_ADDR memaddr, char *myaddr, unsigned len)
 {
   int status;
   struct breakpoint *b;
@@ -765,7 +716,7 @@ read_memory_nobpt (memaddr, myaddr, len)
    or an `errno' value if could not write the inferior.  */
 
 int
-insert_breakpoints ()
+insert_breakpoints (void)
 {
   register struct breakpoint *b, *temp;
   int return_val = 0;  /* return success code. */
@@ -915,6 +866,7 @@ insert_breakpoints ()
              b->type == bp_read_watchpoint ||
              b->type == bp_access_watchpoint)
             && b->enable == enabled
+            && b->disposition != del_at_next_stop
             && !b->inserted
             && !b->duplicate)
       {
@@ -970,24 +922,39 @@ insert_breakpoints ()
                if (VALUE_LVAL (v) == lval_memory
                    && ! VALUE_LAZY (v))
                  {
-                   CORE_ADDR addr;
-                   int len, type;
-
-                   addr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
-                   len = TYPE_LENGTH (VALUE_TYPE (v));
-                   type   = hw_write;
-                   if (b->type == bp_read_watchpoint)
-                     type = hw_read;
-                   else if (b->type == bp_access_watchpoint)
-                     type = hw_access;
-
-                   val = target_insert_watchpoint (addr, len, type);
-                   if (val == -1)
+                   struct type *vtype = check_typedef (VALUE_TYPE (v));
+
+                   /* We only watch structs and arrays if user asked
+                      for it explicitly, never if they just happen to
+                      appear in the middle of some value chain.  */
+                   if (v == b->val_chain
+                       || (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
+                           && TYPE_CODE (vtype) != TYPE_CODE_ARRAY))
                      {
-                       b->inserted = 0;
-                       break;
+                       CORE_ADDR addr;
+                       int len, type;
+
+                       addr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
+                       len = TYPE_LENGTH (VALUE_TYPE (v));
+                       type   = hw_write;
+                       if (b->type == bp_read_watchpoint)
+                         type = hw_read;
+                       else if (b->type == bp_access_watchpoint)
+                         type = hw_access;
+
+                       val = target_insert_watchpoint (addr, len, type);
+                       if (val == -1)
+                         {
+                           /* Don't exit the loop, try to insert
+                              every value on the value chain.  That's
+                              because we will be removing all the
+                              watches below, and removing a
+                              watchpoint we didn't insert could have
+                              adverse effects.  */
+                           b->inserted = 0;
+                         }
+                       val = 0;
                      }
-                   val = 0;
                  }
              }
            /* Failure to insert a watchpoint on any memory value in the
@@ -1002,7 +969,7 @@ insert_breakpoints ()
          }
        else
          {
-           printf_filtered ("Hardware watchpoint %d deleted", b->number);
+           printf_filtered ("Hardware watchpoint %d deleted ", b->number);
            printf_filtered ("because the program has left the block \n");
            printf_filtered ("in which its expression is valid.\n");
            if (b->related_breakpoint)
@@ -1013,7 +980,7 @@ insert_breakpoints ()
        /* Restore the frame and level.  */
        if ((saved_frame != selected_frame) ||
            (saved_level != selected_frame_level))
-         select_and_print_frame (saved_frame, saved_level);
+         select_frame (saved_frame, saved_level);
 
        if (val)
          return_val = val;     /* remember failure */
@@ -1059,7 +1026,7 @@ insert_breakpoints ()
 
 
 int
-remove_breakpoints ()
+remove_breakpoints (void)
 {
   register struct breakpoint *b;
   int val;
@@ -1077,8 +1044,28 @@ remove_breakpoints ()
 }
 
 int
-reattach_breakpoints (pid)
-     int pid;
+remove_hw_watchpoints (void)
+{
+  register struct breakpoint *b;
+  int val;
+
+  ALL_BREAKPOINTS (b)
+  {
+    if (b->inserted
+       && (b->type == bp_hardware_watchpoint
+           || b->type == bp_read_watchpoint
+           || b->type == bp_access_watchpoint))
+      {
+       val = remove_breakpoint (b, mark_uninserted);
+       if (val != 0)
+         return val;
+      }
+  }
+  return 0;
+}
+
+int
+reattach_breakpoints (int pid)
 {
   register struct breakpoint *b;
   int val;
@@ -1107,7 +1094,7 @@ reattach_breakpoints (pid)
 }
 
 void
-update_breakpoints_after_exec ()
+update_breakpoints_after_exec (void)
 {
   struct breakpoint *b;
   struct breakpoint *temp;
@@ -1222,8 +1209,7 @@ update_breakpoints_after_exec ()
 }
 
 int
-detach_breakpoints (pid)
-     int pid;
+detach_breakpoints (int pid)
 {
   register struct breakpoint *b;
   int val;
@@ -1251,9 +1237,7 @@ detach_breakpoints (pid)
 }
 
 static int
-remove_breakpoint (b, is)
-     struct breakpoint *b;
-     insertion_state_t is;
+remove_breakpoint (struct breakpoint *b, insertion_state_t is)
 {
   int val;
 
@@ -1282,7 +1266,7 @@ remove_breakpoint (b, is)
          /* Check to see if breakpoint is in an overlay section;
             if so, we should remove the breakpoint at the LMA address.
             If that is not equal to the raw address, then we should 
-            presumable remove the breakpoint there as well.  */
+            presumably remove the breakpoint there as well.  */
          if (overlay_debugging && b->section &&
              section_is_overlay (b->section))
            {
@@ -1323,21 +1307,28 @@ remove_breakpoint (b, is)
          if (VALUE_LVAL (v) == lval_memory
              && ! VALUE_LAZY (v))
            {
-             CORE_ADDR addr;
-             int len, type;
+             struct type *vtype = check_typedef (VALUE_TYPE (v));
 
-             addr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
-             len = TYPE_LENGTH (VALUE_TYPE (v));
-             type   = hw_write;
-             if (b->type == bp_read_watchpoint)
-               type = hw_read;
-             else if (b->type == bp_access_watchpoint)
-               type = hw_access;
-
-             val = target_remove_watchpoint (addr, len, type);
-             if (val == -1)
-               b->inserted = 1;
-             val = 0;
+             if (v == b->val_chain
+                 || (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
+                     && TYPE_CODE (vtype) != TYPE_CODE_ARRAY))
+               {
+                 CORE_ADDR addr;
+                 int len, type;
+
+                 addr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
+                 len = TYPE_LENGTH (VALUE_TYPE (v));
+                 type   = hw_write;
+                 if (b->type == bp_read_watchpoint)
+                   type = hw_read;
+                 else if (b->type == bp_access_watchpoint)
+                   type = hw_access;
+
+                 val = target_remove_watchpoint (addr, len, type);
+                 if (val == -1)
+                   b->inserted = 1;
+                 val = 0;
+               }
            }
        }
       /* Failure to remove any of the hardware watchpoints comes here.  */
@@ -1410,7 +1401,7 @@ remove_breakpoint (b, is)
 /* Clear the "inserted" flag in all breakpoints.  */
 
 void
-mark_breakpoints_out ()
+mark_breakpoints_out (void)
 {
   register struct breakpoint *b;
 
@@ -1431,8 +1422,7 @@ mark_breakpoints_out ()
 
 
 void
-breakpoint_init_inferior (context)
-     enum inf_context context;
+breakpoint_init_inferior (enum inf_context context)
 {
   register struct breakpoint *b, *temp;
   static int warning_needed = 0;
@@ -1499,8 +1489,7 @@ breakpoint_init_inferior (context)
      the target, to advance the PC past the breakpoint.  */
 
 enum breakpoint_here
-breakpoint_here_p (pc)
-     CORE_ADDR pc;
+breakpoint_here_p (CORE_ADDR pc)
 {
   register struct breakpoint *b;
   int any_breakpoint_here = 0;
@@ -1529,8 +1518,7 @@ breakpoint_here_p (pc)
    at PC.  */
 
 int
-breakpoint_inserted_here_p (pc)
-     CORE_ADDR pc;
+breakpoint_inserted_here_p (CORE_ADDR pc)
 {
   register struct breakpoint *b;
 
@@ -1556,8 +1544,7 @@ breakpoint_inserted_here_p (pc)
    bp_call_dummy breakpoint.  */
 
 int
-frame_in_dummy (frame)
-     struct frame_info *frame;
+frame_in_dummy (struct frame_info *frame)
 {
   struct breakpoint *b;
 
@@ -1582,13 +1569,11 @@ frame_in_dummy (frame)
   return 0;
 }
 
-/* breakpoint_match_thread (PC, PID) returns true if the breakpoint at PC
-   is valid for process/thread PID.  */
+/* breakpoint_thread_match (PC, PID) returns true if the breakpoint at
+   PC is valid for process/thread PID.  */
 
 int
-breakpoint_thread_match (pc, pid)
-     CORE_ADDR pc;
-     int pid;
+breakpoint_thread_match (CORE_ADDR pc, int pid)
 {
   struct breakpoint *b;
   int thread;
@@ -1618,8 +1603,7 @@ breakpoint_thread_match (pc, pid)
    in breakpoint.h.  */
 
 int
-ep_is_catchpoint (ep)
-     struct breakpoint *ep;
+ep_is_catchpoint (struct breakpoint *ep)
 {
   return
     (ep->type == bp_catch_load)
@@ -1636,8 +1620,7 @@ ep_is_catchpoint (ep)
 }
 
 int
-ep_is_shlib_catchpoint (ep)
-     struct breakpoint *ep;
+ep_is_shlib_catchpoint (struct breakpoint *ep)
 {
   return
     (ep->type == bp_catch_load)
@@ -1646,8 +1629,7 @@ ep_is_shlib_catchpoint (ep)
 }
 
 int
-ep_is_exception_catchpoint (ep)
-     struct breakpoint *ep;
+ep_is_exception_catchpoint (struct breakpoint *ep)
 {
   return
     (ep->type == bp_catch_catch)
@@ -1659,8 +1641,7 @@ ep_is_exception_catchpoint (ep)
    Also free any storage that is part of a bpstat.  */
 
 void
-bpstat_clear (bsp)
-     bpstat *bsp;
+bpstat_clear (bpstat *bsp)
 {
   bpstat p;
   bpstat q;
@@ -1683,8 +1664,7 @@ bpstat_clear (bsp)
    is part of the bpstat is copied as well.  */
 
 bpstat
-bpstat_copy (bs)
-     bpstat bs;
+bpstat_copy (bpstat bs)
 {
   bpstat p = NULL;
   bpstat tmp;
@@ -1711,9 +1691,7 @@ bpstat_copy (bs)
 /* Find the bpstat associated with this breakpoint */
 
 bpstat
-bpstat_find_breakpoint (bsp, breakpoint)
-     bpstat bsp;
-     struct breakpoint *breakpoint;
+bpstat_find_breakpoint (bpstat bsp, struct breakpoint *breakpoint)
 {
   if (bsp == NULL)
     return NULL;
@@ -1735,8 +1713,7 @@ bpstat_find_breakpoint (bsp, breakpoint)
 
    See wait_for_inferior's use of this function.  */
 struct breakpoint *
-bpstat_find_step_resume_breakpoint (bsp)
-     bpstat bsp;
+bpstat_find_step_resume_breakpoint (bpstat bsp)
 {
   if (bsp == NULL)
     error ("Internal error (bpstat_find_step_resume_breakpoint)");
@@ -1759,8 +1736,7 @@ bpstat_find_step_resume_breakpoint (bsp)
    Return 0 if passed a bpstat which does not indicate any breakpoints.  */
 
 int
-bpstat_num (bsp)
-     bpstat *bsp;
+bpstat_num (bpstat *bsp)
 {
   struct breakpoint *b;
 
@@ -1780,8 +1756,7 @@ bpstat_num (bsp)
 /* Modify BS so that the actions will not be performed.  */
 
 void
-bpstat_clear_actions (bs)
-     bpstat bs;
+bpstat_clear_actions (bpstat bs)
 {
   for (; bs != NULL; bs = bs->next)
     {
@@ -1797,8 +1772,7 @@ bpstat_clear_actions (bs)
 /* Stub for cleaning up our state if we error-out of a breakpoint command */
 /* ARGSUSED */
 static void
-cleanup_executing_breakpoints (ignore)
-     PTR ignore;
+cleanup_executing_breakpoints (PTR ignore)
 {
   executing_breakpoint_commands = 0;
 }
@@ -1809,8 +1783,7 @@ cleanup_executing_breakpoints (ignore)
    the global "breakpoint_proceeded" after each command.  */
 
 void
-bpstat_do_actions (bsp)
-     bpstat *bsp;
+bpstat_do_actions (bpstat *bsp)
 {
   bpstat bs;
   struct cleanup *old_chain;
@@ -1885,9 +1858,14 @@ top:
    analysis.  */
 
 static enum print_stop_action
-print_it_typical (bs)
-     bpstat bs;
+print_it_typical (bpstat bs)
 {
+#ifdef UI_OUT
+  struct cleanup *old_chain;
+  struct ui_stream *stb;
+  stb = ui_out_stream_new (uiout);
+  old_chain = make_cleanup_ui_out_stream_delete (stb);
+#endif /* UI_OUT */
   /* bs->breakpoint_at can be NULL if it was a momentary breakpoint
      which has since been deleted.  */
   if (bs->breakpoint_at == NULL)
@@ -1897,11 +1875,21 @@ print_it_typical (bs)
     {
     case bp_breakpoint:
     case bp_hardware_breakpoint:
+#ifdef UI_OUT
+      annotate_breakpoint (bs->breakpoint_at->number);
+      ui_out_text (uiout, "\nBreakpoint ");
+      if (interpreter_p && strcmp (interpreter_p, "mi") == 0)
+       ui_out_field_string (uiout, "reason", "breakpoint-hit");
+      ui_out_field_int (uiout, "bkptno", bs->breakpoint_at->number);
+      ui_out_text (uiout, ", ");
+      return PRINT_SRC_AND_LOC;
+#else
       /* I think the user probably only wants to see one breakpoint
          number, not all of them.  */
       annotate_breakpoint (bs->breakpoint_at->number);
       printf_filtered ("\nBreakpoint %d, ", bs->breakpoint_at->number);
       return PRINT_SRC_AND_LOC;
+#endif
       break;
 
     case bp_shlib_event:
@@ -2034,6 +2022,20 @@ print_it_typical (bs)
       if (bs->old_val != NULL)
        {
          annotate_watchpoint (bs->breakpoint_at->number);
+#ifdef UI_OUT
+         if (interpreter_p && strcmp (interpreter_p, "mi") == 0)
+           ui_out_field_string (uiout, "reason", "watchpoint-trigger");
+         mention (bs->breakpoint_at);
+         ui_out_list_begin (uiout, "value");
+         ui_out_text (uiout, "\nOld value = ");
+         value_print (bs->old_val, stb->stream, 0, Val_pretty_default);
+         ui_out_field_stream (uiout, "old", stb);
+         ui_out_text (uiout, "\nNew value = ");
+         value_print (bs->breakpoint_at->val, stb->stream, 0, Val_pretty_default);
+         ui_out_field_stream (uiout, "new", stb);
+         ui_out_list_end (uiout);
+         ui_out_text (uiout, "\n");
+#else
          mention (bs->breakpoint_at);
          printf_filtered ("\nOld value = ");
          value_print (bs->old_val, gdb_stdout, 0, Val_pretty_default);
@@ -2041,6 +2043,7 @@ print_it_typical (bs)
          value_print (bs->breakpoint_at->val, gdb_stdout, 0,
                       Val_pretty_default);
          printf_filtered ("\n");
+#endif
          value_free (bs->old_val);
          bs->old_val = NULL;
        }
@@ -2049,15 +2052,55 @@ print_it_typical (bs)
       break;
 
     case bp_read_watchpoint:
+#ifdef UI_OUT
+      if (interpreter_p && strcmp (interpreter_p, "mi") == 0)
+       ui_out_field_string (uiout, "reason", "read-watchpoint-trigger");
+      mention (bs->breakpoint_at);
+      ui_out_list_begin (uiout, "value");
+      ui_out_text (uiout, "\nValue = ");
+      value_print (bs->breakpoint_at->val, stb->stream, 0, Val_pretty_default);
+      ui_out_field_stream (uiout, "value", stb);
+      ui_out_list_end (uiout);
+      ui_out_text (uiout, "\n");
+#else
       mention (bs->breakpoint_at);
       printf_filtered ("\nValue = ");
       value_print (bs->breakpoint_at->val, gdb_stdout, 0,
                   Val_pretty_default);
       printf_filtered ("\n");
+#endif
       return PRINT_UNKNOWN;
       break;
 
     case bp_access_watchpoint:
+#ifdef UI_OUT
+      if (bs->old_val != NULL)     
+       {
+         annotate_watchpoint (bs->breakpoint_at->number);
+         if (interpreter_p && strcmp (interpreter_p, "mi") == 0)
+           ui_out_field_string (uiout, "reason", "access-watchpoint-trigger");
+         mention (bs->breakpoint_at);
+         ui_out_list_begin (uiout, "value");
+         ui_out_text (uiout, "\nOld value = ");
+         value_print (bs->old_val, stb->stream, 0, Val_pretty_default);
+         ui_out_field_stream (uiout, "old", stb);
+         value_free (bs->old_val);
+         bs->old_val = NULL;
+         ui_out_text (uiout, "\nNew value = ");
+       }
+      else 
+       {
+         mention (bs->breakpoint_at);
+         if (interpreter_p && strcmp (interpreter_p, "mi") == 0)
+           ui_out_list_begin (uiout, "value");
+         ui_out_field_string (uiout, "reason", "access-watchpoint-trigger");
+         ui_out_text (uiout, "\nValue = ");
+       }
+      value_print (bs->breakpoint_at->val, stb->stream, 0,Val_pretty_default);
+      ui_out_field_stream (uiout, "new", stb);
+      ui_out_list_end (uiout);
+      ui_out_text (uiout, "\n");
+#else
       if (bs->old_val != NULL)     
        {
          annotate_watchpoint (bs->breakpoint_at->number);
@@ -2076,6 +2119,7 @@ print_it_typical (bs)
       value_print (bs->breakpoint_at->val, gdb_stdout, 0,
                   Val_pretty_default);
       printf_filtered ("\n");
+#endif
       return PRINT_UNKNOWN;
       break;
 
@@ -2083,7 +2127,21 @@ print_it_typical (bs)
        here. */
 
     case bp_finish:
+#ifdef UI_OUT
+      if (interpreter_p && strcmp (interpreter_p, "mi") == 0)
+       ui_out_field_string (uiout, "reason", "function-finished");
+#endif
+      return PRINT_UNKNOWN;
+      break;
+
     case bp_until:
+#ifdef UI_OUT
+      if (interpreter_p && strcmp (interpreter_p, "mi") == 0)
+       ui_out_field_string (uiout, "reason", "location-reached");
+#endif
+      return PRINT_UNKNOWN;
+      break;
+
     case bp_none:
     case bp_longjmp:
     case bp_longjmp_resume:
@@ -2149,8 +2207,7 @@ print_bp_stop_message (bpstat bs)
    further info to be printed.*/
 
 enum print_stop_action
-bpstat_print (bs)
-     bpstat bs;
+bpstat_print (bpstat bs)
 {
   int val;
 
@@ -2178,8 +2235,7 @@ bpstat_print (bs)
    make it pass through catch_errors.  */
 
 static int
-breakpoint_cond_eval (exp)
-     PTR exp;
+breakpoint_cond_eval (PTR exp)
 {
   value_ptr mark = value_mark ();
   int i = !value_true (evaluate_expression ((struct expression *) exp));
@@ -2190,9 +2246,7 @@ breakpoint_cond_eval (exp)
 /* Allocate a new bpstat and chain it to the current one.  */
 
 static bpstat
-bpstat_alloc (b, cbs)
-     register struct breakpoint *b;
-     bpstat cbs;               /* Current "bs" value */
+bpstat_alloc (struct breakpoint *b, bpstat cbs /* Current "bs" value */ )
 {
   bpstat bs;
 
@@ -2221,8 +2275,7 @@ bpstat_alloc (b, cbs)
 /* Check watchpoint condition.  */
 
 static int
-watchpoint_check (p)
-     PTR p;
+watchpoint_check (PTR p)
 {
   bpstat bs = (bpstat) p;
   struct breakpoint *b;
@@ -2288,9 +2341,18 @@ watchpoint_check (p)
         in this case, by the time we call print_it_typical() this bp
         will be deleted already. So we have no choice but print the
         information here. */
+#ifdef UI_OUT
+      if (interpreter_p && strcmp (interpreter_p, "mi") == 0)
+       ui_out_field_string (uiout, "reason", "watchpoint-scope");
+      ui_out_text (uiout, "\nWatchpoint ");
+      ui_out_field_int (uiout, "wpnum", bs->breakpoint_at->number);
+      ui_out_text (uiout, " deleted because the program has left the block in\n\
+which its expression is valid.\n");     
+#else
       printf_filtered ("\
 Watchpoint %d deleted because the program has left the block in\n\
 which its expression is valid.\n", bs->breakpoint_at->number);
+#endif 
 
       if (b->related_breakpoint)
        b->related_breakpoint->disposition = del_at_next_stop;
@@ -2321,9 +2383,7 @@ which its expression is valid.\n", bs->breakpoint_at->number);
    commands, FIXME??? fields.  */
 
 bpstat
-bpstat_stop_status (pc, not_a_breakpoint)
-     CORE_ADDR *pc;
-     int not_a_breakpoint;
+bpstat_stop_status (CORE_ADDR *pc, int not_a_breakpoint)
 {
   register struct breakpoint *b, *temp;
   CORE_ADDR bp_addr;
@@ -2472,14 +2532,21 @@ bpstat_stop_status (pc, not_a_breakpoint)
            if (VALUE_LVAL (v) == lval_memory
                && ! VALUE_LAZY (v))
              {
-               CORE_ADDR vaddr;
-
-               vaddr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
-               /* Exact match not required.  Within range is sufficient.  
-                */
-               if (addr >= vaddr &&
-                   addr < vaddr + TYPE_LENGTH (VALUE_TYPE (v)))
-                 found = 1;
+               struct type *vtype = check_typedef (VALUE_TYPE (v));
+
+               if (v == b->val_chain
+                   || (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
+                       && TYPE_CODE (vtype) != TYPE_CODE_ARRAY))
+                 {
+                   CORE_ADDR vaddr;
+
+                   vaddr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
+                   /* Exact match not required.  Within range is
+                       sufficient.  */
+                   if (addr >= vaddr &&
+                       addr < vaddr + TYPE_LENGTH (VALUE_TYPE (v)))
+                     found = 1;
+                 }
              }
          }
        if (found)
@@ -2492,6 +2559,17 @@ bpstat_stop_status (pc, not_a_breakpoint)
              /* Stop.  */
              break;
            case WP_VALUE_CHANGED:
+             if (b->type == bp_read_watchpoint)
+               {
+                 /* Don't stop: read watchpoints shouldn't fire if
+                    the value has changed.  This is for targets which
+                    cannot set read-only watchpoints.  */
+                 bs->print_it = print_it_noop;
+                 bs->stop = 0;
+                 continue;
+               }
+             ++(b->hit_count);
+             break;
            case WP_VALUE_NOT_CHANGED:
              /* Stop.  */
              ++(b->hit_count);
@@ -2623,8 +2701,7 @@ bpstat_stop_status (pc, not_a_breakpoint)
 \f
 /* Tell what to do about this bpstat.  */
 struct bpstat_what
-bpstat_what (bs)
-     bpstat bs;
+bpstat_what (bpstat bs)
 {
   /* Classify each bpstat as one of the following.  */
   enum class
@@ -2703,7 +2780,7 @@ bpstat_what (bs)
      back and decide something of a lower priority is better.  The
      ordering is:
 
-     kc   < clr sgl shl slr sn sr ss ts
+     kc   < clr sgl shl shlr slr sn sr ss ts
      sgl  < clrs shl shlr slr sn sr ss ts
      slr  < err shl shlr sn sr ss ts
      clr  < clrs err shl shlr sn sr ss ts
@@ -2748,7 +2825,7 @@ bpstat_what (bs)
 /*bp_noisy */
     {sn, sn, sn, sn, sn, sn, sn, sr, ts, shl, shlr},
 /*long_jump */
-    {slr, ss, sn, slr, err, err, err, sr, ts, shl, shlr},
+    {slr, ss, sn, slr, slr, err, err, sr, ts, shl, shlr},
 /*long_resume */
     {clr, ss, sn, clrs, err, err, err, sr, ts, shl, shlr},
 /*step_resume */
@@ -2901,7 +2978,7 @@ bpstat_what (bs)
    just to things like whether watchpoints are set.  */
 
 int
-bpstat_should_step ()
+bpstat_should_step (void)
 {
   struct breakpoint *b;
   ALL_BREAKPOINTS (b)
@@ -2912,7 +2989,7 @@ bpstat_should_step ()
 
 /* Nonzero if there are enabled hardware watchpoints. */
 int
-bpstat_have_active_hw_watchpoints ()
+bpstat_have_active_hw_watchpoints (void)
 {
   struct breakpoint *b;
   ALL_BREAKPOINTS (b)
@@ -2930,9 +3007,7 @@ bpstat_have_active_hw_watchpoints ()
    function returns another bpstat which contains only the catchpoints
    on that first list, if any. */
 void
-bpstat_get_triggered_catchpoints (ep_list, cp_list)
-     bpstat ep_list;
-     bpstat *cp_list;
+bpstat_get_triggered_catchpoints (bpstat ep_list, bpstat *cp_list)
 {
   struct bpstats root_bs[1];
   bpstat bs = root_bs;
@@ -3033,12 +3108,23 @@ print_one_breakpoint (struct breakpoint *b,
   {"del", "dstp", "dis", "keep"};
   static char bpenables[] = "nynny";
   char wrap_indent[80];
+#ifdef UI_OUT
+  struct ui_stream *stb = ui_out_stream_new (uiout);
+  struct cleanup *old_chain = make_cleanup_ui_out_stream_delete (stb);
+#endif
 
   annotate_record ();
+#ifdef UI_OUT
+  ui_out_list_begin (uiout, "bkpt");
+#endif
 
   /* 1 */
   annotate_field (0);
+#ifdef UI_OUT
+  ui_out_field_int (uiout, "number", b->number);
+#else
   printf_filtered ("%-3d ", b->number);
+#endif
 
   /* 2 */
   annotate_field (1);
@@ -3046,15 +3132,28 @@ print_one_breakpoint (struct breakpoint *b,
       || ((int) b->type != bptypes[(int) b->type].type))
     internal_error ("bptypes table does not describe type #%d.",
                    (int) b->type);
+#ifdef UI_OUT
+  ui_out_field_string (uiout, "type", bptypes[(int) b->type].description);
+#else
   printf_filtered ("%-14s ", bptypes[(int) b->type].description);
+#endif
 
   /* 3 */
   annotate_field (2);
+#ifdef UI_OUT
+  ui_out_field_string (uiout, "disp", bpdisps[(int) b->disposition]);
+#else
   printf_filtered ("%-4s ", bpdisps[(int) b->disposition]);
+#endif
 
   /* 4 */
   annotate_field (3);
+#ifdef UI_OUT
+  ui_out_field_fmt (uiout, "enabled", "%c", bpenables[(int) b->enable]);
+  ui_out_spaces (uiout, 2);
+#else
   printf_filtered ("%-3c ", bpenables[(int) b->enable]);
+#endif
   
   /* 5 and 6 */
   strcpy (wrap_indent, "                           ");
@@ -3073,8 +3172,16 @@ print_one_breakpoint (struct breakpoint *b,
       /* Field 4, the address, is omitted (which makes the columns
         not line up too nicely with the headers, but the effect
         is relatively readable).  */
+#ifdef UI_OUT
+      if (addressprint)
+       ui_out_field_skip (uiout, "addr");
+      annotate_field (5);
+      print_expression (b->exp, stb->stream);
+      ui_out_field_stream (uiout, "what", stb);
+#else
       annotate_field (5);
       print_expression (b->exp, gdb_stdout);
+#endif
       break;
       
     case bp_catch_load:
@@ -3082,11 +3189,28 @@ print_one_breakpoint (struct breakpoint *b,
       /* Field 4, the address, is omitted (which makes the columns
         not line up too nicely with the headers, but the effect
         is relatively readable).  */
+#ifdef UI_OUT
+      if (addressprint)
+       ui_out_field_skip (uiout, "addr");
+      annotate_field (5);
+      if (b->dll_pathname == NULL)
+       {
+         ui_out_field_string (uiout, "what", "<any library>");
+         ui_out_spaces (uiout, 1);
+       }
+      else
+       {
+         ui_out_text (uiout, "library \"");
+         ui_out_field_string (uiout, "what", b->dll_pathname);
+         ui_out_text (uiout, "\" ");
+       }
+#else
       annotate_field (5);
       if (b->dll_pathname == NULL)
        printf_filtered ("<any library> ");
       else
        printf_filtered ("library \"%s\" ", b->dll_pathname);
+#endif
       break;
       
     case bp_catch_fork:
@@ -3094,34 +3218,74 @@ print_one_breakpoint (struct breakpoint *b,
       /* Field 4, the address, is omitted (which makes the columns
         not line up too nicely with the headers, but the effect
         is relatively readable).  */
+#ifdef UI_OUT
+      if (addressprint)
+       ui_out_field_skip (uiout, "addr");
+      annotate_field (5);
+      if (b->forked_inferior_pid != 0)
+       {
+         ui_out_text (uiout, "process ");
+         ui_out_field_int (uiout, "what", b->forked_inferior_pid);
+         ui_out_spaces (uiout, 1);
+       }
+#else
       annotate_field (5);
       if (b->forked_inferior_pid != 0)
        printf_filtered ("process %d ", b->forked_inferior_pid);
       break;
+#endif
       
     case bp_catch_exec:
       /* Field 4, the address, is omitted (which makes the columns
         not line up too nicely with the headers, but the effect
         is relatively readable).  */
+#ifdef UI_OUT
+      if (addressprint)
+       ui_out_field_skip (uiout, "addr");
+      annotate_field (5);
+      if (b->exec_pathname != NULL)
+       {
+         ui_out_text (uiout, "program \"");
+         ui_out_field_string (uiout, "what", b->exec_pathname);
+         ui_out_text (uiout, "\" ");
+       }
+#else
       annotate_field (5);
       if (b->exec_pathname != NULL)
        printf_filtered ("program \"%s\" ", b->exec_pathname);
+#endif
       break;
 
     case bp_catch_catch:
       /* Field 4, the address, is omitted (which makes the columns
         not line up too nicely with the headers, but the effect
         is relatively readable).  */
+#ifdef UI_OUT
+      if (addressprint)
+       ui_out_field_skip (uiout, "addr");
+      annotate_field (5);
+      ui_out_field_string (uiout, "what", "exception catch");
+      ui_out_spaces (uiout, 1);
+#else
       annotate_field (5);
       printf_filtered ("exception catch ");
+#endif
       break;
 
     case bp_catch_throw:
       /* Field 4, the address, is omitted (which makes the columns
         not line up too nicely with the headers, but the effect
         is relatively readable).  */
+#ifdef UI_OUT
+      if (addressprint)
+       ui_out_field_skip (uiout, "addr");
+      annotate_field (5);
+      ui_out_field_string (uiout, "what", "exception throw");
+      ui_out_spaces (uiout, 1);
+#else
       annotate_field (5);
       printf_filtered ("exception throw ");
+#endif
       break;
       
     case bp_breakpoint:
@@ -3136,6 +3300,35 @@ print_one_breakpoint (struct breakpoint *b,
     case bp_call_dummy:
     case bp_shlib_event:
     case bp_thread_event:
+#ifdef UI_OUT
+      if (addressprint)
+       {
+         annotate_field (4);
+         ui_out_field_core_addr (uiout, "addr", b->address);
+       }
+      annotate_field (5);
+      *last_addr = b->address;
+      if (b->source_file)
+       {
+         sym = find_pc_sect_function (b->address, b->section);
+         if (sym)
+           {
+             ui_out_text (uiout, "in ");
+             ui_out_field_string (uiout, "func",
+                                  SYMBOL_SOURCE_NAME (sym));
+             ui_out_wrap_hint (uiout, wrap_indent);
+             ui_out_text (uiout, " at ");
+           }
+         ui_out_field_string (uiout, "file", b->source_file);
+         ui_out_text (uiout, ":");
+         ui_out_field_int (uiout, "line", b->line_number);
+       }
+      else
+       {
+         print_address_symbolic (b->address, stb->stream, demangle, "");
+         ui_out_field_stream (uiout, "at", stb);
+       }
+#else
       if (addressprint)
        {
          annotate_field (4);
@@ -3163,64 +3356,132 @@ print_one_breakpoint (struct breakpoint *b,
        }
       else
        print_address_symbolic (b->address, gdb_stdout, demangle, " ");
+#endif
       break;
     }
   
   if (b->thread != -1)
     {
+#ifdef UI_OUT
+      /* FIXME: This seems to be redundant and lost here; see the
+        "stop only in" line a little further down. */
+      ui_out_text (uiout, " thread ");
+      ui_out_field_int (uiout, "thread", b->thread);
+#else
       printf_filtered (" thread %d", b->thread);
+#endif
     }
   
+#ifdef UI_OUT
+  ui_out_text (uiout, "\n");
+#else
   printf_filtered ("\n");
+#endif
   
   if (b->frame)
     {
       annotate_field (6);
+#ifdef UI_OUT
+      ui_out_text (uiout, "\tstop only in stack frame at ");
+      ui_out_field_core_addr (uiout, "frame", b->frame);
+      ui_out_text (uiout, "\n");
+#else
       printf_filtered ("\tstop only in stack frame at ");
       print_address_numeric (b->frame, 1, gdb_stdout);
       printf_filtered ("\n");
+#endif
     }
   
   if (b->cond)
     {
       annotate_field (7);
+#ifdef UI_OUT
+      ui_out_text (uiout, "\tstop only if ");
+      print_expression (b->cond, stb->stream);
+      ui_out_field_stream (uiout, "cond", stb);
+      ui_out_text (uiout, "\n");
+#else
       printf_filtered ("\tstop only if ");
       print_expression (b->cond, gdb_stdout);
       printf_filtered ("\n");
+#endif
     }
   
   if (b->thread != -1)
     {
       /* FIXME should make an annotation for this */
+#ifdef UI_OUT
+      ui_out_text (uiout, "\tstop only in thread ");
+      ui_out_field_int (uiout, "thread", b->thread);
+      ui_out_text (uiout, "\n");
+#else
       printf_filtered ("\tstop only in thread %d\n", b->thread);
+#endif
     }
   
   if (show_breakpoint_hit_counts && b->hit_count)
     {
       /* FIXME should make an annotation for this */
+#ifdef UI_OUT
+      if (ep_is_catchpoint (b))
+       ui_out_text (uiout, "\tcatchpoint");
+      else
+       ui_out_text (uiout, "\tbreakpoint");
+      ui_out_text (uiout, " already hit ");
+      ui_out_field_int (uiout, "times", b->hit_count);
+      if (b->hit_count == 1)
+       ui_out_text (uiout, " time\n");
+      else
+       ui_out_text (uiout, " times\n");
+#else
       if (ep_is_catchpoint (b))
        printf_filtered ("\tcatchpoint");
       else
        printf_filtered ("\tbreakpoint");
       printf_filtered (" already hit %d time%s\n",
                       b->hit_count, (b->hit_count == 1 ? "" : "s"));
+#endif
     }
   
+#ifdef UI_OUT
+  /* Output the count also if it is zero, but only if this is
+     mi. FIXME: Should have a better test for this. */
+  if (interpreter_p && strcmp (interpreter_p, "mi") == 0)
+    if (show_breakpoint_hit_counts && b->hit_count == 0)
+      ui_out_field_int (uiout, "times", b->hit_count);
+#endif
+
   if (b->ignore_count)
     {
       annotate_field (8);
+#ifdef UI_OUT
+      ui_out_text (uiout, "\tignore next ");
+      ui_out_field_int (uiout, "ignore", b->ignore_count);
+      ui_out_text (uiout, " hits\n");
+#else
       printf_filtered ("\tignore next %d hits\n", b->ignore_count);
+#endif
     }
   
   if ((l = b->commands))
     {
       annotate_field (9);
+#ifdef UI_OUT
+      ui_out_list_begin (uiout, "script");
+      print_command_lines (uiout, l, 4);
+      ui_out_list_end (uiout);
+#else
       while (l)
        {
          print_command_line (l, 4, gdb_stdout);
          l = l->next;
        }
+#endif
     }
+#ifdef UI_OUT
+  ui_out_list_end (uiout);
+  do_cleanups (old_chain);
+#endif
 }
 
 struct captured_breakpoint_query_args
@@ -3261,14 +3522,19 @@ gdb_breakpoint_query (/* output object, */ int bnum)
    is nonzero, process only watchpoints.  */
 
 static void
-breakpoint_1 (bnum, allflag)
-     int bnum;
-     int allflag;
+breakpoint_1 (int bnum, int allflag)
 {
   register struct breakpoint *b;
   CORE_ADDR last_addr = (CORE_ADDR) -1;
   int found_a_breakpoint = 0;
   
+#ifdef UI_OUT
+  if (addressprint)
+    ui_out_table_begin (uiout, 6, "BreakpointTable");
+  else
+    ui_out_table_begin (uiout, 5, "BreakpointTable");
+#endif /* UI_OUT */
+
   ALL_BREAKPOINTS (b)
     if (bnum == -1
        || bnum == b->number)
@@ -3294,6 +3560,24 @@ breakpoint_1 (bnum, allflag)
        if (!found_a_breakpoint++)
          {
            annotate_breakpoints_headers ();
+#ifdef UI_OUT
+           annotate_field (0);
+           ui_out_table_header (uiout, 3, ui_left, "Num");     /* 1 */
+           annotate_field (1);
+           ui_out_table_header (uiout, 14, ui_left, "Type");   /* 2 */
+           annotate_field (2);
+           ui_out_table_header (uiout, 4, ui_left, "Disp");    /* 3 */
+           annotate_field (3);
+           ui_out_table_header (uiout, 3, ui_left, "Enb");     /* 4 */
+           if (addressprint)
+             {
+               annotate_field (4);
+               ui_out_table_header (uiout, 10, ui_left, "Address");    /* 5 */
+             }
+           annotate_field (5);
+           ui_out_table_header (uiout, 40, ui_noalign, "What");        /* 6 */
+           ui_out_table_body (uiout);
+#else
            annotate_field (0);
            printf_filtered ("Num ");
            annotate_field (1);
@@ -3309,6 +3593,7 @@ breakpoint_1 (bnum, allflag)
              }
            annotate_field (5);
            printf_filtered ("What\n");
+#endif /* UI_OUT */
            annotate_breakpoints_table ();
          }
        
@@ -3317,10 +3602,18 @@ breakpoint_1 (bnum, allflag)
   
   if (!found_a_breakpoint)
     {
+#ifdef UI_OUT
+      if (bnum == -1)
+       ui_out_message (uiout, 0, "No breakpoints or watchpoints.\n");
+      else
+       ui_out_message (uiout, 0, "No breakpoint or watchpoint number %d.\n",
+                       bnum);
+#else
       if (bnum == -1)
        printf_filtered ("No breakpoints or watchpoints.\n");
       else
        printf_filtered ("No breakpoint or watchpoint number %d.\n", bnum);
+#endif /* UI_OUT */
     }
   else
     {
@@ -3330,6 +3623,9 @@ breakpoint_1 (bnum, allflag)
        set_next_address (last_addr);
     }
 
+#ifdef UI_OUT
+  ui_out_table_end (uiout);
+#endif /* UI_OUT */
   /* FIXME? Should this be moved up so that it is only called when
      there have been breakpoints? */
   annotate_breakpoints_table_end ();
@@ -3337,9 +3633,7 @@ breakpoint_1 (bnum, allflag)
 
 /* ARGSUSED */
 static void
-breakpoints_info (bnum_exp, from_tty)
-     char *bnum_exp;
-     int from_tty;
+breakpoints_info (char *bnum_exp, int from_tty)
 {
   int bnum = -1;
 
@@ -3351,9 +3645,7 @@ breakpoints_info (bnum_exp, from_tty)
 
 /* ARGSUSED */
 static void
-maintenance_info_breakpoints (bnum_exp, from_tty)
-     char *bnum_exp;
-     int from_tty;
+maintenance_info_breakpoints (char *bnum_exp, int from_tty)
 {
   int bnum = -1;
 
@@ -3366,9 +3658,7 @@ maintenance_info_breakpoints (bnum_exp, from_tty)
 /* Print a message describing any breakpoints set at PC.  */
 
 static void
-describe_other_breakpoints (pc, section)
-     CORE_ADDR pc;
-     asection *section;
+describe_other_breakpoints (CORE_ADDR pc, asection *section)
 {
   register int others = 0;
   register struct breakpoint *b;
@@ -3407,11 +3697,8 @@ describe_other_breakpoints (pc, section)
    for the `break' command with no arguments.  */
 
 void
-set_default_breakpoint (valid, addr, symtab, line)
-     int valid;
-     CORE_ADDR addr;
-     struct symtab *symtab;
-     int line;
+set_default_breakpoint (int valid, CORE_ADDR addr, struct symtab *symtab,
+                       int line)
 {
   default_breakpoint_valid = valid;
   default_breakpoint_address = addr;
@@ -3426,9 +3713,7 @@ set_default_breakpoint (valid, addr, symtab, line)
    the official one, and the rest as duplicates.  */
 
 static void
-check_duplicates (address, section)
-     CORE_ADDR address;
-     asection *section;
+check_duplicates (CORE_ADDR address, asection *section)
 {
   register struct breakpoint *b;
   register int count = 0;
@@ -3495,8 +3780,7 @@ check_duplicates (address, section)
    your arguments BEFORE calling this routine!  */
 
 struct breakpoint *
-set_raw_breakpoint (sal)
-     struct symtab_and_line sal;
+set_raw_breakpoint (struct symtab_and_line sal)
 {
   register struct breakpoint *b, *b1;
 
@@ -3559,8 +3843,7 @@ make_breakpoint_permanent (struct breakpoint *b)
 #ifdef GET_LONGJMP_TARGET
 
 static void
-create_longjmp_breakpoint (func_name)
-     char *func_name;
+create_longjmp_breakpoint (char *func_name)
 {
   struct symtab_and_line sal;
   struct breakpoint *b;
@@ -3598,7 +3881,7 @@ create_longjmp_breakpoint (func_name)
    set_longjmp_resume_breakpoint() to figure out where we are going. */
 
 void
-enable_longjmp_breakpoint ()
+enable_longjmp_breakpoint (void)
 {
   register struct breakpoint *b;
 
@@ -3611,7 +3894,7 @@ enable_longjmp_breakpoint ()
 }
 
 void
-disable_longjmp_breakpoint ()
+disable_longjmp_breakpoint (void)
 {
   register struct breakpoint *b;
 
@@ -3625,8 +3908,7 @@ disable_longjmp_breakpoint ()
 }
 
 struct breakpoint *
-create_thread_event_breakpoint (address)
-     CORE_ADDR address;
+create_thread_event_breakpoint (CORE_ADDR address)
 {
   struct breakpoint *b;
   struct symtab_and_line sal;
@@ -3662,7 +3944,7 @@ remove_thread_event_breakpoints (void)
 
 #ifdef SOLIB_ADD
 void
-remove_solib_event_breakpoints ()
+remove_solib_event_breakpoints (void)
 {
   register struct breakpoint *b, *temp;
 
@@ -3672,8 +3954,7 @@ remove_solib_event_breakpoints ()
 }
 
 struct breakpoint *
-create_solib_event_breakpoint (address)
-     CORE_ADDR address;
+create_solib_event_breakpoint (CORE_ADDR address)
 {
   struct breakpoint *b;
   struct symtab_and_line sal;
@@ -3693,8 +3974,7 @@ create_solib_event_breakpoint (address)
    apply to enabled breakpoints, disabled ones can just stay disabled.  */
 
 void
-disable_breakpoints_in_shlibs (silent)
-     int silent;
+disable_breakpoints_in_shlibs (int silent)
 {
   struct breakpoint *b;
   int disabled_shlib_breaks = 0;
@@ -3727,7 +4007,7 @@ disable_breakpoints_in_shlibs (silent)
 
 /* Try to reenable any breakpoints in shared libraries.  */
 void
-re_enable_breakpoints_in_shlibs ()
+re_enable_breakpoints_in_shlibs (void)
 {
   struct breakpoint *b;
 
@@ -3746,12 +4026,8 @@ re_enable_breakpoints_in_shlibs ()
 #endif
 
 static void
-solib_load_unload_1 (hookname, tempflag, dll_pathname, cond_string, bp_kind)
-     char *hookname;
-     int tempflag;
-     char *dll_pathname;
-     char *cond_string;
-     enum bptype bp_kind;
+solib_load_unload_1 (char *hookname, int tempflag, char *dll_pathname,
+                    char *cond_string, enum bptype bp_kind)
 {
   struct breakpoint *b;
   struct symtabs_and_lines sals;
@@ -3827,34 +4103,24 @@ solib_load_unload_1 (hookname, tempflag, dll_pathname, cond_string, bp_kind)
 }
 
 void
-create_solib_load_event_breakpoint (hookname, tempflag, 
-                                   dll_pathname, cond_string)
-     char *hookname;
-     int tempflag;
-     char *dll_pathname;
-     char *cond_string;
+create_solib_load_event_breakpoint (char *hookname, int tempflag,
+                                   char *dll_pathname, char *cond_string)
 {
   solib_load_unload_1 (hookname, tempflag, dll_pathname, 
                       cond_string, bp_catch_load);
 }
 
 void
-create_solib_unload_event_breakpoint (hookname, tempflag, 
-                                     dll_pathname, cond_string)
-     char *hookname;
-     int tempflag;
-     char *dll_pathname;
-     char *cond_string;
+create_solib_unload_event_breakpoint (char *hookname, int tempflag,
+                                     char *dll_pathname, char *cond_string)
 {
   solib_load_unload_1 (hookname,tempflag, dll_pathname, 
                       cond_string, bp_catch_unload);
 }
 
 static void
-create_fork_vfork_event_catchpoint (tempflag, cond_string, bp_kind)
-     int tempflag;
-     char *cond_string;
-     enum bptype bp_kind;
+create_fork_vfork_event_catchpoint (int tempflag, char *cond_string,
+                                   enum bptype bp_kind)
 {
   struct symtab_and_line sal;
   struct breakpoint *b;
@@ -3883,25 +4149,19 @@ create_fork_vfork_event_catchpoint (tempflag, cond_string, bp_kind)
 }
 
 void
-create_fork_event_catchpoint (tempflag, cond_string)
-     int tempflag;
-     char *cond_string;
+create_fork_event_catchpoint (int tempflag, char *cond_string)
 {
   create_fork_vfork_event_catchpoint (tempflag, cond_string, bp_catch_fork);
 }
 
 void
-create_vfork_event_catchpoint (tempflag, cond_string)
-     int tempflag;
-     char *cond_string;
+create_vfork_event_catchpoint (int tempflag, char *cond_string)
 {
   create_fork_vfork_event_catchpoint (tempflag, cond_string, bp_catch_vfork);
 }
 
 void
-create_exec_event_catchpoint (tempflag, cond_string)
-     int tempflag;
-     char *cond_string;
+create_exec_event_catchpoint (int tempflag, char *cond_string)
 {
   struct symtab_and_line sal;
   struct breakpoint *b;
@@ -3929,7 +4189,7 @@ create_exec_event_catchpoint (tempflag, cond_string)
 }
 
 static int
-hw_breakpoint_used_count ()
+hw_breakpoint_used_count (void)
 {
   register struct breakpoint *b;
   int i = 0;
@@ -3944,9 +4204,7 @@ hw_breakpoint_used_count ()
 }
 
 static int
-hw_watchpoint_used_count (type, other_type_used)
-     enum bptype type;
-     int *other_type_used;
+hw_watchpoint_used_count (enum bptype type, int *other_type_used)
 {
   register struct breakpoint *b;
   int i = 0;
@@ -3975,9 +4233,7 @@ hw_watchpoint_used_count (type, other_type_used)
    that gets deleted automatically... */
 
 void
-set_longjmp_resume_breakpoint (pc, frame)
-     CORE_ADDR pc;
-     struct frame_info *frame;
+set_longjmp_resume_breakpoint (CORE_ADDR pc, struct frame_info *frame)
 {
   register struct breakpoint *b;
 
@@ -3996,7 +4252,7 @@ set_longjmp_resume_breakpoint (pc, frame)
 }
 
 void
-disable_watchpoints_before_interactive_call_start ()
+disable_watchpoints_before_interactive_call_start (void)
 {
   struct breakpoint *b;
 
@@ -4016,7 +4272,7 @@ disable_watchpoints_before_interactive_call_start ()
 }
 
 void
-enable_watchpoints_after_interactive_call_stop ()
+enable_watchpoints_after_interactive_call_stop (void)
 {
   struct breakpoint *b;
 
@@ -4041,10 +4297,8 @@ enable_watchpoints_after_interactive_call_stop ()
    Restrict it to frame FRAME if FRAME is nonzero.  */
 
 struct breakpoint *
-set_momentary_breakpoint (sal, frame, type)
-     struct symtab_and_line sal;
-     struct frame_info *frame;
-     enum bptype type;
+set_momentary_breakpoint (struct symtab_and_line sal, struct frame_info *frame,
+                         enum bptype type)
 {
   register struct breakpoint *b;
   b = set_raw_breakpoint (sal);
@@ -4066,10 +4320,16 @@ set_momentary_breakpoint (sal, frame, type)
 /* Tell the user we have just set a breakpoint B.  */
 
 static void
-mention (b)
-     struct breakpoint *b;
+mention (struct breakpoint *b)
 {
   int say_where = 0;
+#ifdef UI_OUT
+  struct cleanup *old_chain;
+  struct ui_stream *stb;
+
+  stb = ui_out_stream_new (uiout);
+  old_chain = make_cleanup_ui_out_stream_delete (stb);
+#endif /* UI_OUT */
 
   /* FIXME: This is misplaced; mention() is called by things (like hitting a
      watchpoint) other than breakpoint creation.  It should be possible to
@@ -4085,6 +4345,26 @@ mention (b)
     case bp_none:
       printf_filtered ("(apparently deleted?) Eventpoint %d: ", b->number);
       break;
+#ifdef UI_OUT
+    case bp_watchpoint:
+      ui_out_text (uiout, "Watchpoint ");
+      ui_out_list_begin (uiout, "wpt");
+      ui_out_field_int (uiout, "number", b->number);
+      ui_out_text (uiout, ": ");
+      print_expression (b->exp, stb->stream);
+      ui_out_field_stream (uiout, "exp", stb);
+      ui_out_list_end (uiout);
+      break;
+    case bp_hardware_watchpoint:
+      ui_out_text (uiout, "Hardware watchpoint ");
+      ui_out_list_begin (uiout, "wpt");
+      ui_out_field_int (uiout, "number", b->number);
+      ui_out_text (uiout, ": ");
+      print_expression (b->exp, stb->stream);
+      ui_out_field_stream (uiout, "exp", stb);
+      ui_out_list_end (uiout);
+      break;
+#else
     case bp_watchpoint:
       printf_filtered ("Watchpoint %d: ", b->number);
       print_expression (b->exp, gdb_stdout);
@@ -4093,6 +4373,27 @@ mention (b)
       printf_filtered ("Hardware watchpoint %d: ", b->number);
       print_expression (b->exp, gdb_stdout);
       break;
+#endif
+#ifdef UI_OUT
+    case bp_read_watchpoint:
+      ui_out_text (uiout, "Hardware read watchpoint ");
+      ui_out_list_begin (uiout, "hw-rwpt");
+      ui_out_field_int (uiout, "number", b->number);
+      ui_out_text (uiout, ": ");
+      print_expression (b->exp, stb->stream);
+      ui_out_field_stream (uiout, "exp", stb);
+      ui_out_list_end (uiout);
+      break;
+    case bp_access_watchpoint:
+      ui_out_text (uiout, "Hardware access (read/write) watchpoint ");
+      ui_out_list_begin (uiout, "hw-awpt");
+      ui_out_field_int (uiout, "number", b->number);
+      ui_out_text (uiout, ": ");
+      print_expression (b->exp, stb->stream);
+      ui_out_field_stream (uiout, "exp", stb);
+      ui_out_list_end (uiout);
+      break;
+#else
     case bp_read_watchpoint:
       printf_filtered ("Hardware read watchpoint %d: ", b->number);
       print_expression (b->exp, gdb_stdout);
@@ -4102,11 +4403,26 @@ mention (b)
                       b->number);
       print_expression (b->exp, gdb_stdout);
       break;
+#endif
     case bp_breakpoint:
+#ifdef UI_OUT
+      if (interpreter_p && strcmp (interpreter_p, "mi") == 0)
+       {
+         say_where = 0;
+         break;
+       }
+#endif
       printf_filtered ("Breakpoint %d", b->number);
       say_where = 1;
       break;
     case bp_hardware_breakpoint:
+#ifdef UI_OUT
+      if (interpreter_p && strcmp (interpreter_p, "mi") == 0)
+       {
+         say_where = 0;
+         break;
+       }
+#endif
       printf_filtered ("Hardware assisted breakpoint %d", b->number);
       say_where = 1;
       break;
@@ -4160,6 +4476,13 @@ mention (b)
       TUIDO (((TuiOpaqueFuncPtr) tui_vAllSetHasBreakAt, b, 1));
       TUIDO (((TuiOpaqueFuncPtr) tuiUpdateAllExecInfos));
     }
+#ifdef UI_OUT
+  do_cleanups (old_chain);
+#endif
+#ifdef UI_OUT
+  if (interpreter_p && strcmp (interpreter_p, "mi") == 0)
+    return;
+#endif
   printf_filtered ("\n");
 }
 \f
@@ -4323,9 +4646,7 @@ breakpoint_sals_to_pc (struct symtabs_and_lines *sals,
    second bit : 0 normal breakpoint, 1 hardware breakpoint. */
 
 static void
-break_command_1 (arg, flag, from_tty)
-     char *arg;
-     int flag, from_tty;
+break_command_1 (char *arg, int flag, int from_tty)
 {
   int tempflag, hardwareflag;
   struct symtabs_and_lines sals;
@@ -4580,10 +4901,7 @@ gdb_breakpoint (char *address, char *condition,
 
 
 static void
-break_at_finish_at_depth_command_1 (arg, flag, from_tty)
-     char *arg;
-     int flag;
-     int from_tty;
+break_at_finish_at_depth_command_1 (char *arg, int flag, int from_tty)
 {
   struct frame_info *frame;
   CORE_ADDR low, high, selected_pc = 0;
@@ -4658,10 +4976,7 @@ break_at_finish_at_depth_command_1 (arg, flag, from_tty)
 
 
 static void
-break_at_finish_command_1 (arg, flag, from_tty)
-     char *arg;
-     int flag;
-     int from_tty;
+break_at_finish_command_1 (char *arg, int flag, int from_tty)
 {
   char *addr_string, *break_string, *beg_addr_string;
   CORE_ADDR low, high;
@@ -4749,8 +5064,7 @@ break_at_finish_command_1 (arg, flag, from_tty)
 /* Helper function for break_command_1 and disassemble_command.  */
 
 void
-resolve_sal_pc (sal)
-     struct symtab_and_line *sal;
+resolve_sal_pc (struct symtab_and_line *sal)
 {
   CORE_ADDR pc;
 
@@ -4797,65 +5111,49 @@ resolve_sal_pc (sal)
 }
 
 void
-break_command (arg, from_tty)
-     char *arg;
-     int from_tty;
+break_command (char *arg, int from_tty)
 {
   break_command_1 (arg, 0, from_tty);
 }
 
 static void
-break_at_finish_command (arg, from_tty)
-     char *arg;
-     int from_tty;
+break_at_finish_command (char *arg, int from_tty)
 {
   break_at_finish_command_1 (arg, 0, from_tty);
 }
 
 static void
-break_at_finish_at_depth_command (arg, from_tty)
-     char *arg;
-     int from_tty;
+break_at_finish_at_depth_command (char *arg, int from_tty)
 {
   break_at_finish_at_depth_command_1 (arg, 0, from_tty);
 }
 
 void
-tbreak_command (arg, from_tty)
-     char *arg;
-     int from_tty;
+tbreak_command (char *arg, int from_tty)
 {
   break_command_1 (arg, BP_TEMPFLAG, from_tty);
 }
 
 static void
-tbreak_at_finish_command (arg, from_tty)
-     char *arg;
-     int from_tty;
+tbreak_at_finish_command (char *arg, int from_tty)
 {
   break_at_finish_command_1 (arg, BP_TEMPFLAG, from_tty);
 }
 
 static void
-hbreak_command (arg, from_tty)
-     char *arg;
-     int from_tty;
+hbreak_command (char *arg, int from_tty)
 {
   break_command_1 (arg, BP_HARDWAREFLAG, from_tty);
 }
 
 static void
-thbreak_command (arg, from_tty)
-     char *arg;
-     int from_tty;
+thbreak_command (char *arg, int from_tty)
 {
   break_command_1 (arg, (BP_TEMPFLAG | BP_HARDWAREFLAG), from_tty);
 }
 
 static void
-stop_command (arg, from_tty)
-     char *arg;
-     int from_tty;
+stop_command (char *arg, int from_tty)
 {
   printf_filtered ("Specify the type of breakpoint to set.\n\
 Usage: stop in <function | address>\n\
@@ -4863,9 +5161,7 @@ Usage: stop in <function | address>\n\
 }
 
 static void
-stopin_command (arg, from_tty)
-     char *arg;
-     int from_tty;
+stopin_command (char *arg, int from_tty)
 {
   int badInput = 0;
 
@@ -4898,9 +5194,7 @@ stopin_command (arg, from_tty)
 }
 
 static void
-stopat_command (arg, from_tty)
-     char *arg;
-     int from_tty;
+stopat_command (char *arg, int from_tty)
 {
   int badInput = 0;
 
@@ -4936,10 +5230,7 @@ stopat_command (arg, from_tty)
                 hw_read:   watch read, 
                hw_access: watch access (read or write) */
 static void
-watch_command_1 (arg, accessflag, from_tty)
-     char *arg;
-     int accessflag;
-     int from_tty;
+watch_command_1 (char *arg, int accessflag, int from_tty)
 {
   struct breakpoint *b;
   struct symtab_and_line sal;
@@ -5119,10 +5410,10 @@ watch_command_1 (arg, accessflag, from_tty)
 #endif
 
 static int
-can_use_hardware_watchpoint (v)
-     struct value *v;
+can_use_hardware_watchpoint (struct value *v)
 {
   int found_memory_cnt = 0;
+  struct value *head = v;
 
   /* Did the user specifically forbid us to use hardware watchpoints? */
   if (!can_use_hw_watchpoints)
@@ -5160,13 +5451,23 @@ can_use_hardware_watchpoint (v)
            {
              /* Ahh, memory we actually used!  Check if we can cover
                  it with hardware watchpoints.  */
-             CORE_ADDR vaddr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
-             int       len   = TYPE_LENGTH (VALUE_TYPE (v));
+             struct type *vtype = check_typedef (VALUE_TYPE (v));
+
+             /* We only watch structs and arrays if user asked for it
+                explicitly, never if they just happen to appear in a
+                middle of some value chain.  */
+             if (v == head
+                 || (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
+                     && TYPE_CODE (vtype) != TYPE_CODE_ARRAY))
+               {
+                 CORE_ADDR vaddr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
+                 int       len   = TYPE_LENGTH (VALUE_TYPE (v));
 
-             if (!TARGET_REGION_OK_FOR_HW_WATCHPOINT (vaddr, len))
-               return 0;
-             else
-               found_memory_cnt++;
+                 if (!TARGET_REGION_OK_FOR_HW_WATCHPOINT (vaddr, len))
+                   return 0;
+                 else
+                   found_memory_cnt++;
+               }
            }
        }
       else if (v->lval != not_lval && v->modifiable == 0)
@@ -5180,26 +5481,41 @@ can_use_hardware_watchpoint (v)
   return found_memory_cnt;
 }
 
+#ifdef UI_OUT
+void
+watch_command_wrapper (char *arg, int from_tty)
+{
+  watch_command (arg, from_tty);
+}
+#endif
 static void
-watch_command (arg, from_tty)
-     char *arg;
-     int from_tty;
+watch_command (char *arg, int from_tty)
 {
   watch_command_1 (arg, hw_write, from_tty);
 }
 
+#ifdef UI_OUT
+void
+rwatch_command_wrapper (char *arg, int from_tty)
+{
+  rwatch_command (arg, from_tty);
+}
+#endif
 static void
-rwatch_command (arg, from_tty)
-     char *arg;
-     int from_tty;
+rwatch_command (char *arg, int from_tty)
 {
   watch_command_1 (arg, hw_read, from_tty);
 }
 
+#ifdef UI_OUT
+void
+awatch_command_wrapper (char *arg, int from_tty)
+{
+  awatch_command (arg, from_tty);
+}
+#endif
 static void
-awatch_command (arg, from_tty)
-     char *arg;
-     int from_tty;
+awatch_command (char *arg, int from_tty)
 {
   watch_command_1 (arg, hw_access, from_tty);
 }
@@ -5217,15 +5533,13 @@ until_break_command_continuation (struct continuation_arg *arg)
 {
   struct cleanup *cleanups;
 
-  cleanups = (struct cleanup *) arg->data;
+  cleanups = (struct cleanup *) arg->data.pointer;
   do_exec_cleanups (cleanups);
 }
 
 /* ARGSUSED */
 void
-until_break_command (arg, from_tty)
-     char *arg;
-     int from_tty;
+until_break_command (char *arg, int from_tty)
 {
   struct symtabs_and_lines sals;
   struct symtab_and_line sal;
@@ -5261,10 +5575,9 @@ until_break_command (arg, from_tty)
   breakpoint = set_momentary_breakpoint (sal, selected_frame, bp_until);
 
   if (!event_loop_p || !target_can_async_p ())
-    old_chain = make_cleanup ((make_cleanup_func) delete_breakpoint, 
-                             breakpoint);
+    old_chain = make_cleanup_delete_breakpoint (breakpoint);
   else
-    old_chain = make_exec_cleanup ((make_cleanup_func) delete_breakpoint, breakpoint);
+    old_chain = make_exec_cleanup_delete_breakpoint (breakpoint);
 
   /* If we are running asynchronously, and the target supports async
      execution, we are not waiting for the target to stop, in the call
@@ -5281,8 +5594,8 @@ until_break_command (arg, from_tty)
          the exec_cleanup_chain. */
       arg1 =
        (struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
-      arg1->next = NULL;
-      arg1->data = (PTR) old_chain;
+      arg1->next         = NULL;
+      arg1->data.pointer = old_chain;
 
       add_continuation (until_break_command_continuation, arg1);
     }
@@ -5295,9 +5608,9 @@ until_break_command (arg, from_tty)
       sal.pc = prev_frame->pc;
       breakpoint = set_momentary_breakpoint (sal, prev_frame, bp_until);
       if (!event_loop_p || !target_can_async_p ())
-       make_cleanup ((make_cleanup_func) delete_breakpoint, breakpoint);
+       make_cleanup_delete_breakpoint (breakpoint);
       else
-       make_exec_cleanup ((make_cleanup_func) delete_breakpoint, breakpoint);
+       make_exec_cleanup_delete_breakpoint (breakpoint);
     }
 
   proceed (-1, TARGET_SIGNAL_DEFAULT, 0);
@@ -5311,23 +5624,22 @@ until_break_command (arg, from_tty)
 /* These aren't used; I don't konw what they were for.  */
 /* Set a breakpoint at the catch clause for NAME.  */
 static int
-catch_breakpoint (name)
-     char *name;
+catch_breakpoint (char *name)
 {
 }
 
 static int
-disable_catch_breakpoint ()
+disable_catch_breakpoint (void)
 {
 }
 
 static int
-delete_catch_breakpoint ()
+delete_catch_breakpoint (void)
 {
 }
 
 static int
-enable_catch_breakpoint ()
+enable_catch_breakpoint (void)
 {
 }
 #endif /* 0 */
@@ -5347,9 +5659,7 @@ struct sal_chain
 /* For each catch clause identified in ARGS, run FUNCTION
    with that clause as an argument.  */
 static struct symtabs_and_lines
-map_catch_names (args, function)
-     char *args;
-     int (*function) ();
+map_catch_names (char *args, int (*function) ())
 {
   register char *p = args;
   register char *p1;
@@ -5408,8 +5718,7 @@ map_catch_names (args, function)
 /* This shares a lot of code with `print_frame_label_vars' from stack.c.  */
 
 static struct symtabs_and_lines
-get_catch_sals (this_level_only)
-     int this_level_only;
+get_catch_sals (int this_level_only)
 {
   register struct blockvector *bl;
   register struct block *block;
@@ -5521,8 +5830,7 @@ get_catch_sals (this_level_only)
 }
 
 static void
-ep_skip_leading_whitespace (s)
-     char **s;
+ep_skip_leading_whitespace (char **s)
 {
   if ((s == NULL) || (*s == NULL))
     return;
@@ -5536,8 +5844,7 @@ ep_skip_leading_whitespace (s)
    the token is returned.  Else, NULL is returned. */
 
 static char *
-ep_find_event_name_end (arg)
-     char *arg;
+ep_find_event_name_end (char *arg)
 {
   char *s = arg;
   char *event_name_end = NULL;
@@ -5570,8 +5877,7 @@ ep_find_event_name_end (arg)
    if clause in the arg string. */
 
 static char *
-ep_parse_optional_if_clause (arg)
-     char **arg;
+ep_parse_optional_if_clause (char **arg)
 {
   char *cond_string;
 
@@ -5603,8 +5909,7 @@ ep_parse_optional_if_clause (arg)
    Note that clients needing to preserve the returned filename for
    future access should copy it to their own buffers. */
 static char *
-ep_parse_optional_filename (arg)
-     char **arg;
+ep_parse_optional_filename (char **arg)
 {
   static char filename[1024];
   char *arg_p = *arg;
@@ -5639,17 +5944,12 @@ typedef enum
 catch_fork_kind;
 
 #if defined(CHILD_INSERT_FORK_CATCHPOINT) || defined(CHILD_INSERT_VFORK_CATCHPOINT)
-static void catch_fork_command_1 PARAMS ((catch_fork_kind fork_kind, 
-                                         char *arg, 
-                                         int tempflag, 
-                                         int from_tty));
+static void catch_fork_command_1 (catch_fork_kind fork_kind,
+                                 char *arg, int tempflag, int from_tty);
 
 static void
-catch_fork_command_1 (fork_kind, arg, tempflag, from_tty)
-     catch_fork_kind fork_kind;
-     char *arg;
-     int tempflag;
-     int from_tty;
+catch_fork_command_1 (catch_fork_kind fork_kind, char *arg, int tempflag,
+                     int from_tty)
 {
   char *cond_string = NULL;
 
@@ -5684,10 +5984,7 @@ catch_fork_command_1 (fork_kind, arg, tempflag, from_tty)
 
 #if defined(CHILD_INSERT_EXEC_CATCHPOINT)
 static void
-catch_exec_command_1 (arg, tempflag, from_tty)
-     char *arg;
-     int tempflag;
-     int from_tty;
+catch_exec_command_1 (char *arg, int tempflag, int from_tty)
 {
   char *cond_string = NULL;
 
@@ -5711,10 +6008,7 @@ catch_exec_command_1 (arg, tempflag, from_tty)
 
 #if defined(SOLIB_ADD)
 static void
-catch_load_command_1 (arg, tempflag, from_tty)
-     char *arg;
-     int tempflag;
-     int from_tty;
+catch_load_command_1 (char *arg, int tempflag, int from_tty)
 {
   char *dll_pathname = NULL;
   char *cond_string = NULL;
@@ -5756,10 +6050,7 @@ catch_load_command_1 (arg, tempflag, from_tty)
 }
 
 static void
-catch_unload_command_1 (arg, tempflag, from_tty)
-     char *arg;
-     int tempflag;
-     int from_tty;
+catch_unload_command_1 (char *arg, int tempflag, int from_tty)
 {
   char *dll_pathname = NULL;
   char *cond_string = NULL;
@@ -5807,11 +6098,9 @@ catch_unload_command_1 (arg, tempflag, from_tty)
    exception event callback */
 
 static void
-create_exception_catchpoint (tempflag, cond_string, ex_event, sal)
-     int tempflag;
-     char *cond_string;
-     enum exception_event_kind ex_event;
-     struct symtab_and_line *sal;
+create_exception_catchpoint (int tempflag, char *cond_string,
+                            enum exception_event_kind ex_event,
+                            struct symtab_and_line *sal)
 {
   struct breakpoint *b;
   int thread = -1;             /* All threads. */
@@ -5848,11 +6137,8 @@ create_exception_catchpoint (tempflag, cond_string, ex_event, sal)
 /* Deal with "catch catch" and "catch throw" commands */
 
 static void
-catch_exception_command_1 (ex_event, arg, tempflag, from_tty)
-     enum exception_event_kind ex_event;
-     char *arg;
-     int tempflag;
-     int from_tty;
+catch_exception_command_1 (enum exception_event_kind ex_event, char *arg,
+                          int tempflag, int from_tty)
 {
   char *cond_string = NULL;
   struct symtab_and_line *sal = NULL;
@@ -5903,8 +6189,7 @@ catch_exception_command_1 (ex_event, arg, tempflag, from_tty)
    inside a catch_errors */
 
 static int
-cover_target_enable_exception_callback (arg)
-     PTR arg;
+cover_target_enable_exception_callback (PTR arg)
 {
   args_for_catchpoint_enable *args = arg;
   struct symtab_and_line *sal;
@@ -5932,10 +6217,7 @@ cover_target_enable_exception_callback (arg)
 
 
 static void
-handle_gnu_4_16_catch_command (arg, tempflag, from_tty)
-     char *arg;
-     int tempflag;
-     int from_tty;
+handle_gnu_4_16_catch_command (char *arg, int tempflag, int from_tty)
 {
   /* First, translate ARG into something we can deal with in terms
      of breakpoints.  */
@@ -6031,8 +6313,7 @@ handle_gnu_4_16_catch_command (arg, tempflag, from_tty)
 /* This creates a temporary internal breakpoint
    just to placate infrun */
 static struct breakpoint *
-create_temp_exception_breakpoint (pc)
-     CORE_ADDR pc;
+create_temp_exception_breakpoint (CORE_ADDR pc)
 {
   struct symtab_and_line sal;
   struct breakpoint *b;
@@ -6056,10 +6337,7 @@ create_temp_exception_breakpoint (pc)
 #endif
 
 static void
-catch_command_1 (arg, tempflag, from_tty)
-     char *arg;
-     int tempflag;
-     int from_tty;
+catch_command_1 (char *arg, int tempflag, int from_tty)
 {
 
   /* The first argument may be an event name, such as "start" or "load".
@@ -6182,8 +6460,7 @@ catch_command_1 (arg, tempflag, from_tty)
 /* Used by the gui, could be made a worker for other things. */
 
 struct breakpoint *
-set_breakpoint_sal (sal)
-     struct symtab_and_line sal;
+set_breakpoint_sal (struct symtab_and_line sal)
 {
   struct breakpoint *b;
   b = set_raw_breakpoint (sal);
@@ -6199,51 +6476,42 @@ set_breakpoint_sal (sal)
 /* These aren't used; I don't know what they were for.  */
 /* Disable breakpoints on all catch clauses described in ARGS.  */
 static void
-disable_catch (args)
-     char *args;
+disable_catch (char *args)
 {
   /* Map the disable command to catch clauses described in ARGS.  */
 }
 
 /* Enable breakpoints on all catch clauses described in ARGS.  */
 static void
-enable_catch (args)
-     char *args;
+enable_catch (char *args)
 {
   /* Map the disable command to catch clauses described in ARGS.  */
 }
 
 /* Delete breakpoints on all catch clauses in the active scope.  */
 static void
-delete_catch (args)
-     char *args;
+delete_catch (char *args)
 {
   /* Map the delete command to catch clauses described in ARGS.  */
 }
 #endif /* 0 */
 
 static void
-catch_command (arg, from_tty)
-     char *arg;
-     int from_tty;
+catch_command (char *arg, int from_tty)
 {
   catch_command_1 (arg, 0, from_tty);
 }
 \f
 
 static void
-tcatch_command (arg, from_tty)
-     char *arg;
-     int from_tty;
+tcatch_command (char *arg, int from_tty)
 {
   catch_command_1 (arg, 1, from_tty);
 }
 
 
 static void
-clear_command (arg, from_tty)
-     char *arg;
-     int from_tty;
+clear_command (char *arg, int from_tty)
 {
   register struct breakpoint *b, *b1;
   int default_match;
@@ -6381,8 +6649,7 @@ clear_command (arg, from_tty)
    This is called after any breakpoint is hit, or after errors.  */
 
 void
-breakpoint_auto_delete (bs)
-     bpstat bs;
+breakpoint_auto_delete (bpstat bs)
 {
   struct breakpoint *b, *temp;
 
@@ -6402,8 +6669,7 @@ breakpoint_auto_delete (bs)
    structures. */
 
 void
-delete_breakpoint (bpt)
-     struct breakpoint *bpt;
+delete_breakpoint (struct breakpoint *bpt)
 {
   register struct breakpoint *b;
   register bpstat bs;
@@ -6577,10 +6843,26 @@ delete_breakpoint (bpt)
   free ((PTR) bpt);
 }
 
+static void
+do_delete_breakpoint_cleanup (void *b)
+{
+  delete_breakpoint (b);
+}
+
+struct cleanup *
+make_cleanup_delete_breakpoint (struct breakpoint *b)
+{
+  return make_cleanup (do_delete_breakpoint_cleanup, b);
+}
+
+struct cleanup *
+make_exec_cleanup_delete_breakpoint (struct breakpoint *b)
+{
+  return make_exec_cleanup (do_delete_breakpoint_cleanup, b);
+}
+
 void
-delete_command (arg, from_tty)
-     char *arg;
-     int from_tty;
+delete_command (char *arg, int from_tty)
 {
   struct breakpoint *b, *temp;
 
@@ -6623,8 +6905,7 @@ delete_command (arg, from_tty)
    Unused in this case.  */
 
 static int
-breakpoint_re_set_one (bint)
-     PTR bint;
+breakpoint_re_set_one (PTR bint)
 {
   /* get past catch_errs */
   struct breakpoint *b = (struct breakpoint *) bint;
@@ -6803,7 +7084,7 @@ breakpoint_re_set_one (bint)
 
 /* Re-set all breakpoints after symbols have been re-loaded.  */
 void
-breakpoint_re_set ()
+breakpoint_re_set (void)
 {
   struct breakpoint *b, *temp;
   enum language save_language;
@@ -6847,8 +7128,7 @@ breakpoint_re_set ()
    - If the breakpoint is for all threads, leave it as-is.
    - Else, reset it to the current thread for inferior_pid. */
 void
-breakpoint_re_set_thread (b)
-     struct breakpoint *b;
+breakpoint_re_set_thread (struct breakpoint *b)
 {
   if (b->thread != -1)
     {
@@ -6858,8 +7138,7 @@ breakpoint_re_set_thread (b)
 }
 
 void
-set_ignore_count (bptnum, count, from_tty)
-     int bptnum, count, from_tty;
+set_ignore_count (int bptnum, int count, int from_tty)
 {
   register struct breakpoint *b;
 
@@ -6890,7 +7169,7 @@ set_ignore_count (bptnum, count, from_tty)
 
 /* Clear the ignore counts of all breakpoints.  */
 void
-breakpoint_clear_ignore_counts ()
+breakpoint_clear_ignore_counts (void)
 {
   struct breakpoint *b;
 
@@ -6901,9 +7180,7 @@ breakpoint_clear_ignore_counts ()
 /* Command to set ignore-count of breakpoint N to COUNT.  */
 
 static void
-ignore_command (args, from_tty)
-     char *args;
-     int from_tty;
+ignore_command (char *args, int from_tty)
 {
   char *p = args;
   register int num;
@@ -6928,9 +7205,7 @@ ignore_command (args, from_tty)
    whose numbers are given in ARGS.  */
 
 static void
-map_breakpoint_numbers (args, function)
-     char *args;
-     void (*function) PARAMS ((struct breakpoint *));
+map_breakpoint_numbers (char *args, void (*function) (struct breakpoint *))
 {
   register char *p = args;
   char *p1;
@@ -6971,8 +7246,7 @@ map_breakpoint_numbers (args, function)
 }
 
 void
-disable_breakpoint (bpt)
-     struct breakpoint *bpt;
+disable_breakpoint (struct breakpoint *bpt)
 {
   /* Never disable a watchpoint scope breakpoint; we want to
      hit them when we leave scope so we can delete both the
@@ -6995,9 +7269,7 @@ disable_breakpoint (bpt)
 
 /* ARGSUSED */
 static void
-disable_command (args, from_tty)
-     char *args;
-     int from_tty;
+disable_command (char *args, int from_tty)
 {
   register struct breakpoint *bpt;
   if (args == 0)
@@ -7030,9 +7302,7 @@ disable_command (args, from_tty)
 }
 
 static void
-do_enable_breakpoint (bpt, disposition)
-     struct breakpoint *bpt;
-     enum bpdisp disposition;
+do_enable_breakpoint (struct breakpoint *bpt, enum bpdisp disposition)
 {
   struct frame_info *save_selected_frame = NULL;
   int save_selected_frame_level = -1;
@@ -7118,8 +7388,7 @@ have been allocated for other watchpoints.\n", bpt->number);
        }
 
       if (save_selected_frame_level >= 0)
-       select_and_print_frame (save_selected_frame,
-                               save_selected_frame_level);
+       select_frame (save_selected_frame, save_selected_frame_level);
       value_free_to_mark (mark);
     }
   if (modify_breakpoint_hook)
@@ -7128,8 +7397,7 @@ have been allocated for other watchpoints.\n", bpt->number);
 }
 
 void
-enable_breakpoint (bpt)
-     struct breakpoint *bpt;
+enable_breakpoint (struct breakpoint *bpt)
 {
   do_enable_breakpoint (bpt, bpt->disposition);
 }
@@ -7140,9 +7408,7 @@ enable_breakpoint (bpt)
 
 /* ARGSUSED */
 static void
-enable_command (args, from_tty)
-     char *args;
-     int from_tty;
+enable_command (char *args, int from_tty)
 {
   register struct breakpoint *bpt;
   if (args == 0)
@@ -7175,33 +7441,27 @@ enable_command (args, from_tty)
 }
 
 static void
-enable_once_breakpoint (bpt)
-     struct breakpoint *bpt;
+enable_once_breakpoint (struct breakpoint *bpt)
 {
   do_enable_breakpoint (bpt, disable);
 }
 
 /* ARGSUSED */
 static void
-enable_once_command (args, from_tty)
-     char *args;
-     int from_tty;
+enable_once_command (char *args, int from_tty)
 {
   map_breakpoint_numbers (args, enable_once_breakpoint);
 }
 
 static void
-enable_delete_breakpoint (bpt)
-     struct breakpoint *bpt;
+enable_delete_breakpoint (struct breakpoint *bpt)
 {
   do_enable_breakpoint (bpt, del);
 }
 
 /* ARGSUSED */
 static void
-enable_delete_command (args, from_tty)
-     char *args;
-     int from_tty;
+enable_delete_command (char *args, int from_tty)
 {
   map_breakpoint_numbers (args, enable_delete_breakpoint);
 }
@@ -7209,9 +7469,7 @@ enable_delete_command (args, from_tty)
 /* Use default_breakpoint_'s, or nothing if they aren't valid.  */
 
 struct symtabs_and_lines
-decode_line_spec_1 (string, funfirstline)
-     char *string;
-     int funfirstline;
+decode_line_spec_1 (char *string, int funfirstline)
 {
   struct symtabs_and_lines sals;
   if (string == 0)
@@ -7230,7 +7488,7 @@ decode_line_spec_1 (string, funfirstline)
 }
 \f
 void
-_initialize_breakpoint ()
+_initialize_breakpoint (void)
 {
   struct cmd_list_element *c;
 
This page took 0.05682 seconds and 4 git commands to generate.