From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id F6AkFViE619lbAAAWB0awg (envelope-from ) for ; Tue, 29 Dec 2020 14:32:40 -0500 Received: by simark.ca (Postfix, from userid 112) id 494B31F0AA; Tue, 29 Dec 2020 14:32:40 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,MAILING_LIST_MULTI,RDNS_NONE,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.2 Received: from sourceware.org (unknown [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 E2CE31E552 for ; Tue, 29 Dec 2020 14:32:39 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 28FB63857010; Tue, 29 Dec 2020 19:32:39 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 28FB63857010 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1609270359; bh=4Ji9D/mT2erqusbn/m7noG5lPRg4WyRbzuTQUe/6qsc=; h=Subject:To:References:Date:In-Reply-To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=E2zue9+rDPwB1R5vceVmYIlHu4g71xP1fKaTYO7oIGG1Uc3MX2OzNmNwPE1nYWqL3 QKLKWSn2258jKZHhm44zMFC/8pSXmle4D65yM6EKDGOTLTK3P9GUd/4av9R6biWw19 TgcbdYZ6/RfUcb2wQueYycI02Cy+l9g3+wPbp7PE= Received: from mail-qv1-xf33.google.com (mail-qv1-xf33.google.com [IPv6:2607:f8b0:4864:20::f33]) by sourceware.org (Postfix) with ESMTPS id 619203857C6D for ; Tue, 29 Dec 2020 19:32:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 619203857C6D Received: by mail-qv1-xf33.google.com with SMTP id d11so6775743qvo.11 for ; Tue, 29 Dec 2020 11:32:36 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=4Ji9D/mT2erqusbn/m7noG5lPRg4WyRbzuTQUe/6qsc=; b=isxNYwS2baLw8bGSEskLxMCLuRct0R82zrCztpEDlEv443JUgv9EkSxtT4foXRM9R6 u0Oo9fN3TqpF0sfDSk6TbD4TTC4G/JXSzLSlpKTMWA9nYU7F0CW5El1f9T1snQ/SY60Q L/XGq0yEUFRBJXnTnaAkwHeB5tfg+FZIm23B5B9gAnt8gQrvCqTU5D5FTjk4NP0jVBdO qsHJ6hZj8FaG0mWCc5EXcLqplLI8fW4mk+df57umqSRKzLLx2aNcAUXlV13nT9lMWfEj lE5S8fE6moqrScvyRPaVCJ+szxJO2SwzUgP2WuAzQhyG+n1Tpubsti/GQ52DGkT89cXW 9VZg== X-Gm-Message-State: AOAM530T+PEc89OQlLpz3ZjWG/aC/Z4fd+bEqtLrwcJgFpWcKOG4HH2X cA71/4ousE6QiBt6psYUdY31BQ== X-Google-Smtp-Source: ABdhPJx5ZCov4Nr2xGQKf0cbHaoILBmWtz/tU9wbdJ+z2nO6ejch6IE7lTBkt9sKGaax0fdHdwVoww== X-Received: by 2002:a05:6214:1266:: with SMTP id r6mr53027632qvv.12.1609270355901; Tue, 29 Dec 2020 11:32:35 -0800 (PST) Received: from ?IPv6:2804:7f0:8284:370e:891:588d:2ac2:dc7e? ([2804:7f0:8284:370e:891:588d:2ac2:dc7e]) by smtp.gmail.com with ESMTPSA id a77sm25824147qkg.77.2020.12.29.11.32.34 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 29 Dec 2020 11:32:35 -0800 (PST) Subject: Re: [PATCH v3 24/24] Add memory tagging testcases To: Simon Marchi , gdb-patches@sourceware.org References: <20201109170435.15766-1-luis.machado@linaro.org> <20201109170435.15766-25-luis.machado@linaro.org> <2d0c52e2-8375-dfd2-8310-1443c4d8f454@polymtl.ca> Message-ID: Date: Tue, 29 Dec 2020 16:32:32 -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: <2d0c52e2-8375-dfd2-8310-1443c4d8f454@polymtl.ca> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit 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 Cc: david.spickett@linaro.org Errors-To: gdb-patches-bounces@sourceware.org Sender: "Gdb-patches" On 12/27/20 1:36 AM, Simon Marchi wrote: > > > On 2020-11-09 12:04 p.m., Luis Machado via Gdb-patches wrote: >> +# Targets that don't support memory tagging should not execute the >> +# runtime memory tagging tests. >> +if {![supports_memtag]} { >> + untested "memory tagging unsupported" > > Use unsupported? > > https://www.gnu.org/software/dejagnu/manual/unsupported-procedure.html > Fixed. >> + return -1 >> +} >> + >> +gdb_breakpoint "access_memory" >> + >> +if [gdb_continue "access_memory"] { >> + fail "could not run to tagged memory test function" > > gdb_continue will already produce a FAIL, so no need to use another one here. > Thanks for spotting this. Fixed now. >> + return -1 >> +} >> + >> +# Fetch a known pointer to an area mapped with PROT_MTE. >> +set tagged_ptr_symbol "tagged_ptr" >> +set tagged_ptr_addr [get_hexadecimal_valueof $tagged_ptr_symbol -1] >> + >> +if {$tagged_ptr_addr == -1} { >> + untested "unexpected pointer or tag value" > > If that happens, that would be an expected error in the test that should be > fixed, right? If so, I'd suggest using "unresolved". We should be able to > get that value, if we can't something is wrong (it's not just a matter of > something being unsupported). > That's true. If that happens, all the bets are off, and we don't want to continue the test. >> + return -1 >> +} >> + >> +# Fetch a known pointer to an area not mapped with PROT_MTE. >> +set untagged_ptr_symbol "untagged_ptr" >> +set untagged_ptr_addr [get_hexadecimal_valueof $untagged_ptr_symbol -1] >> + >> +if {$untagged_ptr_addr == -1} { >> + untested "unexpected pointer or tag value" > > Same here. > Fixed. >> +with_test_prefix "symbolic" { >> + # Test inspecting an allocation tag from a pointer to a memory area that >> + # is not mapped with PROT_MTE. >> + set msg "Address ${untagged_ptr_addr} not in a region mapped with a memory tagging flag\." >> + gdb_test "mtag showatag ${untagged_ptr_symbol}" $msg \ >> + "mtag showatag with an untagged address" >> + >> + gdb_test "mtag setatag ${untagged_ptr_symbol} 0 00" $msg \ >> + "mtag setatag with an untagged address" >> + >> + # Test setting and showing the logical tags for a literal address. >> + for {set i 0} {$i < 32} {incr i} { >> + set addr_tagged 0 >> + >> + with_test_prefix "tag ${i}" { >> + set addr_tagged [get_tagged_ptr $i ${tagged_ptr_addr}] >> + gdb_test_no_output "set variable ${tagged_ptr_symbol} = ${addr_tagged}" \ >> + "update value of symbol ${tagged_ptr_symbol}" >> + } >> + >> + set tag_hexnz [get_hex_tag [expr $i % 16]] >> + gdb_test "mtag showltag ${tagged_ptr_symbol}" \ >> + " = 0x${tag_hexnz}" \ >> + "showltag with tag ${i}" >> + >> + set tag_hexnn [get_tag_nn $i] >> + gdb_test "mtag withltag ${tagged_ptr_symbol} ${tag_hexnn}" \ >> + " = \\(void \\*\\) ${addr_tagged}" \ >> + "withltag with tag ${i}" >> + } >> + >> + # Reset the tagged ptr to its original value >> + gdb_test_no_output "set variable ${tagged_ptr_symbol} = ${tagged_ptr_addr}" \ >> + "reset ${tagged_ptr_symbol} to ${tagged_ptr_addr}" >> + >> + set setatag_msg "Allocation tag\\(s\\) updated successfully\." >> + # Test setting and showing the allocation tags. >> + for {set i 0} {$i < 32} {incr i} { >> + >> + set tag_hexnn [get_tag_nn $i] >> + gdb_test "mtag setatag ${tagged_ptr_symbol} 0 ${tag_hexnn}" \ >> + $setatag_msg \ >> + "setatag with tag ${i}" >> + >> + set tag_hexnz [get_hex_tag [expr $i % 16]] >> + gdb_test "mtag showatag ${tagged_ptr_symbol}" " = 0x${tag_hexnz}" \ >> + "showatag with tag ${i}" >> + } >> + >> + # Test tag mismatches. >> + with_test_prefix "tag mismatches" { >> + for {set i 0} {$i < 32} {incr i} { >> + >> + # Set the allocation tag to a known value (0). >> + set tag_hexnn [get_tag_nn $i] >> + gdb_test "mtag setatag ${tagged_ptr_symbol} 0 ${tag_hexnn}" \ >> + $setatag_msg \ >> + "setatag with tag ${i}" >> + >> + set atag_hexnz [get_hex_tag [expr $i % 16]] >> + >> + # Validate that the logical tag matches the allocation tag. >> + with_test_prefix "tag ${i}" { >> + set addr_tagged [get_tagged_ptr $i ${tagged_ptr_addr}] >> + } >> + >> + with_test_prefix "tag ${i}" { >> + gdb_test_no_output "set variable ${tagged_ptr_symbol} = ${addr_tagged}" \ >> + "set ${tagged_ptr_symbol} to a matching logical tag" >> + } >> + >> + gdb_test "mtag check ${tagged_ptr_symbol}" \ >> + "Memory tags for address $hex match \\(0x${atag_hexnz}\\)\." \ >> + "check match with tag ${i}" >> + >> + # Get a pointer with the logical tag that does not match the >> + # allocation tag. >> + set ltag [expr $i + 1] >> + with_test_prefix "fetch mismatch tag ${i}" { >> + set addr_tagged [get_tagged_ptr $ltag ${tagged_ptr_addr}] >> + } >> + >> + with_test_prefix "tag ${i}" { >> + gdb_test_no_output "set variable ${tagged_ptr_symbol} = ${addr_tagged}" \ >> + "set ${tagged_ptr_symbol} to a mismatching logical tag" >> + } >> + >> + # Validate that the logical tag does not match the allocation >> + # tag. >> + set ltag_hexnz [get_hex_tag [expr [expr $i + 1]% 16]] >> + gdb_test "mtag check ${tagged_ptr_symbol}" \ >> + "Logical tag \\(0x${ltag_hexnz}\\) does not match the allocation tag \\(0x${atag_hexnz}\\) for address $hex\." \ >> + "check mismatch with tag ${i}" >> + } >> + # Reset the tagged ptr to its original value >> + gdb_test_no_output "set variable ${tagged_ptr_symbol} = ${tagged_ptr_addr}" \ >> + "reset ${tagged_ptr_symbol} to ${tagged_ptr_addr}" > > The indentation is off here. > Oops. Fixed now. >> diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp >> index 55154db6a5..347704ce0a 100644 >> --- a/gdb/testsuite/lib/gdb.exp >> +++ b/gdb/testsuite/lib/gdb.exp >> @@ -2679,6 +2679,22 @@ proc supports_get_siginfo_type {} { >> } >> } >> >> +# Return 1 if memory tagging is supported at runtime, otherwise return 0. >> + >> +proc supports_memtag {} { > > Should this use gdb_caching_proc? > It should, since we don't expect the setting to change across the run. > Simon >