diff options
-rw-r--r-- | gdb/gdbserver/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/gdbserver/linux-aarch64-low.c | 2 | ||||
-rw-r--r-- | gdb/gdbserver/tdesc.c | 16 | ||||
-rw-r--r-- | gdb/gdbserver/tdesc.h | 5 |
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 */ |