aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/gdbserver/ChangeLog7
-rw-r--r--gdb/gdbserver/linux-aarch64-low.c2
-rw-r--r--gdb/gdbserver/tdesc.c16
-rw-r--r--gdb/gdbserver/tdesc.h5
4 files changed, 29 insertions, 1 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index fde6abb..a5da6b5 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,3 +1,10 @@
+2019-11-20 Luis Machado <luis.machado@linaro.org>
+
+ * linux-aarch64-low.c (is_sve_tdesc): Check against target feature
+ instead of register count.
+ * tdesc.c (tdesc_contains_feature): New function.
+ * tdesc.h (tdesc_contains_feature): New prototype.
+
2019-11-15 Christian Biesinger <cbiesinger@google.com>
* Makefile.in: Add safe-strerror.c.
diff --git a/gdb/gdbserver/linux-aarch64-low.c b/gdb/gdbserver/linux-aarch64-low.c
index 87a21a0..9e234e0 100644
--- a/gdb/gdbserver/linux-aarch64-low.c
+++ b/gdb/gdbserver/linux-aarch64-low.c
@@ -83,7 +83,7 @@ is_sve_tdesc (void)
{
struct regcache *regcache = get_thread_regcache (current_thread, 0);
- return regcache->tdesc->reg_defs.size () == AARCH64_SVE_NUM_REGS;
+ return tdesc_contains_feature (regcache->tdesc, "org.gnu.gdb.aarch64.sve");
}
static void
diff --git a/gdb/gdbserver/tdesc.c b/gdb/gdbserver/tdesc.c
index 92a0a60..817e69a 100644
--- a/gdb/gdbserver/tdesc.c
+++ b/gdb/gdbserver/tdesc.c
@@ -186,3 +186,19 @@ tdesc_create_feature (struct target_desc *tdesc, const char *name)
tdesc->features.emplace_back (new_feature);
return new_feature;
}
+
+/* See gdbsupport/tdesc.h. */
+
+bool
+tdesc_contains_feature (const target_desc *tdesc, const std::string &feature)
+{
+ gdb_assert (tdesc != nullptr);
+
+ for (const tdesc_feature_up &f : tdesc->features)
+ {
+ if (f->name == feature)
+ return true;
+ }
+
+ return false;
+}
diff --git a/gdb/gdbserver/tdesc.h b/gdb/gdbserver/tdesc.h
index b93f53c..da21cda 100644
--- a/gdb/gdbserver/tdesc.h
+++ b/gdb/gdbserver/tdesc.h
@@ -93,4 +93,9 @@ void init_target_desc (struct target_desc *tdesc,
const struct target_desc *current_target_desc (void);
+/* Return true if TDESC contains the feature described by string FEATURE.
+ Return false otherwise. */
+bool tdesc_contains_feature (const target_desc *tdesc,
+ const std::string &feature);
+
#endif /* GDBSERVER_TDESC_H */