From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qt1-x842.google.com (mail-qt1-x842.google.com [IPv6:2607:f8b0:4864:20::842]) by sourceware.org (Postfix) with ESMTPS id B03FB3857C5A for ; Thu, 23 Jul 2020 14:59:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org B03FB3857C5A Received: by mail-qt1-x842.google.com with SMTP id b25so4606698qto.2 for ; Thu, 23 Jul 2020 07:59:41 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=QF75M4AC6/g3xv01ZCWgZ9iUeRVUY+IPSwHMB8CJO7s=; b=e1CeD2TbX00pMYQPLElpLtwGsIfxRLbGmpyfUEDqBFoZ55A3EUM01oL6WN5m9tM5ir pAabBcoFRvSPFetG9vLJJxea7wZxJnA95kVkkvulQdKnrbl7XIh6Mh5swIqb7jb+mErj i8ms2bO13Ditujz2KLie3ovqa2jemsH8GL9klJm6WRrDLEGa9FeU9nHLMZb2Z4nvygTN El1ulMXmxidcbY+VF7xY4dOvcM1qcCKTp4DjhxSyfelhCpLPNtRP6idzfRt83yt+0Fsx vYKeNmx5/ImiVcu7iVdmfpnQXsezQiGgpAAxkFgs0RhGOYwWeWbmLnDnPxwlIbzOKTNL ekcA== X-Gm-Message-State: AOAM533NajLXWT0mqNfMp8ohKZDmM1oHNpDyshN/Wmkjp3XIxImeQx9H H2aweZYi3gJL0PvJ2nTmzTpRNQ== X-Google-Smtp-Source: ABdhPJyObYwsl+koCJIoWFxrc/qDRnuPnPTLwUMwuJO3UTrc35LD6qvWn8U5bZq5ay8BQ0+SyWtf2g== X-Received: by 2002:ac8:774d:: with SMTP id g13mr4529795qtu.317.1595516381134; Thu, 23 Jul 2020 07:59:41 -0700 (PDT) Received: from ?IPv6:2804:7f0:8283:4d57:c15e:e2c3:f855:dba0? ([2804:7f0:8283:4d57:c15e:e2c3:f855:dba0]) by smtp.gmail.com with ESMTPSA id 128sm2856225qkk.101.2020.07.23.07.59.38 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 23 Jul 2020 07:59:40 -0700 (PDT) Subject: Re: [PATCH 00/23] Memory Tagging Support + AArch64 Linux implementation From: Luis Machado To: gdb-patches@sourceware.org, Alan.Hayward@arm.com Cc: omair.javaid@linaro.org, david.spickett@linaro.org, jose.marchesi@oracle.com References: <20200715194513.16641-1-luis.machado@linaro.org> Message-ID: Date: Thu, 23 Jul 2020 11:59:37 -0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <20200715194513.16641-1-luis.machado@linaro.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Jul 2020 14:59:52 -0000 Ping? On 7/15/20 4:44 PM, Luis Machado wrote: > This patch series implements general memory tagging support for GDB, as well > as an implementation for AArch64 Linux. > > 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 (23): > 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 > Refactor parsing of /proc//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 > New mtag 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 | 32 ++ > gdb/aarch64-linux-nat.c | 121 ++++++- > gdb/aarch64-linux-tdep.c | 330 ++++++++++++++++- > gdb/aarch64-tdep.c | 40 ++- > gdb/aarch64-tdep.h | 12 +- > gdb/arch-utils.c | 50 +++ > gdb/arch-utils.h | 23 ++ > gdb/arch/aarch64-mte-linux.c | 70 ++++ > gdb/arch/aarch64-mte-linux.h | 66 ++++ > gdb/arch/aarch64.c | 7 +- > gdb/arch/aarch64.h | 7 +- > gdb/configure.nat | 3 +- > gdb/configure.tgt | 1 + > gdb/doc/gdb.texinfo | 174 ++++++++- > gdb/features/Makefile | 1 + > gdb/features/aarch64-mte.c | 14 + > gdb/features/aarch64-mte.xml | 11 + > gdb/gdbarch.c | 137 ++++++++ > gdb/gdbarch.h | 53 +++ > gdb/gdbarch.sh | 36 ++ > gdb/linux-tdep.c | 356 ++++++++++++------- > gdb/linux-tdep.h | 4 + > gdb/nat/aarch64-mte-linux-ptrace.c | 200 +++++++++++ > gdb/nat/aarch64-mte-linux-ptrace.h | 50 +++ > gdb/printcmd.c | 468 ++++++++++++++++++++++++- > gdb/remote.c | 230 ++++++++++++ > gdb/target-delegates.c | 84 +++++ > gdb/target.h | 25 ++ > gdb/testsuite/gdb.arch/aarch64-mte.c | 107 ++++++ > gdb/testsuite/gdb.arch/aarch64-mte.exp | 371 ++++++++++++++++++++ > gdb/testsuite/gdb.base/memtag.c | 22 ++ > gdb/testsuite/gdb.base/memtag.exp | 64 ++++ > gdb/testsuite/lib/gdb.exp | 16 + > gdb/valprint.h | 1 + > gdbserver/Makefile.in | 1 + > gdbserver/configure.srv | 2 + > gdbserver/linux-aarch64-ipa.cc | 8 +- > gdbserver/linux-aarch64-low.cc | 89 ++++- > gdbserver/linux-aarch64-tdesc.cc | 10 +- > gdbserver/linux-aarch64-tdesc.h | 3 +- > gdbserver/remote-utils.cc | 40 +-- > gdbserver/remote-utils.h | 2 + > gdbserver/server.cc | 214 +++++++++++ > gdbserver/server.h | 3 + > gdbserver/target.cc | 20 ++ > gdbserver/target.h | 17 + > gdbsupport/rsp-low.cc | 2 +- > include/elf/common.h | 3 + > 49 files changed, 3421 insertions(+), 182 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 >