aboutsummaryrefslogtreecommitdiff
path: root/gdb/aarch64-tdep.c
diff options
context:
space:
mode:
authorOmair Javaid <omair.javaid@linaro.org>2018-05-01 06:31:32 +0500
committerOmair Javaid <omair.javaid@linaro.org>2018-05-10 14:37:31 +0500
commit8727de56b0dbe25b7b4a3bd04f72ac41992463ed (patch)
treeb2c62903a7dbc31487f3bf4339524cce56ddb27f /gdb/aarch64-tdep.c
parenta45a8f9178448171b51d9fc80d45ede73e99e399 (diff)
downloadgdb-8727de56b0dbe25b7b4a3bd04f72ac41992463ed.zip
gdb-8727de56b0dbe25b7b4a3bd04f72ac41992463ed.tar.gz
gdb-8727de56b0dbe25b7b4a3bd04f72ac41992463ed.tar.bz2
Fix tagged pointer support
This patch fixes tagged pointer support for AArch64 GDB. Linux kernel debugging failure was reported after tagged pointer support was committed. After a discussion around best path forward to manage tagged pointers on GDB side we are going to disable tagged pointers support for aarch64-none-elf-gdb because for non-linux applications we cant be sure if tagged pointers will be used by MMU or not. Also for aarch64-linux-gdb we are going to sign extend user-space address after clearing tag bits. This will help debug both kernel and user-space addresses based on information from linux kernel documentation given below: According to AArch64 memory map: https://www.kernel.org/doc/Documentation/arm64/memory.txt "User addresses have bits 63:48 set to 0 while the kernel addresses have the same bits set to 1." According to AArch64 tagged pointers document: https://www.kernel.org/doc/Documentation/arm64/tagged-pointers.txt The kernel configures the translation tables so that translations made via TTBR0 (i.e. userspace mappings) have the top byte (bits 63:56) of the virtual address ignored by the translation hardware. This frees up this byte for application use. Running gdb testsuite after applying this patch introduces no regressions and tagged pointer test cases still pass. gdb/ChangeLog: 2018-05-10 Omair Javaid <omair.javaid@linaro.org> PR gdb/23127 * aarch64-linux-tdep.c (aarch64_linux_init_abi): Add call to set_gdbarch_significant_addr_bit. * aarch64-tdep.c (aarch64_gdbarch_init): Remove call to set_gdbarch_significant_addr_bit. * utils.c (address_significant): Update to sign extend addr.
Diffstat (limited to 'gdb/aarch64-tdep.c')
-rw-r--r--gdb/aarch64-tdep.c5
1 files changed, 0 insertions, 5 deletions
diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c
index 01566b4..3c1f389 100644
--- a/gdb/aarch64-tdep.c
+++ b/gdb/aarch64-tdep.c
@@ -2972,11 +2972,6 @@ aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
set_tdesc_pseudo_register_reggroup_p (gdbarch,
aarch64_pseudo_register_reggroup_p);
- /* The top byte of an address is known as the "tag" and is
- ignored by the kernel, the hardware, etc. and can be regarded
- as additional data associated with the address. */
- set_gdbarch_significant_addr_bit (gdbarch, 56);
-
/* ABI */
set_gdbarch_short_bit (gdbarch, 16);
set_gdbarch_int_bit (gdbarch, 32);