diff options
-rw-r--r-- | gdb/ChangeLog | 12 | ||||
-rw-r--r-- | gdb/arch/riscv.c | 8 | ||||
-rw-r--r-- | gdb/target-descriptions.c | 4 | ||||
-rw-r--r-- | gdb/target-descriptions.h | 12 | ||||
-rw-r--r-- | gdbserver/ChangeLog | 6 | ||||
-rw-r--r-- | gdbserver/tdesc.cc | 10 | ||||
-rw-r--r-- | gdbserver/tdesc.h | 2 | ||||
-rw-r--r-- | gdbsupport/ChangeLog | 6 | ||||
-rw-r--r-- | gdbsupport/tdesc.h | 14 |
9 files changed, 58 insertions, 16 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1b5bc8b..5a01458 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +2020-07-17 Andrew Burgess <andrew.burgess@embecosm.com> + + * arch/riscv.c (riscv_tdesc_cache): Change map type. + (riscv_lookup_target_description): Return pointer out of + unique_ptr. + * target-descriptions.c (allocate_target_description): Add + comment. + (target_desc_deleter::operator()): Likewise. + * target-descriptions.h (struct target_desc_deleter): Moved to + gdbsupport/tdesc.h. + (target_desc_up): Likewise. + 2020-07-17 Tom Tromey <tromey@adacore.com> * linux-nat.c (linux_nat_target::supports_non_stop) diff --git a/gdb/arch/riscv.c b/gdb/arch/riscv.c index a02c18b..e43aafc 100644 --- a/gdb/arch/riscv.c +++ b/gdb/arch/riscv.c @@ -91,7 +91,7 @@ struct riscv_gdbarch_features_hasher /* Cache of previously seen target descriptions, indexed by the feature set that created them. */ static std::unordered_map<riscv_gdbarch_features, - const target_desc *, + const target_desc_up, riscv_gdbarch_features_hasher> riscv_tdesc_cache; /* See arch/riscv.h. */ @@ -99,10 +99,12 @@ static std::unordered_map<riscv_gdbarch_features, const target_desc * riscv_lookup_target_description (const struct riscv_gdbarch_features features) { - /* Lookup in the cache. */ + /* Lookup in the cache. If we find it then return the pointer out of + the target_desc_up (which is a unique_ptr). This is safe as the + riscv_tdesc_cache will exist until GDB exits. */ const auto it = riscv_tdesc_cache.find (features); if (it != riscv_tdesc_cache.end ()) - return it->second; + return it->second.get (); target_desc *tdesc = riscv_create_target_description (features); diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c index 2f4b177..20d624c 100644 --- a/gdb/target-descriptions.c +++ b/gdb/target-descriptions.c @@ -1206,12 +1206,16 @@ tdesc_create_feature (struct target_desc *tdesc, const char *name) return new_feature; } +/* See gdbsupport/tdesc.h. */ + struct target_desc * allocate_target_description (void) { return new target_desc (); } +/* See gdbsupport/tdesc.h. */ + void target_desc_deleter::operator() (struct target_desc *target_desc) const { diff --git a/gdb/target-descriptions.h b/gdb/target-descriptions.h index 6d842bf..66a2c21 100644 --- a/gdb/target-descriptions.h +++ b/gdb/target-descriptions.h @@ -225,18 +225,6 @@ struct type *tdesc_find_type (struct gdbarch *gdbarch, const char *id); int tdesc_register_in_reggroup_p (struct gdbarch *gdbarch, int regno, struct reggroup *reggroup); - -/* A deleter adapter for a target desc. */ - -struct target_desc_deleter -{ - void operator() (struct target_desc *desc) const; -}; - -/* A unique pointer specialization that holds a target_desc. */ - -typedef std::unique_ptr<target_desc, target_desc_deleter> target_desc_up; - /* Methods for constructing a target description. */ void set_tdesc_architecture (struct target_desc *, diff --git a/gdbserver/ChangeLog b/gdbserver/ChangeLog index 1ee716f..9d61587 100644 --- a/gdbserver/ChangeLog +++ b/gdbserver/ChangeLog @@ -1,3 +1,9 @@ +2020-07-17 Andrew Burgess <andrew.burgess@embecosm.com> + + * tdesc.cc (allocate_target_description): Add header comment. + (target_desc_deleter::operator()): New function. + * tdesc.h (struct target_desc): Declare as final. + 2020-07-13 Simon Marchi <simon.marchi@polymtl.ca> * server.cc (handle_query): Use std::vector of diff --git a/gdbserver/tdesc.cc b/gdbserver/tdesc.cc index d21688b..e639017 100644 --- a/gdbserver/tdesc.cc +++ b/gdbserver/tdesc.cc @@ -93,12 +93,22 @@ init_target_desc (struct target_desc *tdesc, #endif } +/* See gdbsupport/tdesc.h. */ + struct target_desc * allocate_target_description (void) { return new target_desc (); } +/* See gdbsupport/tdesc.h. */ + +void +target_desc_deleter::operator() (struct target_desc *target_desc) const +{ + delete target_desc; +} + #ifndef IN_PROCESS_AGENT static const struct target_desc default_description {}; diff --git a/gdbserver/tdesc.h b/gdbserver/tdesc.h index f9ca478..681de64 100644 --- a/gdbserver/tdesc.h +++ b/gdbserver/tdesc.h @@ -27,7 +27,7 @@ /* A target description. Inherit from tdesc_feature so that target_desc can be used as tdesc_feature. */ -struct target_desc : tdesc_element +struct target_desc final : tdesc_element { /* A vector of elements of register definitions that describe the inferior's register set. */ diff --git a/gdbsupport/ChangeLog b/gdbsupport/ChangeLog index e1b040d..6b555cb 100644 --- a/gdbsupport/ChangeLog +++ b/gdbsupport/ChangeLog @@ -1,3 +1,9 @@ +2020-07-17 Andrew Burgess <andrew.burgess@embecosm.com> + + * tdesc.h (struct target_desc_deleter): Moved here + from gdb/target-descriptions.h, extend comment. + (target_desc_up): Likewise. + 2020-06-30 Tom Tromey <tromey@adacore.com> PR build/26183: diff --git a/gdbsupport/tdesc.h b/gdbsupport/tdesc.h index 456e8e0..fdc2a6a 100644 --- a/gdbsupport/tdesc.h +++ b/gdbsupport/tdesc.h @@ -312,6 +312,20 @@ struct tdesc_feature : tdesc_element typedef std::unique_ptr<tdesc_feature> tdesc_feature_up; +/* A deleter adapter for a target_desc. There are different + implementations of this deleter class in gdb and gdbserver because even + though the target_desc name is shared between the two projects, the + actual implementations of target_desc are completely different. */ + +struct target_desc_deleter +{ + void operator() (struct target_desc *desc) const; +}; + +/* A unique pointer specialization that holds a target_desc. */ + +typedef std::unique_ptr<target_desc, target_desc_deleter> target_desc_up; + /* Allocate a new target_desc. */ target_desc *allocate_target_description (void); |