public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Luis Machado <luis.machado@linaro.org>
To: gdb-patches@sourceware.org
Subject: [PATCH v6 00/25] Memory Tagging Support + AArch64 Linux implementation
Date: Mon, 22 Mar 2021 10:20:54 -0300	[thread overview]
Message-ID: <20210322132120.1202230-1-luis.machado@linaro.org> (raw)

Memory tagging improves memory safety by tagging various parts of memory and
raising exceptions when the allocation tag (the one associated with a range of
memory addresses) does not match the logical tag contained in a pointer that is
used to access the memory area.

We already have an implementation of such a mechanism for sparc64 (ADI), but
it is target-specific and not exposed to the rest of GDB. This series aims to
make the infrastructure available to other targets that may wish to support
their specific memory tagging approaches. For AArch64 Linux this is called
MTE (Memory Tagging Extensions).

The series is split into a set that deals with generic changes to GDB's
infrastructure (target methods, gdbarch hooks and remote packets), a set that
implements support for AArch64 Linux and one last set that implements new
commands, updates the documentation and adds tests.

The goal is to make it so the architecture independent parts of GDB don't
need to interpret tag formats, given the formats are likely different
for each architecture.  For this reason, GDB will handle tags as a sequence of
bytes and will not assume a particular format.

The architecture-specific code can handle the sequence of bytes appropriately.

Luis Machado (25):
  New target methods for memory tagging support
  New gdbarch memory tagging hooks
  Add GDB-side remote target support for memory tagging
  Unit testing for GDB-side remote memory tagging handling
  GDBserver remote packet support for memory tagging
  Unit tests for gdbserver memory tagging remote packets
  Documentation for memory tagging remote packets
  AArch64: Add MTE CPU feature check support
  AArch64: Add target description/feature for MTE registers
  AArch64: Add MTE register set support for GDB and gdbserver
  AArch64: Add MTE ptrace requests
  AArch64: Implement memory tagging target methods for AArch64
  Convert char array to std::string in linux_find_memory_regions_full
  Refactor parsing of /proc/<pid>/smaps
  AArch64: Implement the memory tagging gdbarch hooks
  AArch64: Add unit testing for logical tag set/get operations
  AArch64: Report tag violation error information
  AArch64: Add gdbserver MTE support
  AArch64: Add MTE register set support for core files
  New memory-tag commands
  Documentation for the new mtag commands
  Extend "x" and "print" commands to support memory tagging
  Document new "x" and "print" memory tagging extensions
  Add NEWS entry.
  Add memory tagging testcases

 gdb/Makefile.in                        |   3 +
 gdb/NEWS                               |  42 ++-
 gdb/aarch64-linux-nat.c                | 127 ++++++-
 gdb/aarch64-linux-tdep.c               | 335 ++++++++++++++++-
 gdb/aarch64-linux-tdep.h               |   3 +
 gdb/aarch64-tdep.c                     |  40 +-
 gdb/aarch64-tdep.h                     |  12 +-
 gdb/arch-utils.c                       |  49 +++
 gdb/arch-utils.h                       |  22 ++
 gdb/arch/aarch64-mte-linux.c           |  76 ++++
 gdb/arch/aarch64-mte-linux.h           |  74 ++++
 gdb/arch/aarch64.c                     |   7 +-
 gdb/arch/aarch64.h                     |   7 +-
 gdb/configure.nat                      |   3 +-
 gdb/configure.tgt                      |   1 +
 gdb/doc/gdb.texinfo                    | 248 ++++++++++++-
 gdb/features/Makefile                  |   1 +
 gdb/features/aarch64-mte.c             |  14 +
 gdb/features/aarch64-mte.xml           |  11 +
 gdb/gdbarch.c                          | 139 ++++++-
 gdb/gdbarch.h                          |  54 +++
 gdb/gdbarch.sh                         |  37 ++
 gdb/linux-tdep.c                       | 376 ++++++++++++-------
 gdb/linux-tdep.h                       |   4 +
 gdb/nat/aarch64-mte-linux-ptrace.c     | 210 +++++++++++
 gdb/nat/aarch64-mte-linux-ptrace.h     |  50 +++
 gdb/printcmd.c                         | 481 ++++++++++++++++++++++++-
 gdb/remote.c                           | 226 ++++++++++++
 gdb/target-debug.h                     |  24 ++
 gdb/target-delegates.c                 |  95 +++++
 gdb/target.h                           |  41 +++
 gdb/testsuite/gdb.arch/aarch64-mte.c   | 107 ++++++
 gdb/testsuite/gdb.arch/aarch64-mte.exp | 370 +++++++++++++++++++
 gdb/testsuite/gdb.base/memtag.c        |  22 ++
 gdb/testsuite/gdb.base/memtag.exp      |  66 ++++
 gdb/testsuite/gdb.base/options.exp     |   1 +
 gdb/testsuite/gdb.base/with.exp        |   2 +-
 gdb/testsuite/lib/gdb.exp              |  16 +
 gdb/valprint.c                         |  23 ++
 gdb/valprint.h                         |   4 +
 gdbserver/Makefile.in                  |   1 +
 gdbserver/configure.srv                |   2 +
 gdbserver/linux-aarch64-ipa.cc         |   8 +-
 gdbserver/linux-aarch64-low.cc         |  97 ++++-
 gdbserver/linux-aarch64-tdesc.cc       |  10 +-
 gdbserver/linux-aarch64-tdesc.h        |   3 +-
 gdbserver/remote-utils.cc              |  42 +--
 gdbserver/remote-utils.h               |  12 +-
 gdbserver/server.cc                    | 218 +++++++++++
 gdbserver/server.h                     |   3 +
 gdbserver/target.cc                    |  20 +
 gdbserver/target.h                     |  21 ++
 gdbsupport/common-utils.cc             |  49 +++
 gdbsupport/common-utils.h              |  15 +
 gdbsupport/rsp-low.cc                  |  49 ---
 gdbsupport/rsp-low.h                   |  19 -
 include/elf/common.h                   |   3 +
 57 files changed, 3729 insertions(+), 266 deletions(-)
 create mode 100644 gdb/arch/aarch64-mte-linux.c
 create mode 100644 gdb/arch/aarch64-mte-linux.h
 create mode 100644 gdb/features/aarch64-mte.c
 create mode 100644 gdb/features/aarch64-mte.xml
 create mode 100644 gdb/nat/aarch64-mte-linux-ptrace.c
 create mode 100644 gdb/nat/aarch64-mte-linux-ptrace.h
 create mode 100644 gdb/testsuite/gdb.arch/aarch64-mte.c
 create mode 100644 gdb/testsuite/gdb.arch/aarch64-mte.exp
 create mode 100644 gdb/testsuite/gdb.base/memtag.c
 create mode 100644 gdb/testsuite/gdb.base/memtag.exp

-- 
2.25.1


             reply	other threads:[~2021-03-22 13:21 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-22 13:20 Luis Machado [this message]
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 ` [PATCH v6 21/25] Documentation for the new mtag commands Luis Machado
2021-03-22 17:49   ` 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-1-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).