Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: David Spickett via Gdb-patches <gdb-patches@sourceware.org>
To: Luis Machado <luis.machado@linaro.org>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH v3 16/24] AArch64: Report tag violation error information
Date: Mon, 16 Nov 2020 15:43:57 +0000	[thread overview]
Message-ID: <CACBW-2LY9b6ToNkXTgDeva=nsyW+cmnNDEq3xmk8Y8UvdXhCiw@mail.gmail.com> (raw)
In-Reply-To: <20201109170435.15766-17-luis.machado@linaro.org>

> +aarch64_linux_report_signal_info (struct gdbarch *gdbarch,
> +                                 struct ui_out *uiout,
> +                                 enum gdb_signal siggnal)

siggnal -> signal

Also a nit about the formatting.

Copying from 20/24 of v3:
> +Memory tag violation while accessing address 0x0000fffff7ff8000
> +Allocation tag 0x0000000000000001.

(I'm guessing the code to print the "Allocation tag" line lives here
in some part)

Would it make more sense to either not align the tag value to
anything, or to align it to the size of the architecture's tag? Which
would be 4 bits in this case so the same either way.

On Mon, 9 Nov 2020 at 17:05, Luis Machado <luis.machado@linaro.org> wrote:
>
> 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 39b1790263..70e180e1cb 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
>

  reply	other threads:[~2020-11-16 15:44 UTC|newest]

