X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fbreakpoint.h;h=347aeb75f301972d1e39e9fcf801cc1008dec4af;hb=refs%2Fheads%2Fconcurrent-displaced-stepping-2020-04-01;hp=3221719b889a77a9b09f69c646524e738f042b89;hpb=d55e5aa6b29906346c51ad00e6a9b112590aa294;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h index 3221719b88..347aeb75f3 100644 --- a/gdb/breakpoint.h +++ b/gdb/breakpoint.h @@ -1,5 +1,5 @@ /* Data structures associated with breakpoints in GDB. - Copyright (C) 1992-2019 Free Software Foundation, Inc. + Copyright (C) 1992-2020 Free Software Foundation, Inc. This file is part of GDB. @@ -19,19 +19,17 @@ #if !defined (BREAKPOINT_H) #define BREAKPOINT_H 1 -#include - -/* Local non-gdb includes. */ +#include "frame.h" +#include "value.h" #include "ax.h" -#include "cli/cli-script.h" #include "command.h" -#include "common/array-view.h" -#include "common/break-common.h" -#include "common/vec.h" -#include "frame.h" -#include "location.h" +#include "gdbsupport/break-common.h" #include "probe.h" -#include "value.h" +#include "location.h" +#include +#include "gdbsupport/array-view.h" +#include "gdbsupport/function-view.h" +#include "cli/cli-script.h" struct block; struct gdbpy_breakpoint_object; @@ -44,6 +42,16 @@ struct linespec_result; struct linespec_sals; struct inferior; +/* Enum for exception-handling support in 'catch throw', 'catch rethrow', + 'catch catch' and the MI equivalent. */ + +enum exception_event_kind +{ + EX_EVENT_THROW, + EX_EVENT_RETHROW, + EX_EVENT_CATCH +}; + /* Why are we removing the breakpoint from the target? */ enum remove_bp_reason @@ -308,7 +316,12 @@ class bp_location public: bp_location () = default; - bp_location (breakpoint *owner); + /* Construct a bp_location with the type inferred from OWNER's + type. */ + explicit bp_location (breakpoint *owner); + + /* Construct a bp_location with type TYPE. */ + bp_location (breakpoint *owner, bp_loc_type type); virtual ~bp_location (); @@ -362,7 +375,7 @@ public: agent_expr_up cmd_bytecode; /* Signals that breakpoint conditions and/or commands need to be - re-synched with the target. This has no use other than + re-synced with the target. This has no use other than target-side breakpoints. */ bool needs_update = false; @@ -374,17 +387,17 @@ public: /* Is this particular location enabled. */ bool enabled = false; - /* Nonzero if this breakpoint is now inserted. */ + /* True if this breakpoint is now inserted. */ bool inserted = false; - /* Nonzero if this is a permanent breakpoint. There is a breakpoint + /* True 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. */ bool permanent = false; - /* Nonzero if this is not the first breakpoint in the list + /* True 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 kinds of breakpoints, because two locations at the same @@ -659,10 +672,10 @@ enum watchpoint_triggered /* 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 + only one register per watchpoint, thus assuming that all accesses that modify a memory location happen at its starting address. */ -extern int target_exact_watchpoints; +extern bool 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 @@ -721,9 +734,8 @@ struct breakpoint event_location_up location; /* The filter that should be passed to decode_line_full when - re-setting this breakpoint. This may be NULL, but otherwise is - allocated with xmalloc. */ - char *filter = NULL; + re-setting this breakpoint. This may be NULL. */ + gdb::unique_xmalloc_ptr filter; /* For a ranged breakpoint, the location we used to find the end of the range. */ @@ -805,9 +817,10 @@ struct watchpoint : public breakpoint we do not know the value yet or the value was not readable. VAL is never lazy. */ value_ref_ptr val; - /* Nonzero if VAL is valid. If VAL_VALID is set but VAL is NULL, + + /* True if VAL is valid. If VAL_VALID is set but VAL is NULL, then an error occurred reading the value. */ - int val_valid; + bool val_valid; /* When watching the location of a bitfield, contains the offset and size of the bitfield. Otherwise contains 0. */ @@ -853,11 +866,17 @@ extern struct breakpoint *breakpoint_find_if /* Return true if BPT is either a software breakpoint or a hardware breakpoint. */ -extern int is_breakpoint (const struct breakpoint *bpt); +extern bool is_breakpoint (const struct breakpoint *bpt); + +/* Return true if BPT is of any watchpoint kind, hardware or + software. */ + +extern bool is_watchpoint (const struct breakpoint *bpt); -/* Returns true if BPT is really a watchpoint. */ +/* Return true if BPT is a C++ exception catchpoint (catch + catch/throw/rethrow). */ -extern int is_watchpoint (const struct breakpoint *bpt); +extern bool is_exception_catchpoint (breakpoint *bp); /* An instance of this type is used to represent all kinds of tracepoints. */ @@ -1030,7 +1049,7 @@ struct bpstat_what /* Used for BPSTAT_WHAT_SET_LONGJMP_RESUME and BPSTAT_WHAT_CLEAR_LONGJMP_RESUME. True if we are handling a longjmp, false if we are handling an exception. */ - int is_longjmp; + bool is_longjmp; }; /* Tell what to do about this bpstat. */ @@ -1043,18 +1062,18 @@ extern void bpstat_run_callbacks (bpstat bs_head); /* Find the bpstat associated with a breakpoint. NULL otherwise. */ bpstat bpstat_find_breakpoint (bpstat, struct breakpoint *); -/* Nonzero if a signal that we got in target_wait() was due to +/* True if a signal that we got in target_wait() was due to circumstances explained by the bpstat; the signal is therefore not random. */ -extern int bpstat_explains_signal (bpstat, enum gdb_signal); +extern bool bpstat_explains_signal (bpstat, enum gdb_signal); -/* Nonzero is this bpstat causes a stop. */ -extern int bpstat_causes_stop (bpstat); +/* True if this bpstat causes a stop. */ +extern bool bpstat_causes_stop (bpstat); -/* Nonzero if we should step constantly (e.g. watchpoints on machines +/* True if we should step constantly (e.g. watchpoints on machines without hardware support). This isn't related to a specific bpstat, just to things like whether watchpoints are set. */ -extern int bpstat_should_step (void); +extern bool bpstat_should_step (); /* Print a message indicating what happened. Returns nonzero to say that only the source line should be printed after this (zero @@ -1175,11 +1194,6 @@ enum breakpoint_here /* 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 (const address_space *, CORE_ADDR); @@ -1280,9 +1294,6 @@ const char *bpdisp_text (enum bpdisp disp); extern void break_command (const char *, int); -extern void hbreak_command_wrapper (const char *, int); -extern void thbreak_command_wrapper (const char *, int); -extern void rbreak_command_wrapper (const char *, int); extern void watch_command_wrapper (const char *, int, int); extern void awatch_command_wrapper (const char *, int, int); extern void rwatch_command_wrapper (const char *, int, int); @@ -1336,6 +1347,15 @@ extern void init_catchpoint (struct breakpoint *b, extern void install_breakpoint (int internal, std::unique_ptr &&b, int update_gll); +/* Returns the breakpoint ops appropriate for use with with LOCATION and + according to IS_TRACEPOINT. Use this to ensure, for example, that you pass + the correct ops to create_breakpoint for probe locations. If LOCATION is + NULL, returns bkpt_breakpoint_ops (or tracepoint_breakpoint_ops, if + IS_TRACEPOINT is true). */ + +extern const struct breakpoint_ops *breakpoint_ops_for_event_location + (const struct event_location *location, bool is_tracepoint); + /* Flags that can be passed down to create_breakpoint, etc., to affect breakpoint creation in several ways. */ @@ -1382,7 +1402,9 @@ extern void insert_breakpoints (void); extern int remove_breakpoints (void); -extern int remove_breakpoints_inf (inferior *inf); +/* Remove breakpoints of inferior INF. */ + +extern void remove_breakpoints_inf (inferior *inf); /* This function can be used to update the breakpoint package's state after an exec() system call has been executed. @@ -1534,8 +1556,9 @@ extern void remove_solib_event_breakpoints_at_next_stop (void); extern void disable_breakpoints_in_shlibs (void); -/* This function returns TRUE if ep is a catchpoint. */ -extern int is_catchpoint (struct breakpoint *); +/* This function returns true if B is a catchpoint. */ + +extern bool is_catchpoint (struct breakpoint *b); /* Shared helper function (MI and CLI) for creating and installing a shared object event catchpoint. */ @@ -1614,7 +1637,9 @@ extern struct tracepoint * /* Return a vector of all tracepoints currently defined. */ extern std::vector all_tracepoints (void); -extern int is_tracepoint (const struct breakpoint *b); +/* Return true if B is of tracepoint kind. */ + +extern bool is_tracepoint (const struct breakpoint *b); /* Return a vector of all static tracepoints defined at ADDR. */ extern std::vector static_tracepoints_here (CORE_ADDR addr); @@ -1640,8 +1665,8 @@ public: returned. This can be useful for implementing a search for a breakpoint with arbitrary attributes, or for applying an operation to every breakpoint. */ -extern struct breakpoint *iterate_over_breakpoints (int (*) (struct breakpoint *, - void *), void *); +extern struct breakpoint *iterate_over_breakpoints + (gdb::function_view); /* Nonzero if the specified PC cannot be a location where functions have been inlined. */ @@ -1672,4 +1697,19 @@ extern void print_breakpoint (breakpoint *bp); /* Command element for the 'commands' command. */ extern cmd_list_element *commands_cmd_element; +/* Whether to use the fixed output when printing information about a + multi-location breakpoint (see PR 9659). */ + +extern bool fix_multi_location_breakpoint_output_globally; + +/* Deal with "catch catch", "catch throw", and "catch rethrow" commands and + the MI equivalents. Sets up to catch events of type EX_EVENT. When + TEMPFLAG is true only the next matching event is caught after which the + catch-point is deleted. If REGEX is not NULL then only exceptions whose + type name matches REGEX will trigger the event. */ + +extern void catch_exception_event (enum exception_event_kind ex_event, + const char *regex, bool tempflag, + int from_tty); + #endif /* !defined (BREAKPOINT_H) */