X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fbreakpoint.h;h=13d8102c1753d49866fc5029635b46f008fff211;hb=c17e02e1b55b5e9cbdc6581f05bfec96dc8436f4;hp=66375b68c27b607c47823fe34b7d3fae8dfa4d8e;hpb=8588b356927dabd582d1d67f87a161027cb2aed1;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h index 66375b68c2..13d8102c17 100644 --- a/gdb/breakpoint.h +++ b/gdb/breakpoint.h @@ -1,5 +1,5 @@ /* Data structures associated with breakpoints in GDB. - Copyright (C) 1992-2018 Free Software Foundation, Inc. + Copyright (C) 1992-2020 Free Software Foundation, Inc. This file is part of GDB. @@ -21,14 +21,14 @@ #include "frame.h" #include "value.h" -#include "vec.h" #include "ax.h" #include "command.h" -#include "break-common.h" +#include "gdbsupport/break-common.h" #include "probe.h" #include "location.h" #include -#include "common/array-view.h" +#include "gdbsupport/array-view.h" +#include "gdbsupport/function-view.h" #include "cli/cli-script.h" struct block; @@ -42,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 @@ -301,31 +311,24 @@ enum bp_loc_type bp_loc_other /* Miscellaneous... */ }; -/* This structure is a collection of function pointers that, if - available, will be called instead of performing the default action - for this bp_loc_type. */ - -struct bp_location_ops -{ - /* Destructor. Releases everything from SELF (but not SELF - itself). */ - void (*dtor) (struct bp_location *self); -}; - class bp_location { public: bp_location () = default; - bp_location (const bp_location_ops *ops, 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 (); /* Chain pointer to the next breakpoint location for the same parent breakpoint. */ bp_location *next = NULL; - /* Methods associated with this location. */ - const bp_location_ops *ops = NULL; - /* The reference count. */ int refc = 0; @@ -372,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; @@ -384,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 @@ -669,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 @@ -731,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. */ @@ -815,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. */ @@ -863,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); -/* Returns true if BPT is really a watchpoint. */ +/* Return true if BPT is of any watchpoint kind, hardware or + software. */ -extern int is_watchpoint (const struct breakpoint *bpt); +extern bool is_watchpoint (const struct breakpoint *bpt); + +/* Return true if BPT is a C++ exception catchpoint (catch + catch/throw/rethrow). */ + +extern bool is_exception_catchpoint (breakpoint *bp); /* An instance of this type is used to represent all kinds of tracepoints. */ @@ -1040,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. */ @@ -1053,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 @@ -1290,9 +1299,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); @@ -1346,6 +1352,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. */ @@ -1392,7 +1407,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. @@ -1544,8 +1561,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. */ @@ -1624,7 +1642,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); @@ -1650,8 +1670,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. */ @@ -1682,4 +1702,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) */