Thread overview: 96+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-09 17:04 [PATCH v3 00/24] Memory Tagging Support + AArch64 Linux implementation Luis Machado via Gdb-patches
2020-11-09 17:04 ` [PATCH v3 01/24] New target methods for memory tagging support Luis Machado via Gdb-patches
2020-12-25  4:26   ` Simon Marchi via Gdb-patches
2020-12-28 15:05     ` Luis Machado via Gdb-patches
2020-12-25  5:08   ` Simon Marchi via Gdb-patches
2020-11-09 17:04 ` [PATCH v3 02/24] New gdbarch memory tagging hooks Luis Machado via Gdb-patches
2020-12-25  4:40   ` Simon Marchi via Gdb-patches
2020-12-28 15:44     ` Luis Machado via Gdb-patches
2020-11-09 17:04 ` [PATCH v3 03/24] Add GDB-side remote target support for memory tagging Luis Machado via Gdb-patches
2020-12-25  5:08   ` Simon Marchi via Gdb-patches
2020-12-28 16:28     ` Luis Machado via Gdb-patches
2020-11-09 17:04 ` [PATCH v3 04/24] Unit testing for GDB-side remote memory tagging handling Luis Machado via Gdb-patches
2020-12-25  5:34   ` Simon Marchi via Gdb-patches
2020-12-28 17:17     ` Luis Machado via Gdb-patches
2020-11-09 17:04 ` [PATCH v3 05/24] GDBserver remote packet support for memory tagging Luis Machado via Gdb-patches
2020-12-25  5:50   ` Simon Marchi via Gdb-patches
2020-12-28 17:46     ` Luis Machado via Gdb-patches
2020-11-09 17:04 ` [PATCH v3 06/24] Unit tests for gdbserver memory tagging remote packets Luis Machado via Gdb-patches
2020-12-25 20:13   ` Simon Marchi via Gdb-patches
2020-12-28 18:12     ` Luis Machado via Gdb-patches
2020-11-09 17:04 ` [PATCH v3 07/24] Documentation for " Luis Machado via Gdb-patches
2020-11-09 17:08   ` Eli Zaretskii via Gdb-patches
2020-11-16 15:44     ` David Spickett via Gdb-patches
2020-11-16 16:04       ` David Spickett via Gdb-patches
2020-11-16 17:22         ` Luis Machado via Gdb-patches
2020-11-17 10:05           ` David Spickett via Gdb-patches
2020-11-17 12:01             ` Luis Machado via Gdb-patches
2020-11-17 12:29               ` David Spickett via Gdb-patches
2020-11-17 14:44                 ` Luis Machado via Gdb-patches
2020-11-17 15:16                   ` David Spickett via Gdb-patches
2020-11-17 17:29                     ` Luis Machado via Gdb-patches
2020-11-18 10:39                       ` David Spickett via Gdb-patches
2020-11-18 10:56                         ` Luis Machado via Gdb-patches
2020-11-18 11:22                           ` David Spickett via Gdb-patches
2020-11-16 16:49       ` Luis Machado via Gdb-patches
2020-11-09 17:04 ` [PATCH v3 08/24] AArch64: Add MTE CPU feature check support Luis Machado via Gdb-patches
2020-12-26  0:04   ` Simon Marchi via Gdb-patches
2020-11-09 17:04 ` [PATCH v3 09/24] AArch64: Add target description/feature for MTE registers Luis Machado via Gdb-patches
2020-12-26  0:10   ` Simon Marchi via Gdb-patches
2020-12-28 18:28     ` Luis Machado via Gdb-patches
2020-11-09 17:04 ` [PATCH v3 10/24] AArch64: Add MTE register set support for GDB and gdbserver Luis Machado via Gdb-patches
2020-12-26  0:17   ` Simon Marchi via Gdb-patches
2020-12-28 18:41     ` Luis Machado via Gdb-patches
2020-11-09 17:04 ` [PATCH v3 11/24] AArch64: Add MTE ptrace requests Luis Machado via Gdb-patches
2020-12-26  0:19   ` Simon Marchi via Gdb-patches
2020-12-28 19:12     ` Luis Machado via Gdb-patches
2020-11-09 17:04 ` [PATCH v3 12/24] AArch64: Implement memory tagging target methods for AArch64 Luis Machado via Gdb-patches
2020-12-26  0:33   ` Simon Marchi via Gdb-patches
2020-12-28 19:50     ` Luis Machado via Gdb-patches
2020-11-09 17:04 ` [PATCH v3 13/24] Refactor parsing of /proc/<pid>/smaps Luis Machado via Gdb-patches
2020-12-26  6:36   ` Simon Marchi via Gdb-patches
2020-12-29 10:57     ` Luis Machado via Gdb-patches
2020-11-09 17:04 ` [PATCH v3 14/24] AArch64: Implement the memory tagging gdbarch hooks Luis Machado via Gdb-patches
2020-12-26  6:52   ` Simon Marchi via Gdb-patches
2020-12-29 12:16     ` Luis Machado via Gdb-patches
2021-01-18 16:29       ` Simon Marchi via Gdb-patches
2021-01-20 20:01         ` Tom Tromey
2020-11-09 17:04 ` [PATCH v3 15/24] AArch64: Add unit testing for logical tag set/get operations Luis Machado via Gdb-patches
2020-11-09 17:04 ` [PATCH v3 16/24] AArch64: Report tag violation error information Luis Machado via Gdb-patches
2020-11-16 15:43   ` David Spickett via Gdb-patches [this message]
2020-11-16 16:45     ` Luis Machado via Gdb-patches
2020-11-17  9:36       ` David Spickett via Gdb-patches
2020-12-26 22:23   ` Simon Marchi via Gdb-patches
2020-12-30  0:50     ` Luis Machado via Gdb-patches
2020-11-09 17:04 ` [PATCH v3 17/24] AArch64: Add gdbserver MTE support Luis Machado via Gdb-patches
2020-12-26 22:30   ` Simon Marchi via Gdb-patches
2020-12-29 14:32     ` Luis Machado via Gdb-patches
2020-11-09 17:04 ` [PATCH v3 18/24] AArch64: Add MTE register set support for core files Luis Machado via Gdb-patches
2020-11-09 17:04 ` [PATCH v3 19/24] New mtag commands Luis Machado via Gdb-patches
2020-12-27  3:32   ` Simon Marchi via Gdb-patches
2020-12-29 17:21     ` Luis Machado via Gdb-patches
2020-11-09 17:04 ` [PATCH v3 20/24] Documentation for the new " Luis Machado via Gdb-patches
2020-11-09 17:11   ` Eli Zaretskii via Gdb-patches
2020-11-09 17:04 ` [PATCH v3 21/24] Extend "x" and "print" commands to support memory tagging Luis Machado via Gdb-patches
2020-11-09 17:14   ` Eli Zaretskii via Gdb-patches
2020-11-09 17:20     ` Luis Machado via Gdb-patches
2020-12-27  4:18   ` Simon Marchi via Gdb-patches
2020-12-29 18:50     ` Luis Machado via Gdb-patches
2021-01-18 17:56       ` Simon Marchi via Gdb-patches
2021-01-18 20:20         ` Luis Machado via Gdb-patches
2020-11-09 17:04 ` [PATCH v3 22/24] Document new "x" and "print" memory tagging extensions Luis Machado via Gdb-patches
2020-11-09 17:16   ` Eli Zaretskii via Gdb-patches
2020-11-09 17:04 ` [PATCH v3 23/24] Add NEWS entry Luis Machado via Gdb-patches
2020-11-09 17:19   ` Eli Zaretskii via Gdb-patches
2020-11-09 17:22     ` Luis Machado via Gdb-patches
2020-11-09 17:04 ` [PATCH v3 24/24] Add memory tagging testcases Luis Machado via Gdb-patches
2020-11-16 15:47   ` David Spickett via Gdb-patches
2020-11-16 16:51     ` Luis Machado via Gdb-patches
2020-12-27  4:36   ` Simon Marchi via Gdb-patches
2020-12-29 19:32     ` Luis Machado via Gdb-patches
2020-11-16 13:48 ` [PATCH v3 00/24] Memory Tagging Support + AArch64 Linux implementation Luis Machado via Gdb-patches
2020-11-16 14:37   ` Alan Hayward via Gdb-patches
2020-11-23 16:08   ` Luis Machado via Gdb-patches
2020-11-30 13:38     ` Luis Machado via Gdb-patches
2020-12-07 13:17       ` Luis Machado via Gdb-patches
2020-12-07 14:17         ` Alan Hayward 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='CACBW-2LY9b6ToNkXTgDeva=nsyW+cmnNDEq3xmk8Y8UvdXhCiw@mail.gmail.com' \
    --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