diff options
author | Luis Machado <luis.machado@linaro.org> | 2020-06-15 15:11:07 -0300 |
---|---|---|
committer | Luis Machado <luis.machado@linaro.org> | 2021-03-24 14:55:41 -0300 |
commit | b4a7d4fcfef4e0ca3c5de52efbaf33c1c98295eb (patch) | |
tree | 5387506bf4d04979aa0230016b4190b8de066e77 /gdb | |
parent | c7782e50b13b4ca522dd6da2c7c22760c9603e6a (diff) | |
download | binutils-b4a7d4fcfef4e0ca3c5de52efbaf33c1c98295eb.zip binutils-b4a7d4fcfef4e0ca3c5de52efbaf33c1c98295eb.tar.gz binutils-b4a7d4fcfef4e0ca3c5de52efbaf33c1c98295eb.tar.bz2 |
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.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/aarch64-linux-tdep.c | 31 |
2 files changed, 37 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 03cbd5c..ce3373b 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 d573f06..e71f062 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 } |