/* Data structures associated with breakpoints in GDB.
- Copyright (C) 1992-2014 Free Software Foundation, Inc.
+ Copyright (C) 1992-2015 Free Software Foundation, Inc.
This file is part of GDB.
automatically enabled and reset when the
call "lands" (either completes, or stops
at another eventpoint). */
- bp_permanent /* There is a breakpoint instruction
- hard-wired into the target's code. Don't
- try to write another breakpoint
- instruction on top of it, or restore its
- value. Step over it using the
- architecture's SKIP_INSN macro. */
};
/* Nonzero if this breakpoint is now inserted. */
char inserted;
+ /* Nonzero if this is a permanent breakpoint. There is a breakpoint
+ instruction hard-wired into the target's code. Don't try to
+ write another breakpoint instruction on top of it, or restore its
+ value. Step over it using the architecture's
+ gdbarch_skip_permanent_breakpoint method. */
+ char permanent;
+
/* Nonzero if this is not the first breakpoint in the list
for the given address. location of tracepoint can _never_
be duplicated with other locations of tracepoints and other
struct symtab *symtab;
};
+/* The possible return values for print_bpstat, print_it_normal,
+ print_it_done, print_it_noop. */
+enum print_stop_action
+{
+ /* We printed nothing or we need to do some more analysis. */
+ PRINT_UNKNOWN = -1,
+
+ /* We printed something, and we *do* desire that something to be
+ followed by a location. */
+ PRINT_SRC_AND_LOC,
+
+ /* We printed something, and we do *not* desire that something to be
+ followed by a location. */
+ PRINT_SRC_ONLY,
+
+ /* We already printed all we needed to print, don't print anything
+ else. */
+ PRINT_NOTHING
+};
+
/* This structure is a collection of function pointers that, if available,
will be called instead of the performing the default action for this
bptype. */
CORE_ADDR hw_wp_mask;
};
+/* Given a function FUNC (struct breakpoint *B, void *DATA) and
+ USER_DATA, call FUNC for every known breakpoint passing USER_DATA
+ as argument.
+
+ If FUNC returns 1, the loop stops and the current
+ 'struct breakpoint' being processed is returned. If FUNC returns
+ zero, the loop continues.
+
+ This function returns either a 'struct breakpoint' pointer or NULL.
+ It was based on BFD's bfd_sections_find_if function. */
+
+extern struct breakpoint *breakpoint_find_if
+ (int (*func) (struct breakpoint *b, void *d), void *user_data);
+
/* Return true if BPT is either a software breakpoint or a hardware
breakpoint. */
int is_longjmp;
};
-/* The possible return values for print_bpstat, print_it_normal,
- print_it_done, print_it_noop. */
-enum print_stop_action
- {
- /* We printed nothing or we need to do some more analysis. */
- PRINT_UNKNOWN = -1,
-
- /* We printed something, and we *do* desire that something to be
- followed by a location. */
- PRINT_SRC_AND_LOC,
-
- /* We printed something, and we do *not* desire that something to
- be followed by a location. */
- PRINT_SRC_ONLY,
-
- /* We already printed all we needed to print, don't print anything
- else. */
- PRINT_NOTHING
- };
-
/* Tell what to do about this bpstat. */
struct bpstat_what bpstat_what (bpstat);
\f
/* Prototypes for breakpoint-related functions. */
+/* Return 1 if there's a program/permanent breakpoint planted in
+ memory at ADDRESS, return 0 otherwise. */
+
+extern int program_breakpoint_here_p (struct gdbarch *gdbarch, CORE_ADDR address);
+
extern enum breakpoint_here breakpoint_here_p (struct address_space *,
CORE_ADDR);
extern int software_breakpoint_inserted_here_p (struct address_space *,
CORE_ADDR);
+/* Return non-zero iff there is a hardware breakpoint inserted at
+ PC. */
+extern int hardware_breakpoint_inserted_here_p (struct address_space *,
+ CORE_ADDR);
+
/* Check whether any location of BP is inserted at PC. */
extern int breakpoint_has_location_inserted_here (struct breakpoint *bp,
CORE_ADDR addr,
ULONGEST len);
-extern int breakpoint_thread_match (struct address_space *,
- CORE_ADDR, ptid_t);
-
/* Returns true if {ASPACE1,ADDR1} and {ASPACE2,ADDR2} represent the
same breakpoint location. In most targets, this can only be true
if ASPACE1 matches ASPACE2. On targets that have global
/* Clear the "inserted" flag in all breakpoints. */
extern void mark_breakpoints_out (void);
-extern void make_breakpoint_permanent (struct breakpoint *);
-
extern struct breakpoint *create_jit_event_breakpoint (struct gdbarch *,
CORE_ADDR);
extern void breakpoint_retire_moribund (void);
/* Set break condition of breakpoint B to EXP. */
-extern void set_breakpoint_condition (struct breakpoint *b, char *exp,
+extern void set_breakpoint_condition (struct breakpoint *b, const char *exp,
int from_tty);
/* Checks if we are catching syscalls or not.