From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id 7TdgFUXLEWA2TwAAWB0awg (envelope-from ) for ; Wed, 27 Jan 2021 15:21:25 -0500 Received: by simark.ca (Postfix, from userid 112) id 4AD6E1EF80; Wed, 27 Jan 2021 15:21:25 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,MAILING_LIST_MULTI,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id EE0E81E590 for ; Wed, 27 Jan 2021 15:21:23 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3C37F3896C03; Wed, 27 Jan 2021 20:21:23 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3C37F3896C03 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1611778883; bh=dFCv/Ljf5IX6kkQ19SsMvkoxMPhLhG9SRsGkjnDtydE=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=AE1BeSU4w5jrmK8jGl0uEzT0ZV/9gwS0Z4DwFtBt2+AgK0y8037ubci0XWsfKDF+s g9rFcC9kotWAHtggWtQ7RpQ69em6CRwPMEMKbeoK8TRs4nJGhrkEh4MrPp5VVd9WA0 4gvWyf6v4CM5aHmBoWnbn1zZ0ru+ANzfIWXgzE9w= Received: from mail-qt1-x832.google.com (mail-qt1-x832.google.com [IPv6:2607:f8b0:4864:20::832]) by sourceware.org (Postfix) with ESMTPS id AB0613857C6B for ; Wed, 27 Jan 2021 20:21:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org AB0613857C6B Received: by mail-qt1-x832.google.com with SMTP id d15so2403910qtw.12 for ; Wed, 27 Jan 2021 12:21:20 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=dFCv/Ljf5IX6kkQ19SsMvkoxMPhLhG9SRsGkjnDtydE=; b=KNlC3y0VyprLm027vuVQJldWa2zZuNhXSAGNv2OAeZQja8p5vLiiC6DKNBaaR2Q4aH BobIGP3Zr/FcVdYl43RK+QM72a0QUwWvBtLCLxkaLDo2eZrOxvLTowzvo5CxLdYehAlk z7w/qWWfk9YB/LsFaJ3zv3fiGijoKJL3Ei6U+B4xKCY9hsaCGUS+2YvZTQ+YtNvLidC9 j+Vvfhk+PvBsRjcEPqRayKYcjfPcCtdKXxhjg5kLkIIiyA5xCRrFELqssFaebACm/nVt vf/b0m/S8nJ7lsluk9IJQ2hEMkeVCwEvbxOiqzPmz3L7dgv7XLHIePrOXHW9wN6SMi+v BqOg== X-Gm-Message-State: AOAM5316QBGdCeMUCxLac2sMb2J8U5wN4mrhrQURtmx2xMyvRmSBN729 CDb/A+3+6O8gTj0J7PT9bxROo7thBaT3cQ== X-Google-Smtp-Source: ABdhPJyyr1zylnolLC/F7SfgjdoKYWVoHM9NWSnojGviDPpm5UdnVuFEsWnSVnmhHI9KdjQ9NELyfw== X-Received: by 2002:a05:622a:18d:: with SMTP id s13mr11101618qtw.52.1611778880176; Wed, 27 Jan 2021 12:21:20 -0800 (PST) Received: from localhost.localdomain ([2804:7f0:8284:874d:b82c:87fc:4324:adab]) by smtp.gmail.com with ESMTPSA id b194sm1854531qkc.102.2021.01.27.12.21.18 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Jan 2021 12:21:19 -0800 (PST) To: gdb-patches@sourceware.org Subject: [PATCH v5 00/25] Memory Tagging Support + AArch64 Linux implementation Date: Wed, 27 Jan 2021 17:20:47 -0300 Message-Id: <20210127202112.2485702-1-luis.machado@linaro.org> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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: , From: Luis Machado via Gdb-patches Reply-To: Luis Machado Errors-To: gdb-patches-bounces@sourceware.org Sender: "Gdb-patches" 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//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 | 36 +- gdb/aarch64-linux-nat.c | 127 ++++++- gdb/aarch64-linux-tdep.c | 334 ++++++++++++++++++- gdb/aarch64-linux-tdep.h | 3 + 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 | 73 ++++ gdb/arch/aarch64-mte-linux.h | 75 +++++ gdb/arch/aarch64.c | 7 +- gdb/arch/aarch64.h | 7 +- gdb/configure.nat | 3 +- gdb/configure.tgt | 1 + gdb/doc/gdb.texinfo | 233 ++++++++++++- 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 | 378 +++++++++++++-------- gdb/linux-tdep.h | 4 + gdb/nat/aarch64-mte-linux-ptrace.c | 200 +++++++++++ gdb/nat/aarch64-mte-linux-ptrace.h | 50 +++ gdb/printcmd.c | 444 ++++++++++++++++++++++++- gdb/remote.c | 227 +++++++++++++ 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 | 369 ++++++++++++++++++++ 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 | 22 ++ 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 | 43 ++- gdbserver/remote-utils.h | 7 +- gdbserver/server.cc | 219 ++++++++++++ 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, 3655 insertions(+), 265 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