refactor: Adjust expedited registers dynamically
authorLuis Machado <luis.machado@arm.com>
Thu, 9 Feb 2023 10:55:26 +0000 (10:55 +0000)
committerLuis Machado <luis.machado@arm.com>
Wed, 4 Oct 2023 15:23:40 +0000 (16:23 +0100)
Instead of using static arrays, build the list of expedited registers
dynamically using a std::vector.

This refactor shouldn't cause any user-visible changes.

Regression-tested for aarch64-linux Ubuntu 22.04/20.04.

Reviewed-by: Thiago Jung Bauermann <thiago.bauermann@linaro.org>
gdbserver/linux-aarch64-tdesc.cc

index 633134955e54c1c43562741246337d2418c4a399..3c60e1a4db0440bb4ac232d86f974d927a89122b 100644 (file)
@@ -30,6 +30,8 @@
 /* All possible aarch64 target descriptors.  */
 static std::unordered_map<aarch64_features, target_desc *> tdesc_aarch64_map;
 
+static std::vector<const char *> expedited_registers;
+
 /* Create the aarch64 target description.  */
 
 const target_desc *
@@ -44,15 +46,20 @@ aarch64_linux_read_description (const aarch64_features &features)
   if (tdesc == NULL)
     {
       tdesc = aarch64_create_target_description (features);
+      expedited_registers.clear ();
+
+      /* Configure the expedited registers.  By default we include x29, sp and
+        pc.  */
+      expedited_registers.push_back ("x29");
+      expedited_registers.push_back ("sp");
+      expedited_registers.push_back ("pc");
+
+      if (features.vq > 0)
+       expedited_registers.push_back ("vg");
 
-      static const char *expedite_regs_aarch64[] = { "x29", "sp", "pc", NULL };
-      static const char *expedite_regs_aarch64_sve[] = { "x29", "sp", "pc",
-                                                        "vg", NULL };
+      expedited_registers.push_back (nullptr);
 
-      if (features.vq == 0)
-       init_target_desc (tdesc, expedite_regs_aarch64);
-      else
-       init_target_desc (tdesc, expedite_regs_aarch64_sve);
+      init_target_desc (tdesc, (const char **) expedited_registers.data ());
 
       tdesc_aarch64_map[features] = tdesc;
     }