* vec.h (vec_free): Rename to vec_free_. Adapt users.
[deliverable/binutils-gdb.git] / gdb / breakpoint.h
index 93b6850661e5cd91e41c823c2778bac348c54523..639f991b0a96871a2294d68a97fa4e0b933e5597 100644 (file)
@@ -1,7 +1,6 @@
 /* Data structures associated with breakpoints in GDB.
-   Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-   2002, 2003, 2004
-   Free Software Foundation, Inc.
+   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+   2002, 2003, 2004, 2007 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -17,8 +16,8 @@
 
    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.  */
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
 
 #if !defined (BREAKPOINT_H)
 #define BREAKPOINT_H 1
@@ -63,9 +62,6 @@ enum bptype
        stepping over signal handlers, and for skipping prologues.  */
     bp_step_resume,
 
-    /* Used by wait_for_inferior for stepping over signal handlers.  */
-    bp_through_sigtramp,
-
     /* Used to detect when a watchpoint expression has gone out of
        scope.  These breakpoints are usually not visible to the user.
 
@@ -185,6 +181,36 @@ enum target_hw_bp_type
     hw_execute = 3             /* Execute HW breakpoint */
   };
 
+
+/* Information used by targets to insert and remove breakpoints.  */
+
+struct bp_target_info
+{
+  /* Address at which the breakpoint was placed.  This is normally the
+     same as ADDRESS from the bp_location, except when adjustment
+     happens in BREAKPOINT_FROM_PC.  The most common form of
+     adjustment is stripping an alternate ISA marker from the PC which
+     is used to determine the type of breakpoint to insert.  */
+  CORE_ADDR placed_address;
+
+  /* If the breakpoint lives in memory and reading that memory would
+     give back the breakpoint, instead of the original contents, then
+     the original contents are cached here.  Only SHADOW_LEN bytes of
+     this buffer are valid, and only when the breakpoint is inserted.  */
+  gdb_byte shadow_contents[BREAKPOINT_MAX];
+
+  /* The length of the data cached in SHADOW_CONTENTS.  */
+  int shadow_len;
+
+  /* The size of the placed breakpoint, according to
+     BREAKPOINT_FROM_PC, when the breakpoint was inserted.  This is
+     generally the same as SHADOW_LEN, unless we did not need
+     to read from the target to implement the memory breakpoint
+     (e.g. if a remote stub handled the details).  We may still
+     need the size to remove the breakpoint safely.  */
+  int placed_size;
+};
+
 /* GDB maintains two types of information about each breakpoint (or
    watchpoint, or other related event).  The first type corresponds
    to struct breakpoint; this is a relatively high-level structure
@@ -242,13 +268,6 @@ struct bp_location
      associated with the address.  Used primarily for overlay debugging.  */
   asection *section;
 
-  /* "Real" contents of byte where breakpoint has been inserted.
-     Valid only when breakpoints are in the program.  Under the complete
-     control of the target insert_breakpoint and remove_breakpoint routines.
-     No other code should assume anything about the value(s) here.
-     Valid only for bp_loc_software_breakpoint.  */
-  char shadow_contents[BREAKPOINT_MAX];
-
   /* Address at which breakpoint was requested, either by the user or
      by GDB for internal breakpoints.  This will usually be the same
      as ``address'' (above) except for cases in which
@@ -256,6 +275,12 @@ struct bp_location
      which to place the breakpoint in order to comply with a
      processor's architectual constraints.  */
   CORE_ADDR requested_address;
+
+  /* Details of the placed breakpoint, when inserted.  */
+  struct bp_target_info target_info;
+
+  /* Similarly, for the breakpoint at an overlay's LMA, if necessary.  */
+  struct bp_target_info overlay_target_info;
 };
 
 /* This structure is a collection of function pointers that, if available,
@@ -414,7 +439,8 @@ extern void bpstat_clear (bpstat *);
    is part of the bpstat is copied as well.  */
 extern bpstat bpstat_copy (bpstat);
 
-extern bpstat bpstat_stop_status (CORE_ADDR pc, ptid_t ptid);
+extern bpstat bpstat_stop_status (CORE_ADDR pc, ptid_t ptid, 
+                                 int stopped_by_watchpoint);
 \f
 /* This bpstat_what stuff tells wait_for_inferior what to do with a
    breakpoint (a challenging task).  */
@@ -533,12 +559,15 @@ extern int bpstat_have_active_hw_watchpoints (void);
    return means print the frame as well as the source line).  */
 extern enum print_stop_action bpstat_print (bpstat);
 
-/* Return the breakpoint number of the first breakpoint we are stopped
+/* Put in *NUM the breakpoint number of the first breakpoint we are stopped
    at.  *BSP upon return is a bpstat which points to the remaining
    breakpoints stopped at (but which is not guaranteed to be good for
    anything but further calls to bpstat_num).
-   Return 0 if passed a bpstat which does not indicate any breakpoints.  */
-extern int bpstat_num (bpstat *);
+   Return 0 if passed a bpstat which does not indicate any breakpoints.
+   Return -1 if stopped at a breakpoint that has been deleted since
+   we set it.
+   Return 1 otherwise.  */
+extern int bpstat_num (bpstat *, int *);
 
 /* Perform actions associated with having stopped at *BSP.  Actually, we just
    use this for breakpoint commands.  Perhaps other actions will go here
@@ -730,6 +759,10 @@ extern void disable_watchpoints_before_interactive_call_start (void);
 
 extern void enable_watchpoints_after_interactive_call_stop (void);
 
+/* For script interpreters that need to define breakpoint commands
+   after they've already read the commands into a struct command_line.  */
+extern enum command_control_type commands_from_control_command
+  (char *arg, struct command_line *cmd);
 
 extern void clear_breakpoint_hit_counts (void);
 
@@ -795,6 +828,16 @@ extern void delete_command (char *arg, int from_tty);
    remove fails. */
 extern int remove_hw_watchpoints (void);
 
+/* Manage a software single step breakpoint (or two).  Insert may be called
+   twice before remove is called.  */
+extern void insert_single_step_breakpoint (CORE_ADDR);
+extern void remove_single_step_breakpoints (void);
+
+/* Manage manual breakpoints, separate from the normal chain of
+   breakpoints.  These functions are used in murky target-specific
+   ways.  Please do not add more uses!  */
+extern void *deprecated_insert_raw_breakpoint (CORE_ADDR);
+extern int deprecated_remove_raw_breakpoint (void *);
 
 /* Indicator of whether exception catchpoints should be nuked between
    runs of a program.  */
This page took 0.034382 seconds and 4 git commands to generate.