From: Luis Machado via Gdb-patches <gdb-patches@sourceware.org>
To: gdb-patches@sourceware.org
Cc: david.spickett@linaro.org
Subject: [PATCH v2 16/24] AArch64: Report tag violation error information
Date: Thu, 22 Oct 2020 17:00:06 -0300 [thread overview]
Message-ID: <20201022200014.5189-17-luis.machado@linaro.org> (raw)
In-Reply-To: <20201022200014.5189-1-luis.machado@linaro.org>
Whenever a memory tag violation occurs, we get a SIGSEGV. Additional
information can be obtained through the siginfo data structure.
For AArch64 the Linux kernel may expose the fault address and tag
information, if we have a synchronous event. Otherwise there is
no fault address available.
gdb/ChangeLog:
YYYY-MM-DD Luis Machado <luis.machado@linaro.org>
* aarch64-linux-tdep.c
(aarch64_linux_report_signal_info): New function.
(aarch64_linux_init_abi): Register
aarch64_linux_report_signal_info as the report_signal_info hook.
* arch/aarch64-linux.h (SEGV_MTEAERR): Define.
(SEGV_MTESERR): Define.
---
gdb/aarch64-linux-tdep.c | 64 ++++++++++++++++++++++++++++++++++++
gdb/arch/aarch64-mte-linux.h | 6 ++++
2 files changed, 70 insertions(+)
diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c
index 7ae41fc098..0084717c0e 100644
--- a/gdb/aarch64-linux-tdep.c
+++ b/gdb/aarch64-linux-tdep.c
@@ -1626,6 +1626,67 @@ aarch64_linux_memtag_to_string (struct gdbarch *gdbarch,
return string_printf ("0x%s", phex_nz (tag, sizeof (tag)));
}
+/* AArch64 Linux implementation of the report_signal_info gdbarch
+ hook. Displays information about possible memory tag violations. */
+
+static void
+aarch64_linux_report_signal_info (struct gdbarch *gdbarch,
+ struct ui_out *uiout,
+ enum gdb_signal siggnal)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+
+ if (!tdep->has_mte () || siggnal != GDB_SIGNAL_SEGV)
+ return;
+
+ CORE_ADDR fault_addr = 0;
+ long si_code = 0;
+
+ try
+ {
+ /* Sigcode tells us if the segfault is actually a memory tag
+ violation. */
+ si_code = parse_and_eval_long ("$_siginfo.si_code\n");
+
+ fault_addr
+ = parse_and_eval_long ("$_siginfo._sifields._sigfault.si_addr");
+ }
+ catch (const gdb_exception &exception)
+ {
+ return;
+ }
+
+ /* If this is not a memory tag violation, just return. */
+ if (si_code != SEGV_MTEAERR && si_code != SEGV_MTESERR)
+ return;
+
+ uiout->text ("\n");
+
+ uiout->field_string ("sigcode-meaning", _("Memory tag violation"));
+
+ /* For synchronous faults, show additional information. */
+ if (si_code == SEGV_MTESERR)
+ {
+ uiout->text (_(" while accessing address "));
+ uiout->field_core_addr ("fault-addr", gdbarch, fault_addr);
+ uiout->text ("\n");
+
+ CORE_ADDR atag;
+ if (aarch64_linux_get_atag (fault_addr, &atag) != 0)
+ uiout->text (_("Allocation tag unavailable"));
+ else
+ {
+ uiout->text (_("Allocation tag "));
+ uiout->field_core_addr ("allocation-tag", gdbarch, atag);
+ }
+ }
+ else
+ {
+ uiout->text ("\n");
+ uiout->text (_("Fault address unavailable"));
+ }
+}
+
static void
aarch64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
{
@@ -1706,6 +1767,9 @@ aarch64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
/* Register a hook for converting a memory tag to a string. */
set_gdbarch_memtag_to_string (gdbarch, aarch64_linux_memtag_to_string);
+
+ set_gdbarch_report_signal_info (gdbarch,
+ aarch64_linux_report_signal_info);
}
/* Initialize the aarch64_linux_record_tdep. */
diff --git a/gdb/arch/aarch64-mte-linux.h b/gdb/arch/aarch64-mte-linux.h
index 5c5783f28b..a5a980ed49 100644
--- a/gdb/arch/aarch64-mte-linux.h
+++ b/gdb/arch/aarch64-mte-linux.h
@@ -35,6 +35,12 @@
#define MTE_LOGICAL_TAG_START_BIT 56
#define MTE_LOGICAL_MAX_VALUE 0xf
+/* Memory tagging definitions. */
+#ifndef SEGV_MTEAERR
+# define SEGV_MTEAERR 8
+# define SEGV_MTESERR 9
+#endif
+
/* Return the number of tag granules in the memory range
[ADDR, ADDR + LEN) given GRANULE_SIZE. */
extern size_t get_tag_granules (CORE_ADDR addr, size_t len,
--
2.17.1
next prev parent reply other threads:[~2020-10-22 20:01 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-22 19:59 [PATCH v2 00/24] Memory Tagging Support + AArch64 Linux implementation Luis Machado via Gdb-patches
2020-10-22 19:59 ` [PATCH v2 01/24] New target methods for memory tagging support Luis Machado via Gdb-patches
2020-10-27 13:22 ` Simon Marchi
2020-10-27 13:43 ` Luis Machado via Gdb-patches
2020-10-27 13:50 ` Simon Marchi
2020-10-22 19:59 ` [PATCH v2 02/24] New gdbarch memory tagging hooks Luis Machado via Gdb-patches
2020-10-22 19:59 ` [PATCH v2 03/24] Add GDB-side remote target support for memory tagging Luis Machado via Gdb-patches
2020-10-29 14:22 ` Alan Hayward via Gdb-patches
2020-10-29 14:41 ` Luis Machado via Gdb-patches
2020-10-22 19:59 ` [PATCH v2 04/24] Unit testing for GDB-side remote memory tagging handling Luis Machado via Gdb-patches
2020-10-22 19:59 ` [PATCH v2 05/24] GDBserver remote packet support for memory tagging Luis Machado via Gdb-patches
2020-10-22 19:59 ` [PATCH v2 06/24] Unit tests for gdbserver memory tagging remote packets Luis Machado via Gdb-patches
2020-10-22 19:59 ` [PATCH v2 07/24] Documentation for " Luis Machado via Gdb-patches
2020-10-23 6:25 ` Eli Zaretskii via Gdb-patches
2020-10-23 14:07 ` Luis Machado via Gdb-patches
2020-10-23 14:33 ` Eli Zaretskii via Gdb-patches
2020-10-23 14:39 ` Luis Machado via Gdb-patches
2020-10-22 19:59 ` [PATCH v2 08/24] AArch64: Add MTE CPU feature check support Luis Machado via Gdb-patches
2020-10-22 19:59 ` [PATCH v2 09/24] AArch64: Add target description/feature for MTE registers Luis Machado via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 10/24] AArch64: Add MTE register set support for GDB and gdbserver Luis Machado via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 11/24] AArch64: Add MTE ptrace requests Luis Machado via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 12/24] AArch64: Implement memory tagging target methods for AArch64 Luis Machado via Gdb-patches
2020-10-29 14:21 ` Alan Hayward via Gdb-patches
2020-10-29 14:39 ` Luis Machado via Gdb-patches
2020-10-29 14:45 ` Luis Machado via Gdb-patches
2020-10-29 17:32 ` Alan Hayward via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 13/24] Refactor parsing of /proc/<pid>/smaps Luis Machado via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 14/24] AArch64: Implement the memory tagging gdbarch hooks Luis Machado via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 15/24] AArch64: Add unit testing for logical tag set/get operations Luis Machado via Gdb-patches
2020-10-22 20:00 ` Luis Machado via Gdb-patches [this message]
2020-10-22 20:00 ` [PATCH v2 17/24] AArch64: Add gdbserver MTE support Luis Machado via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 18/24] AArch64: Add MTE register set support for core files Luis Machado via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 19/24] New mtag commands Luis Machado via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 20/24] Documentation for the new " Luis Machado via Gdb-patches
2020-10-23 6:35 ` Eli Zaretskii via Gdb-patches
2020-10-23 14:33 ` Luis Machado via Gdb-patches
2020-10-23 17:52 ` Eli Zaretskii via Gdb-patches
2020-10-23 19:04 ` Luis Machado via Gdb-patches
2020-10-23 19:34 ` Eli Zaretskii via Gdb-patches
2020-10-26 14:59 ` Luis Machado via Gdb-patches
2020-10-26 15:35 ` Eli Zaretskii via Gdb-patches
2020-10-26 16:57 ` Luis Machado via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 21/24] Extend "x" and "print" commands to support memory tagging Luis Machado via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 22/24] Document new "x" and "print" memory tagging extensions Luis Machado via Gdb-patches
2020-10-23 6:37 ` Eli Zaretskii via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 23/24] Add NEWS entry Luis Machado via Gdb-patches
2020-10-23 6:38 ` Eli Zaretskii via Gdb-patches
2020-10-22 20:00 ` [PATCH v2 24/24] Add memory tagging testcases Luis Machado via Gdb-patches
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=20201022200014.5189-17-luis.machado@linaro.org \
--to=gdb-patches@sourceware.org \
--cc=david.spickett@linaro.org \
--cc=luis.machado@linaro.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