Fix creation of stamp-h by gdb's configure script
[deliverable/binutils-gdb.git] / gdb / gdbserver / linux-aarch64-tdesc.c
index f433038351ec3d0ed06d210fdda8145b9f990008..6f9b4f1efc634271c4fe27e6d3872aa6bf559ddb 100644 (file)
@@ -1,6 +1,6 @@
 /* GNU/Linux/aarch64 specific target description, for the remote server
    for GDB.
-   Copyright (C) 2017-2018 Free Software Foundation, Inc.
+   Copyright (C) 2017-2019 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
 #include "tdesc.h"
 #include "arch/aarch64.h"
 #include "linux-aarch32-low.h"
+#include <inttypes.h>
+
+/* All possible aarch64 target descriptors.  */
+struct target_desc *tdesc_aarch64_list[AARCH64_MAX_SVE_VQ + 1][2/*pauth*/];
 
 /* Create the aarch64 target description.  */
 
 const target_desc *
-aarch64_linux_read_description ()
+aarch64_linux_read_description (uint64_t vq, bool pauth_p)
 {
-  static target_desc *aarch64_tdesc = NULL;
-  target_desc **tdesc = &aarch64_tdesc;
+  if (vq > AARCH64_MAX_SVE_VQ)
+    error (_("VQ is %" PRIu64 ", maximum supported value is %d"), vq,
+          AARCH64_MAX_SVE_VQ);
+
+  struct target_desc *tdesc = tdesc_aarch64_list[vq][pauth_p];
 
-  if (*tdesc == NULL)
+  if (tdesc == NULL)
     {
-      *tdesc = aarch64_create_target_description ();
+      tdesc = aarch64_create_target_description (vq, pauth_p);
 
       static const char *expedite_regs_aarch64[] = { "x29", "sp", "pc", NULL };
-      init_target_desc (*tdesc, expedite_regs_aarch64);
+      static const char *expedite_regs_aarch64_sve[] = { "x29", "sp", "pc",
+                                                        "vg", NULL };
+
+      if (vq == 0)
+       init_target_desc (tdesc, expedite_regs_aarch64);
+      else
+       init_target_desc (tdesc, expedite_regs_aarch64_sve);
+
+      tdesc_aarch64_list[vq][pauth_p] = tdesc;
     }
 
-  return *tdesc;
+  return tdesc;
 }
This page took 0.024128 seconds and 4 git commands to generate.