Message ID | 20240404064819.2848899-2-gustavo.romero@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | Add another way to check tagged addresses on remote targets | expand |
On 4/4/24 07:48, Gustavo Romero wrote: > This commit removes aarch64_linux_tagged_address_p from > aarch64_linux_get_memtag. aarch64_linux_tagged_address_p checks if an > address is tagged (MTE) or not. > > The check is redundant because aarch64_linux_get_memtag is always called > from the upper layers (i.e. from printcmd.c via gdbarch hook > gdbarch_get_memtag) after either gdbarch_tagged_address_p (that already > points to aarch64_linux_tagged_address_p) has been called or > after should_validate_memtags (that calls gdbarch_tagged_address_p at > the end) has been called, so the address is already checked. Hence: > > a) in print_command_1, aarch64_linux_get_memtag (via gdbarch_get_memtag > hook) is called but only after should_validate_memtags, which calls > gdbarch_tagged_address_p; > > b) in do_examine, aarch64_linux_get_memtag is also called only after > gdbarch_tagged_address_p is directly called; > > c) in memory_tag_check_command, gdbarch_get_memtag is called -- tags > matching or not -- after the initial check via direct call to > gdbarch_tagged_address_p; > > d) in memory_tag_print_tag_command, address is checked directly via > gdbarch_tagged_address_p before gdbarch_get_memtag is called. > > Also, because after this change the address checking only happens at the > upper layer it now allows the address checking to be specialized easily > per target, via a target hook. > > Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org> > --- > gdb/aarch64-linux-tdep.c | 4 ---- > 1 file changed, 4 deletions(-) > > diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c > index 0b9784f38e4..50055ac3f48 100644 > --- a/gdb/aarch64-linux-tdep.c > +++ b/gdb/aarch64-linux-tdep.c > @@ -2575,10 +2575,6 @@ aarch64_linux_get_memtag (struct gdbarch *gdbarch, struct value *address, > tag = aarch64_mte_get_ltag (addr); > else > { > - /* Make sure we are dealing with a tagged address to begin with. */ > - if (!aarch64_linux_tagged_address_p (gdbarch, address)) > - return nullptr; > - > /* Remove the top byte. */ > addr = gdbarch_remove_non_address_bits (gdbarch, addr); > std::optional<CORE_ADDR> atag = aarch64_mte_get_atag (addr); Thanks. This is OK and can go in separately, or alongside the rest of the series if you wish. Approved-By: Luis Machado <luis.machado@arm.com> Tested-By: Luis Machado <luis.machado@arm.com>
diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c index 0b9784f38e4..50055ac3f48 100644 --- a/gdb/aarch64-linux-tdep.c +++ b/gdb/aarch64-linux-tdep.c @@ -2575,10 +2575,6 @@ aarch64_linux_get_memtag (struct gdbarch *gdbarch, struct value *address, tag = aarch64_mte_get_ltag (addr); else { - /* Make sure we are dealing with a tagged address to begin with. */ - if (!aarch64_linux_tagged_address_p (gdbarch, address)) - return nullptr; - /* Remove the top byte. */ addr = gdbarch_remove_non_address_bits (gdbarch, addr); std::optional<CORE_ADDR> atag = aarch64_mte_get_atag (addr);
This commit removes aarch64_linux_tagged_address_p from aarch64_linux_get_memtag. aarch64_linux_tagged_address_p checks if an address is tagged (MTE) or not. The check is redundant because aarch64_linux_get_memtag is always called from the upper layers (i.e. from printcmd.c via gdbarch hook gdbarch_get_memtag) after either gdbarch_tagged_address_p (that already points to aarch64_linux_tagged_address_p) has been called or after should_validate_memtags (that calls gdbarch_tagged_address_p at the end) has been called, so the address is already checked. Hence: a) in print_command_1, aarch64_linux_get_memtag (via gdbarch_get_memtag hook) is called but only after should_validate_memtags, which calls gdbarch_tagged_address_p; b) in do_examine, aarch64_linux_get_memtag is also called only after gdbarch_tagged_address_p is directly called; c) in memory_tag_check_command, gdbarch_get_memtag is called -- tags matching or not -- after the initial check via direct call to gdbarch_tagged_address_p; d) in memory_tag_print_tag_command, address is checked directly via gdbarch_tagged_address_p before gdbarch_get_memtag is called. Also, because after this change the address checking only happens at the upper layer it now allows the address checking to be specialized easily per target, via a target hook. Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org> --- gdb/aarch64-linux-tdep.c | 4 ---- 1 file changed, 4 deletions(-)