From: Luis Machado Date: Thu, 29 Apr 2021 18:10:06 +0000 (-0300) Subject: [AArch64] Fix off-by-one when calculating tag granules. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0746f49b1dd44ce17b21468b9f8d9715e116a991;p=binutils-gdb.git [AArch64] Fix off-by-one when calculating tag granules. 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 * arch/aarch64-mte-linux.c (aarch64_mte_get_tag_granules): Don't include the last address in the range. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index fe75cee4b5e..d41183682c9 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2021-05-13 Luis Machado + + * arch/aarch64-mte-linux.c (aarch64_mte_get_tag_granules): Don't + include the last address in the range. + 2021-05-12 Simon Marchi * python/python-internal.h (gdbpy_parse_command_name): Return diff --git a/gdb/arch/aarch64-mte-linux.c b/gdb/arch/aarch64-mte-linux.c index 959c0247ed5..7c2ae9a7058 100644 --- a/gdb/arch/aarch64-mte-linux.c +++ b/gdb/arch/aarch64-mte-linux.c @@ -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; }