From: Luis Machado <luis.machado@linaro.org>
To: gdb-patches@sourceware.org
Subject: [PATCH v6 21/25] Documentation for the new mtag commands
Date: Mon, 22 Mar 2021 10:21:15 -0300 [thread overview]
Message-ID: <20210322132120.1202230-22-luis.machado@linaro.org> (raw)
In-Reply-To: <20210322132120.1202230-1-luis.machado@linaro.org>
Updates on v6:
- Update tag fault example.
- Update documentation.
Updates on v4:
- Update the command names.
--
Document the new "memory-tag" command prefix and all of its subcommands.
gdb/doc/ChangeLog:
YYYY-MM-DD Luis Machado <luis.machado@linaro.org>
* gdb.texinfo (Memory Tagging): New subsection and node.
(AArch64 Memory Tagging Extension): New subsection.
---
gdb/doc/gdb.texinfo | 96 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 96 insertions(+)
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index e26ce4e9b6b..d976325e695 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -10864,6 +10864,66 @@ target supports computing the CRC checksum of a block of memory
(@pxref{qCRC packet}).
@end table
+@node Memory Tagging
+@subsection Memory Tagging
+
+Memory tagging is a memory protection technology that uses a pair of tags to
+validate memory accesses through pointers. The tags are integer values
+usually comprised of a few bits, depending on the architecture.
+
+There are two types of tags that are used in this setup: logical and
+allocation. A logical tag is stored in the pointers themselves, usually at the
+higher bits of the pointers. An allocation tag is the tag associated
+with particular ranges of memory in the physical address space, against which
+the logical tags from pointers are compared.
+
+The pointer tag (logical tag) must match the memory tag (allocation tag)
+for the memory access to be valid. If the logical tag does not match the
+allocation tag, that will raise a memory violation.
+
+Allocation tags cover multiple contiguous bytes of physical memory. This
+range of bytes is called a memory tag granule and is architecture-specific.
+For example, AArch64 has a tag granule of 16 bytes, meaning each allocation
+tag spans 16 bytes of memory.
+
+If the underlying architecture supports memory tagging, like AArch64 MTE
+or SPARC ADI do, @value{GDBN} can make use of it to validate pointers
+against memory allocation tags.
+
+A command prefix of @code{memory-tag} gives access to the various memory tagging
+commands.
+
+The @code{memory-tag} commands are the following:
+
+@table @code
+@kindex memory-tag print-logical-tag
+@item memory-tag print-logical-tag @var{pointer_expression}
+Print the logical tag stored in @var{pointer_expression}.
+@kindex memory-tag with-logical-tag
+@item memory-tag with-logical-tag @var{pointer_expression} @var{tag_bytes}
+Print the pointer given by @var{pointer_expression}, augmented with a logical
+tag of @var{tag_bytes}.
+@kindex memory-tag print-allocation-tag
+@item memory-tag print-allocation-tag @var{address_expression}
+Print the allocation tag associated with the memory address given by
+@var{address_expression}.
+@kindex memory-tag setatag
+@item memory-tag setatag @var{starting_address} @var{length} @var{tag_bytes}
+Set the allocation tag(s) for memory range @r{[}@var{starting_address},
+@var{starting_address} + @var{length}@r{)} to @var{tag_bytes}.
+@kindex memory-tag check
+@item memory-tag check @var{pointer_expression}
+Check if the logical tag in the pointer given by @var{pointer_expression}
+matches the allocation tag for the memory referenced by the pointer.
+
+This essentially emulates the hardware validation that is done when tagged
+memory is accessed through a pointer, but does not cause a memory fault as
+it would during hardware validation.
+
+It can be used to inspect potential memory tagging violations in the running
+process, before any faults get triggered.
+@end table
+
@node Auto Display
@section Automatic Display
@cindex automatic display
@@ -24993,6 +25053,42 @@ 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 @code{addr_flags} field.
+@subsubsection AArch64 Memory Tagging Extension.
+@cindex AArch64 Memory Tagging Extension.
+
+When @value{GDBN} 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, @value{GDBN} will make memory tagging functionality
+available for inspection and editing of logical and allocation tags.
+@xref{Memory Tagging}.
+
+To aid debugging, @value{GDBN} 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:
+
+@smallexample
+Program received signal SIGSEGV, Segmentation fault
+Memory tag violation while accessing address 0x0500fffff7ff8000
+Allocation tag 0x1
+Logical tag 0x5.
+@end smallexample
+
+If the tag violation is asynchronous, the fault address is not available.
+In this case @value{GDBN} will show the following:
+
+@smallexample
+Program received signal SIGSEGV, Segmentation fault
+Memory tag violation
+Fault address unavailable.
+@end smallexample
+
+A special register, @code{tag_ctl}, is made available through the
+@code{org.gnu.gdb.aarch64.mte} feature. This register exposes some
+options that can be controlled at runtime and emulates the @code{prctl}
+option @code{PR_SET_TAGGED_ADDR_CTRL}. For further information, see the
+documentation in the Linux kernel.
+
@node i386
@subsection x86 Architecture-specific Issues
--
2.25.1
next prev parent reply other threads:[~2021-03-22 13:22 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-22 13:20 [PATCH v6 00/25] Memory Tagging Support + AArch64 Linux implementation Luis Machado
2021-03-22 13:20 ` [PATCH v6 01/25] New target methods for memory tagging support Luis Machado
2021-03-23 21:22 ` Simon Marchi
2021-03-22 13:20 ` [PATCH v6 02/25] New gdbarch memory tagging hooks Luis Machado
2021-03-22 13:20 ` [PATCH v6 03/25] Add GDB-side remote target support for memory tagging Luis Machado
2021-03-22 13:20 ` [PATCH v6 04/25] Unit testing for GDB-side remote memory tagging handling Luis Machado
2021-03-22 13:20 ` [PATCH v6 05/25] GDBserver remote packet support for memory tagging Luis Machado
2021-03-22 13:21 ` [PATCH v6 06/25] Unit tests for gdbserver memory tagging remote packets Luis Machado
2021-03-22 13:21 ` [PATCH v6 07/25] Documentation for " Luis Machado
2021-03-22 17:47 ` Eli Zaretskii
2021-03-22 13:21 ` [PATCH v6 08/25] AArch64: Add MTE CPU feature check support Luis Machado
2021-03-22 13:21 ` [PATCH v6 09/25] AArch64: Add target description/feature for MTE registers Luis Machado
2021-03-22 13:21 ` [PATCH v6 10/25] AArch64: Add MTE register set support for GDB and gdbserver Luis Machado
2021-03-22 13:21 ` [PATCH v6 11/25] AArch64: Add MTE ptrace requests Luis Machado
2021-03-22 13:21 ` [PATCH v6 12/25] AArch64: Implement memory tagging target methods for AArch64 Luis Machado
2021-03-22 13:21 ` [PATCH v6 13/25] Convert char array to std::string in linux_find_memory_regions_full Luis Machado
2021-03-22 13:21 ` [PATCH v6 14/25] Refactor parsing of /proc/<pid>/smaps Luis Machado
2021-03-23 21:28 ` Simon Marchi
2021-03-22 13:21 ` [PATCH v6 15/25] AArch64: Implement the memory tagging gdbarch hooks Luis Machado
2021-03-23 21:32 ` Simon Marchi
2021-03-22 13:21 ` [PATCH v6 16/25] AArch64: Add unit testing for logical tag set/get operations Luis Machado
2022-01-31 14:34 ` Simon Marchi
2021-03-22 13:21 ` [PATCH v6 17/25] AArch64: Report tag violation error information Luis Machado
2021-03-22 13:21 ` [PATCH v6 18/25] AArch64: Add gdbserver MTE support Luis Machado
2021-03-22 13:21 ` [PATCH v6 19/25] AArch64: Add MTE register set support for core files Luis Machado
2021-03-22 13:21 ` [PATCH v6 20/25] New memory-tag commands Luis Machado
2021-03-22 13:21 ` Luis Machado [this message]
2021-03-22 17:49 ` [PATCH v6 21/25] Documentation for the new mtag commands Eli Zaretskii
2021-03-22 13:21 ` [PATCH v6 22/25] Extend "x" and "print" commands to support memory tagging Luis Machado
2021-03-22 13:21 ` [PATCH v6 23/25] Document new "x" and "print" memory tagging extensions Luis Machado
2021-03-22 17:51 ` Eli Zaretskii
2021-03-22 13:21 ` [PATCH v6 24/25] Add NEWS entry Luis Machado
2021-03-22 17:51 ` Eli Zaretskii
2021-03-22 17:52 ` Luis Machado
2021-03-22 13:21 ` [PATCH v6 25/25] Add memory tagging testcases Luis Machado
2021-03-23 22:50 ` [PATCH v6 00/25] Memory Tagging Support + AArch64 Linux implementation Simon Marchi
2021-03-24 18:18 ` Luis Machado
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210322132120.1202230-22-luis.machado@linaro.org \
--to=luis.machado@linaro.org \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).