struct value;
struct block;
struct breakpoint_object;
+struct get_number_or_range_state;
/* This is the maximum number of bytes a breakpoint instruction can
take. Feel free to increase it. It's just used in a few places to
bp_loc_other. */
CORE_ADDR address;
- /* For hardware watchpoints, the size of data ad ADDRESS being
- watches. */
+ /* For hardware watchpoints, the size of the memory region being
+ watched. */
int length;
/* Type of hardware watchpoint. */
breakpoint was hit. */
int (*breakpoint_hit) (struct breakpoint *);
+ /* Tell how many hardware resources (debug registers) are needed
+ for this breakpoint. If this function is not provided, then
+ the breakpoint or watchpoint needs one debug register. */
+ int (*resources_needed) (const struct bp_location *);
+
/* The normal print routine for this breakpoint, called when we
hit it. */
enum print_stop_action (*print_it) (struct breakpoint *);
detail to the breakpoints module. */
struct counted_command_line;
+/* Some targets (e.g., embedded PowerPC) need two debug registers to set
+ a watchpoint over a memory region. If this flag is true, GDB will use
+ only one register per watchpoint, thus assuming that all acesses that
+ modify a memory location happen at its starting address. */
+
+extern int target_exact_watchpoints;
+
/* Note that the ->silent field is not currently used by any commands
(though the code is in there if it was to be, and set_raw_breakpoint
does set it to 0). I implemented it because I thought it would be
can sometimes be NULL for enabled GDBs as not all breakpoint
types are tracked by the Python scripting API. */
struct breakpoint_object *py_bp_object;
-};
+
+ /* Whether this watchpoint is exact (see target_exact_watchpoints). */
+ int exact;
+ };
typedef struct breakpoint *breakpoint_p;
DEF_VEC_P(breakpoint_p);
extern void clear_breakpoint_hit_counts (void);
-extern int get_number (char **);
-
-extern int get_number_or_range (char **);
-
extern struct breakpoint *get_breakpoint (int num);
/* The following are for displays, which aren't really breakpoints,
extern void breakpoint_set_commands (struct breakpoint *b,
struct command_line *commands);
+extern void breakpoint_set_silent (struct breakpoint *b, int silent);
+
+extern void breakpoint_set_thread (struct breakpoint *b, int thread);
+
+extern void breakpoint_set_task (struct breakpoint *b, int task);
+
/* Clear the "inserted" flag in all breakpoints. */
extern void mark_breakpoints_out (void);
extern struct breakpoint *create_thread_event_breakpoint (struct gdbarch *,
CORE_ADDR);
+extern void remove_jit_event_breakpoints (void);
+
extern void remove_solib_event_breakpoints (void);
extern void remove_thread_event_breakpoints (void);
Returns 0 if not, greater than 0 if we are. */
extern int catching_syscall_number (int syscall_number);
-/* Tell a breakpoint to be quiet. */
-extern void make_breakpoint_silent (struct breakpoint *);
-
/* Return a tracepoint with the given number if found. */
extern struct breakpoint *get_tracepoint (int num);
extern struct breakpoint *get_tracepoint_by_number_on_target (int num);
/* Find a tracepoint by parsing a number in the supplied string. */
-extern struct breakpoint *get_tracepoint_by_number (char **arg,
- int multi_p,
- int optional_p);
+extern struct breakpoint *
+ get_tracepoint_by_number (char **arg,
+ struct get_number_or_range_state *state,
+ int optional_p);
/* Return a vector of all tracepoints currently defined. The vector
is newly allocated; the caller should free when done with it. */
extern struct breakpoint *iterate_over_breakpoints (int (*) (struct breakpoint *,
void *), void *);
+extern int user_breakpoint_p (struct breakpoint *);
+
#endif /* !defined (BREAKPOINT_H) */