summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuis Machado <luis.machado@linaro.org>2020-06-15 15:11:07 -0300
committerLuis Machado <luis.machado@linaro.org>2021-03-24 14:55:41 -0300
commitb4a7d4fcfef4e0ca3c5de52efbaf33c1c98295eb (patch)
tree5387506bf4d04979aa0230016b4190b8de066e77
parentc7782e50b13b4ca522dd6da2c7c22760c9603e6a (diff)
downloadbinutils-gdb-b4a7d4fcfef4e0ca3c5de52efbaf33c1c98295eb.tar.gz
AArch64: Add unit testing for logical tag set/get operations
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.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/aarch64-linux-tdep.c31
2 files changed, 37 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 03cbd5cf0e1..ce3373ba9d0 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@
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.
(aarch64_mte_get_atag, aarch64_linux_tagged_address_p)
(aarch64_linux_memtag_mismatch_p, aarch64_linux_set_memtags)
diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c
index d573f06436a..e71f062e25d 100644
--- a/gdb/aarch64-linux-tdep.c
+++ b/gdb/aarch64-linux-tdep.c
@@ -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
}