AArch64 (Debugging with GDB)
When GDB is debugging the AArch64 architecture, it provides the following special commands:
set debug aarch64
This command determines whether AArch64 architecture-specific debugging messages are to be displayed.
show debug aarch64
Show whether AArch64 debugging messages are displayed.
22.214.171.124 AArch64 SVE.
When GDB is debugging the AArch64 architecture, if the Scalable Vector Extension (SVE) is present, then GDB will provide the vector registers
$z31, vector predicate registers
$p15, and the
$ffr register. In addition, the pseudo register
$vg will be provided. This is the vector granule for the current thread and represents the number of 64-bit chunks in an SVE
If the vector length changes, then the
$vg register will be updated, but the lengths of the
p registers will not change. This is a known limitation of GDB and does not affect the execution of the target process.
126.96.36.199 AArch64 Pointer Authentication.
When GDB is debugging the AArch64 architecture, and the program is using the v8.3-A feature Pointer Authentication (PAC), then whenever the link register
$lr is pointing to an PAC function its value will be masked. When GDB prints a backtrace, any addresses that required unmasking will be postfixed with the marker [PAC]. When using the MI, this is printed as part of the
188.8.131.52 AArch64 Memory Tagging Extension.
When GDB is debugging the AArch64 architecture, the program is using the v8.5-A feature Memory Tagging Extension (MTE) and there is support in the kernel for MTE, GDB will make memory tagging functionality available for inspection and editing of logical and allocation tags. See Memory Tagging.
To aid debugging, GDB will output additional information when SIGSEGV signals are generated as a result of memory tag failures.
If the tag violation is synchronous, the following will be shown:
Program received signal SIGSEGV, Segmentation fault Memory tag violation while accessing address 0x0500fffff7ff8000 Allocation tag 0x1 Logical tag 0x5.
If the tag violation is asynchronous, the fault address is not available. In this case GDB will show the following:
Program received signal SIGSEGV, Segmentation fault Memory tag violation Fault address unavailable.
A special register,
tag_ctl, is made available through the
org.gnu.gdb.aarch64.mte feature. This register exposes some options that can be controlled at runtime and emulates the
PR_SET_TAGGED_ADDR_CTRL. For further information, see the documentation in the Linux kernel.