]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Make capability maintenance command available to cross GDB
authorLuis Machado <luis.machado@linaro.org>
Mon, 14 Jun 2021 17:32:26 +0000 (14:32 -0300)
committerLuis Machado <luis.machado@linaro.org>
Thu, 24 Jun 2021 13:40:23 +0000 (10:40 -0300)
The capability maintenance commands were originally only available to
native Morello GDB builds.  Make those commands available to cross Morello
GDB builds as well, since they are useful.

gdb/ChangeLog:

2021-06-24  Luis Machado  <luis.machado@arm.com>

* aarch64-linux-nat.c (maint_print_cap_from_addr_cmd)
(maint_set_capability_in_memory_cmd): Move functions to...
* aarch64-linux-tdep.c: ... here.

gdb/ChangeLog
gdb/aarch64-linux-nat.c
gdb/aarch64-linux-tdep.c

index 83fc588805316a769bb40a3f04c4007f5731e123..c65189810fa04a9cc6c09017df9a4b290d6d9c70 100644 (file)
@@ -1,3 +1,9 @@
+2021-06-24  Luis Machado  <luis.machado@arm.com>
+
+       * aarch64-linux-nat.c (maint_print_cap_from_addr_cmd)
+       (maint_set_capability_in_memory_cmd): Move functions to...
+       * aarch64-linux-tdep.c: ... here.
+
 2021-06-24  Luis Machado  <luis.machado@arm.com>
 
        * aarch64-linux-nat.c (store_cregs_to_thread)
index 70263da9259dcd90cf7f67c094cd3d507da2ffa1..5e0e599c735399eea4db6ee9ad896e22b270f6f5 100644 (file)
@@ -1130,57 +1130,6 @@ aarch64_linux_nat_target::write_capability (CORE_ADDR addr,
   return true;
 }
 
-/* Implement the maintenance print capability tag command.  */
-
-static void
-maint_print_cap_from_addr_cmd (const char *args, int from_tty)
-{
-  gdb::byte_vector cap;
-  CORE_ADDR addr = parse_and_eval_address (args);
-  cap = target_read_capability (addr);
-
-  for (auto it : cap)
-    fprintf_unfiltered (gdb_stdlog, "%02x ", it);
-
-  fputs_unfiltered ("\n", gdb_stdlog);
-}
-
-/* Implement the maintenance set capability in memory command.  */
-
-static void
-maint_set_capability_in_memory_cmd (const char *args, int from_tty)
-{
-  std::string addr_str, tag_str, upper_str, lower_str;
-  const char *args_ptr = args;
-
-  addr_str = extract_string_maybe_quoted (&args_ptr);
-  tag_str = extract_string_maybe_quoted (&args_ptr);
-  upper_str = extract_string_maybe_quoted (&args_ptr);
-  lower_str = extract_string_maybe_quoted (&args_ptr);
-
-  CORE_ADDR addr = parse_and_eval_address (addr_str.c_str ());
-  CORE_ADDR tag_part = parse_and_eval_address (tag_str.c_str ());
-  CORE_ADDR half_a = parse_and_eval_address (upper_str.c_str ());
-  CORE_ADDR half_b = parse_and_eval_address (lower_str.c_str ());
-
-  unsigned __int128 a, b;
-
-  a = half_a;
-  b = half_b;
-
-  a = (a << 64) | b;
-  bool tag = (tag_part != 0)? true : false;
-
-  gdb::byte_vector cap;
-
-  cap.resize (17);
-  memcpy (cap.data (), &tag, 1);
-  memcpy (cap.data () + 1, &a, 16);
-
-  if (!target_write_capability (addr, {cap.data (), cap.size ()}))
-    perror_with_name (_("Failed to set capability in memory."));
-}
-
 /* Define AArch64 maintenance commands.  */
 
 static void
@@ -1200,14 +1149,6 @@ triggers a breakpoint or watchpoint."),
                           NULL,
                           &maintenance_set_cmdlist,
                           &maintenance_show_cmdlist);
-
-  add_cmd ("cap_from_addr", class_maintenance, maint_print_cap_from_addr_cmd, _("\
-Print the capability from addr."),
-                &maintenanceprintlist);
-
-  add_cmd ("cap_in_memory", class_maintenance,
-          maint_set_capability_in_memory_cmd,
-          _("Print the capability from addr."), &maintenancelist);
 }
 
 void _initialize_aarch64_linux_nat ();
index 115640090236a3f31e26f4b7f897f90d862a835f..bada46f844245a2d8d4048ad3089a9c481b0773b 100644 (file)
@@ -20,6 +20,7 @@
 
 #include "defs.h"
 
+#include "gdbcmd.h"
 #include "gdbarch.h"
 #include "glibc-tdep.h"
 #include "linux-tdep.h"
@@ -1765,6 +1766,57 @@ aarch64_linux_decode_memtag_note (struct gdbarch *gdbarch,
   return tag;
 }
 
+/* Implement the maintenance print capability tag command.  */
+
+static void
+maint_print_cap_from_addr_cmd (const char *args, int from_tty)
+{
+  gdb::byte_vector cap;
+  CORE_ADDR addr = parse_and_eval_address (args);
+  cap = target_read_capability (addr);
+
+  for (auto it : cap)
+    fprintf_unfiltered (gdb_stdlog, "%02x ", it);
+
+  fputs_unfiltered ("\n", gdb_stdlog);
+}
+
+/* Implement the maintenance set capability in memory command.  */
+
+static void
+maint_set_capability_in_memory_cmd (const char *args, int from_tty)
+{
+  std::string addr_str, tag_str, upper_str, lower_str;
+  const char *args_ptr = args;
+
+  addr_str = extract_string_maybe_quoted (&args_ptr);
+  tag_str = extract_string_maybe_quoted (&args_ptr);
+  upper_str = extract_string_maybe_quoted (&args_ptr);
+  lower_str = extract_string_maybe_quoted (&args_ptr);
+
+  CORE_ADDR addr = parse_and_eval_address (addr_str.c_str ());
+  CORE_ADDR tag_part = parse_and_eval_address (tag_str.c_str ());
+  CORE_ADDR half_a = parse_and_eval_address (upper_str.c_str ());
+  CORE_ADDR half_b = parse_and_eval_address (lower_str.c_str ());
+
+  unsigned __int128 a, b;
+
+  a = half_a;
+  b = half_b;
+
+  a = (a << 64) | b;
+  bool tag = (tag_part != 0)? true : false;
+
+  gdb::byte_vector cap;
+
+  cap.resize (17);
+  memcpy (cap.data (), &tag, 1);
+  memcpy (cap.data () + 1, &a, 16);
+
+  if (!target_write_capability (addr, {cap.data (), cap.size ()}))
+    perror_with_name (_("Failed to set capability in memory."));
+}
+
 static void
 aarch64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
@@ -2024,6 +2076,13 @@ aarch64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
       /* Core file helper to decode a memory tag note.  */
       set_gdbarch_decode_memtag_note (gdbarch,
                                      aarch64_linux_decode_memtag_note);
+
+      add_cmd ("cap_from_addr", class_maintenance, maint_print_cap_from_addr_cmd,
+              _("Print the capability from addr."), &maintenanceprintlist);
+
+      add_cmd ("cap_in_memory", class_maintenance,
+              maint_set_capability_in_memory_cmd,
+              _("Print the capability from addr."), &maintenancelist);
     }
   else
     {