[AArch64] Fix off-by-one when calculating tag granules.
authorLuis Machado <luis.machado@linaro.org>
Thu, 29 Apr 2021 18:10:06 +0000 (15:10 -0300)
committerLuis Machado <luis.machado@linaro.org>
Thu, 13 May 2021 13:15:26 +0000 (10:15 -0300)
When we want to fetch tags from a memory range, the last address in that
range is not included.

There is a off-by-one error in aarch64_mte_get_tag_granules, which this
patch fixes.

gdb/ChangeLog:

2021-05-13  Luis Machado  <luis.machado@linaro.org>

* arch/aarch64-mte-linux.c (aarch64_mte_get_tag_granules): Don't
include the last address in the range.

gdb/ChangeLog
gdb/arch/aarch64-mte-linux.c

index fe75cee4b5e745117fd6f7c75e0fc43c54bd210e..d41183682c9eecd252f0d323993fda94c78c968d 100644 (file)
@@ -1,3 +1,8 @@
+2021-05-13  Luis Machado  <luis.machado@linaro.org>
+
+       * arch/aarch64-mte-linux.c (aarch64_mte_get_tag_granules): Don't
+       include the last address in the range.
+
 2021-05-12  Simon Marchi  <simon.marchi@polymtl.ca>
 
        * python/python-internal.h (gdbpy_parse_command_name): Return
index 959c0247ed5dbc7a61ce630fa35f9d5d769f2d80..7c2ae9a7058e70e7f11f793752dc72d21ff9d258 100644 (file)
@@ -31,9 +31,10 @@ aarch64_mte_get_tag_granules (CORE_ADDR addr, size_t len, size_t granule_size)
   /* Start address */
   CORE_ADDR s_addr = align_down (addr, granule_size);
   /* End address */
-  CORE_ADDR e_addr = align_down (addr + len, granule_size);
+  CORE_ADDR e_addr = align_down (addr + len - 1, granule_size);
 
-  /* We always have at least 1 granule.  */
+  /* We always have at least 1 granule because len is non-zero at this
+     point.  */
   return 1 + (e_addr - s_addr) / granule_size;
 }