AArch64: Add unit testing for logical tag set/get operations
authorLuis Machado <luis.machado@linaro.org>
Mon, 15 Jun 2020 18:11:07 +0000 (15:11 -0300)
committerLuis Machado <luis.machado@linaro.org>
Wed, 24 Mar 2021 17:55:41 +0000 (14:55 -0300)
Add some unit testing to exercise setting/getting logical tags in the
AArch64 implementation.

gdb/ChangeLog:

2021-03-24  Luis Machado  <luis.machado@linaro.org>

* aarch64-linux-tdep.c: Include gdbsupport/selftest.h.
(aarch64_linux_ltag_tests): New function.
(_initialize_aarch64_linux_tdep): Register aarch64_linux_ltag_tests.

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

index 03cbd5cf0e161f98ed72afc65b603eefdfd16825..ce3373ba9d0d5476a34d97e9c596d8733f8a8112 100644 (file)
@@ -1,3 +1,9 @@
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
+
+       * aarch64-linux-tdep.c: Include gdbsupport/selftest.h.
+       (aarch64_linux_ltag_tests): New function.
+       (_initialize_aarch64_linux_tdep): Register aarch64_linux_ltag_tests.
+
 2021-03-24  Luis Machado  <luis.machado@linaro.org>
 
        * aarch64-linux-tdep.c: Include target.h, arch-utils.h, value.h.
index d573f06436a6c53f7f9d5b2208dcfde1b418b47b..e71f062e25d58ee810945c46448e0619d75f91e9 100644 (file)
@@ -51,6 +51,8 @@
 #include "arch-utils.h"
 #include "value.h"
 
+#include "gdbsupport/selftest.h"
+
 /* Signal frame handling.
 
       +------------+  ^
@@ -1940,10 +1942,39 @@ aarch64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
   set_gdbarch_gcc_target_options (gdbarch, aarch64_linux_gcc_target_options);
 }
 
+#if GDB_SELF_TEST
+
+namespace selftests {
+
+/* Verify functions to read and write logical tags.  */
+
+static void
+aarch64_linux_ltag_tests (void)
+{
+  /* We have 4 bits of tags, but we test writing all the bits of the top
+     byte of address.  */
+  for (int i = 0; i < 1 << 8; i++)
+    {
+      CORE_ADDR addr = ((CORE_ADDR) i << 56) | 0xdeadbeef;
+      SELF_CHECK (aarch64_mte_get_ltag (addr) == (i & 0xf));
+
+      addr = aarch64_mte_set_ltag (0xdeadbeef, i);
+      SELF_CHECK (addr = ((CORE_ADDR) (i & 0xf) << 56) | 0xdeadbeef);
+    }
+}
+
+} // namespace selftests
+#endif /* GDB_SELF_TEST */
+
 void _initialize_aarch64_linux_tdep ();
 void
 _initialize_aarch64_linux_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_aarch64, 0, GDB_OSABI_LINUX,
                          aarch64_linux_init_abi);
+
+#if GDB_SELF_TEST
+  selftests::register_test ("aarch64-linux-tagged-address",
+                           selftests::aarch64_linux_ltag_tests);
+#endif
 }