aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog12
-rw-r--r--gdb/arch/riscv.c8
-rw-r--r--gdb/target-descriptions.c4
-rw-r--r--gdb/target-descriptions.h12
-rw-r--r--gdbserver/ChangeLog6
-rw-r--r--gdbserver/tdesc.cc10
-rw-r--r--gdbserver/tdesc.h2
-rw-r--r--gdbsupport/ChangeLog6
-rw-r--r--gdbsupport/tdesc.h14
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);