From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id 3C9cIT8P6F8rEAAAWB0awg (envelope-from ) for ; Sat, 26 Dec 2020 23:36:15 -0500 Received: by simark.ca (Postfix, from userid 112) id 79C9E1F0AA; Sat, 26 Dec 2020 23:36:15 -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 896CA1E552 for ; Sat, 26 Dec 2020 23:36:14 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 128BE384A02C; Sun, 27 Dec 2020 04:36:14 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 128BE384A02C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1609043774; bh=DkwUwfXrCashAuafTKvj21sPdwOZmU+0DZ6M8CWrvJ4=; 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=xPRkrLpbOl4CpuIMat9syBjcydPZJj9iGhILW5gEqsC5SfVjcSNmisoxFuFZXRaK0 KcXzmPJ7VfkXL0enFOifBeKAGGX7gvDVtyNSxSKS65FaHhmnUb73kgJ3CBNIG665ei xy3r+6ySyjTDC0CLfBDsA9ItU88ZyhmS61Axh28Q= Received: from smtp.polymtl.ca (smtp.polymtl.ca [132.207.4.11]) by sourceware.org (Postfix) with ESMTPS id E6578384A02C for ; Sun, 27 Dec 2020 04:36:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org E6578384A02C Received: from simark.ca (simark.ca [158.69.221.121]) (authenticated bits=0) by smtp.polymtl.ca (8.14.7/8.14.7) with ESMTP id 0BR4a4Jv005713 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sat, 26 Dec 2020 23:36:09 -0500 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp.polymtl.ca 0BR4a4Jv005713 Received: from [10.0.0.213] (192-222-157-6.qc.cable.ebox.net [192.222.157.6]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id 7C1841E552; Sat, 26 Dec 2020 23:36:04 -0500 (EST) Subject: Re: [PATCH v3 24/24] Add memory tagging testcases To: Luis Machado , gdb-patches@sourceware.org References: <20201109170435.15766-1-luis.machado@linaro.org> <20201109170435.15766-25-luis.machado@linaro.org> Message-ID: <2d0c52e2-8375-dfd2-8310-1443c4d8f454@polymtl.ca> Date: Sat, 26 Dec 2020 23:36:04 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.6.0 MIME-Version: 1.0 In-Reply-To: <20201109170435.15766-25-luis.machado@linaro.org> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Poly-FromMTA: (simark.ca [158.69.221.121]) at Sun, 27 Dec 2020 04:36:04 +0000 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: Simon Marchi via Gdb-patches Reply-To: Simon Marchi Cc: david.spickett@linaro.org Errors-To: gdb-patches-bounces@sourceware.org Sender: "Gdb-patches" 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 > + 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. > + 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). > + 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. > +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. > 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? Simon