From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657295511; cv=none; d=zohomail.com; s=zohoarc; b=HxXus18oh1Z1Cn/Cl5Rzs0h1wv8OgSyScI0f/YSzz/kl/vwDtNnp+MH7g8Xn1FDkezfHvjp0vn0kUVv69JIfv6Ck8hgtwh0trc9o/8kfeW8i1wJiTwTMkrTXPEKaP6ZS6pVk/jOC8PWYg5pN/w5SZLQ3DiqYqq4CZ8IErl6p5Q8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657295511; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=iiRXuoRm0+6hZcCT7CVhc/aX8fiaQgpUOM3IjX/kYqE=; b=X7kFmQgQIhyTztApIU9tLu4al/CIwhjIyb/LwvCNqgm45wVKd6jEDEYt3B5yUswjOAa3EYoLi8cQEaUrW6w9BX0/rzzOmoEbagPQ3BsDw6Ohd+X15e2dhVCfGoRHoXW5Bi0BWVIbJPLnPjxZ4W48r+nv7iid4RrPXS6sR0w33Ik= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657295511107452.97691688198074; Fri, 8 Jul 2022 08:51:51 -0700 (PDT) Received: from localhost ([::1]:58222 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9qGi-0004EX-V2 for importer@patchew.org; Fri, 08 Jul 2022 11:51:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44398) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qCG-0003v4-TS for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:13 -0400 Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]:34613) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qCF-0002LY-Ce for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:12 -0400 Received: by mail-pf1-x430.google.com with SMTP id 70so8743622pfx.1 for ; Fri, 08 Jul 2022 08:47:11 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.47.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:47:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=iiRXuoRm0+6hZcCT7CVhc/aX8fiaQgpUOM3IjX/kYqE=; b=EXmm3to53nsWS9DEDIkMCrgn8NrlmwgZC0zqNF0sq2jMvUgM86rlQVlpm+BOjLiMig zI73swUSdOvgPIT2s6enl1Vqs85aLOgSY58HzaHM0QivPslefXfMr1f38LYGIUHIVwtk JMO0rEA8IlkAymc8l1yRM/WanxNeIp2isRHADdMWKIv57E3iiDgGeuWdYwrcDo2qWM8h kMHCBnZBiXLG4ZWyfQ7Nfqf3zXK3OWt2uNRE2VQSG7gQjNWz4XJgyxCDF5ajolKLc1G4 F8iaXDUNsu2MvglKfZJKq6ciNbQyvLvbAQ7PWFmLrmdLakH4CdzjX9/6ix+/5hJo1IEk wm1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=iiRXuoRm0+6hZcCT7CVhc/aX8fiaQgpUOM3IjX/kYqE=; b=vIurX2nZMKyB5zgt1DBTqiIz/Bd95zPoJmHn3RHTVOVufeJ6h2xJCvSvSTRcJYDwh5 EoSJuqVKXm54foAfLJDFTqt+jXCmUPD/iKAVWqdjRCVvGDn8QdyUi8fs/ADor97/ngI+ /oThj58UlUfZJiHOeXC3LVQflcGDyCJcRlbvUGAY1fO92Taf+hUHPbZ/j3RrumkYU3p7 mN1JT0hfuUIZpPCUM54S+m0tO7HClPcYgT+EmDzpWxwPrZDAMGqGbahqFSKBQpmWSadq UIK4kl03HABa2uzGzlvuahRiMtlbJhDSareiH0lEDQHmSHVjFkZM79kTK0E9sL0qKqZR /4XA== X-Gm-Message-State: AJIora/m0GIP0660MFCMBMJyTW6VklrJVLB+VonmQUNAtc3yvmeo2ylA s+1Sp0gXZ4CrbUqpbNIhiRfOwXNMBpYASMtm X-Google-Smtp-Source: AGRyM1vRq0YPcAc+6t0N3Eappi4kTgoYPE8pENcmvxwdkjIWfzASmXf4T2K6rp/6gkz8NlUaBQvkRA== X-Received: by 2002:a63:481a:0:b0:411:7951:cbcd with SMTP id v26-20020a63481a000000b004117951cbcdmr3866584pga.66.1657295229649; Fri, 08 Jul 2022 08:47:09 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Alex=20Benn=C3=A9e?= , Peter Maydell Subject: [RISU PATCH v4 01/29] Use bool for tracing variables Date: Fri, 8 Jul 2022 21:16:32 +0530 Message-Id: <20220708154700.18682-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::430; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x430.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657295512110100003 Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- risu.h | 3 ++- reginfo.c | 2 +- risu.c | 8 ++++---- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/risu.h b/risu.h index 8d2d646..e2b4508 100644 --- a/risu.h +++ b/risu.h @@ -17,6 +17,7 @@ #include #include #include +#include =20 /* Extra option processing for architectures */ extern const struct option * const arch_long_opts; @@ -96,7 +97,7 @@ int recv_and_compare_register_info(read_fn read_fn, * Should return 0 if it was a good match (ie end of test) * and 1 for a mismatch. */ -int report_match_status(int trace); +int report_match_status(bool trace); =20 /* Interface provided by CPU-specific code: */ =20 diff --git a/reginfo.c b/reginfo.c index dd42ae2..1b2a821 100644 --- a/reginfo.c +++ b/reginfo.c @@ -141,7 +141,7 @@ int recv_and_compare_register_info(read_fn read_fn, * Should return 0 if it was a good match (ie end of test) * and 1 for a mismatch. */ -int report_match_status(int trace) +int report_match_status(bool trace) { int resp =3D 0; fprintf(stderr, "match status...\n"); diff --git a/risu.c b/risu.c index 01525d2..79b1092 100644 --- a/risu.c +++ b/risu.c @@ -31,7 +31,7 @@ void *memblock; =20 int apprentice_fd, master_fd; -int trace; +bool trace; size_t signal_count; =20 #ifdef HAVE_ZLIB @@ -228,7 +228,7 @@ int master(void) signal_count); return 0; } else { - return report_match_status(0); + return report_match_status(false); } } set_sigill_handler(&master_sigill); @@ -250,7 +250,7 @@ int apprentice(void) #endif close(apprentice_fd); fprintf(stderr, "finished early after %zd checkpoints\n", signal_c= ount); - return report_match_status(1); + return report_match_status(true); } set_sigill_handler(&apprentice_sigill); fprintf(stderr, "starting apprentice image at 0x%"PRIxPTR"\n", @@ -344,7 +344,7 @@ int main(int argc, char **argv) break; case 't': trace_fn =3D optarg; - trace =3D 1; + trace =3D true; break; case 'h': hostname =3D optarg; --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657297745; cv=none; d=zohomail.com; s=zohoarc; b=BHgMbdQrygnyLMk08w8hS8FeIJhi6aNeyimJIfdDyFW6QorOKzC7wJDaB5wumOdX1s56+O64bQZa9FyQiuqnPpzVD3GC24Zvgl1bG1N83eft1oifMSG5lpooVqd4C55UMxXFSBqiiWU3mvcJjxA7Vh/Ej5LsCmKnIxP8msUljA0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657297745; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Lcnb+cJ/wyqPfEDRcfJ9HbxKsjqemLvSn/xAJtNX7ic=; b=i7YUp7WaoQxn5/3BEnk/DbSdlOPPN/NSdDQTnRxFkdTnX2KSr8Qv+/czDju7uOeYAV/Tehy/Dr8PbPfFVnGtw+RgP8exP42H28x/Z5srFcgAvNyevnuQjBtncZF0M6BXM3mmI6g09Oj8P4Zjplpmx48nszIOFDFXBcy10BaXN1s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657297745431140.93075120603476; Fri, 8 Jul 2022 09:29:05 -0700 (PDT) Received: from localhost ([::1]:57502 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9qql-0004Fw-V3 for importer@patchew.org; Fri, 08 Jul 2022 12:29:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44438) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qCJ-0003wr-Tc for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:15 -0400 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]:50772) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qCI-0002Mv-6W for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:15 -0400 Received: by mail-pj1-x102e.google.com with SMTP id a15so11634223pjs.0 for ; Fri, 08 Jul 2022 08:47:13 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.47.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:47:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Lcnb+cJ/wyqPfEDRcfJ9HbxKsjqemLvSn/xAJtNX7ic=; b=j99DO5x8nS4GWZgN7/isM8hAHv2aQ/GA/Ij2mh7eapSfu61OmoN7atzL7BbqmhY00O KrhP2DoYzTl3/b5I011Xo/8pNm5bJZAjvbHQxGOEY/ky39O3gBPFsREaavJmssmQCnw2 9wZYv0apGloRI0uTNcbZVuvGYWocwiuq1UqV/Dx5yJLf30g6vwZeTyl94PfG7ORonzj4 qL5KQ1Wsn7eTgf5T53NXxzGtJQTn3VXdc9rao4LQTpfmauNq5XWlzRrkxya39qwfZHNE mY6YfpZU2+DDhKr3wPHGVkIx7KDXB1U1GwuBeFsYkufJTtJfoW7uOQsk1YbbsoFW/8Uz 6Apw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Lcnb+cJ/wyqPfEDRcfJ9HbxKsjqemLvSn/xAJtNX7ic=; b=470DCiE7J5GUwbvx47uUzYB1XcAXqqrbP+wNxCfea1rzRDF13SwuaDfjnq9st00dOP pGnIVdwCGRsS+HLvPWlCYT3HvIjBx6CsLW768lLj+MiQCk8Qy6VRzfKhxeY2gi5rB8So ysRtm1z+VS3KIB22hvA95VAWuLtqkXTc4/Ffxf8hOe8L8X0TnqG5hXAIHZHY2XgL58Tx zZyuVn/QtiPqrfSL6bfUoc/+QqJQgNI4332n9UsoT1MeKy3dZGzLqkMyOj+3eODEZIPQ d7vR+k2SYDDLKqOQC2zIBGiX/Kbje0G2IM+SY3uOg948E7Ot32GHsqEGkabeyrM68hgt hLvQ== X-Gm-Message-State: AJIora8SEWwVON8/gHAgtOSjs0DNwnbQapz8xeIVEgivxARKy5ZYuo2+ tPs196R/txizFJO8BPJw1mzpmES7e41oM8Ov X-Google-Smtp-Source: AGRyM1uZqnPgYRLyayMezs5hhKx5T4d55w9INXOuLMIQx//bwkLFGtzDjsnZBTPPoi3FjPzVo62jGg== X-Received: by 2002:a17:90b:1b49:b0:1ec:a756:edc with SMTP id nv9-20020a17090b1b4900b001eca7560edcmr502319pjb.200.1657295232878; Fri, 08 Jul 2022 08:47:12 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Alex=20Benn=C3=A9e?= , Peter Maydell Subject: [RISU PATCH v4 02/29] Unify master_fd and apprentice_fd to comm_fd Date: Fri, 8 Jul 2022 21:16:33 +0530 Message-Id: <20220708154700.18682-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102e; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657297747586100001 Any one invocation cannot be both master and apprentice. Let's use only one variable for the file descriptor. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- risu.c | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/risu.c b/risu.c index 79b1092..059348f 100644 --- a/risu.c +++ b/risu.c @@ -30,7 +30,7 @@ =20 void *memblock; =20 -int apprentice_fd, master_fd; +static int comm_fd; bool trace; size_t signal_count; =20 @@ -50,7 +50,7 @@ sigjmp_buf jmpbuf; =20 int read_sock(void *ptr, size_t bytes) { - return recv_data_pkt(master_fd, ptr, bytes); + return recv_data_pkt(comm_fd, ptr, bytes); } =20 int write_trace(void *ptr, size_t bytes) @@ -58,9 +58,9 @@ int write_trace(void *ptr, size_t bytes) size_t res; =20 #ifdef HAVE_ZLIB - if (master_fd =3D=3D STDOUT_FILENO) { + if (comm_fd =3D=3D STDOUT_FILENO) { #endif - res =3D write(master_fd, ptr, bytes); + res =3D write(comm_fd, ptr, bytes); #ifdef HAVE_ZLIB } else { res =3D gzwrite(gz_trace_file, ptr, bytes); @@ -71,14 +71,14 @@ int write_trace(void *ptr, size_t bytes) =20 void respond_sock(int r) { - send_response_byte(master_fd, r); + send_response_byte(comm_fd, r); } =20 /* Apprentice function */ =20 int write_sock(void *ptr, size_t bytes) { - return send_data_pkt(apprentice_fd, ptr, bytes); + return send_data_pkt(comm_fd, ptr, bytes); } =20 int read_trace(void *ptr, size_t bytes) @@ -86,9 +86,9 @@ int read_trace(void *ptr, size_t bytes) size_t res; =20 #ifdef HAVE_ZLIB - if (apprentice_fd =3D=3D STDIN_FILENO) { + if (comm_fd =3D=3D STDIN_FILENO) { #endif - res =3D read(apprentice_fd, ptr, bytes); + res =3D read(comm_fd, ptr, bytes); #ifdef HAVE_ZLIB } else { res =3D gzread(gz_trace_file, ptr, bytes); @@ -218,11 +218,11 @@ int master(void) { if (sigsetjmp(jmpbuf, 1)) { #ifdef HAVE_ZLIB - if (trace && master_fd !=3D STDOUT_FILENO) { + if (trace && comm_fd !=3D STDOUT_FILENO) { gzclose(gz_trace_file); } #endif - close(master_fd); + close(comm_fd); if (trace) { fprintf(stderr, "trace complete after %zd checkpoints\n", signal_count); @@ -244,11 +244,11 @@ int apprentice(void) { if (sigsetjmp(jmpbuf, 1)) { #ifdef HAVE_ZLIB - if (trace && apprentice_fd !=3D STDIN_FILENO) { + if (trace && comm_fd !=3D STDIN_FILENO) { gzclose(gz_trace_file); } #endif - close(apprentice_fd); + close(comm_fd); fprintf(stderr, "finished early after %zd checkpoints\n", signal_c= ount); return report_match_status(true); } @@ -375,31 +375,31 @@ int main(int argc, char **argv) if (ismaster) { if (trace) { if (strcmp(trace_fn, "-") =3D=3D 0) { - master_fd =3D STDOUT_FILENO; + comm_fd =3D STDOUT_FILENO; } else { - master_fd =3D open(trace_fn, O_WRONLY | O_CREAT, S_IRWXU); + comm_fd =3D open(trace_fn, O_WRONLY | O_CREAT, S_IRWXU); #ifdef HAVE_ZLIB - gz_trace_file =3D gzdopen(master_fd, "wb9"); + gz_trace_file =3D gzdopen(comm_fd, "wb9"); #endif } } else { fprintf(stderr, "master port %d\n", port); - master_fd =3D master_connect(port); + comm_fd =3D master_connect(port); } return master(); } else { if (trace) { if (strcmp(trace_fn, "-") =3D=3D 0) { - apprentice_fd =3D STDIN_FILENO; + comm_fd =3D STDIN_FILENO; } else { - apprentice_fd =3D open(trace_fn, O_RDONLY); + comm_fd =3D open(trace_fn, O_RDONLY); #ifdef HAVE_ZLIB - gz_trace_file =3D gzdopen(apprentice_fd, "rb"); + gz_trace_file =3D gzdopen(comm_fd, "rb"); #endif } } else { fprintf(stderr, "apprentice host %s port %d\n", hostname, port= ); - apprentice_fd =3D apprentice_connect(hostname, port); + comm_fd =3D apprentice_connect(hostname, port); } return apprentice(); } --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657297286; cv=none; d=zohomail.com; s=zohoarc; b=cNnMKl80MQDxRiD5LrOqrQdqqGo2rZk0RxTu2s+7EaK0YHcwWuAdt8DZyCI0PP1ynvbqXtLYMp7c6bV6RsTspiHW7o4V0qBf2Zm/1bpkqFxUNjsHh+pkGqkeRhIB19omCOmTz6x0KaFPIHmqBvM0WbOsc3t/FZvxQpjAvnxCh5k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657297286; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=X3HkBOy76gPUx/AerMnT/Pi7Lr8ImXW6FCDVZLVLx8A=; b=G4SN3LjxBOnpNrSAwxvNrcWudcKyCa8CKmoTMNXe/c1ROCQZ4EGCQ1wEviQfRN88nkTfCBKdNBcQleKve29cMLUk+ZnKxQxEq9MO4cFFHL4mbMjw+amMPB7wHrMBbSqAsDjnvy627OHL6FGEe/giNBId4enLUTrjflNjSHnyu9I= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657297286569134.79901683247624; Fri, 8 Jul 2022 09:21:26 -0700 (PDT) Received: from localhost ([::1]:38180 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9qjN-0006qx-7x for importer@patchew.org; Fri, 08 Jul 2022 12:21:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44478) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qCN-00049N-7a for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:19 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]:33516) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qCL-0002P4-Hi for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:18 -0400 Received: by mail-pj1-x1036.google.com with SMTP id j1-20020a17090aeb0100b001ef777a7befso1886999pjz.0 for ; Fri, 08 Jul 2022 08:47:17 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.47.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:47:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=X3HkBOy76gPUx/AerMnT/Pi7Lr8ImXW6FCDVZLVLx8A=; b=SxdaRVYRJDPH3zg3QYyQIu17dr/IVBcHr5XUHILGbaLIQeYPWWgY+954kvq/VXxQiN Jw/KmgOemd78xk8dMQSinK5JUeBmDvrtLd3N3LOo1Vwhm0gqkdKRvaaFspYV1/5LilqS 9MTTRuLtyCmJdgPIwtNvjy8ca8Hwf0tydMm1zVPJq/EAJVPbf4FM5OTdb3HDhp1fA5Pp IQjZNzJVOm2u92lYvJe3YF+/hgYEqP9+NID9iI8ItveucyWvXTbBzHeBDP6Jr+kMNcqI Y/gJovEEwgzDZbsKoeRKzz73ZtfMcQ38u6QbVkw0g/Y0x3nxNFvsIRoRbD9LTpZ+qxRB iNfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=X3HkBOy76gPUx/AerMnT/Pi7Lr8ImXW6FCDVZLVLx8A=; b=E+YS8uf/uVG9bovpZK08NODums+not2tIjm4kW5n/0GzV021399pgOscrW/XAUZZ/B EH8q5gUD4NE1pSDUY9yZA5b8v1kw6Nes/qoUVAHj7KdFyxk5DSAB5Aaan6wBHl6enCfz tdD/lyY2aDUEy/IUNA/uBq4WmNbxmIdGQLUdKRNb+UOmHwyn3aClPJOtCV/r8jLtDbfH 591/9Pvt+/m4Cr3HzUgQtYf3MqpWJfaogj6KGuRZj2rjI3cUVVocygR5MM5K7GqcAuN/ 7vgDTzb/UdOc8Ag+Y8Ufmk70YwknyPn4jK8usZKfPyOyjPtFAKTz4N1ZDYJMFN2+J0cx Heeg== X-Gm-Message-State: AJIora+uGF+uNrsag5DqmGD9UzT0eugZKAZvLYxMIdyND5wMfPd35uru XWqXAfIKVC0RopjGlk9rW4ocnd7mby6rFBtM X-Google-Smtp-Source: AGRyM1stgki4yW3XROy9RMdCOwp9zcPIontz0Fu43DMTFhuvoAkmHnBu/kffjye3WYG+WezWa5i8Gg== X-Received: by 2002:a17:90a:3e09:b0:1ef:8399:398b with SMTP id j9-20020a17090a3e0900b001ef8399398bmr482263pjc.39.1657295236189; Fri, 08 Jul 2022 08:47:16 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Alex=20Benn=C3=A9e?= , Peter Maydell Subject: [RISU PATCH v4 03/29] Hoist trace file and socket opening Date: Fri, 8 Jul 2022 21:16:34 +0530 Message-Id: <20220708154700.18682-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1036; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1036.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657297288533100001 We will want to share this code with --dump. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- v3: Hoist socket connecting as well as trace file opening. --- risu.c | 49 +++++++++++++++++++++++-------------------------- 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/risu.c b/risu.c index 059348f..2f6a677 100644 --- a/risu.c +++ b/risu.c @@ -363,6 +363,29 @@ int main(int argc, char **argv) } } =20 + if (trace) { + if (strcmp(trace_fn, "-") =3D=3D 0) { + comm_fd =3D ismaster ? STDOUT_FILENO : STDIN_FILENO; + } else { + if (ismaster) { + comm_fd =3D open(trace_fn, O_WRONLY | O_CREAT, S_IRWXU); + } else { + comm_fd =3D open(trace_fn, O_RDONLY); + } +#ifdef HAVE_ZLIB + gz_trace_file =3D gzdopen(comm_fd, ismaster ? "wb9" : "rb"); +#endif + } + } else { + if (ismaster) { + fprintf(stderr, "master port %d\n", port); + comm_fd =3D master_connect(port); + } else { + fprintf(stderr, "apprentice host %s port %d\n", hostname, port= ); + comm_fd =3D apprentice_connect(hostname, port); + } + } + imgfile =3D argv[optind]; if (!imgfile) { fprintf(stderr, "Error: must specify image file name\n\n"); @@ -373,34 +396,8 @@ int main(int argc, char **argv) load_image(imgfile); =20 if (ismaster) { - if (trace) { - if (strcmp(trace_fn, "-") =3D=3D 0) { - comm_fd =3D STDOUT_FILENO; - } else { - comm_fd =3D open(trace_fn, O_WRONLY | O_CREAT, S_IRWXU); -#ifdef HAVE_ZLIB - gz_trace_file =3D gzdopen(comm_fd, "wb9"); -#endif - } - } else { - fprintf(stderr, "master port %d\n", port); - comm_fd =3D master_connect(port); - } return master(); } else { - if (trace) { - if (strcmp(trace_fn, "-") =3D=3D 0) { - comm_fd =3D STDIN_FILENO; - } else { - comm_fd =3D open(trace_fn, O_RDONLY); -#ifdef HAVE_ZLIB - gz_trace_file =3D gzdopen(comm_fd, "rb"); -#endif - } - } else { - fprintf(stderr, "apprentice host %s port %d\n", hostname, port= ); - comm_fd =3D apprentice_connect(hostname, port); - } return apprentice(); } } --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657297722; cv=none; d=zohomail.com; s=zohoarc; b=jBqWruP+PO2yXN7ScYc/molFtFUZEX0CWQINZW+qluUTd7IqCzxTlaxlM2Md/ZDwA61RYvAk1RPk/olqrO42C/8TVBwp3netYOqMplrTxKGZBPyhK0YIEBQS1efE6cRtCZuq/j8JFRRFmeLmzabxcaCCmcx7QxYtVuYdtPAMb7M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657297722; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=opEz47JE2jF71CZWR53DtauRYpdQpOBqzfW1h3P7OCY=; b=QdSe1jZHVCQHVYR1EU8ucEx1haB8jLGLDFkWGS0nfjC+9R+qWR9iJfM/M8YMa7MfZxXoiPASYBBrIEdEO8eNQmS0yaLREqdxtgOh/SB+dpwMdGwMdUn6qmpGR9390r71g8KbFjK8DW0hF/D1Wqu3PT8L1CK/pANkbh6P5Y78lNc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657297722316733.8313128551391; Fri, 8 Jul 2022 09:28:42 -0700 (PDT) Received: from localhost ([::1]:56014 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9qqP-00035e-8e for importer@patchew.org; Fri, 08 Jul 2022 12:28:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44508) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qCP-0004Is-JR for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:22 -0400 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]:38450) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qCO-0002Mw-1W for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:21 -0400 Received: by mail-pl1-x632.google.com with SMTP id m14so16675721plg.5 for ; Fri, 08 Jul 2022 08:47:19 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.47.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:47:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=opEz47JE2jF71CZWR53DtauRYpdQpOBqzfW1h3P7OCY=; b=uzmrF8gVa/Q/F0vYfgs0h1pR8CtiCJAtSDfJEFH9PcSvREy69QAgJycgleaiZUzlmn 7tvhoPKKVRA7LxK/BtnhlUyPcfRougztvfCgRNV/wVaYAYVxS4j4ybQlQDE4V1fdlLs6 M5okr4wH0dJv8g15Zv0GQtIbTL91AcguCF51he06vNRVIS6jkJPHZLQnlJqQXhR3gukz J/hKH267tbhqnNeoHNzq4YhPGxVkch0Vyxh+2lQ4gEAZTVReVsiTCQ77Keyu6yc1KS5r lTKb9ic3dea3UO6WHYQcz7MviMKbsRVd3o+4VHyXCsp8c0bUmzJJtT9cTIftuYzOK/mA lmEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=opEz47JE2jF71CZWR53DtauRYpdQpOBqzfW1h3P7OCY=; b=FYU3J6TkgMsQdZKZTO+AIxOsoWc/8lZeyGDgHDgoEOFYfet5TdhckqUCsdWDnVlIXD wbDFTgYrxykG7ZVqcw9QEpEHCQXOoBpoZkPT1gMq2fdoWS3vw6xNOdJK4EpL5buOuw/Y Ux4Q06SjzFpYPefqze+CcuJBPy4tDk8ztWIbk17zebm9oS5ldb2K8bX5fUOOy71saJRj SFu8XsRo9n5FVmiGCXPokDZfOxIE1agKebyzFeaQcFag5JSfHOeh2n+hSC1YIfx13CZo CC8U1NtTYRTD20DvIrY+E8EUx/ScfcycXNWCiPMvWultddBj4mbfwPI9hiP0JX5GoDky dYHg== X-Gm-Message-State: AJIora8JLkuCsY5+C4HJZZVoHugityQeXTF73ogdk9A/3rBDro8zcY9o gDFxs7WEzdP7YOXBuCHqDLmzZ6MacWYE9SPa X-Google-Smtp-Source: AGRyM1vV9H43Wc+MsbTyEjIUDQ0dGoUzCl2Us9KOYlegG+fc641Y0A76lgFrF4PhvYMT0stkbL/Luw== X-Received: by 2002:a17:902:ea09:b0:16b:a264:381f with SMTP id s9-20020a170902ea0900b0016ba264381fmr4256745plg.150.1657295239294; Fri, 08 Jul 2022 08:47:19 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Alex=20Benn=C3=A9e?= , Peter Maydell Subject: [RISU PATCH v4 04/29] Adjust tracefile open for write Date: Fri, 8 Jul 2022 21:16:35 +0530 Message-Id: <20220708154700.18682-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::632; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x632.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657297723475100001 Truncate the new output file. Rely on umask to remove group+other file permissions, if desired. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- risu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/risu.c b/risu.c index 2f6a677..819b786 100644 --- a/risu.c +++ b/risu.c @@ -368,7 +368,7 @@ int main(int argc, char **argv) comm_fd =3D ismaster ? STDOUT_FILENO : STDIN_FILENO; } else { if (ismaster) { - comm_fd =3D open(trace_fn, O_WRONLY | O_CREAT, S_IRWXU); + comm_fd =3D open(trace_fn, O_WRONLY | O_CREAT | O_TRUNC, 0= 666); } else { comm_fd =3D open(trace_fn, O_RDONLY); } --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657295693; cv=none; d=zohomail.com; s=zohoarc; b=nBJ3pmno+eN7ijDLk1fWYov4OkK+gl2qIqLnXBz/nkr/xXMWJXH0WYzY3li+O1xtvGcpyA7wX9HNlGx9f75wVfcs0HCstphURpSEC8FhACjeggI6Ma3/0ZIIBcORPKCrJV+SgPPiQgh20Ji7vmfkVd1iJfprVn7LZ+F2vz4TW/4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657295693; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=FL72vkFvgwgvsAn8p5rzjDKtjVBK69qL0lGF/pFqJgo=; b=RESLUb37h9VMi7Hu6m5KptNKoW17XOQ4Wm5WiOjEJX+KvE5TBIS8tsNvID1HVPEqAKNwKsg++2uDlboG6Itd2Yvu2/PK1DWCSXc9ZhgfAzEGPOcy1TiZ0BhtLqjkN+6VQ6sbU2Ynjw37njHtnBFk/sdPEJjk6blO1CIWM4359ZY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657295692997547.6537857749524; Fri, 8 Jul 2022 08:54:52 -0700 (PDT) Received: from localhost ([::1]:40682 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9qJf-0002yI-SX for importer@patchew.org; Fri, 08 Jul 2022 11:54:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44542) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qCT-0004Wd-UU for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:26 -0400 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]:39522) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qCR-0002RF-W9 for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:25 -0400 Received: by mail-pj1-x102e.google.com with SMTP id v4-20020a17090abb8400b001ef966652a3so2310385pjr.4 for ; Fri, 08 Jul 2022 08:47:23 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.47.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:47:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=FL72vkFvgwgvsAn8p5rzjDKtjVBK69qL0lGF/pFqJgo=; b=veVyr+8xjmrlWnpVTUg4LxeNFhQkz8OUr1tIvFsfkMaqoMXCynvRtcMDnEebrSPZrT tjyDpOWBUo+XUaOeqKnNAZ+cwn3GUkH0bwKc/ub/LQ0ap744NlvIQpyH5x4uVUoP9V3k egT9eNteTrxk9iDoK5rH3egujD+mP9zUtR6bCZNG3E23mh0VEbnKnOJd7B1vwoBDJGEN GuU3K0dlOblZRvatfZzrKaxGTGiFJ1iXuSfn5XaH07xAvM7VQNcvSLu7Hrl70RohxppZ 6NBkANZm4z62+jnV+0+lR/Loz5F0F8Ry0gyREu0L9VbjekCUIfhKKTe6lgZOMylS96YU bQLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=FL72vkFvgwgvsAn8p5rzjDKtjVBK69qL0lGF/pFqJgo=; b=Tde04S9R901Eh13zhm4AJnTP+/+iLX53zwmgc005UBp/w0kR18p2fEv/FP1n568tcf ZjChDToZykrZ6Urm1ptWMkQLV/sNiLigYHFSTUA49fW1G4f1h07mj5GWEjBAjJPdMPQS ++KDlv0Z8islqMmxgSIbQu22GTYekICKJMDYtQkn2ij/qxewkpukEYPdNMeRd9l4ZcNQ axaDaUD+ZQcOvAqMzo1ONaZQ0+DGBHBwWSmrt7AxWx5Aq2WfB6Uk5sEziMDlQMFiLjQv zd1duoDWCfmllXWD9dYfux1mqjPRYWqO+AZj9mWuQkPfiLFKtOgRzRBEgKUwR2jPZvfX UzfQ== X-Gm-Message-State: AJIora/lkoc+L/34atbywRFgAkK5rEDqEH93TdvSd8gfA5FwqH4w+1Wa gVOrK5jF2yfIkZ2hphFLKCgg0rhu3oV9PKH7 X-Google-Smtp-Source: AGRyM1vTrghCJBms1OFe+AzeQXPeMKRwz2Cpm22VHZ3XRlWpXcCt+CVBjDIc5LyONt1WrPzDvRz52g== X-Received: by 2002:a17:903:26d3:b0:16b:d80c:c068 with SMTP id jg19-20020a17090326d300b0016bd80cc068mr4311152plb.76.1657295242646; Fri, 08 Jul 2022 08:47:22 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Alex=20Benn=C3=A9e?= , Peter Maydell Subject: [RISU PATCH v4 05/29] Use EXIT_FAILURE, EXIT_SUCCESS Date: Fri, 8 Jul 2022 21:16:36 +0530 Message-Id: <20220708154700.18682-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102e; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657295693914100001 Some of the time we exit via the return value from main. This can make it easier to tell what it is we're returning. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- comms.c | 26 +++++++++++++------------- risu.c | 22 +++++++++++----------- risu_reginfo_aarch64.c | 4 ++-- risu_reginfo_i386.c | 2 +- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/comms.c b/comms.c index 6946fd9..861e845 100644 --- a/comms.c +++ b/comms.c @@ -31,7 +31,7 @@ int apprentice_connect(const char *hostname, int port) sock =3D socket(PF_INET, SOCK_STREAM, 0); if (sock < 0) { perror("socket"); - exit(1); + exit(EXIT_FAILURE); } struct hostent *hostinfo; sa.sin_family =3D AF_INET; @@ -39,12 +39,12 @@ int apprentice_connect(const char *hostname, int port) hostinfo =3D gethostbyname(hostname); if (!hostinfo) { fprintf(stderr, "Unknown host %s\n", hostname); - exit(1); + exit(EXIT_FAILURE); } sa.sin_addr =3D *(struct in_addr *) hostinfo->h_addr; if (connect(sock, (struct sockaddr *) &sa, sizeof(sa)) < 0) { perror("connect"); - exit(1); + exit(EXIT_FAILURE); } return sock; } @@ -56,13 +56,13 @@ int master_connect(int port) sock =3D socket(PF_INET, SOCK_STREAM, 0); if (sock < 0) { perror("socket"); - exit(1); + exit(EXIT_FAILURE); } int sora =3D 1; if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &sora, sizeof(sora)) != =3D 0) { perror("setsockopt(SO_REUSEADDR)"); - exit(1); + exit(EXIT_FAILURE); } =20 sa.sin_family =3D AF_INET; @@ -70,11 +70,11 @@ int master_connect(int port) sa.sin_addr.s_addr =3D htonl(INADDR_ANY); if (bind(sock, (struct sockaddr *) &sa, sizeof(sa)) < 0) { perror("bind"); - exit(1); + exit(EXIT_FAILURE); } if (listen(sock, 1) < 0) { perror("listen"); - exit(1); + exit(EXIT_FAILURE); } /* Just block until we get a connection */ fprintf(stderr, "master: waiting for connection on port %d...\n", @@ -84,7 +84,7 @@ int master_connect(int port) int nsock =3D accept(sock, (struct sockaddr *) &csa, &csasz); if (nsock < 0) { perror("accept"); - exit(1); + exit(EXIT_FAILURE); } /* We're done with the server socket now */ close(sock); @@ -104,7 +104,7 @@ static void recv_bytes(int sock, void *pkt, int pktlen) continue; } perror("read failed"); - exit(1); + exit(EXIT_FAILURE); } pktlen -=3D i; p +=3D i; @@ -127,7 +127,7 @@ static void recv_and_discard_bytes(int sock, int pktlen) continue; } perror("read failed"); - exit(1); + exit(EXIT_FAILURE); } pktlen -=3D i; } @@ -186,12 +186,12 @@ int send_data_pkt(int sock, void *pkt, int pktlen) =20 if (safe_writev(sock, iov, 2) =3D=3D -1) { perror("writev failed"); - exit(1); + exit(EXIT_FAILURE); } =20 if (read(sock, &resp, 1) !=3D 1) { perror("read failed"); - exit(1); + exit(EXIT_FAILURE); } return resp; } @@ -217,6 +217,6 @@ void send_response_byte(int sock, int resp) unsigned char r =3D resp; if (write(sock, &r, 1) !=3D 1) { perror("write failed"); - exit(1); + exit(EXIT_FAILURE); } } diff --git a/risu.c b/risu.c index 819b786..26dc116 100644 --- a/risu.c +++ b/risu.c @@ -153,13 +153,13 @@ void apprentice_sigill(int sig, siginfo_t *si, void *= uc) return; case 1: /* end of test */ - exit(0); + exit(EXIT_SUCCESS); default: /* mismatch */ if (trace) { siglongjmp(jmpbuf, 1); } - exit(1); + exit(EXIT_FAILURE); } } =20 @@ -173,7 +173,7 @@ static void set_sigill_handler(void (*fn) (int, siginfo= _t *, void *)) sigemptyset(&sa.sa_mask); if (sigaction(SIGILL, &sa, 0) !=3D 0) { perror("sigaction"); - exit(1); + exit(EXIT_FAILURE); } } =20 @@ -190,11 +190,11 @@ void load_image(const char *imgfile) int fd =3D open(imgfile, O_RDONLY); if (fd < 0) { fprintf(stderr, "failed to open image file %s\n", imgfile); - exit(1); + exit(EXIT_FAILURE); } if (fstat(fd, &st) !=3D 0) { perror("fstat"); - exit(1); + exit(EXIT_FAILURE); } size_t len =3D st.st_size; void *addr; @@ -207,7 +207,7 @@ void load_image(const char *imgfile) 0); if (!addr) { perror("mmap"); - exit(1); + exit(EXIT_FAILURE); } close(fd); image_start =3D addr; @@ -226,7 +226,7 @@ int master(void) if (trace) { fprintf(stderr, "trace complete after %zd checkpoints\n", signal_count); - return 0; + return EXIT_SUCCESS; } else { return report_match_status(false); } @@ -237,7 +237,7 @@ int master(void) fprintf(stderr, "starting image\n"); image_start(); fprintf(stderr, "image returned unexpectedly\n"); - exit(1); + return EXIT_FAILURE; } =20 int apprentice(void) @@ -258,7 +258,7 @@ int apprentice(void) fprintf(stderr, "starting image\n"); image_start(); fprintf(stderr, "image returned unexpectedly\n"); - exit(1); + return EXIT_FAILURE; } =20 int ismaster; @@ -355,7 +355,7 @@ int main(int argc, char **argv) break; case '?': usage(); - exit(1); + return EXIT_FAILURE; default: assert(c >=3D FIRST_ARCH_OPT); process_arch_opt(c, optarg); @@ -390,7 +390,7 @@ int main(int argc, char **argv) if (!imgfile) { fprintf(stderr, "Error: must specify image file name\n\n"); usage(); - exit(1); + return EXIT_FAILURE; } =20 load_image(imgfile); diff --git a/risu_reginfo_aarch64.c b/risu_reginfo_aarch64.c index 00d1c8b..028c690 100644 --- a/risu_reginfo_aarch64.c +++ b/risu_reginfo_aarch64.c @@ -51,7 +51,7 @@ void process_arch_opt(int opt, const char *arg) =20 if (test_sve <=3D 0 || test_sve > SVE_VQ_MAX) { fprintf(stderr, "Invalid value for VQ (1-%d)\n", SVE_VQ_MAX); - exit(1); + exit(EXIT_FAILURE); } want =3D sve_vl_from_vq(test_sve); got =3D prctl(PR_SVE_SET_VL, want); @@ -62,7 +62,7 @@ void process_arch_opt(int opt, const char *arg) fprintf(stderr, "Unsupported value for VQ (%d !=3D %d)\n", test_sve, (int)sve_vq_from_vl(got)); } - exit(1); + exit(EXIT_FAILURE); } #else abort(); diff --git a/risu_reginfo_i386.c b/risu_reginfo_i386.c index 194e0ad..60fc239 100644 --- a/risu_reginfo_i386.c +++ b/risu_reginfo_i386.c @@ -69,7 +69,7 @@ void process_arch_opt(int opt, const char *arg) fprintf(stderr, "Unable to parse '%s' in '%s' into an xfeatures intege= r mask\n", endptr, arg); - exit(1); + exit(EXIT_FAILURE); } } } --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657297488; cv=none; d=zohomail.com; s=zohoarc; b=YkyFANa32ker8mnAITypvrRhnJIG9LmT6dMID7XJH3hoxzBD2+hSb/JkE0FlZMlyEQeeRDkq0Rms8oGKVEkT4oGZS4ULxf5j9y/7lrLDezAeE9Zlu+4WPV8vqohsOFinpiToBelgxY86J8kLCd2ojgkXb4M/O3i1UujR83giiE4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657297488; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=K0p7VBr3aZVoDI9pUwFSD+XBTDwjM0eTDqSKAizakb0=; b=LDnyT/SsoeIg67bUyRDlxlLiyl5qDWgIKhOXTK8+iB4IYieKtQdjFpv7YvfkxCLBXXfHmDXbPhAyX67ogbrKkrH6ubEnr8+e6QKQS2zxuseKKForeoNqzHN+e8Is2hIcCGr7rxHnwKWCMoQza2tjlxKx6aJDwOFUGgiT3eGST8g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657297488747507.8216181987044; Fri, 8 Jul 2022 09:24:48 -0700 (PDT) Received: from localhost ([::1]:47756 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9qmd-0005BF-IY for importer@patchew.org; Fri, 08 Jul 2022 12:24:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44572) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qCW-0004bu-BE for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:28 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]:44988) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qCU-0002Rb-Q1 for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:28 -0400 Received: by mail-pj1-x102a.google.com with SMTP id o3-20020a17090a744300b001ef8f7f3dddso2145581pjk.3 for ; Fri, 08 Jul 2022 08:47:26 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.47.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:47:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=K0p7VBr3aZVoDI9pUwFSD+XBTDwjM0eTDqSKAizakb0=; b=tBZ9gPj0DZBefJt/34Pl0I6eyKEqPtgKbpHB8j1hu/pI/eH8IeNpmxNIve/MA/i0v0 bZ6W36dIcwyZMj6iJb4Hss65t7DF9E8kPim71tWkEtBQdEkHkS/ZyTMHxXpuiofYGmRx GHyBTB4a1JSDNNUwJQYDVIunNQcPJxE1RrFWhNEXKYpJH2uh4CbLf9uYBfhXIu2EuDRo B/kZGFyv4gVxq318jo5jN9NKAL4WDYFMo6G6vjKc0B7K4TTMuNoGlBq8L0a5zeK6bxKw m0aOVb8TEq1ixaNeKhzgy3QfVenNYYyENp7AJMbhRQq9XxoOFv0a+2dUWIcnJxAZl5si xdWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=K0p7VBr3aZVoDI9pUwFSD+XBTDwjM0eTDqSKAizakb0=; b=bKtclX8hKzFx3jNe8ZDmyswfNBxBKnbC29yG1IHMMav6PTo2DAMxxfZ7bIJU/ErlT1 93G/R5SGAuLWeMuqMnFtgsrNXeWY+oEkqt+5ti7zHYOHieHwdSm0ZEDBJgFV2WASj9Mj 9QM/NdKv4Zp1oifdyTtu0yD3PkQko0A09jAYWdrLN9Sy0LSzrT5erTskmf18p1FXaiRl resO4a4OZTusAxrK8ZpW8jamb/TqcJx8DVInbwdRs9hHSVGCwXkd6dBiX4rju/6elIPS GPNVr4prOgiq6XuR+h+30/gT83vkhLYrJBPkuxP2yMMDl8e+dv5LGijlvydRsX3vu4UG X9XA== X-Gm-Message-State: AJIora/NEfduxXux2sWM8kdx0juOdGvGqwIRM6N9lAWxxkBZeY41r4DM Zusa698YMvRzjuM1qHu44AzMx2Zdph9LpkBn X-Google-Smtp-Source: AGRyM1t5+nAuB4iZtxFm/R2ZRCLB2DfCr4ZUkG/ZVJsO0YGDC0CZmHkfygmqaggK3A4SxHPI3G1FKQ== X-Received: by 2002:a17:90b:4b49:b0:1ef:a03e:b671 with SMTP id mi9-20020a17090b4b4900b001efa03eb671mr525032pjb.108.1657295245521; Fri, 08 Jul 2022 08:47:25 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Alex=20Benn=C3=A9e?= Subject: [RISU PATCH v4 06/29] Make some risu.c symbols static Date: Fri, 8 Jul 2022 21:16:37 +0530 Message-Id: <20220708154700.18682-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102a; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657297490358100001 These are unused in other translation units. Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Richard Henderson --- risu.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/risu.c b/risu.c index 26dc116..ab17c71 100644 --- a/risu.c +++ b/risu.c @@ -31,18 +31,18 @@ void *memblock; =20 static int comm_fd; -bool trace; -size_t signal_count; +static bool trace; +static size_t signal_count; =20 #ifdef HAVE_ZLIB #include -gzFile gz_trace_file; +static gzFile gz_trace_file; #define TRACE_TYPE "compressed" #else #define TRACE_TYPE "uncompressed" #endif =20 -sigjmp_buf jmpbuf; +static sigjmp_buf jmpbuf; =20 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) =20 @@ -113,7 +113,7 @@ void respond_trace(int r) } } =20 -void master_sigill(int sig, siginfo_t *si, void *uc) +static void master_sigill(int sig, siginfo_t *si, void *uc) { int r; signal_count++; @@ -135,7 +135,7 @@ void master_sigill(int sig, siginfo_t *si, void *uc) } } =20 -void apprentice_sigill(int sig, siginfo_t *si, void *uc) +static void apprentice_sigill(int sig, siginfo_t *si, void *uc) { int r; signal_count++; @@ -180,9 +180,9 @@ static void set_sigill_handler(void (*fn) (int, siginfo= _t *, void *)) typedef void entrypoint_fn(void); =20 uintptr_t image_start_address; -entrypoint_fn *image_start; +static entrypoint_fn *image_start; =20 -void load_image(const char *imgfile) +static void load_image(const char *imgfile) { /* Load image file into memory as executable */ struct stat st; @@ -214,7 +214,7 @@ void load_image(const char *imgfile) image_start_address =3D (uintptr_t) addr; } =20 -int master(void) +static int master(void) { if (sigsetjmp(jmpbuf, 1)) { #ifdef HAVE_ZLIB @@ -240,7 +240,7 @@ int master(void) return EXIT_FAILURE; } =20 -int apprentice(void) +static int apprentice(void) { if (sigsetjmp(jmpbuf, 1)) { #ifdef HAVE_ZLIB @@ -261,9 +261,9 @@ int apprentice(void) return EXIT_FAILURE; } =20 -int ismaster; +static int ismaster; =20 -void usage(void) +static void usage(void) { fprintf(stderr, "Usage: risu [--master] [--host ] [--port ] " --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657297888; cv=none; d=zohomail.com; s=zohoarc; b=dw57C08rPn7yQvmWnrkCCNYHcuh5Xp+Fjr3H2u7X55JeEvdXvYwWR8ESZPKNcV3uFNVZJyrMmO5xIo200mwsf/EycK9wBdcsRb0mT8s3tDR0DcO7B1Up/yyySE6WzNAmjwEQuf9asi/WFKCU//4i4PqjvlbJm+tTczBc1FXOFYw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657297888; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=q073Mp4VcMDO3I3Vy8AI4TpHUeDs1rzP3KM+D2Dojc0=; b=HxM9llDlwJcTkR2xeIm24CqwCJIw+LLxfXeeFJ6c9ae3Per+8EH2xO4POSUZTL6Ei/d6rCxbjpu/ha2KYdJhF8X/FmrFmsyBrFRTzDWABHdawDglB2ZAOHIAhl0ZhenZQtuenTcmM0L2qYu1QZPKnGPqcvWGH83CVGFAlnGI+wg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16572978888411002.830789586852; Fri, 8 Jul 2022 09:31:28 -0700 (PDT) Received: from localhost ([::1]:34142 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9qt5-0007ri-AQ for importer@patchew.org; Fri, 08 Jul 2022 12:31:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44632) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qCa-0004qJ-8i for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:32 -0400 Received: from mail-pf1-x42f.google.com ([2607:f8b0:4864:20::42f]:33291) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qCY-0002Rz-8x for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:31 -0400 Received: by mail-pf1-x42f.google.com with SMTP id n12so23903068pfq.0 for ; Fri, 08 Jul 2022 08:47:29 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.47.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:47:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=q073Mp4VcMDO3I3Vy8AI4TpHUeDs1rzP3KM+D2Dojc0=; b=fgKbjynVbMpZLRFnegJPE3DU229xWRdL/RcAZA3xZHUUrpy9bIyhxsExtYz95Wty6V k1wQXM40TezwxDwBleIGmj1IMqDUuz76zAviOLhY0mMyo4N5g+wtpNh7wxhho216Vodu b5hIW7HNDWvTiEg7rGBCdWEJIVF6hFVUamJNvawstYqUvpCaf3Cm0PHEvdmzGBDSck8E xFJZHtuRHToCEu1BK7PFgnUn49D8t0WaiKd87+I+jmJMHuy8KgVrRx9IhiwHvkxR6q9y P4Q400tSpzUJNw9mvZJCkVoKry1/Yhs+TZ6+Sx5Dmu8xRVzgzShP3EYP7HORZ4Ohr9Us uiAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=q073Mp4VcMDO3I3Vy8AI4TpHUeDs1rzP3KM+D2Dojc0=; b=OwsNQ+ARx91AVu+p4FWcbx1rLTWV+NGURQ06vlI/tM+X/srEy0F4oiWFEJTJ8VSlK0 R5uwZMsjXWunW69nB5VYj5E6+gSYFrZOtcy+4fU64s7IlAnfKrRcUwZWtuJEixxYnuqt PSPPRZuPgSmYviV47JYxbXcdvZ8mIonzA8OOWho+4ENUinpMcfwoWJ5NkAU3K47MDVBa lAZOOpbclr1gYcM87lE84DX9UPeva9MZ1g9Lr8sNf0wkiE5blmRQzkoPTjEB2LVb4Odp Zo5KAAzLrKFNWMcwVVRxZcVLpo/w3anmZyYo1uWjMHwMbhw6djPwOKRA9Qiyb7sHLnlg 2VhA== X-Gm-Message-State: AJIora/caY20iDATAjL2Lp5hSDcnq0UZ9iatmPDl0EcpYQTe0VMf1bQg C47xYIG1g03HxcQGw7+LYnaOYQyBFulzahR+ X-Google-Smtp-Source: AGRyM1sc3OWUt5wzuqL+vIsTEiSb9rpjnX01UInnjEwf+D3HNcc2gGlnhmeRYcyZ3YuR2nxstFx8bA== X-Received: by 2002:a63:e658:0:b0:40d:dfde:89f7 with SMTP id p24-20020a63e658000000b0040ddfde89f7mr3857658pgj.178.1657295248857; Fri, 08 Jul 2022 08:47:28 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Alex=20Benn=C3=A9e?= Subject: [RISU PATCH v4 07/29] Add enum RisuOp Date: Fri, 8 Jul 2022 21:16:38 +0530 Message-Id: <20220708154700.18682-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::42f; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657297889106100001 Formalize the set of defines, plus -1, into an enum. Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Richard Henderson --- risu.h | 23 +++++++++++++++-------- reginfo.c | 32 +++++++++++++++++++------------- risu_aarch64.c | 6 +++--- risu_arm.c | 6 +++--- risu_i386.c | 4 ++-- risu_m68k.c | 4 ++-- risu_ppc64.c | 4 ++-- 7 files changed, 46 insertions(+), 33 deletions(-) diff --git a/risu.h b/risu.h index e2b4508..a7aa929 100644 --- a/risu.h +++ b/risu.h @@ -45,11 +45,17 @@ extern uintptr_t image_start_address; extern void *memblock; =20 /* Ops code under test can request from risu: */ -#define OP_COMPARE 0 -#define OP_TESTEND 1 -#define OP_SETMEMBLOCK 2 -#define OP_GETMEMBLOCK 3 -#define OP_COMPAREMEM 4 +typedef enum { + /* Any other sigill besides the destignated undefined insn. */ + OP_SIGILL =3D -1, + + /* These are generated by the designated undefined insn. */ + OP_COMPARE =3D 0, + OP_TESTEND =3D 1, + OP_SETMEMBLOCK =3D 2, + OP_GETMEMBLOCK =3D 3, + OP_COMPAREMEM =3D 4, +} RisuOp; =20 /* The memory block should be this long */ #define MEMBLOCKLEN 8192 @@ -114,10 +120,11 @@ void set_ucontext_paramreg(void *vuc, uint64_t value); /* Return the value of the parameter register from a reginfo. */ uint64_t get_reginfo_paramreg(struct reginfo *ri); =20 -/* Return the risu operation number we have been asked to do, - * or -1 if this was a SIGILL for a non-risuop insn. +/* + * Return the risu operation number we have been asked to do, + * or OP_SIGILL if this was a SIGILL for a non-risuop insn. */ -int get_risuop(struct reginfo *ri); +RisuOp get_risuop(struct reginfo *ri); =20 /* Return the PC from a reginfo */ uintptr_t get_pc(struct reginfo *ri); diff --git a/reginfo.c b/reginfo.c index 1b2a821..2d67c93 100644 --- a/reginfo.c +++ b/reginfo.c @@ -11,7 +11,7 @@ =20 #include #include - +#include #include "risu.h" =20 struct reginfo master_ri, apprentice_ri; @@ -25,7 +25,7 @@ int send_register_info(write_fn write_fn, void *uc) { struct reginfo ri; trace_header_t header; - int op; + RisuOp op; =20 reginfo_init(&ri, uc); op =3D get_risuop(&ri); @@ -38,11 +38,18 @@ int send_register_info(write_fn write_fn, void *uc) } =20 switch (op) { + case OP_COMPARE: case OP_TESTEND: - write_fn(&ri, reginfo_size()); - /* if we are tracing write_fn will return 0 unlike a remote - end, hence we force return of 1 here */ - return 1; + case OP_SIGILL: + /* + * Do a simple register compare on (a) explicit request + * (b) end of test (c) a non-risuop UNDEF + */ + if (write_fn(&ri, reginfo_size()) !=3D 0) { + return -1; + } + /* For OP_TEST_END, force return 1 to exit. */ + return op =3D=3D OP_TESTEND; case OP_SETMEMBLOCK: memblock =3D (void *)(uintptr_t)get_reginfo_paramreg(&ri); break; @@ -53,12 +60,8 @@ int send_register_info(write_fn write_fn, void *uc) case OP_COMPAREMEM: return write_fn(memblock, MEMBLOCKLEN); break; - case OP_COMPARE: default: - /* Do a simple register compare on (a) explicit request - * (b) end of test (c) a non-risuop UNDEF - */ - return write_fn(&ri, reginfo_size()); + abort(); } return 0; } @@ -74,8 +77,9 @@ int send_register_info(write_fn write_fn, void *uc) int recv_and_compare_register_info(read_fn read_fn, respond_fn resp_fn, void *uc) { - int resp =3D 0, op; + int resp =3D 0; trace_header_t header; + RisuOp op; =20 reginfo_init(&master_ri, uc); op =3D get_risuop(&master_ri); @@ -97,7 +101,7 @@ int recv_and_compare_register_info(read_fn read_fn, switch (op) { case OP_COMPARE: case OP_TESTEND: - default: + case OP_SIGILL: /* Do a simple register compare on (a) explicit request * (b) end of test (c) a non-risuop UNDEF */ @@ -130,6 +134,8 @@ int recv_and_compare_register_info(read_fn read_fn, } resp_fn(resp); break; + default: + abort(); } =20 return resp; diff --git a/risu_aarch64.c b/risu_aarch64.c index 492d141..f8a8412 100644 --- a/risu_aarch64.c +++ b/risu_aarch64.c @@ -29,16 +29,16 @@ uint64_t get_reginfo_paramreg(struct reginfo *ri) return ri->regs[0]; } =20 -int get_risuop(struct reginfo *ri) +RisuOp get_risuop(struct reginfo *ri) { /* Return the risuop we have been asked to do - * (or -1 if this was a SIGILL for a non-risuop insn) + * (or OP_SIGILL if this was a SIGILL for a non-risuop insn) */ uint32_t insn =3D ri->faulting_insn; uint32_t op =3D insn & 0xf; uint32_t key =3D insn & ~0xf; uint32_t risukey =3D 0x00005af0; - return (key !=3D risukey) ? -1 : op; + return (key !=3D risukey) ? OP_SIGILL : op; } =20 uintptr_t get_pc(struct reginfo *ri) diff --git a/risu_arm.c b/risu_arm.c index 5fcb2a5..a20bf73 100644 --- a/risu_arm.c +++ b/risu_arm.c @@ -56,17 +56,17 @@ uint64_t get_reginfo_paramreg(struct reginfo *ri) return ri->gpreg[0]; } =20 -int get_risuop(struct reginfo *ri) +RisuOp get_risuop(struct reginfo *ri) { /* Return the risuop we have been asked to do - * (or -1 if this was a SIGILL for a non-risuop insn) + * (or OP_SIGILL if this was a SIGILL for a non-risuop insn) */ uint32_t insn =3D ri->faulting_insn; int isz =3D ri->faulting_insn_size; uint32_t op =3D insn & 0xf; uint32_t key =3D insn & ~0xf; uint32_t risukey =3D (isz =3D=3D 2) ? 0xdee0 : 0xe7fe5af0; - return (key !=3D risukey) ? -1 : op; + return (key !=3D risukey) ? OP_SIGILL : op; } =20 uintptr_t get_pc(struct reginfo *ri) diff --git a/risu_i386.c b/risu_i386.c index 9962b8f..127e816 100644 --- a/risu_i386.c +++ b/risu_i386.c @@ -38,12 +38,12 @@ uint64_t get_reginfo_paramreg(struct reginfo *ri) return ri->gregs[REG_E(AX)]; } =20 -int get_risuop(struct reginfo *ri) +RisuOp get_risuop(struct reginfo *ri) { if ((ri->faulting_insn & 0xf8ffff) =3D=3D 0xc0b90f) { /* UD1 %xxx,%eax= */ return (ri->faulting_insn >> 16) & 7; } - return -1; + return OP_SIGILL; } =20 uintptr_t get_pc(struct reginfo *ri) diff --git a/risu_m68k.c b/risu_m68k.c index 1056eef..acdd57a 100644 --- a/risu_m68k.c +++ b/risu_m68k.c @@ -25,13 +25,13 @@ uint64_t get_reginfo_paramreg(struct reginfo *ri) return ri->gregs[R_A0]; } =20 -int get_risuop(struct reginfo *ri) +RisuOp get_risuop(struct reginfo *ri) { uint32_t insn =3D ri->faulting_insn; uint32_t op =3D insn & 0xf; uint32_t key =3D insn & ~0xf; uint32_t risukey =3D 0x4afc7000; - return (key !=3D risukey) ? -1 : op; + return (key !=3D risukey) ? OP_SIGILL : op; } =20 uintptr_t get_pc(struct reginfo *ri) diff --git a/risu_ppc64.c b/risu_ppc64.c index a3028f7..9df8d58 100644 --- a/risu_ppc64.c +++ b/risu_ppc64.c @@ -32,13 +32,13 @@ uint64_t get_reginfo_paramreg(struct reginfo *ri) return ri->gregs[0]; } =20 -int get_risuop(struct reginfo *ri) +RisuOp get_risuop(struct reginfo *ri) { uint32_t insn =3D ri->faulting_insn; uint32_t op =3D insn & 0xf; uint32_t key =3D insn & ~0xf; uint32_t risukey =3D 0x00005af0; - return (key !=3D risukey) ? -1 : op; + return (key !=3D risukey) ? OP_SIGILL : op; } =20 uintptr_t get_pc(struct reginfo *ri) --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657297691; cv=none; d=zohomail.com; s=zohoarc; b=gA1rKrFuABYMo+8hXYZtY/hOZJqw3dzMQyUIHoY7c2HpibZXE1Xm1MN14cCOfsyPiUcIMxElz7W3C9KQilaTtolTLV6dzZ5ijEnIVGnibzVPTUxR7iIBHaJ2n8rj2xD4xOEH+GVR67IzPS41TdkFtZScTAq8irCorqn+7lpPhLQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657297691; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=qhmfc0Bs2SrTe50tDkhCkofVbawYB7l8nD2/4Z7gVmI=; b=kYfijfS6dEd7ccunWoGXzuBIm/MvitYqJjpfq8fhPcDV1BPEpbmEz7e6NblI6DZeAXkojq+Cj/SpAZ4cVJSRt/JJvWq4r9bX7RCcqgHxKSw4Wo8kED4/lJSTMVtEJC3WBQugNzLaZBCTKU0XzhE/AM1IHtdwUP4A4m7VkP0oAMs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657297691076811.7753642701448; Fri, 8 Jul 2022 09:28:11 -0700 (PDT) Received: from localhost ([::1]:54232 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9qpt-0001ah-H6 for importer@patchew.org; Fri, 08 Jul 2022 12:28:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44686) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qCe-000562-Dj for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:36 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]:44988) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qCb-0002Rb-IV for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:35 -0400 Received: by mail-pj1-x102a.google.com with SMTP id o3-20020a17090a744300b001ef8f7f3dddso2145815pjk.3 for ; Fri, 08 Jul 2022 08:47:33 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.47.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:47:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qhmfc0Bs2SrTe50tDkhCkofVbawYB7l8nD2/4Z7gVmI=; b=YwwW7u5uJpkoRDfoxBb61fLnmcvQXo3pRZ/zsLICXNOG1rE6bYHit1n42QaaDpvasQ HU8g0JKMC0VjMwZ7UD3dE3tY/zFVnCPoCRbZztdiWsTkcSDSs0qp6a8dGpWyXxIjastl nDVdpwKfp1UNn4nBxvf+KeHUIV897DpEh3q4K1pXDJ/G+nwS5HuBCs3fsLjjx7cyBWtb O0F9tqo2lMrntmIJ+crr5dtlkf4oNMPY4r6tMUp8qLzPxHYQzvZ6cPTdXfAFR7qeKZOs 3Q5DVUyg23Tut7KQTxySjaiOR7M+7wZBfI/EtUUXb56QFOXtPomNrWuWPJy9eU5Hz2tP kheg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qhmfc0Bs2SrTe50tDkhCkofVbawYB7l8nD2/4Z7gVmI=; b=zD/qbk3m5T/S+KBWE9ZiNvambzfmTafPKP1ZCYCp9keDkrEYHvkd4/7iyBHxYQP0Bc nBUMWLKRmsMjja2eroJkMJ1w9JCgT52oqWB59FvdGZ9RX6gMP8DZ3syDFS9Trn0LkuPK UbnYlNZq7FzgJXb/6EjuXBskvHw3gJwQLyxuHAAaX8xFBwEGtiAUBTBNdhz1D9VqCJGS +xrvcUquxCQ8ITuUWlwc/6E3wcHAyHgvVSsooxqRsDQQ2+XAQYdfFQApW9GCeFt9q3fE Cj8gJhvweNhF9wd+TDGxBaoiSI+5Hu2hOZD6bDcYs7342DU7UflDAxVtalDYnw52erFO T3Yw== X-Gm-Message-State: AJIora+QPJM+Me1ACCKLImLvuGobJHpl8bCH60zNsfQV6ookAlE+5x67 bc+juDtqD5h8JIjoE/zr8ZHYzETXGj9si0rj X-Google-Smtp-Source: AGRyM1sMF2DxGYe9F+0SLjsP9is3MlcA4vhRElFPJ2daDsccVWvB552DcXli7RHD0e5Pc3+ShKE4lQ== X-Received: by 2002:a17:902:f650:b0:15f:3a10:a020 with SMTP id m16-20020a170902f65000b0015f3a10a020mr4182527plg.61.1657295252711; Fri, 08 Jul 2022 08:47:32 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Alex=20Benn=C3=A9e?= Subject: [RISU PATCH v4 08/29] Add enum RisuResult Date: Fri, 8 Jul 2022 21:16:39 +0530 Message-Id: <20220708154700.18682-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102a; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657297691368100001 Formalize the random set of numbers into an enum. Doing this makes it easy to see that one of the responses in recv_and_compare_register_info was inconsistent. Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Richard Henderson --- risu.h | 25 +++++++++++++++++-------- reginfo.c | 32 ++++++++++++++++---------------- risu.c | 18 +++++++++--------- 3 files changed, 42 insertions(+), 33 deletions(-) diff --git a/risu.h b/risu.h index a7aa929..e6d07eb 100644 --- a/risu.h +++ b/risu.h @@ -57,6 +57,14 @@ typedef enum { OP_COMPAREMEM =3D 4, } RisuOp; =20 +/* Result of operation */ +typedef enum { + RES_OK =3D 0, + RES_END, + RES_MISMATCH, + RES_BAD_IO, +} RisuResult; + /* The memory block should be this long */ #define MEMBLOCKLEN 8192 =20 @@ -82,20 +90,21 @@ typedef struct { */ typedef int (*write_fn) (void *ptr, size_t bytes); typedef int (*read_fn) (void *ptr, size_t bytes); -typedef void (*respond_fn) (int response); +typedef void (*respond_fn) (RisuResult response); =20 -/* Send the register information from the struct ucontext down the socket. - * Return the response code from the master. +/* + * Send the register information from the struct ucontext down the socket. * NB: called from a signal handler. */ -int send_register_info(write_fn write_fn, void *uc); +RisuResult send_register_info(write_fn write_fn, void *uc); =20 -/* Read register info from the socket and compare it with that from the - * ucontext. Return 0 for match, 1 for end-of-test, 2 for mismatch. +/* + * Read register info from the socket and compare it with that from the + * ucontext. * NB: called from a signal handler. */ -int recv_and_compare_register_info(read_fn read_fn, - respond_fn respond, void *uc); +RisuResult recv_and_compare_register_info(read_fn read_fn, + respond_fn respond, void *uc); =20 /* Print a useful report on the status of the last comparison * done in recv_and_compare_register_info(). This is called on diff --git a/reginfo.c b/reginfo.c index 2d67c93..b909a1f 100644 --- a/reginfo.c +++ b/reginfo.c @@ -21,7 +21,7 @@ uint8_t apprentice_memblock[MEMBLOCKLEN]; static int mem_used; static int packet_mismatch; =20 -int send_register_info(write_fn write_fn, void *uc) +RisuResult send_register_info(write_fn write_fn, void *uc) { struct reginfo ri; trace_header_t header; @@ -34,7 +34,7 @@ int send_register_info(write_fn write_fn, void *uc) header.pc =3D get_pc(&ri); header.risu_op =3D op; if (write_fn(&header, sizeof(header)) !=3D 0) { - return -1; + return RES_BAD_IO; } =20 switch (op) { @@ -46,10 +46,10 @@ int send_register_info(write_fn write_fn, void *uc) * (b) end of test (c) a non-risuop UNDEF */ if (write_fn(&ri, reginfo_size()) !=3D 0) { - return -1; + return RES_BAD_IO; } /* For OP_TEST_END, force return 1 to exit. */ - return op =3D=3D OP_TESTEND; + return op =3D=3D OP_TESTEND ? RES_END : RES_OK; case OP_SETMEMBLOCK: memblock =3D (void *)(uintptr_t)get_reginfo_paramreg(&ri); break; @@ -63,7 +63,7 @@ int send_register_info(write_fn write_fn, void *uc) default: abort(); } - return 0; + return RES_OK; } =20 /* Read register info from the socket and compare it with that from the @@ -74,10 +74,10 @@ int send_register_info(write_fn write_fn, void *uc) * that says whether it is register or memory data, so if the two * sides get out of sync then we will fail obscurely. */ -int recv_and_compare_register_info(read_fn read_fn, - respond_fn resp_fn, void *uc) +RisuResult recv_and_compare_register_info(read_fn read_fn, + respond_fn resp_fn, void *uc) { - int resp =3D 0; + RisuResult resp =3D RES_OK; trace_header_t header; RisuOp op; =20 @@ -85,18 +85,18 @@ int recv_and_compare_register_info(read_fn read_fn, op =3D get_risuop(&master_ri); =20 if (read_fn(&header, sizeof(header)) !=3D 0) { - return -1; + return RES_BAD_IO; } =20 if (header.risu_op !=3D op) { /* We are out of sync */ - resp =3D 2; + resp =3D RES_BAD_IO; resp_fn(resp); return resp; } =20 /* send OK for the header */ - resp_fn(0); + resp_fn(RES_OK); =20 switch (op) { case OP_COMPARE: @@ -107,12 +107,12 @@ int recv_and_compare_register_info(read_fn read_fn, */ if (read_fn(&apprentice_ri, reginfo_size())) { packet_mismatch =3D 1; - resp =3D 2; + resp =3D RES_BAD_IO; } else if (!reginfo_is_eq(&master_ri, &apprentice_ri)) { /* register mismatch */ - resp =3D 2; + resp =3D RES_MISMATCH; } else if (op =3D=3D OP_TESTEND) { - resp =3D 1; + resp =3D RES_END; } resp_fn(resp); break; @@ -127,10 +127,10 @@ int recv_and_compare_register_info(read_fn read_fn, mem_used =3D 1; if (read_fn(apprentice_memblock, MEMBLOCKLEN)) { packet_mismatch =3D 1; - resp =3D 2; + resp =3D RES_BAD_IO; } else if (memcmp(memblock, apprentice_memblock, MEMBLOCKLEN) !=3D= 0) { /* memory mismatch */ - resp =3D 2; + resp =3D RES_MISMATCH; } resp_fn(resp); break; diff --git a/risu.c b/risu.c index ab17c71..7b14f72 100644 --- a/risu.c +++ b/risu.c @@ -69,7 +69,7 @@ int write_trace(void *ptr, size_t bytes) return (res =3D=3D bytes) ? 0 : 1; } =20 -void respond_sock(int r) +void respond_sock(RisuResult r) { send_response_byte(comm_fd, r); } @@ -98,11 +98,11 @@ int read_trace(void *ptr, size_t bytes) return (res =3D=3D bytes) ? 0 : 1; } =20 -void respond_trace(int r) +void respond_trace(RisuResult r) { switch (r) { - case 0: /* test ok */ - case 1: /* end of test */ + case RES_OK: + case RES_END: break; default: /* mismatch - if tracing we need to report, otherwise barf */ @@ -115,7 +115,7 @@ void respond_trace(int r) =20 static void master_sigill(int sig, siginfo_t *si, void *uc) { - int r; + RisuResult r; signal_count++; =20 if (trace) { @@ -125,7 +125,7 @@ static void master_sigill(int sig, siginfo_t *si, void = *uc) } =20 switch (r) { - case 0: + case RES_OK: /* match OK */ advance_pc(uc); return; @@ -137,7 +137,7 @@ static void master_sigill(int sig, siginfo_t *si, void = *uc) =20 static void apprentice_sigill(int sig, siginfo_t *si, void *uc) { - int r; + RisuResult r; signal_count++; =20 if (trace) { @@ -147,11 +147,11 @@ static void apprentice_sigill(int sig, siginfo_t *si,= void *uc) } =20 switch (r) { - case 0: + case RES_OK: /* match OK */ advance_pc(uc); return; - case 1: + case RES_END: /* end of test */ exit(EXIT_SUCCESS); default: --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657297916; cv=none; d=zohomail.com; s=zohoarc; b=eDHX6Z5kgVguUA10J4qkPhjDNd5/XeSz4bHpSqt98H9t18igl6cvz9/f+xoMEoF2H5wc6RhlJ0uEmavE/tNClamlDkqNNxQIV2o7vZoCMW2MQu7nML8d+SeyCf7F5KZE6+NVaz2tjEHsAr5Vi4iEVdGDmHL0BvTu6ZjOGEj7Q9c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657297916; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=yTx/5ruVCbUKysedstiOKE1WBZU/tfL0M/E004Rb0lk=; b=lJ21tBkQRLrcCWS6fDzCMYIZdzDSBdE5dnWcfcuhrxa3//x2kxSAqcMblIvT5qmf/dyWxxenIfJ0jP23gHlsulHBVWsClX9RJPedADtmdbPJ8h30mBE/z523N6TKATyLgjQs1gE8JGyh7871az3clw0W7TQDjdLZxdV8nlzxfqg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657297916860444.93372641645806; Fri, 8 Jul 2022 09:31:56 -0700 (PDT) Received: from localhost ([::1]:35646 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9qtX-0000cS-Mt for importer@patchew.org; Fri, 08 Jul 2022 12:31:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44746) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qCm-0005EQ-Fr for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:44 -0400 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]:45960) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qCi-0002TL-Gn for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:43 -0400 Received: by mail-pl1-x62a.google.com with SMTP id d5so16627671plo.12 for ; Fri, 08 Jul 2022 08:47:38 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.47.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:47:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=yTx/5ruVCbUKysedstiOKE1WBZU/tfL0M/E004Rb0lk=; b=kEKcNuIsGd3ymiSL+f9wvpBfp3Rzpjkp1pmTYO239PYmADKcEgwCswQIT2RVKdHWur 6PG4gLqgeeG5Vz/2V5odC2taOyYBwBRptB/5gWLX7GrbLYqhSxDtqKdRaydYYWpIJ2ap K0MQhKIwhVgoqCe/PpsS8E9RKPVnVggw94Od+c/ylKHRw6nieXItXQc/TMdr8T5h+tNQ elONXWwVj0f6/N2S38Mx8TacF3IWgRImGdAGlRtWbyNFxtfCaDtupVnXt2AfMr/H5MCT P/Z0CN6I7CFDNXN0FqEhqax/Xdn7TZd8QcdplucZU0gnPlgD983qffbIJQuMaRcjmbM4 K9Vw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=yTx/5ruVCbUKysedstiOKE1WBZU/tfL0M/E004Rb0lk=; b=08bWTRWgfPLs38jnKuu+bkt0wOZuG3ZjxvvyLOQtdWpDQh8nnUlf0KSd4HuCoaqJt/ OVI2bgcSpzLqFX2sUv2KFUImnc5g3LyHytdWn1o2h81F6SRRt18J/GMPzQ4n7oGJvLRn IAUMFQaGWRE6gCDnq5BeWnXe4eQTZMb3jaXlh9aYOZaquhIl7qI+stHZ1zJlMuuFgYNb DecYBM+oe3fwLWJr6KI4SWnZrG8mE48IDgqc1FfycCPz6lH0atuJT4yiAWs582M+zmgj Wv8cAfWHp6pxywsYD2vNuP7YLrbO/Q83lGgDMt/w8k893Qyun4GEsSCk0TV48P6d2jl5 OMEQ== X-Gm-Message-State: AJIora/4m5eRYJ758xKXwiiuhhUZU8p0yzl+iDQUfQwNSAHidu3X9lLr 1vOP9qLyOkSzQtwun3mWTiZnrlgfIwmbMQgN X-Google-Smtp-Source: AGRyM1tCu576Sz8MxIab64yX+Aozg8dKvpK1mp4MGQWxYj0hqQGoQHKMfB1vYUFRMRHkz1qUFo6nEA== X-Received: by 2002:a17:90a:f692:b0:1ef:9ad9:7e94 with SMTP id cl18-20020a17090af69200b001ef9ad97e94mr519048pjb.148.1657295257467; Fri, 08 Jul 2022 08:47:37 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Alex=20Benn=C3=A9e?= Subject: [RISU PATCH v4 09/29] Unify i/o functions and use RisuResult Date: Fri, 8 Jul 2022 21:16:40 +0530 Message-Id: <20220708154700.18682-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62a; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657297917244100001 Push the trace check down from the function calling the reginfo function down into the i/o function. This means we don't have to pass a function pointer. Return a RisuResult from the i/o functions. This fixes a minor bug in send_register_info (even before the conversion to RisuResult), which returned the write_fn result directly. Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Richard Henderson --- risu.h | 32 +++++++++------------- comms.c | 8 +++--- reginfo.c | 60 ++++++++++++++++++++-------------------- risu.c | 82 ++++++++++++++++++++++--------------------------------- 4 files changed, 81 insertions(+), 101 deletions(-) diff --git a/risu.h b/risu.h index e6d07eb..c83b803 100644 --- a/risu.h +++ b/risu.h @@ -34,13 +34,6 @@ void process_arch_opt(int opt, const char *arg); =20 #include REGINFO_HEADER(ARCH) =20 -/* Socket related routines */ -int master_connect(int port); -int apprentice_connect(const char *hostname, int port); -int send_data_pkt(int sock, void *pkt, int pktlen); -int recv_data_pkt(int sock, void *pkt, int pktlen); -void send_response_byte(int sock, int resp); - extern uintptr_t image_start_address; extern void *memblock; =20 @@ -80,31 +73,32 @@ typedef struct { uint32_t risu_op; } trace_header_t; =20 +/* Socket related routines */ +int master_connect(int port); +int apprentice_connect(const char *hostname, int port); +RisuResult send_data_pkt(int sock, void *pkt, int pktlen); +RisuResult recv_data_pkt(int sock, void *pkt, int pktlen); +void send_response_byte(int sock, int resp); + /* Functions operating on reginfo */ =20 -/* Function prototypes for read/write helper functions. - * - * We pass the helper function to send_register_info and - * recv_and_compare_register_info which can either be backed by the - * traditional network socket or a trace file. - */ -typedef int (*write_fn) (void *ptr, size_t bytes); -typedef int (*read_fn) (void *ptr, size_t bytes); -typedef void (*respond_fn) (RisuResult response); +/* Function prototypes for read/write helper functions. */ +RisuResult write_buffer(void *ptr, size_t bytes); +RisuResult read_buffer(void *ptr, size_t bytes); +void respond(RisuResult response); =20 /* * Send the register information from the struct ucontext down the socket. * NB: called from a signal handler. */ -RisuResult send_register_info(write_fn write_fn, void *uc); +RisuResult send_register_info(void *uc); =20 /* * Read register info from the socket and compare it with that from the * ucontext. * NB: called from a signal handler. */ -RisuResult recv_and_compare_register_info(read_fn read_fn, - respond_fn respond, void *uc); +RisuResult recv_and_compare_register_info(void *uc); =20 /* Print a useful report on the status of the last comparison * done in recv_and_compare_register_info(). This is called on diff --git a/comms.c b/comms.c index 861e845..21968da 100644 --- a/comms.c +++ b/comms.c @@ -168,7 +168,7 @@ ssize_t safe_writev(int fd, struct iovec *iov_in, int i= ovcnt) * Note that both ends must agree on the length of the * block of data. */ -int send_data_pkt(int sock, void *pkt, int pktlen) +RisuResult send_data_pkt(int sock, void *pkt, int pktlen) { unsigned char resp; /* First we send the packet length as a network-order 32 bit value. @@ -196,7 +196,7 @@ int send_data_pkt(int sock, void *pkt, int pktlen) return resp; } =20 -int recv_data_pkt(int sock, void *pkt, int pktlen) +RisuResult recv_data_pkt(int sock, void *pkt, int pktlen) { uint32_t net_pktlen; recv_bytes(sock, &net_pktlen, sizeof(net_pktlen)); @@ -206,10 +206,10 @@ int recv_data_pkt(int sock, void *pkt, int pktlen) * a response back. */ recv_and_discard_bytes(sock, net_pktlen); - return 1; + return RES_BAD_IO; } recv_bytes(sock, pkt, pktlen); - return 0; + return RES_OK; } =20 void send_response_byte(int sock, int resp) diff --git a/reginfo.c b/reginfo.c index b909a1f..fee025e 100644 --- a/reginfo.c +++ b/reginfo.c @@ -21,10 +21,11 @@ uint8_t apprentice_memblock[MEMBLOCKLEN]; static int mem_used; static int packet_mismatch; =20 -RisuResult send_register_info(write_fn write_fn, void *uc) +RisuResult send_register_info(void *uc) { struct reginfo ri; trace_header_t header; + RisuResult res; RisuOp op; =20 reginfo_init(&ri, uc); @@ -33,8 +34,9 @@ RisuResult send_register_info(write_fn write_fn, void *uc) /* Write a header with PC/op to keep in sync */ header.pc =3D get_pc(&ri); header.risu_op =3D op; - if (write_fn(&header, sizeof(header)) !=3D 0) { - return RES_BAD_IO; + res =3D write_buffer(&header, sizeof(header)); + if (res !=3D RES_OK) { + return res; } =20 switch (op) { @@ -45,11 +47,12 @@ RisuResult send_register_info(write_fn write_fn, void *= uc) * Do a simple register compare on (a) explicit request * (b) end of test (c) a non-risuop UNDEF */ - if (write_fn(&ri, reginfo_size()) !=3D 0) { - return RES_BAD_IO; + res =3D write_buffer(&ri, reginfo_size()); + /* For OP_TEST_END, force exit. */ + if (res =3D=3D RES_OK && op =3D=3D OP_TESTEND) { + res =3D RES_END; } - /* For OP_TEST_END, force return 1 to exit. */ - return op =3D=3D OP_TESTEND ? RES_END : RES_OK; + break; case OP_SETMEMBLOCK: memblock =3D (void *)(uintptr_t)get_reginfo_paramreg(&ri); break; @@ -58,12 +61,11 @@ RisuResult send_register_info(write_fn write_fn, void *= uc) get_reginfo_paramreg(&ri) + (uintptr_t)membl= ock); break; case OP_COMPAREMEM: - return write_fn(memblock, MEMBLOCKLEN); - break; + return write_buffer(memblock, MEMBLOCKLEN); default: abort(); } - return RES_OK; + return res; } =20 /* Read register info from the socket and compare it with that from the @@ -74,29 +76,29 @@ RisuResult send_register_info(write_fn write_fn, void *= uc) * that says whether it is register or memory data, so if the two * sides get out of sync then we will fail obscurely. */ -RisuResult recv_and_compare_register_info(read_fn read_fn, - respond_fn resp_fn, void *uc) +RisuResult recv_and_compare_register_info(void *uc) { - RisuResult resp =3D RES_OK; + RisuResult res; trace_header_t header; RisuOp op; =20 reginfo_init(&master_ri, uc); op =3D get_risuop(&master_ri); =20 - if (read_fn(&header, sizeof(header)) !=3D 0) { - return RES_BAD_IO; + res =3D read_buffer(&header, sizeof(header)); + if (res !=3D RES_OK) { + return res; } =20 if (header.risu_op !=3D op) { /* We are out of sync */ - resp =3D RES_BAD_IO; - resp_fn(resp); - return resp; + res =3D RES_BAD_IO; + respond(res); + return res; } =20 /* send OK for the header */ - resp_fn(RES_OK); + respond(RES_OK); =20 switch (op) { case OP_COMPARE: @@ -105,16 +107,16 @@ RisuResult recv_and_compare_register_info(read_fn rea= d_fn, /* Do a simple register compare on (a) explicit request * (b) end of test (c) a non-risuop UNDEF */ - if (read_fn(&apprentice_ri, reginfo_size())) { + res =3D read_buffer(&apprentice_ri, reginfo_size()); + if (res !=3D RES_OK) { packet_mismatch =3D 1; - resp =3D RES_BAD_IO; } else if (!reginfo_is_eq(&master_ri, &apprentice_ri)) { /* register mismatch */ - resp =3D RES_MISMATCH; + res =3D RES_MISMATCH; } else if (op =3D=3D OP_TESTEND) { - resp =3D RES_END; + res =3D RES_END; } - resp_fn(resp); + respond(res); break; case OP_SETMEMBLOCK: memblock =3D (void *)(uintptr_t)get_reginfo_paramreg(&master_ri); @@ -125,20 +127,20 @@ RisuResult recv_and_compare_register_info(read_fn rea= d_fn, break; case OP_COMPAREMEM: mem_used =3D 1; - if (read_fn(apprentice_memblock, MEMBLOCKLEN)) { + res =3D read_buffer(apprentice_memblock, MEMBLOCKLEN); + if (res !=3D RES_OK) { packet_mismatch =3D 1; - resp =3D RES_BAD_IO; } else if (memcmp(memblock, apprentice_memblock, MEMBLOCKLEN) !=3D= 0) { /* memory mismatch */ - resp =3D RES_MISMATCH; + res =3D RES_MISMATCH; } - resp_fn(resp); + respond(res); break; default: abort(); } =20 - return resp; + return res; } =20 /* Print a useful report on the status of the last comparison diff --git a/risu.c b/risu.c index 7b14f72..1917311 100644 --- a/risu.c +++ b/risu.c @@ -46,44 +46,15 @@ static sigjmp_buf jmpbuf; =20 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) =20 -/* Master functions */ +/* I/O functions */ =20 -int read_sock(void *ptr, size_t bytes) -{ - return recv_data_pkt(comm_fd, ptr, bytes); -} - -int write_trace(void *ptr, size_t bytes) +RisuResult read_buffer(void *ptr, size_t bytes) { size_t res; =20 -#ifdef HAVE_ZLIB - if (comm_fd =3D=3D STDOUT_FILENO) { -#endif - res =3D write(comm_fd, ptr, bytes); -#ifdef HAVE_ZLIB - } else { - res =3D gzwrite(gz_trace_file, ptr, bytes); + if (!trace) { + return recv_data_pkt(comm_fd, ptr, bytes); } -#endif - return (res =3D=3D bytes) ? 0 : 1; -} - -void respond_sock(RisuResult r) -{ - send_response_byte(comm_fd, r); -} - -/* Apprentice function */ - -int write_sock(void *ptr, size_t bytes) -{ - return send_data_pkt(comm_fd, ptr, bytes); -} - -int read_trace(void *ptr, size_t bytes) -{ - size_t res; =20 #ifdef HAVE_ZLIB if (comm_fd =3D=3D STDIN_FILENO) { @@ -95,21 +66,34 @@ int read_trace(void *ptr, size_t bytes) } #endif =20 - return (res =3D=3D bytes) ? 0 : 1; + return res =3D=3D bytes ? RES_OK : RES_BAD_IO; } =20 -void respond_trace(RisuResult r) +RisuResult write_buffer(void *ptr, size_t bytes) { - switch (r) { - case RES_OK: - case RES_END: - break; - default: - /* mismatch - if tracing we need to report, otherwise barf */ - if (!trace) { - abort(); - } - break; + size_t res; + + if (!trace) { + return send_data_pkt(comm_fd, ptr, bytes); + } + +#ifdef HAVE_ZLIB + if (comm_fd =3D=3D STDOUT_FILENO) { +#endif + res =3D write(comm_fd, ptr, bytes); +#ifdef HAVE_ZLIB + } else { + res =3D gzwrite(gz_trace_file, ptr, bytes); + } +#endif + + return res =3D=3D bytes ? RES_OK : RES_BAD_IO; +} + +void respond(RisuResult r) +{ + if (!trace) { + send_response_byte(comm_fd, r); } } =20 @@ -119,9 +103,9 @@ static void master_sigill(int sig, siginfo_t *si, void = *uc) signal_count++; =20 if (trace) { - r =3D send_register_info(write_trace, uc); + r =3D send_register_info(uc); } else { - r =3D recv_and_compare_register_info(read_sock, respond_sock, uc); + r =3D recv_and_compare_register_info(uc); } =20 switch (r) { @@ -141,9 +125,9 @@ static void apprentice_sigill(int sig, siginfo_t *si, v= oid *uc) signal_count++; =20 if (trace) { - r =3D recv_and_compare_register_info(read_trace, respond_trace, uc= ); + r =3D recv_and_compare_register_info(uc); } else { - r =3D send_register_info(write_sock, uc); + r =3D send_register_info(uc); } =20 switch (r) { --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657297810; cv=none; d=zohomail.com; s=zohoarc; b=D0v94eTpJk2XWPgBvIIpTlcv7kye5zGOuUJas1vuW1UuZK/GKCiLfEwq5ruCAVudLnqFuUPuYRLePEM1FDrDLkOC1BaqL5Xvr+kQh9tkPW9VkkTKlTnnZg5cW8FlzMGBr9cnEbIjRmBdjQUboLePKP+UHlkxLQlnL+3huGJlsI8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657297810; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ZlB23Fd4G5DghSJ6Ko6JaiFeI6h2RDPKt6G6Hp0Fq+M=; b=LtzdBK7t5ckznZYA3tUsWMYDw5wUkRUg4wVJdd/hUtPEJ5cxn+5Zo8L2KmTfL/+QyiLp5Nove/h+Ck9mNADnIWbPfn8HxdZ0CY9Cw1em9E/f1zzRbgmw8pFu4LFAOP9s5Htm4t6kYuLY+yWyQ3TaQ2aMEHBnF0UPoxHNb2BnlQc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657297810213391.14246672900526; Fri, 8 Jul 2022 09:30:10 -0700 (PDT) Received: from localhost ([::1]:60668 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9qrp-0006XQ-0v for importer@patchew.org; Fri, 08 Jul 2022 12:30:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44752) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qCn-0005GZ-2l for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:45 -0400 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]:41806) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qCj-0002TW-Mw for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:44 -0400 Received: by mail-pl1-x636.google.com with SMTP id j12so9874419plj.8 for ; Fri, 08 Jul 2022 08:47:41 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.47.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:47:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ZlB23Fd4G5DghSJ6Ko6JaiFeI6h2RDPKt6G6Hp0Fq+M=; b=IjxlJlRCDRhD8hxXxc8hPtfWuV+wWnz6N8Z/z74To6ZzYZyUhUjhSoi4NP+eSn/m6Q egPgXub7dZuVz/t8hQV8ANRwS5rm2/cGZA4QAza4S1owrv87PNtEgcRrI5BI1023Y+DC /SRRnHhHW2pBIt+G8DhIJz0xQPxhtAjvfXGo4Cmd4s66aM84R/dZDKqbrskPUOkBEsVe +LAiy/Pr2iYRIvyPtqTrtQMYRzADORex23Oe9CNzUN3zLPP7syKCdiZ3HUiL3c8NbOGl W8aAJYE78aAT4zBsXRDMZEhM9+zYfLTKuB23tYOMu8HREynGWJNROHo9EX3H5KWEcrhS 2qPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ZlB23Fd4G5DghSJ6Ko6JaiFeI6h2RDPKt6G6Hp0Fq+M=; b=AmqgppjgAm2KSKOpo3vhGSRAn9oPsLRwV68LtEYSaO+ZiD52A/PLQGxrrVYBtJ7oLw zgqbZ4GrhGPhXGor1dFwQA2MIwbgqvUkj2v5JpqIqgrmmJWyPqczrb3k1945nN+wZCIC hvo0QUjVn3bHdxK7VK49/MXfNwiUImxCzZxnJmmu4cRZniYVRm/aIXewGwzbbnYkRqQu KHftEpPzIUP/S/HwPpSsz5rOvaWpQucpJMzQUEbJ4XnXQMTasr3kxrhgwThURBNJaXY7 4Ym21HlU88Q7kNqivu2gkIgvHYo2bOr6zvsmwASZlYkZ+Eh/Oq2ijI0u52NjF5SNJgc8 HytA== X-Gm-Message-State: AJIora/DzIAXPwNlo6PD66dLtKp3LsYJ1Hdgtwmhg3h+37g7JE3uVd3W iyfP5WZBA2lDC3XUqHC4JGxwZualO9a4ddJV X-Google-Smtp-Source: AGRyM1vsCllgMHK6EFpmj1lvJC9YqUZTJowU23N0g6uC4t2EcJIKbrB5p2Q2JHHit/iHXSleVKcuFQ== X-Received: by 2002:a17:90a:b701:b0:1e8:6d19:bcb with SMTP id l1-20020a17090ab70100b001e86d190bcbmr496093pjr.218.1657295260291; Fri, 08 Jul 2022 08:47:40 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Alex=20Benn=C3=A9e?= Subject: [RISU PATCH v4 10/29] Pass non-OK result back through siglongjmp Date: Fri, 8 Jul 2022 21:16:41 +0530 Message-Id: <20220708154700.18682-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::636; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x636.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657297812317100001 Rather than doing some work in the signal handler and some work outside, move all of the non-resume work outside. This works because we arranged for RES_OK to be 0, which is the normal return from sigsetjmp. Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Richard Henderson --- risu.c | 50 ++++++++++++++++++++++++-------------------------- 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/risu.c b/risu.c index 1917311..f238117 100644 --- a/risu.c +++ b/risu.c @@ -107,15 +107,10 @@ static void master_sigill(int sig, siginfo_t *si, voi= d *uc) } else { r =3D recv_and_compare_register_info(uc); } - - switch (r) { - case RES_OK: - /* match OK */ + if (r =3D=3D RES_OK) { advance_pc(uc); - return; - default: - /* mismatch, or end of test */ - siglongjmp(jmpbuf, 1); + } else { + siglongjmp(jmpbuf, r); } } =20 @@ -129,21 +124,10 @@ static void apprentice_sigill(int sig, siginfo_t *si,= void *uc) } else { r =3D send_register_info(uc); } - - switch (r) { - case RES_OK: - /* match OK */ + if (r =3D=3D RES_OK) { advance_pc(uc); - return; - case RES_END: - /* end of test */ - exit(EXIT_SUCCESS); - default: - /* mismatch */ - if (trace) { - siglongjmp(jmpbuf, 1); - } - exit(EXIT_FAILURE); + } else { + siglongjmp(jmpbuf, r); } } =20 @@ -200,7 +184,9 @@ static void load_image(const char *imgfile) =20 static int master(void) { - if (sigsetjmp(jmpbuf, 1)) { + RisuResult res =3D sigsetjmp(jmpbuf, 1); + + if (res !=3D RES_OK) { #ifdef HAVE_ZLIB if (trace && comm_fd !=3D STDOUT_FILENO) { gzclose(gz_trace_file); @@ -226,15 +212,27 @@ static int master(void) =20 static int apprentice(void) { - if (sigsetjmp(jmpbuf, 1)) { + RisuResult res =3D sigsetjmp(jmpbuf, 1); + + if (res !=3D RES_OK) { #ifdef HAVE_ZLIB if (trace && comm_fd !=3D STDIN_FILENO) { gzclose(gz_trace_file); } #endif close(comm_fd); - fprintf(stderr, "finished early after %zd checkpoints\n", signal_c= ount); - return report_match_status(true); + + switch (res) { + case RES_END: + return EXIT_SUCCESS; + default: + if (!trace) { + return EXIT_FAILURE; + } + fprintf(stderr, "finished early after %zd checkpoints\n", + signal_count); + return report_match_status(true); + } } set_sigill_handler(&apprentice_sigill); fprintf(stderr, "starting apprentice image at 0x%"PRIxPTR"\n", --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657298150; cv=none; d=zohomail.com; s=zohoarc; b=HuzgDYtU6sfUxnV9+cOqkJ3pMrcH9Jk4fidacMnst0QaHJhuSKSeBY4oyINC4boP2SedEC/v5ZjnnkN/oDIeyhxyWnd4LRbqdIE1q2Ra5nZKAQFadoA7rrF0agDz5iNh5Aox05LS26elniZ5wIHXjqhfngU0wrx4JwHbH6B1eP8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657298150; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=JF+lOPliqQPvdxG0ISzOEougk8wObZ8ufYNLrAEw48c=; b=EE9hWrhaHLG1oFLsQ0nSqEsWtliAE56UtB8ts6jN6iDy7qj7JGW938SoOpJzLHGo0c5yZ6HgixVfJ3zNgXtnILrCdUcs0uuRKM/shk7FVrpq5WCewDPHuAAGzYW2LDnVtoaMZIOqDCIRLAw4HrU2deGE6Pj7bz4Sh3jnLjhXVCc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657298150507849.2681662325513; Fri, 8 Jul 2022 09:35:50 -0700 (PDT) Received: from localhost ([::1]:44954 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9qxJ-0007Ql-8U for importer@patchew.org; Fri, 08 Jul 2022 12:35:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44946) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qD0-0005m9-6A for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:58 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]:38442) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qCm-0002Tp-W7 for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:57 -0400 Received: by mail-pj1-x1032.google.com with SMTP id 89-20020a17090a09e200b001ef7638e536so2311625pjo.3 for ; Fri, 08 Jul 2022 08:47:44 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.47.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:47:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=JF+lOPliqQPvdxG0ISzOEougk8wObZ8ufYNLrAEw48c=; b=J1T1cDM1E86OfZ4vUIrR0CWJwSqtz1cezRr9rDc+GpVcAwjuKqQdTxZPk16tn8HIfH y+/5IW2TJXMUdn2eDTraPAhy1Se1iW23x9VdAdlO7t/VfVZ3IDGpyzAs/HZkY68ldMzb 9Vvn69gi3O04jjL+PpRf7EzYbRBxyRf99DuG8DwnUBKiHMpCGCcYLQD8xldCUeGkhlUo r6amPaS1TeFb8NmBfVnLn3yGfSATLMBYp5NzDwc/q6eslel6u2VnDAABu16KVmBIboS1 NZ9PV1Ai427DfeSIrajBLH8p4aWaX+6L2Zpv1m1D/gzKst6Xf8jNvElZ3f/6XptnUheX odEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=JF+lOPliqQPvdxG0ISzOEougk8wObZ8ufYNLrAEw48c=; b=aKBPqHqO/SSZ2GdsA8CvUf694KrIa4XXqafArYwKQGZdNn427GpmM8s4WtuK+v0WHk DqHXBOaJ32pKkFvadyiCoKzJ5KkQdfKtJGRqX083J/wFbz28PVUm2hH3WwB7Q7rdawOj GKe3PaPCcEeaggAkimDhYzVyQKwQjIfgMi7esXEBBWAInCEr9IZntwIGQbZlx267eTNj AGg5RscDMaWKYTd3nLaz6HWSLN9t7amc2H3HGv41Ako8xfJX7TL6akuq5/y7gTNoLH4T tAMkgiOdyATxS0Jem+iCJW9azWClCkGLFP9sqFDK7gH3EZTQWWgpV6vEsb/ACXocRCoK Rf7A== X-Gm-Message-State: AJIora+Oon/uTY4BAlLY7fzZj68YX2pNeeOyMuuExOrNsG1DD1LWdXkV 7qvwYygqJVpCqmnvcWDempGnsHsvkDfCZ+gu X-Google-Smtp-Source: AGRyM1tirCEK1kpxUhzi3RrJTBucLE8IApvxB1yUittas9VgbKipajqkhufALzJJmgcb9ongpHWULg== X-Received: by 2002:a17:902:e751:b0:16c:19fd:5428 with SMTP id p17-20020a170902e75100b0016c19fd5428mr4388026plf.48.1657295263520; Fri, 08 Jul 2022 08:47:43 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Alex=20Benn=C3=A9e?= Subject: [RISU PATCH v4 11/29] Always write for --master Date: Fri, 8 Jul 2022 21:16:42 +0530 Message-Id: <20220708154700.18682-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1032; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1032.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657298152981100001 For trace, master of course must write to the file we create. For sockets, we can report mismatches from either end. At present, we are reporting mismatches from master. Reverse that so that we report mismatches from the apprentice, just as we do for trace. Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Richard Henderson --- risu.h | 2 +- reginfo.c | 38 ++++++++-------------- risu.c | 96 ++++++++++++++++++++++++++----------------------------- 3 files changed, 61 insertions(+), 75 deletions(-) diff --git a/risu.h b/risu.h index c83b803..f383b64 100644 --- a/risu.h +++ b/risu.h @@ -106,7 +106,7 @@ RisuResult recv_and_compare_register_info(void *uc); * Should return 0 if it was a good match (ie end of test) * and 1 for a mismatch. */ -int report_match_status(bool trace); +int report_match_status(void); =20 /* Interface provided by CPU-specific code: */ =20 diff --git a/reginfo.c b/reginfo.c index fee025e..c37c5df 100644 --- a/reginfo.c +++ b/reginfo.c @@ -14,9 +14,8 @@ #include #include "risu.h" =20 -struct reginfo master_ri, apprentice_ri; - -uint8_t apprentice_memblock[MEMBLOCKLEN]; +static struct reginfo master_ri, apprentice_ri; +static uint8_t master_memblock[MEMBLOCKLEN]; =20 static int mem_used; static int packet_mismatch; @@ -82,8 +81,8 @@ RisuResult recv_and_compare_register_info(void *uc) trace_header_t header; RisuOp op; =20 - reginfo_init(&master_ri, uc); - op =3D get_risuop(&master_ri); + reginfo_init(&apprentice_ri, uc); + op =3D get_risuop(&apprentice_ri); =20 res =3D read_buffer(&header, sizeof(header)); if (res !=3D RES_OK) { @@ -107,7 +106,7 @@ RisuResult recv_and_compare_register_info(void *uc) /* Do a simple register compare on (a) explicit request * (b) end of test (c) a non-risuop UNDEF */ - res =3D read_buffer(&apprentice_ri, reginfo_size()); + res =3D read_buffer(&master_ri, reginfo_size()); if (res !=3D RES_OK) { packet_mismatch =3D 1; } else if (!reginfo_is_eq(&master_ri, &apprentice_ri)) { @@ -119,18 +118,18 @@ RisuResult recv_and_compare_register_info(void *uc) respond(res); break; case OP_SETMEMBLOCK: - memblock =3D (void *)(uintptr_t)get_reginfo_paramreg(&master_ri); + memblock =3D (void *)(uintptr_t)get_reginfo_paramreg(&apprentice_r= i); break; case OP_GETMEMBLOCK: - set_ucontext_paramreg(uc, get_reginfo_paramreg(&master_ri) + + set_ucontext_paramreg(uc, get_reginfo_paramreg(&apprentice_ri) + (uintptr_t)memblock); break; case OP_COMPAREMEM: mem_used =3D 1; - res =3D read_buffer(apprentice_memblock, MEMBLOCKLEN); + res =3D read_buffer(master_memblock, MEMBLOCKLEN); if (res !=3D RES_OK) { packet_mismatch =3D 1; - } else if (memcmp(memblock, apprentice_memblock, MEMBLOCKLEN) !=3D= 0) { + } else if (memcmp(memblock, master_memblock, MEMBLOCKLEN) !=3D 0) { /* memory mismatch */ res =3D RES_MISMATCH; } @@ -149,18 +148,13 @@ RisuResult recv_and_compare_register_info(void *uc) * Should return 0 if it was a good match (ie end of test) * and 1 for a mismatch. */ -int report_match_status(bool trace) +int report_match_status(void) { int resp =3D 0; fprintf(stderr, "match status...\n"); if (packet_mismatch) { fprintf(stderr, "packet mismatch (probably disagreement " "about UNDEF on load/store)\n"); - /* We don't have valid reginfo from the apprentice side - * so stop now rather than printing anything about it. - */ - fprintf(stderr, "%s reginfo:\n", trace ? "this" : "master"); - reginfo_dump(&master_ri, stderr); return 1; } if (!reginfo_is_eq(&master_ri, &apprentice_ri)) { @@ -168,7 +162,7 @@ int report_match_status(bool trace) resp =3D 1; } if (mem_used - && memcmp(memblock, &apprentice_memblock, MEMBLOCKLEN) !=3D 0) { + && memcmp(memblock, &master_memblock, MEMBLOCKLEN) !=3D 0) { fprintf(stderr, "mismatch on memory!\n"); resp =3D 1; } @@ -177,15 +171,11 @@ int report_match_status(bool trace) return 0; } =20 - fprintf(stderr, "%s reginfo:\n", trace ? "this" : "master"); + fprintf(stderr, "master reginfo:\n"); reginfo_dump(&master_ri, stderr); - fprintf(stderr, "%s reginfo:\n", trace ? "trace" : "apprentice"); + fprintf(stderr, "apprentice reginfo:\n"); reginfo_dump(&apprentice_ri, stderr); =20 - if (trace) { - reginfo_dump_mismatch(&apprentice_ri, &master_ri, stderr); - } else { - reginfo_dump_mismatch(&master_ri, &apprentice_ri, stderr); - } + reginfo_dump_mismatch(&master_ri, &apprentice_ri, stderr); return resp; } diff --git a/risu.c b/risu.c index f238117..199f697 100644 --- a/risu.c +++ b/risu.c @@ -102,11 +102,7 @@ static void master_sigill(int sig, siginfo_t *si, void= *uc) RisuResult r; signal_count++; =20 - if (trace) { - r =3D send_register_info(uc); - } else { - r =3D recv_and_compare_register_info(uc); - } + r =3D send_register_info(uc); if (r =3D=3D RES_OK) { advance_pc(uc); } else { @@ -119,11 +115,7 @@ static void apprentice_sigill(int sig, siginfo_t *si, = void *uc) RisuResult r; signal_count++; =20 - if (trace) { - r =3D recv_and_compare_register_info(uc); - } else { - r =3D send_register_info(uc); - } + r =3D recv_and_compare_register_info(uc); if (r =3D=3D RES_OK) { advance_pc(uc); } else { @@ -186,61 +178,65 @@ static int master(void) { RisuResult res =3D sigsetjmp(jmpbuf, 1); =20 - if (res !=3D RES_OK) { + switch (res) { + case RES_OK: + set_sigill_handler(&master_sigill); + fprintf(stderr, "starting master image at 0x%"PRIxPTR"\n", + image_start_address); + fprintf(stderr, "starting image\n"); + image_start(); + fprintf(stderr, "image returned unexpectedly\n"); + return EXIT_FAILURE; + + case RES_END: #ifdef HAVE_ZLIB if (trace && comm_fd !=3D STDOUT_FILENO) { gzclose(gz_trace_file); } #endif close(comm_fd); - if (trace) { - fprintf(stderr, "trace complete after %zd checkpoints\n", - signal_count); - return EXIT_SUCCESS; - } else { - return report_match_status(false); - } + return EXIT_SUCCESS; + + case RES_BAD_IO: + fprintf(stderr, "i/o error after %zd checkpoints\n", signal_count); + return EXIT_FAILURE; + + default: + fprintf(stderr, "unexpected result %d\n", res); + return EXIT_FAILURE; } - set_sigill_handler(&master_sigill); - fprintf(stderr, "starting master image at 0x%"PRIxPTR"\n", - image_start_address); - fprintf(stderr, "starting image\n"); - image_start(); - fprintf(stderr, "image returned unexpectedly\n"); - return EXIT_FAILURE; } =20 static int apprentice(void) { RisuResult res =3D sigsetjmp(jmpbuf, 1); =20 - if (res !=3D RES_OK) { -#ifdef HAVE_ZLIB - if (trace && comm_fd !=3D STDIN_FILENO) { - gzclose(gz_trace_file); - } -#endif - close(comm_fd); + switch (res) { + case RES_OK: + set_sigill_handler(&apprentice_sigill); + fprintf(stderr, "starting apprentice image at 0x%"PRIxPTR"\n", + image_start_address); + fprintf(stderr, "starting image\n"); + image_start(); + fprintf(stderr, "image returned unexpectedly\n"); + return EXIT_FAILURE; =20 - switch (res) { - case RES_END: - return EXIT_SUCCESS; - default: - if (!trace) { - return EXIT_FAILURE; - } - fprintf(stderr, "finished early after %zd checkpoints\n", - signal_count); - return report_match_status(true); - } + case RES_END: + return EXIT_SUCCESS; + + case RES_MISMATCH: + fprintf(stderr, "mismatch after %zd checkpoints\n", signal_count); + report_match_status(); + return EXIT_FAILURE; + + case RES_BAD_IO: + fprintf(stderr, "i/o error after %zd checkpoints\n", signal_count); + return EXIT_FAILURE; + + default: + fprintf(stderr, "unexpected result %d\n", res); + return EXIT_FAILURE; } - set_sigill_handler(&apprentice_sigill); - fprintf(stderr, "starting apprentice image at 0x%"PRIxPTR"\n", - image_start_address); - fprintf(stderr, "starting image\n"); - image_start(); - fprintf(stderr, "image returned unexpectedly\n"); - return EXIT_FAILURE; } =20 static int ismaster; --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657298087; cv=none; d=zohomail.com; s=zohoarc; b=jfiBQgRbRFQq5+kLC8YyMa6CGM2LgPq7ea6rz/smvGWpKUcx76Bo91TqBZGTq4C4D/7uZEUIXUvYKMiiZYXl1uDIB2UAr/kT3kX7v6hnNTCm6SuEfcjGi7FgPn34wtOVy27B2cIRbWzc4EJXta793d19fI/9R87HAg0DUG2fI+8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657298087; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=9LHt//Kp5lBRa8NZxlYvTpSA0XqF6ZFwISz/AY+ddgg=; b=n+99vTq15mWckLuNlHG9O5ssSWNBuZfgGKM20J9OlASidBaIkaI86HpHH2h7s5pwYWZbrMLkru9mPD/25Ik3kI5bCgjQFqK9NLzi1/nSpIPQv9J7eHlywe/YiR7XA32X+6UQYaKMECj9WjobOH2yiScjObQzQH4K8hpU9iVzDbQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657298087741998.4274507367727; Fri, 8 Jul 2022 09:34:47 -0700 (PDT) Received: from localhost ([::1]:41674 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9qwI-0004q5-GT for importer@patchew.org; Fri, 08 Jul 2022 12:34:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44828) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qCr-0005Nr-Np for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:49 -0400 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]:54194) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qCp-0002UX-Mo for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:49 -0400 Received: by mail-pj1-x1033.google.com with SMTP id ju17so13255705pjb.3 for ; Fri, 08 Jul 2022 08:47:47 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.47.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:47:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=9LHt//Kp5lBRa8NZxlYvTpSA0XqF6ZFwISz/AY+ddgg=; b=a+kDYS9+DDHnlujQ7FveWMcc1yZAsL2DMiepCLOj9kTLof9Fswmv4XC1B8lbk9k2Ag R3ycjYLibZttVRN/ZePK4C54n9w70W7XHhGqMtf9IqY9eniBI6ZHgN7nF5YKhzlpZOsZ HFG/w6xyplbq9ZmzDHgciliaRw5Z94u+nr0WMuZVjHtOllIN1cAwE/Fbg6qEXc4JY6EG wJ5vdw+9M26p+2askJ4dhzQT43dbE95yyP3kLmR3WbsVwkymLja5ABtDDoUMOzdLAvxJ Axk4dxITK2xUrLYEtl9pC328plrYaDrkxglrUPuzmnPlkXmyZcBeDJxsPXUnGyDM+Q7f CEQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=9LHt//Kp5lBRa8NZxlYvTpSA0XqF6ZFwISz/AY+ddgg=; b=DfPdbf0FPzN0lfL26Ymwe35OzCjvQnNdYia3bS6atNWhu3NWIr3GC0q5bP6UoI6q0m 1gwwsRn93rXb9qucLyhNHG8+NyqUvmRSqUy2vRO6gREobAJUCZ8O8ME+ZgzSWPQRIz2g 3r2jETlH/AYjfa2en0Qu24amWr7OR3nV5pb9YG5taW3mHZknDmLSft5KCU9z8KlZudqm qzi+SnbOQxd710WH5gEfd4EXgAAwugUjbPFZg1ht3CM1iQiEmSf30tLhiMC7EqI1A8w7 xlvza4JOWy2dKBfgnJ6PNt3QCXONvfz1NkZozv09P1rrIGUBc8Mg1OfWyKfV+87xxJco /uqg== X-Gm-Message-State: AJIora/7FLPW9DEX/vFmhFOSrl8LT5S1A1Jq1jH4ZAzryvhD4ocuw8nh ec30+PYAViL/MVIKhzj8iRXu8rdx0yVpUHbt X-Google-Smtp-Source: AGRyM1uT4OC6xz8W9op2T7Io1cZkbK7wrttdWF8bBOd/+GQaCN+Sla7dW0IyYAZ2CRHOuacL7NIvgg== X-Received: by 2002:a17:903:2445:b0:16a:32da:cc9 with SMTP id l5-20020a170903244500b0016a32da0cc9mr4237591pls.148.1657295266402; Fri, 08 Jul 2022 08:47:46 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Alex=20Benn=C3=A9e?= Subject: [RISU PATCH v4 12/29] Simplify syncing with master Date: Fri, 8 Jul 2022 21:16:43 +0530 Message-Id: <20220708154700.18682-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1033; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1033.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657298088147100001 Do not pass status like RES_BAD_IO from apprentice to master. This means that when master reports i/o error that we know it came from master; the apprentice will report its own i/o error. Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Richard Henderson --- reginfo.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/reginfo.c b/reginfo.c index c37c5df..31bc699 100644 --- a/reginfo.c +++ b/reginfo.c @@ -90,10 +90,9 @@ RisuResult recv_and_compare_register_info(void *uc) } =20 if (header.risu_op !=3D op) { - /* We are out of sync */ - res =3D RES_BAD_IO; - respond(res); - return res; + /* We are out of sync. Tell master to exit. */ + respond(RES_END); + return RES_BAD_IO; } =20 /* send OK for the header */ @@ -115,7 +114,7 @@ RisuResult recv_and_compare_register_info(void *uc) } else if (op =3D=3D OP_TESTEND) { res =3D RES_END; } - respond(res); + respond(res =3D=3D RES_OK ? RES_OK : RES_END); break; case OP_SETMEMBLOCK: memblock =3D (void *)(uintptr_t)get_reginfo_paramreg(&apprentice_r= i); @@ -133,7 +132,7 @@ RisuResult recv_and_compare_register_info(void *uc) /* memory mismatch */ res =3D RES_MISMATCH; } - respond(res); + respond(res =3D=3D RES_OK ? RES_OK : RES_END); break; default: abort(); --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657298035; cv=none; d=zohomail.com; s=zohoarc; b=LllR8QNoGHJBmyRZv9GwJDgiTqS48nhLajp++nSB9tF1hUvxBBnXByRwORH3vOstDKL0+zfh+S89oAz4tEhvcTq3hPufYCS1eoAbT3pqeNTGux3n2TNaKlKB5bOgijuyPXTWlf7boeqtKvfymwrXVhCMUH3JFrJkhOJMtwGlG3M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657298035; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Pvi9qlovHhKpDCenz2S7UQUGmj2q8e/6gUB6XkPNY2s=; b=ZuwN6QkW3/3rXuJDYgiGBRdcUMNv4aeZClBkjNGzgsGVt3QTKBSC7eLjRzqWdYLSHo6pEJZI5G4uH4IUcwMepBLzlMDdqHsjZpVWap2N9pO2P54Z8sEonAyd+zqHBEtk0p3gXO3kCm8F3v/dDn1pjjdDydANDO/+XS/FIYJvumo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657298035209616.9220859857967; Fri, 8 Jul 2022 09:33:55 -0700 (PDT) Received: from localhost ([::1]:39792 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9qvR-0003Tj-2y for importer@patchew.org; Fri, 08 Jul 2022 12:33:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44870) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qCv-0005TF-0z for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:53 -0400 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]:37643) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qCs-0002Ux-M8 for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:52 -0400 Received: by mail-pl1-x630.google.com with SMTP id f11so4115099plr.4 for ; Fri, 08 Jul 2022 08:47:50 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.47.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:47:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Pvi9qlovHhKpDCenz2S7UQUGmj2q8e/6gUB6XkPNY2s=; b=XQ7ca/YeFeNHGK2uvPtpJUOFlHRPUvGDHCiH6WRQaz6VsRUZePHP1ruXD6QrLs5JHM S48cFs0MWP0iMA3t7F+PbL9elu9Pl2TTgIFwbnOx0jC7s4QxkloARw67cwhek8/CWETg 9Wy/6jlhnVr86TdIKAdqyZ1AuXjh2tYYc1ETtuKKH6tncAIe3msmrGJpWzpa2wCaKp0z BqlkNhoX4IQHirJOIp5AlvGWKOLLvP8ux8MfkylCyYfkthoM7FLimHXt0ztv1CYZ9TVf iNEt/OEbrc3bNU91wSWjWPSc1VFMR31N2fGeDh0kmj+dJN/kbtz/86hLyGbnAbitIJ+q xvZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Pvi9qlovHhKpDCenz2S7UQUGmj2q8e/6gUB6XkPNY2s=; b=yBc99TFJHLw7vWPHbFt9SJCl1NjWgIsbcmT+UA03wcGWVn6hF461Ww3JzGswzrc13O mTZfm3PKraz6UxOF7oK/6Vd9t8+FSPESm5hyKIPTh6x6okV6eP66/PNoEbPiP3NpvTYO hcRptWrO+a7kQZVykZJIkDoaUSS9SsXdNTMWY/KjHMHL6PuowXr5wqhkDOJf0ha665lb cTJQpGfsuv8uftuTCUVi1C14S1qJMFILHnmdVR9cHg/8vYm1TYl+zjUToJD7l6IWHDoW vKelQJjc8b+DdRJCvEWj8nfbgd23/76mcYoTq7j2wKgNCIZza1Ta3yErmyufWKVT631U 6Mow== X-Gm-Message-State: AJIora/PxX5sHNCgVpnc75ZOPpr18ug/fCNL5tBzQowXx/2NYOUeaFPe CsbDgVcG+dSQrwwNLcCB9PBZvVG6jzTik0v8 X-Google-Smtp-Source: AGRyM1tcBdpQagT8fLLEO7KbkE3OvkhwHpTvIaNE1kH8Uq7bDlV2scDsbgEUA8LA+6VpgaGsJwVZEg== X-Received: by 2002:a17:902:a502:b0:15e:c251:b769 with SMTP id s2-20020a170902a50200b0015ec251b769mr4384608plq.115.1657295269405; Fri, 08 Jul 2022 08:47:49 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Alex=20Benn=C3=A9e?= Subject: [RISU PATCH v4 13/29] Split RES_MISMATCH for registers and memory Date: Fri, 8 Jul 2022 21:16:44 +0530 Message-Id: <20220708154700.18682-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::630; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x630.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657298036006100001 By remembering the specific comparison that failed, we do not have to try again when it comes time to report. This makes the mem_used flag redundant. Also, packet_mismatch is now redundant with RES_BAD_IO. This means that the only thing that report_match_status does is to report on register status, so rename to report_mismatch_reg. Also, we know there is a failure, so don't return a status from the report. Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Richard Henderson --- risu.h | 13 ++++++------- reginfo.c | 45 ++++++++------------------------------------- risu.c | 10 +++++++--- 3 files changed, 21 insertions(+), 47 deletions(-) diff --git a/risu.h b/risu.h index f383b64..77d6128 100644 --- a/risu.h +++ b/risu.h @@ -54,7 +54,8 @@ typedef enum { typedef enum { RES_OK =3D 0, RES_END, - RES_MISMATCH, + RES_MISMATCH_REG, + RES_MISMATCH_MEM, RES_BAD_IO, } RisuResult; =20 @@ -100,13 +101,11 @@ RisuResult send_register_info(void *uc); */ RisuResult recv_and_compare_register_info(void *uc); =20 -/* Print a useful report on the status of the last comparison - * done in recv_and_compare_register_info(). This is called on - * exit, so need not restrict itself to signal-safe functions. - * Should return 0 if it was a good match (ie end of test) - * and 1 for a mismatch. +/* + * Print a useful report on the status of the last reg comparison + * done in recv_and_compare_register_info(). */ -int report_match_status(void); +void report_mismatch_reg(void); =20 /* Interface provided by CPU-specific code: */ =20 diff --git a/reginfo.c b/reginfo.c index 31bc699..a007f16 100644 --- a/reginfo.c +++ b/reginfo.c @@ -17,9 +17,6 @@ static struct reginfo master_ri, apprentice_ri; static uint8_t master_memblock[MEMBLOCKLEN]; =20 -static int mem_used; -static int packet_mismatch; - RisuResult send_register_info(void *uc) { struct reginfo ri; @@ -107,10 +104,10 @@ RisuResult recv_and_compare_register_info(void *uc) */ res =3D read_buffer(&master_ri, reginfo_size()); if (res !=3D RES_OK) { - packet_mismatch =3D 1; + /* fail */ } else if (!reginfo_is_eq(&master_ri, &apprentice_ri)) { /* register mismatch */ - res =3D RES_MISMATCH; + res =3D RES_MISMATCH_REG; } else if (op =3D=3D OP_TESTEND) { res =3D RES_END; } @@ -124,13 +121,12 @@ RisuResult recv_and_compare_register_info(void *uc) (uintptr_t)memblock); break; case OP_COMPAREMEM: - mem_used =3D 1; res =3D read_buffer(master_memblock, MEMBLOCKLEN); if (res !=3D RES_OK) { - packet_mismatch =3D 1; + /* fail */ } else if (memcmp(memblock, master_memblock, MEMBLOCKLEN) !=3D 0) { /* memory mismatch */ - res =3D RES_MISMATCH; + res =3D RES_MISMATCH_MEM; } respond(res =3D=3D RES_OK ? RES_OK : RES_END); break; @@ -141,40 +137,15 @@ RisuResult recv_and_compare_register_info(void *uc) return res; } =20 -/* Print a useful report on the status of the last comparison - * done in recv_and_compare_register_info(). This is called on - * exit, so need not restrict itself to signal-safe functions. - * Should return 0 if it was a good match (ie end of test) - * and 1 for a mismatch. +/* + * Print a useful report on the status of the last reg comparison + * done in recv_and_compare_register_info(). */ -int report_match_status(void) +void report_mismatch_reg(void) { - int resp =3D 0; - fprintf(stderr, "match status...\n"); - if (packet_mismatch) { - fprintf(stderr, "packet mismatch (probably disagreement " - "about UNDEF on load/store)\n"); - return 1; - } - if (!reginfo_is_eq(&master_ri, &apprentice_ri)) { - fprintf(stderr, "mismatch on regs!\n"); - resp =3D 1; - } - if (mem_used - && memcmp(memblock, &master_memblock, MEMBLOCKLEN) !=3D 0) { - fprintf(stderr, "mismatch on memory!\n"); - resp =3D 1; - } - if (!resp) { - fprintf(stderr, "match!\n"); - return 0; - } - fprintf(stderr, "master reginfo:\n"); reginfo_dump(&master_ri, stderr); fprintf(stderr, "apprentice reginfo:\n"); reginfo_dump(&apprentice_ri, stderr); - reginfo_dump_mismatch(&master_ri, &apprentice_ri, stderr); - return resp; } diff --git a/risu.c b/risu.c index 199f697..d6c2deb 100644 --- a/risu.c +++ b/risu.c @@ -224,9 +224,13 @@ static int apprentice(void) case RES_END: return EXIT_SUCCESS; =20 - case RES_MISMATCH: - fprintf(stderr, "mismatch after %zd checkpoints\n", signal_count); - report_match_status(); + case RES_MISMATCH_REG: + fprintf(stderr, "mismatch reg after %zd checkpoints\n", signal_cou= nt); + report_mismatch_reg(); + return EXIT_FAILURE; + + case RES_MISMATCH_MEM: + fprintf(stderr, "mismatch mem after %zd checkpoints\n", signal_cou= nt); return EXIT_FAILURE; =20 case RES_BAD_IO: --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657296090; cv=none; d=zohomail.com; s=zohoarc; b=Nxltvi2ogd469aOHGJ2GH/tc35czDnH/t1x9FC3gFDsuyoOE/PObA/ilBRiGjDvjF21Ksrle205aNj/oTgOECXgaEOsvwMtafybTEjLIpGgw8jyChjCaHH/rwMQC1pABr/l3Nwwzxq1wtWZwZFTWmG086cZyc/hojRYUFdOC7A0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657296090; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Wwg5T7n5d4hEzm3DL2nMuno/i3EhmUsngOLpxo3zUx0=; b=DL/cINP/yBrgjAuuoTcNSmjBtE9wekLPTTTtFGQ/FsUVYMHD1tt++1zBiifsuIk3EV1UU0XTkslTIc3NFq0HZ+QDVyzuPe38vkUgEgejXS8SuCPSdpP0lm4E4H7XYYPMnbyM+f4IcAjuT1f3rHzsJaxE/Me4ziv4//hpW1udm6k= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657296090062386.56035510666413; Fri, 8 Jul 2022 09:01:30 -0700 (PDT) Received: from localhost ([::1]:54486 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9qQ4-0003yz-OO for importer@patchew.org; Fri, 08 Jul 2022 12:01:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44926) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qCy-0005hs-HP for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:57 -0400 Received: from mail-pg1-x531.google.com ([2607:f8b0:4864:20::531]:33592) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qCv-0002VG-JW for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:56 -0400 Received: by mail-pg1-x531.google.com with SMTP id 72so1177528pge.0 for ; Fri, 08 Jul 2022 08:47:53 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.47.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:47:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Wwg5T7n5d4hEzm3DL2nMuno/i3EhmUsngOLpxo3zUx0=; b=YedpQGh97aaq2xTLJzikAZNr+edJLKplkc7dv2TTfR2VfCxO5ghAEFVny5JGu8UDVJ JEI6iL/Hy+w53gkBGIw3nSLnw0eqanltg4X3YW704In310Ss3TS4RCyBxQU9h5Pgk8Xu QR9wgapEkRN6l6LckDG0F1uBTumAqV4Nc+WcJiqbPVmRtmWD9ok6Baa7XKnrqvPFDpj6 EQnTIj9uwYyOlMYVRVFcu1uiiXP8h8FQZQv35Rwet1zA3duKnv7Hae7QQtQBTpxliBzM a9xB03GbpzwCEl146BPw8njZbKp65dtXvgDb6MDhKO/+BGu1biGqMmN1gcz6Ks/+ksGR eomQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Wwg5T7n5d4hEzm3DL2nMuno/i3EhmUsngOLpxo3zUx0=; b=dJcYL/Rsdd/s2QMlqIQ/tUNseXnzoPjbrhYVONncYX941oO5gyENMJYpRL5+GcfuGD 4dk9fF1nt4JohSRv5SsENk7pO6jiaismV/w8u2JK6r4nyVjVxQNQgcBmFj0WFBJD/Elc 7dOcb1/yxuf96fs8HAstn6iwwCnynH9qemtClweRDGGzYiZvXOcDeDQpFiGjQyEA9+/x M0HwpZNS2f0KYwxRsh4CAU5RZn5Ffr2x9QAyjyK+gWY7Zc8XI+svwyJktmyJ2AsDfe0k COAxXB8o3GFEEJK82X8GVkow2oWt2GJQTL77T+Y3M+2iUCFnk95Cx9C+xrDnuIQQfbl3 5sCw== X-Gm-Message-State: AJIora8ZLpm/Ns5l6sF9hwMeaxUOKfpoJIrsTzeLl2YTlV8wKRXb8WIp GoL/dyXURG2iQmX7MpzVkSFaiKU6aSernAHy X-Google-Smtp-Source: AGRyM1te3He79lySUh4Sk53VnBxc4hrnz2SYUFvSSsX8VSYWuc/z+7WGOgSjR0e57hO+SRrKgWr5TA== X-Received: by 2002:a05:6a00:22d6:b0:525:74b3:d020 with SMTP id f22-20020a056a0022d600b0052574b3d020mr4543389pfj.80.1657295272144; Fri, 08 Jul 2022 08:47:52 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [RISU PATCH v4 14/29] Merge reginfo.c into risu.c Date: Fri, 8 Jul 2022 21:16:45 +0530 Message-Id: <20220708154700.18682-15-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::531; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x531.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657296091011100001 Content-Type: text/plain; charset="utf-8" The distinction between the two is artificial. Following patches will rearrange the functions involved to make it easier for dumping of the trace file. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- Makefile | 2 +- risu.h | 28 +--------- reginfo.c | 151 ------------------------------------------------------ risu.c | 129 ++++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 126 insertions(+), 184 deletions(-) delete mode 100644 reginfo.c diff --git a/Makefile b/Makefile index 6ab014a..ad7f879 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ CFLAGS ?=3D -g ALL_CFLAGS =3D -Wall -D_GNU_SOURCE -DARCH=3D$(ARCH) -U$(ARCH) $(BUILD_INC)= $(CFLAGS) $(EXTRA_CFLAGS) =20 PROG=3Drisu -SRCS=3Drisu.c comms.c reginfo.c risu_$(ARCH).c risu_reginfo_$(ARCH).c +SRCS=3Drisu.c comms.c risu_$(ARCH).c risu_reginfo_$(ARCH).c HDRS=3Drisu.h risu_reginfo_$(ARCH).h BINS=3Dtest_$(ARCH).bin =20 diff --git a/risu.h b/risu.h index 77d6128..dd9fda5 100644 --- a/risu.h +++ b/risu.h @@ -35,7 +35,6 @@ void process_arch_opt(int opt, const char *arg); #include REGINFO_HEADER(ARCH) =20 extern uintptr_t image_start_address; -extern void *memblock; =20 /* Ops code under test can request from risu: */ typedef enum { @@ -83,34 +82,9 @@ void send_response_byte(int sock, int resp); =20 /* Functions operating on reginfo */ =20 -/* Function prototypes for read/write helper functions. */ -RisuResult write_buffer(void *ptr, size_t bytes); -RisuResult read_buffer(void *ptr, size_t bytes); -void respond(RisuResult response); - -/* - * Send the register information from the struct ucontext down the socket. - * NB: called from a signal handler. - */ -RisuResult send_register_info(void *uc); - -/* - * Read register info from the socket and compare it with that from the - * ucontext. - * NB: called from a signal handler. - */ -RisuResult recv_and_compare_register_info(void *uc); - -/* - * Print a useful report on the status of the last reg comparison - * done in recv_and_compare_register_info(). - */ -void report_mismatch_reg(void); - /* Interface provided by CPU-specific code: */ =20 -/* Move the PC past this faulting insn by adjusting ucontext - */ +/* Move the PC past this faulting insn by adjusting ucontext. */ void advance_pc(void *uc); =20 /* Set the parameter register in a ucontext_t to the specified value. diff --git a/reginfo.c b/reginfo.c deleted file mode 100644 index a007f16..0000000 --- a/reginfo.c +++ /dev/null @@ -1,151 +0,0 @@ -/*************************************************************************= ***** - * Copyright (c) 2017 Linaro Limited - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Peter Maydell (Linaro) - initial implementation - *************************************************************************= ****/ - -#include -#include -#include -#include "risu.h" - -static struct reginfo master_ri, apprentice_ri; -static uint8_t master_memblock[MEMBLOCKLEN]; - -RisuResult send_register_info(void *uc) -{ - struct reginfo ri; - trace_header_t header; - RisuResult res; - RisuOp op; - - reginfo_init(&ri, uc); - op =3D get_risuop(&ri); - - /* Write a header with PC/op to keep in sync */ - header.pc =3D get_pc(&ri); - header.risu_op =3D op; - res =3D write_buffer(&header, sizeof(header)); - if (res !=3D RES_OK) { - return res; - } - - switch (op) { - case OP_COMPARE: - case OP_TESTEND: - case OP_SIGILL: - /* - * Do a simple register compare on (a) explicit request - * (b) end of test (c) a non-risuop UNDEF - */ - res =3D write_buffer(&ri, reginfo_size()); - /* For OP_TEST_END, force exit. */ - if (res =3D=3D RES_OK && op =3D=3D OP_TESTEND) { - res =3D RES_END; - } - break; - case OP_SETMEMBLOCK: - memblock =3D (void *)(uintptr_t)get_reginfo_paramreg(&ri); - break; - case OP_GETMEMBLOCK: - set_ucontext_paramreg(uc, - get_reginfo_paramreg(&ri) + (uintptr_t)membl= ock); - break; - case OP_COMPAREMEM: - return write_buffer(memblock, MEMBLOCKLEN); - default: - abort(); - } - return res; -} - -/* Read register info from the socket and compare it with that from the - * ucontext. Return 0 for match, 1 for end-of-test, 2 for mismatch. - * NB: called from a signal handler. - * - * We don't have any kind of identifying info in the incoming data - * that says whether it is register or memory data, so if the two - * sides get out of sync then we will fail obscurely. - */ -RisuResult recv_and_compare_register_info(void *uc) -{ - RisuResult res; - trace_header_t header; - RisuOp op; - - reginfo_init(&apprentice_ri, uc); - op =3D get_risuop(&apprentice_ri); - - res =3D read_buffer(&header, sizeof(header)); - if (res !=3D RES_OK) { - return res; - } - - if (header.risu_op !=3D op) { - /* We are out of sync. Tell master to exit. */ - respond(RES_END); - return RES_BAD_IO; - } - - /* send OK for the header */ - respond(RES_OK); - - switch (op) { - case OP_COMPARE: - case OP_TESTEND: - case OP_SIGILL: - /* Do a simple register compare on (a) explicit request - * (b) end of test (c) a non-risuop UNDEF - */ - res =3D read_buffer(&master_ri, reginfo_size()); - if (res !=3D RES_OK) { - /* fail */ - } else if (!reginfo_is_eq(&master_ri, &apprentice_ri)) { - /* register mismatch */ - res =3D RES_MISMATCH_REG; - } else if (op =3D=3D OP_TESTEND) { - res =3D RES_END; - } - respond(res =3D=3D RES_OK ? RES_OK : RES_END); - break; - case OP_SETMEMBLOCK: - memblock =3D (void *)(uintptr_t)get_reginfo_paramreg(&apprentice_r= i); - break; - case OP_GETMEMBLOCK: - set_ucontext_paramreg(uc, get_reginfo_paramreg(&apprentice_ri) + - (uintptr_t)memblock); - break; - case OP_COMPAREMEM: - res =3D read_buffer(master_memblock, MEMBLOCKLEN); - if (res !=3D RES_OK) { - /* fail */ - } else if (memcmp(memblock, master_memblock, MEMBLOCKLEN) !=3D 0) { - /* memory mismatch */ - res =3D RES_MISMATCH_MEM; - } - respond(res =3D=3D RES_OK ? RES_OK : RES_END); - break; - default: - abort(); - } - - return res; -} - -/* - * Print a useful report on the status of the last reg comparison - * done in recv_and_compare_register_info(). - */ -void report_mismatch_reg(void) -{ - fprintf(stderr, "master reginfo:\n"); - reginfo_dump(&master_ri, stderr); - fprintf(stderr, "apprentice reginfo:\n"); - reginfo_dump(&apprentice_ri, stderr); - reginfo_dump_mismatch(&master_ri, &apprentice_ri, stderr); -} diff --git a/risu.c b/risu.c index d6c2deb..a0e20d5 100644 --- a/risu.c +++ b/risu.c @@ -28,7 +28,10 @@ #include "config.h" #include "risu.h" =20 -void *memblock; +static void *memblock; +static struct reginfo master_ri, apprentice_ri; +static uint8_t master_memblock[MEMBLOCKLEN]; + =20 static int comm_fd; static bool trace; @@ -48,7 +51,7 @@ static sigjmp_buf jmpbuf; =20 /* I/O functions */ =20 -RisuResult read_buffer(void *ptr, size_t bytes) +static RisuResult read_buffer(void *ptr, size_t bytes) { size_t res; =20 @@ -69,7 +72,7 @@ RisuResult read_buffer(void *ptr, size_t bytes) return res =3D=3D bytes ? RES_OK : RES_BAD_IO; } =20 -RisuResult write_buffer(void *ptr, size_t bytes) +static RisuResult write_buffer(void *ptr, size_t bytes) { size_t res; =20 @@ -90,13 +93,60 @@ RisuResult write_buffer(void *ptr, size_t bytes) return res =3D=3D bytes ? RES_OK : RES_BAD_IO; } =20 -void respond(RisuResult r) +static void respond(RisuResult r) { if (!trace) { send_response_byte(comm_fd, r); } } =20 +static RisuResult send_register_info(void *uc) +{ + struct reginfo ri; + trace_header_t header; + RisuResult res; + RisuOp op; + + reginfo_init(&ri, uc); + op =3D get_risuop(&ri); + + /* Write a header with PC/op to keep in sync */ + header.pc =3D get_pc(&ri); + header.risu_op =3D op; + res =3D write_buffer(&header, sizeof(header)); + if (res !=3D RES_OK) { + return res; + } + + switch (op) { + case OP_COMPARE: + case OP_TESTEND: + case OP_SIGILL: + /* + * Do a simple register compare on (a) explicit request + * (b) end of test (c) a non-risuop UNDEF + */ + res =3D write_buffer(&ri, reginfo_size()); + /* For OP_TEST_END, force exit. */ + if (res =3D=3D RES_OK && op =3D=3D OP_TESTEND) { + res =3D RES_END; + } + break; + case OP_SETMEMBLOCK: + memblock =3D (void *)(uintptr_t)get_reginfo_paramreg(&ri); + break; + case OP_GETMEMBLOCK: + set_ucontext_paramreg(uc, + get_reginfo_paramreg(&ri) + (uintptr_t)membl= ock); + break; + case OP_COMPAREMEM: + return write_buffer(memblock, MEMBLOCKLEN); + default: + abort(); + } + return res; +} + static void master_sigill(int sig, siginfo_t *si, void *uc) { RisuResult r; @@ -110,6 +160,71 @@ static void master_sigill(int sig, siginfo_t *si, void= *uc) } } =20 +static RisuResult recv_and_compare_register_info(void *uc) +{ + RisuResult res; + trace_header_t header; + RisuOp op; + + reginfo_init(&apprentice_ri, uc); + op =3D get_risuop(&apprentice_ri); + + res =3D read_buffer(&header, sizeof(header)); + if (res !=3D RES_OK) { + return res; + } + + if (header.risu_op !=3D op) { + /* We are out of sync. Tell master to exit. */ + respond(RES_END); + return RES_BAD_IO; + } + + /* send OK for the header */ + respond(RES_OK); + + switch (op) { + case OP_COMPARE: + case OP_TESTEND: + case OP_SIGILL: + /* Do a simple register compare on (a) explicit request + * (b) end of test (c) a non-risuop UNDEF + */ + res =3D read_buffer(&master_ri, reginfo_size()); + if (res !=3D RES_OK) { + /* fail */ + } else if (!reginfo_is_eq(&master_ri, &apprentice_ri)) { + /* register mismatch */ + res =3D RES_MISMATCH_REG; + } else if (op =3D=3D OP_TESTEND) { + res =3D RES_END; + } + respond(res =3D=3D RES_OK ? RES_OK : RES_END); + break; + case OP_SETMEMBLOCK: + memblock =3D (void *)(uintptr_t)get_reginfo_paramreg(&apprentice_r= i); + break; + case OP_GETMEMBLOCK: + set_ucontext_paramreg(uc, get_reginfo_paramreg(&apprentice_ri) + + (uintptr_t)memblock); + break; + case OP_COMPAREMEM: + res =3D read_buffer(master_memblock, MEMBLOCKLEN); + if (res !=3D RES_OK) { + /* fail */ + } else if (memcmp(memblock, master_memblock, MEMBLOCKLEN) !=3D 0) { + /* memory mismatch */ + res =3D RES_MISMATCH_MEM; + } + respond(res =3D=3D RES_OK ? RES_OK : RES_END); + break; + default: + abort(); + } + + return res; +} + static void apprentice_sigill(int sig, siginfo_t *si, void *uc) { RisuResult r; @@ -226,7 +341,11 @@ static int apprentice(void) =20 case RES_MISMATCH_REG: fprintf(stderr, "mismatch reg after %zd checkpoints\n", signal_cou= nt); - report_mismatch_reg(); + fprintf(stderr, "master reginfo:\n"); + reginfo_dump(&master_ri, stderr); + fprintf(stderr, "apprentice reginfo:\n"); + reginfo_dump(&apprentice_ri, stderr); + reginfo_dump_mismatch(&master_ri, &apprentice_ri, stderr); return EXIT_FAILURE; =20 case RES_MISMATCH_MEM: --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657296315; cv=none; d=zohomail.com; s=zohoarc; b=aLe/AAzDqjaEZSsD7H8Gfd5k9yulDC8QKN1ychO8ulDPfuyVEUCG+j25R4tGRqzOABbJMIuNgAG2NLfK0CF3dT3fyPXlQhyMCmOJK31ej8KswcWT1sA/7hQpIexHApoNYf5elkuhrXJpydgH430IkgbtHXxbG7xREdQlsvlwHLk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657296315; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=C50plgqGSIgO0dFS/L15QZFrfiVcGLB4PZLBa9Ht7hU=; b=SAM7G+P5t4U+zZ1GQvtxwUakmjTO1jD5unTA7tXO8mIfcXBBr6XcL1lYbfoc0/ghDI0fYcf3uw8fn3ORFFV5D16KgkzshHYl6ojBWGj088gEm9tYRI5YLEdRXIBw1Sltg/5UlzWdvO+YaxU7GuCd24ELO8CD0ls1Q90sIO9918s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657296315080412.79540014397696; Fri, 8 Jul 2022 09:05:15 -0700 (PDT) Received: from localhost ([::1]:34736 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9qTh-0001Np-V3 for importer@patchew.org; Fri, 08 Jul 2022 12:05:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44944) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qD0-0005lf-1j for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:58 -0400 Received: from mail-pg1-x534.google.com ([2607:f8b0:4864:20::534]:45670) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qCx-0002VZ-PX for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:57 -0400 Received: by mail-pg1-x534.google.com with SMTP id 145so22655318pga.12 for ; Fri, 08 Jul 2022 08:47:55 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.47.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:47:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=C50plgqGSIgO0dFS/L15QZFrfiVcGLB4PZLBa9Ht7hU=; b=DuagrhYqV+ZRFMS7oGkdtwG2d+FTcHaYcxd38DHWg8s9b+f4kXIuZMHpoNhHQmntWY Z9l6I0THVH8+tfVSDX4QFZrLX4VD/DFnjIaj3/pwv8KlSO3gBISaXliUFm6B85hZ/cTc SpFbmwKU84mUDCeftWbADk8xhM7Sm1w59gpv5+pf+X3+sbDQaxGVXcQ2iijv2hxqM5FU JCTTjPMElmgc9A3xq8UiQANfcvfQUhUSZsUhUT8BTiInzDahu9UmImTH8K747X6AYyiY XLPPvoJrreIfZuTrm8X1R4Ugo4DSfkyQhoA21kxsqGqIbQxnGKXpAGrbyT1KcSEWnlJx xzjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=C50plgqGSIgO0dFS/L15QZFrfiVcGLB4PZLBa9Ht7hU=; b=s/MhwsYjzv3Ek9ADy1BXmOd9cdT1QhiroofU5WmoJdZAPgSL9YkB9aYUkEpZsoIg7+ R/HKlMjq5pUC7r9bMXfgiIWjXDRwK+1YOobX8ezLhFkFUHu7SDEoWIjTHeAmMEsXm6qp CefGDp2IsghrW0T4NU5JrsmH5V3m32H3+zUJg27WBeIKqzhUzBA57lEJXaZHnzRzY7d+ goPgQrXVr0DYVTVIIzWAipA1qGo138FwNZMGHIlFdHk1nDryb/erXtr9ykchVynof21r wssX9RlhuVel0z5rWyLuf2sAzCgj5ztL+6W0CYvaVqVD6KRLp3jIYez/4qQuRSSMbW8x zJgg== X-Gm-Message-State: AJIora+e5J74WCQAwC4o6f3Y84eN6oLc/9EkRJ0Mg+kkKBHn+QQvXpS6 S6Tqpmhu+tCBPO0+8n+n7z+cuDduhXSkrsNp X-Google-Smtp-Source: AGRyM1tuWj3bn2G2FTIbD3NGIXTn79VjV8eItrUgVAyiCXYytIK2ZWPyjrxbxn1oOSnFQWzJU8RcgQ== X-Received: by 2002:a65:694a:0:b0:412:b98:4604 with SMTP id w10-20020a65694a000000b004120b984604mr4026000pgq.50.1657295274570; Fri, 08 Jul 2022 08:47:54 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [RISU PATCH v4 15/29] Rearrange reginfo and memblock buffers Date: Fri, 8 Jul 2022 21:16:46 +0530 Message-Id: <20220708154700.18682-16-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::534; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x534.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657296316366100001 Content-Type: text/plain; charset="utf-8" For send_register_info from master_sigill, do not keep a reginfo buffer on the stack. At the moment, this struct is quite large for aarch64. Put the two reginfo buffers into an array, for the benefit of future dumping. For recv_and_compare_register_info, index this array with constants, so it's a simple rename. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- risu.c | 58 ++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/risu.c b/risu.c index a0e20d5..b91ad38 100644 --- a/risu.c +++ b/risu.c @@ -28,10 +28,16 @@ #include "config.h" #include "risu.h" =20 -static void *memblock; -static struct reginfo master_ri, apprentice_ri; -static uint8_t master_memblock[MEMBLOCKLEN]; +enum { + MASTER =3D 0, APPRENTICE =3D 1 +}; =20 +static struct reginfo ri[2]; +static uint8_t other_memblock[MEMBLOCKLEN]; +static trace_header_t header; + +/* Memblock pointer into the execution image. */ +static void *memblock; =20 static int comm_fd; static bool trace; @@ -102,16 +108,15 @@ static void respond(RisuResult r) =20 static RisuResult send_register_info(void *uc) { - struct reginfo ri; - trace_header_t header; + uint64_t paramreg; RisuResult res; RisuOp op; =20 - reginfo_init(&ri, uc); - op =3D get_risuop(&ri); + reginfo_init(&ri[MASTER], uc); + op =3D get_risuop(&ri[MASTER]); =20 /* Write a header with PC/op to keep in sync */ - header.pc =3D get_pc(&ri); + header.pc =3D get_pc(&ri[MASTER]); header.risu_op =3D op; res =3D write_buffer(&header, sizeof(header)); if (res !=3D RES_OK) { @@ -126,18 +131,19 @@ static RisuResult send_register_info(void *uc) * Do a simple register compare on (a) explicit request * (b) end of test (c) a non-risuop UNDEF */ - res =3D write_buffer(&ri, reginfo_size()); + res =3D write_buffer(&ri[MASTER], reginfo_size()); /* For OP_TEST_END, force exit. */ if (res =3D=3D RES_OK && op =3D=3D OP_TESTEND) { res =3D RES_END; } break; case OP_SETMEMBLOCK: - memblock =3D (void *)(uintptr_t)get_reginfo_paramreg(&ri); + paramreg =3D get_reginfo_paramreg(&ri[MASTER]); + memblock =3D (void *)(uintptr_t)paramreg; break; case OP_GETMEMBLOCK: - set_ucontext_paramreg(uc, - get_reginfo_paramreg(&ri) + (uintptr_t)membl= ock); + paramreg =3D get_reginfo_paramreg(&ri[MASTER]); + set_ucontext_paramreg(uc, paramreg + (uintptr_t)memblock); break; case OP_COMPAREMEM: return write_buffer(memblock, MEMBLOCKLEN); @@ -162,12 +168,12 @@ static void master_sigill(int sig, siginfo_t *si, voi= d *uc) =20 static RisuResult recv_and_compare_register_info(void *uc) { + uint64_t paramreg; RisuResult res; - trace_header_t header; RisuOp op; =20 - reginfo_init(&apprentice_ri, uc); - op =3D get_risuop(&apprentice_ri); + reginfo_init(&ri[APPRENTICE], uc); + op =3D get_risuop(&ri[APPRENTICE]); =20 res =3D read_buffer(&header, sizeof(header)); if (res !=3D RES_OK) { @@ -190,10 +196,10 @@ static RisuResult recv_and_compare_register_info(void= *uc) /* Do a simple register compare on (a) explicit request * (b) end of test (c) a non-risuop UNDEF */ - res =3D read_buffer(&master_ri, reginfo_size()); + res =3D read_buffer(&ri[MASTER], reginfo_size()); if (res !=3D RES_OK) { /* fail */ - } else if (!reginfo_is_eq(&master_ri, &apprentice_ri)) { + } else if (!reginfo_is_eq(&ri[MASTER], &ri[APPRENTICE])) { /* register mismatch */ res =3D RES_MISMATCH_REG; } else if (op =3D=3D OP_TESTEND) { @@ -202,17 +208,18 @@ static RisuResult recv_and_compare_register_info(void= *uc) respond(res =3D=3D RES_OK ? RES_OK : RES_END); break; case OP_SETMEMBLOCK: - memblock =3D (void *)(uintptr_t)get_reginfo_paramreg(&apprentice_r= i); + paramreg =3D get_reginfo_paramreg(&ri[APPRENTICE]); + memblock =3D (void *)(uintptr_t)paramreg; break; case OP_GETMEMBLOCK: - set_ucontext_paramreg(uc, get_reginfo_paramreg(&apprentice_ri) + - (uintptr_t)memblock); + paramreg =3D get_reginfo_paramreg(&ri[APPRENTICE]); + set_ucontext_paramreg(uc, paramreg + (uintptr_t)memblock); break; case OP_COMPAREMEM: - res =3D read_buffer(master_memblock, MEMBLOCKLEN); + res =3D read_buffer(other_memblock, MEMBLOCKLEN); if (res !=3D RES_OK) { /* fail */ - } else if (memcmp(memblock, master_memblock, MEMBLOCKLEN) !=3D 0) { + } else if (memcmp(memblock, other_memblock, MEMBLOCKLEN) !=3D 0) { /* memory mismatch */ res =3D RES_MISMATCH_MEM; } @@ -221,7 +228,6 @@ static RisuResult recv_and_compare_register_info(void *= uc) default: abort(); } - return res; } =20 @@ -342,10 +348,10 @@ static int apprentice(void) case RES_MISMATCH_REG: fprintf(stderr, "mismatch reg after %zd checkpoints\n", signal_cou= nt); fprintf(stderr, "master reginfo:\n"); - reginfo_dump(&master_ri, stderr); + reginfo_dump(&ri[MASTER], stderr); fprintf(stderr, "apprentice reginfo:\n"); - reginfo_dump(&apprentice_ri, stderr); - reginfo_dump_mismatch(&master_ri, &apprentice_ri, stderr); + reginfo_dump(&ri[APPRENTICE], stderr); + reginfo_dump_mismatch(&ri[MASTER], &ri[APPRENTICE], stderr); return EXIT_FAILURE; =20 case RES_MISMATCH_MEM: --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657298173; cv=none; d=zohomail.com; s=zohoarc; b=mrVVa5ModDTjByhv+1MVP/JlMYUtCsOWqo2L2JUtGBhjfytqYxznnM5Egz7tGoPXzu0/YAILUpIdsjX3Df28QQblfX5tMvn4nSD5pTRc7LJZR/4uXB4H6+4OS0n8C9yiAJurcoUhsaJmcljLs6UVvAQL6PdFh0B8DgpJggZtjk0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657298173; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=n2pj04eKwIIwfWxKRy+OpUcFUnQWI9QGoADis3HM7QI=; b=J6dhAN4otGgcmTg88fzmSkWSrkDSCzBubn0avy5n50x/9VolAfaCAlXwmRA2DiPAMz8uXSOTEwINunu2BDxL1KF1TOZ2vrNn0512TyvcHut85AsWYWupEH5U3IrQTlRiIsOetfYTfhfzau3QUljlMPP7tZ7pAY0YCPHXTSYu7QE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657298173057998.2800976895132; Fri, 8 Jul 2022 09:36:13 -0700 (PDT) Received: from localhost ([::1]:46274 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9qxf-0008Ja-6c for importer@patchew.org; Fri, 08 Jul 2022 12:36:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44970) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qD1-0005qn-Bs for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:59 -0400 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]:37643) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qCz-0002Ux-PM for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:47:59 -0400 Received: by mail-pl1-x630.google.com with SMTP id f11so4115351plr.4 for ; Fri, 08 Jul 2022 08:47:57 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.47.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:47:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=n2pj04eKwIIwfWxKRy+OpUcFUnQWI9QGoADis3HM7QI=; b=bDdTgLPqjoJsQLTGlQpoH2VllST0upphtnER5sE74xLt8M0k8GiIbBk6DoQReqsOxh D8fWlxZRYBzi+YAW66mq1XnNRURgbE9uts8JuApSsVlPb6B5Qb9YaSJljEfjC5kuHQ/n MD4F8OL9qOKbBAxPq/X0P5yJFQeCcN6JngRk1VIFMXQJNWc/SIkQhjq5jlXZView9o0H 3jGofyxe3IcHDuKf+seMGFMB1VLIAdKkVB8DcfXexBPwqZb0YX7DpxIEJa2hH35vGWiI +LKx+WjWPf7LLRIFneW9E/3h/5rFW2S9i1saERHLoKAaIAeI24eQsUIIMxOS5ZrUenCl nxWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=n2pj04eKwIIwfWxKRy+OpUcFUnQWI9QGoADis3HM7QI=; b=KUcFRKlH9QyCitfGdJq9Mk6bZvP1PzLur3aAzgV2TNfv/CemeBdBQVTSrJrPrPR9UQ o9nGFjTCdYQ4P48IV03JHYERAT04T1tC0nEEwYiXL3PlTFNWyEZG1kCQqI0EnaTL8eA5 Hdgi2jHweeiveGEFEOYfOv9cdp4aZG1Vr9ytGvqS9tl9ROJhV3jaFFz7pl3FPkJ+3kvh vD5ZmAuX/x12nkGC40kInceh1e6ZzJNGb67od4JC/6oDW8ah3pFtc29uNrCzd8m0b5Dz 58ld97pQxgc8XisYsQA47oqCzjKCVHgvawGyhXP4WehWVUx5OeNyKWXcTZutze7iWz4q ZYGg== X-Gm-Message-State: AJIora8LPFj/C7y2og71wDnZGzl0xlX3JUSBXAV2XQ3Tgspd7UMrx2wf hxEg2H17dKOT0hGjfP+x1C7q3iLB8QJvhflM X-Google-Smtp-Source: AGRyM1tybHOxl25kNf7QBOLn3IhF81no9VlEF5/Gy2BFo8v+fdRXGKJEcJSFlGMG4jqXWcUqd+JvOw== X-Received: by 2002:a17:90a:e391:b0:1ef:83c2:2527 with SMTP id b17-20020a17090ae39100b001ef83c22527mr541978pjz.94.1657295276984; Fri, 08 Jul 2022 08:47:56 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [RISU PATCH v4 16/29] Split out recv_register_info Date: Fri, 8 Jul 2022 21:16:47 +0530 Message-Id: <20220708154700.18682-17-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::630; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x630.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657298174753100001 Content-Type: text/plain; charset="utf-8" We will want to share this code when dumping. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- risu.c | 50 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/risu.c b/risu.c index b91ad38..80bc3b1 100644 --- a/risu.c +++ b/risu.c @@ -166,6 +166,34 @@ static void master_sigill(int sig, siginfo_t *si, void= *uc) } } =20 +static RisuResult recv_register_info(struct reginfo *ri) +{ + RisuResult res; + + res =3D read_buffer(&header, sizeof(header)); + if (res !=3D RES_OK) { + return res; + } + + /* send OK for the header */ + respond(RES_OK); + + switch (header.risu_op) { + case OP_COMPARE: + case OP_TESTEND: + case OP_SIGILL: + return read_buffer(ri, reginfo_size()); + case OP_COMPAREMEM: + return read_buffer(other_memblock, MEMBLOCKLEN); + case OP_SETMEMBLOCK: + case OP_GETMEMBLOCK: + return RES_OK; + default: + /* TODO: Create a better error message. */ + return RES_BAD_IO; + } +} + static RisuResult recv_and_compare_register_info(void *uc) { uint64_t paramreg; @@ -173,33 +201,26 @@ static RisuResult recv_and_compare_register_info(void= *uc) RisuOp op; =20 reginfo_init(&ri[APPRENTICE], uc); - op =3D get_risuop(&ri[APPRENTICE]); =20 - res =3D read_buffer(&header, sizeof(header)); + res =3D recv_register_info(&ri[MASTER]); if (res !=3D RES_OK) { + /* I/O error. Tell master to exit. */ + respond(RES_END); return res; } =20 + op =3D get_risuop(&ri[APPRENTICE]); if (header.risu_op !=3D op) { /* We are out of sync. Tell master to exit. */ respond(RES_END); return RES_BAD_IO; } =20 - /* send OK for the header */ - respond(RES_OK); - switch (op) { case OP_COMPARE: case OP_TESTEND: case OP_SIGILL: - /* Do a simple register compare on (a) explicit request - * (b) end of test (c) a non-risuop UNDEF - */ - res =3D read_buffer(&ri[MASTER], reginfo_size()); - if (res !=3D RES_OK) { - /* fail */ - } else if (!reginfo_is_eq(&ri[MASTER], &ri[APPRENTICE])) { + if (!reginfo_is_eq(&ri[MASTER], &ri[APPRENTICE])) { /* register mismatch */ res =3D RES_MISMATCH_REG; } else if (op =3D=3D OP_TESTEND) { @@ -216,10 +237,7 @@ static RisuResult recv_and_compare_register_info(void = *uc) set_ucontext_paramreg(uc, paramreg + (uintptr_t)memblock); break; case OP_COMPAREMEM: - res =3D read_buffer(other_memblock, MEMBLOCKLEN); - if (res !=3D RES_OK) { - /* fail */ - } else if (memcmp(memblock, other_memblock, MEMBLOCKLEN) !=3D 0) { + if (memcmp(memblock, other_memblock, MEMBLOCKLEN) !=3D 0) { /* memory mismatch */ res =3D RES_MISMATCH_MEM; } --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657298449; cv=none; d=zohomail.com; s=zohoarc; b=G+/wbqa5rU91nmq7tHvCs9901UhKXfelNnBt+S0wWJ9mWs9nbaOgVb6GiOyx6LEu32GZoF0TPpU0cdccBxv07M1IGlAaqDQXIRljuKCUPxrjj1tUqDfa+j0digO60CV7rKDCTU2eZhcm6sE5j9yaT/xY/ZOranQNDs1JtIVslTM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657298449; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=gGqem9bZjG2DPsS841S7DVBWN/tLpAM4ih8tuyrEJjA=; b=D0xkEgDFA3xouJnqNqzsw97eYptQR3ZmEAThyLSYO7SAO4Ib8EFRNYnH2lEg/OrcoY1xuS44qDWBkwtaDpjv2yisfm1vDO4mALr41/Nrk3nWMDd3MlLX1mKzQufZTrAefi97XKiiLNMxeK2Nzrx/8q50CB3RoqTBUSZyEi1rYws= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657298449375953.6061634294703; Fri, 8 Jul 2022 09:40:49 -0700 (PDT) Received: from localhost ([::1]:53966 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9r27-0005vV-V5 for importer@patchew.org; Fri, 08 Jul 2022 12:40:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45020) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qD6-0005xM-Fe for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:04 -0400 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]:46947) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qD4-0002Ws-Lz for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:04 -0400 Received: by mail-pl1-x634.google.com with SMTP id l12so11314275plk.13 for ; Fri, 08 Jul 2022 08:48:00 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.47.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:47:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=gGqem9bZjG2DPsS841S7DVBWN/tLpAM4ih8tuyrEJjA=; b=U3jCDad59bvy9857Am6RQ1xs4MTmW8+/AIKxX7dWQ0SQBiV+T4yzaca3DbYxXoeF5g wgsKvBUNxqTF7yKC/DswQna4ILw4zPjViYaRtdxgn0m2RFFs/Lr1DdhC6dXsZ8v+t/L8 CF6mzkDBnXB8nMJ/Bkr9vxNcKP7NYPmxkdBcNaePcPGxG4fFVHJv361kzKQk991tXj5B 5zUdQFum1X+awyoZVE0u7UEUuy6d1ixR4UDN0+FGjVbpD1C1Csau8w3T68fGZHNC/rtB 9k8BFCPOiW8QxDk6OSRP0UFUxdQMJkA4R7DRaYjHUqbYgqWpnCeQm9TXeEf2Rl1bmkaP 2Dsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=gGqem9bZjG2DPsS841S7DVBWN/tLpAM4ih8tuyrEJjA=; b=jN8rlTA5ucu0mULKHI8jve5Mo87cszvirenGaI87mpptqpIrSsTVOdIgzgpu5vfKQB aSKvplJEIWK2VQBNY865BhRs+1fUfLGXHg9mp9OU4U1tRV6GlnJMa8nJkchtKAT3WNj0 BFJye9/S4N9A44BwO91/wCP6Ar8At9jINKF0su/J4tzblJZwXisSnGq6YoNSK90kQF7J LLcu1xAnGhJiNRjLELJdF9GdYrT/MiwggNictmGUDpr3PPYyPWMCGTmawjppWgETq2Qt 4LmpZge56QQugLSrIoRbwB5tLjMwO+P9hW79Xd5SnHquRYgmzNKyR0ync9zIxK/vY8bi eENw== X-Gm-Message-State: AJIora8S8Mfn4lbUq2lGpkqfVa0KPs/V+LSfWuOqZEf+jnkZGuHgm5ch Am5FV/WKtcP9Ydg0iA3LsHfyoZXJSSrm4zXX X-Google-Smtp-Source: AGRyM1v6r94R44ez11SQsZBeuooNwUqBjtlSWrABB7R9jjM9GH9zs2Hp/Ew/Bs1PzSou/UpInki0jw== X-Received: by 2002:a17:902:d510:b0:16c:3cd:db78 with SMTP id b16-20020a170902d51000b0016c03cddb78mr4309535plg.17.1657295279790; Fri, 08 Jul 2022 08:47:59 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [RISU PATCH v4 17/29] Add magic and size to the trace header Date: Fri, 8 Jul 2022 21:16:48 +0530 Message-Id: <20220708154700.18682-18-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::634; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x634.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657298450597100001 Content-Type: text/plain; charset="utf-8" Sanity check that we're not getting out of sync with the trace stream. This will be especially bad with the change in size of the sve save data. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- risu.h | 10 +++- risu.c | 162 ++++++++++++++++++++++++++++++++++++++++++++------------- 2 files changed, 136 insertions(+), 36 deletions(-) diff --git a/risu.h b/risu.h index dd9fda5..bfcf0af 100644 --- a/risu.h +++ b/risu.h @@ -55,7 +55,11 @@ typedef enum { RES_END, RES_MISMATCH_REG, RES_MISMATCH_MEM, + RES_MISMATCH_OP, RES_BAD_IO, + RES_BAD_MAGIC, + RES_BAD_SIZE, + RES_BAD_OP, } RisuResult; =20 /* The memory block should be this long */ @@ -69,10 +73,14 @@ typedef enum { struct reginfo; =20 typedef struct { - uintptr_t pc; + uint32_t magic; + uint32_t size; uint32_t risu_op; + uintptr_t pc; } trace_header_t; =20 +#define RISU_MAGIC (('R' << 24) | ('I' << 16) | ('S' << 8) | 'U') + /* Socket related routines */ int master_connect(int port); int apprentice_connect(const char *hostname, int port); diff --git a/risu.c b/risu.c index 80bc3b1..a248db1 100644 --- a/risu.c +++ b/risu.c @@ -111,32 +111,54 @@ static RisuResult send_register_info(void *uc) uint64_t paramreg; RisuResult res; RisuOp op; + void *extra; =20 reginfo_init(&ri[MASTER], uc); op =3D get_risuop(&ri[MASTER]); =20 /* Write a header with PC/op to keep in sync */ + header.magic =3D RISU_MAGIC; header.pc =3D get_pc(&ri[MASTER]); header.risu_op =3D op; + + switch (op) { + case OP_TESTEND: + case OP_COMPARE: + case OP_SIGILL: + header.size =3D reginfo_size(); + extra =3D &ri[MASTER]; + break; + case OP_COMPAREMEM: + header.size =3D MEMBLOCKLEN; + extra =3D memblock; + break; + case OP_SETMEMBLOCK: + case OP_GETMEMBLOCK: + header.size =3D 0; + extra =3D NULL; + break; + default: + abort(); + } + res =3D write_buffer(&header, sizeof(header)); if (res !=3D RES_OK) { return res; } + if (extra) { + res =3D write_buffer(extra, header.size); + if (res !=3D RES_OK) { + return res; + } + } =20 switch (op) { case OP_COMPARE: - case OP_TESTEND: case OP_SIGILL: - /* - * Do a simple register compare on (a) explicit request - * (b) end of test (c) a non-risuop UNDEF - */ - res =3D write_buffer(&ri[MASTER], reginfo_size()); - /* For OP_TEST_END, force exit. */ - if (res =3D=3D RES_OK && op =3D=3D OP_TESTEND) { - res =3D RES_END; - } + case OP_COMPAREMEM: break; + case OP_TESTEND: + return RES_END; case OP_SETMEMBLOCK: paramreg =3D get_reginfo_paramreg(&ri[MASTER]); memblock =3D (void *)(uintptr_t)paramreg; @@ -145,12 +167,10 @@ static RisuResult send_register_info(void *uc) paramreg =3D get_reginfo_paramreg(&ri[MASTER]); set_ucontext_paramreg(uc, paramreg + (uintptr_t)memblock); break; - case OP_COMPAREMEM: - return write_buffer(memblock, MEMBLOCKLEN); default: abort(); } - return res; + return RES_OK; } =20 static void master_sigill(int sig, siginfo_t *si, void *uc) @@ -175,22 +195,35 @@ static RisuResult recv_register_info(struct reginfo *= ri) return res; } =20 - /* send OK for the header */ - respond(RES_OK); + if (header.magic !=3D RISU_MAGIC) { + /* If the magic number is wrong, we can't trust the rest. */ + return RES_BAD_MAGIC; + } =20 switch (header.risu_op) { case OP_COMPARE: case OP_TESTEND: case OP_SIGILL: - return read_buffer(ri, reginfo_size()); + /* If we can't store the data, report invalid size. */ + if (header.size > sizeof(*ri)) { + return RES_BAD_SIZE; + } + respond(RES_OK); + return read_buffer(ri, header.size); + case OP_COMPAREMEM: + if (header.size !=3D MEMBLOCKLEN) { + return RES_BAD_SIZE; + } + respond(RES_OK); return read_buffer(other_memblock, MEMBLOCKLEN); + case OP_SETMEMBLOCK: case OP_GETMEMBLOCK: - return RES_OK; + return header.size =3D=3D 0 ? RES_OK : RES_BAD_SIZE; + default: - /* TODO: Create a better error message. */ - return RES_BAD_IO; + return RES_BAD_OP; } } =20 @@ -204,48 +237,71 @@ static RisuResult recv_and_compare_register_info(void= *uc) =20 res =3D recv_register_info(&ri[MASTER]); if (res !=3D RES_OK) { - /* I/O error. Tell master to exit. */ - respond(RES_END); - return res; + goto done; } =20 op =3D get_risuop(&ri[APPRENTICE]); - if (header.risu_op !=3D op) { - /* We are out of sync. Tell master to exit. */ - respond(RES_END); - return RES_BAD_IO; - } =20 switch (op) { case OP_COMPARE: case OP_TESTEND: case OP_SIGILL: - if (!reginfo_is_eq(&ri[MASTER], &ri[APPRENTICE])) { + /* + * If we have nothing to compare against, report an op mismatch. + * Otherwise allow the compare to continue, and assume that + * something in the reginfo will be different. + */ + if (header.risu_op !=3D OP_COMPARE && + header.risu_op !=3D OP_TESTEND && + header.risu_op !=3D OP_SIGILL) { + res =3D RES_MISMATCH_OP; + } else if (!reginfo_is_eq(&ri[MASTER], &ri[APPRENTICE])) { /* register mismatch */ res =3D RES_MISMATCH_REG; + } else if (op !=3D header.risu_op) { + /* The reginfo matched. We should have matched op. */ + res =3D RES_MISMATCH_OP; } else if (op =3D=3D OP_TESTEND) { res =3D RES_END; } - respond(res =3D=3D RES_OK ? RES_OK : RES_END); break; + case OP_SETMEMBLOCK: + if (op !=3D header.risu_op) { + res =3D RES_MISMATCH_OP; + break; + } paramreg =3D get_reginfo_paramreg(&ri[APPRENTICE]); memblock =3D (void *)(uintptr_t)paramreg; break; + case OP_GETMEMBLOCK: + if (op !=3D header.risu_op) { + res =3D RES_MISMATCH_OP; + break; + } paramreg =3D get_reginfo_paramreg(&ri[APPRENTICE]); set_ucontext_paramreg(uc, paramreg + (uintptr_t)memblock); break; + case OP_COMPAREMEM: + if (op !=3D header.risu_op) { + res =3D RES_MISMATCH_OP; + break; + } if (memcmp(memblock, other_memblock, MEMBLOCKLEN) !=3D 0) { /* memory mismatch */ res =3D RES_MISMATCH_MEM; } - respond(res =3D=3D RES_OK ? RES_OK : RES_END); break; + default: abort(); } + + done: + /* On error, tell master to exit. */ + respond(res =3D=3D RES_OK ? RES_OK : RES_END); return res; } =20 @@ -346,6 +402,25 @@ static int master(void) } } =20 +static const char *op_name(RisuOp op) +{ + switch (op) { + case OP_SIGILL: + return "SIGILL"; + case OP_COMPARE: + return "COMPARE"; + case OP_TESTEND: + return "TESTEND"; + case OP_SETMEMBLOCK: + return "SETMEMBLOCK"; + case OP_GETMEMBLOCK: + return "GETMEMBLOCK"; + case OP_COMPAREMEM: + return "COMPAREMEM"; + } + abort(); +} + static int apprentice(void) { RisuResult res =3D sigsetjmp(jmpbuf, 1); @@ -364,7 +439,7 @@ static int apprentice(void) return EXIT_SUCCESS; =20 case RES_MISMATCH_REG: - fprintf(stderr, "mismatch reg after %zd checkpoints\n", signal_cou= nt); + fprintf(stderr, "Mismatch reg after %zd checkpoints\n", signal_cou= nt); fprintf(stderr, "master reginfo:\n"); reginfo_dump(&ri[MASTER], stderr); fprintf(stderr, "apprentice reginfo:\n"); @@ -373,15 +448,32 @@ static int apprentice(void) return EXIT_FAILURE; =20 case RES_MISMATCH_MEM: - fprintf(stderr, "mismatch mem after %zd checkpoints\n", signal_cou= nt); + fprintf(stderr, "Mismatch mem after %zd checkpoints\n", signal_cou= nt); + return EXIT_FAILURE; + + case RES_MISMATCH_OP: + /* Out of sync, but both opcodes are known valid. */ + fprintf(stderr, "Mismatch header after %zd checkpoints\n" + "mismatch detail (master : apprentice):\n" + " opcode: %s vs %s\n", + signal_count, op_name(header.risu_op), + op_name(get_risuop(&ri[APPRENTICE]))); return EXIT_FAILURE; =20 case RES_BAD_IO: - fprintf(stderr, "i/o error after %zd checkpoints\n", signal_count); + fprintf(stderr, "I/O error\n"); + return EXIT_FAILURE; + case RES_BAD_MAGIC: + fprintf(stderr, "Unexpected magic number: %#08x\n", header.magic); + return EXIT_FAILURE; + case RES_BAD_SIZE: + fprintf(stderr, "Unexpected payload size: %u\n", header.size); + return EXIT_FAILURE; + case RES_BAD_OP: + fprintf(stderr, "Unexpected opcode: %d\n", header.risu_op); return EXIT_FAILURE; - default: - fprintf(stderr, "unexpected result %d\n", res); + fprintf(stderr, "Unexpected result %d\n", res); return EXIT_FAILURE; } } --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657298656; cv=none; d=zohomail.com; s=zohoarc; b=fObRx/l1izOGJlwaJoLYI8fpvTzboGFRwF5RSGdP6k3MSX80Sxya6F2snTmEhyNew1uSEgiS5wYcKT+Mj4p4PL9jRw4GCopn4BFBMSlfhIybGbBONlRinvs8DUSeMsHq1OjWh3M5DUHH8ZC6X2rNeH7oY2xkwriaVdeKBltMSXs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657298656; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=cT93Lxc9mPWCnChsVCUCuYS7cifJUMOpzXauTBVN+y4=; b=NUXOhLEmp1UVAtgLEeEDzTP9l3yf4hy8uFOoxnzF5Qx3tR1/uFfOI6LVb2C8JsYtSI+KUbDtAfIl2bHjVFDNqxsNFGPIggiVaVHYgK8OuXIEKsTngtHL+xlQn8s1BloKjp/JwZug+EqCrm4kjOpRlIytrXJwFWB+xbWeVuwpAac= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657298656556258.59615905287706; Fri, 8 Jul 2022 09:44:16 -0700 (PDT) Received: from localhost ([::1]:33994 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9r5Q-0003Ii-2O for importer@patchew.org; Fri, 08 Jul 2022 12:44:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45048) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qD7-0005yd-PG for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:08 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]:36643) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qD5-0002X2-EK for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:05 -0400 Received: by mail-pj1-x1036.google.com with SMTP id z12-20020a17090a7b8c00b001ef84000b8bso2313765pjc.1 for ; Fri, 08 Jul 2022 08:48:03 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.48.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:48:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=cT93Lxc9mPWCnChsVCUCuYS7cifJUMOpzXauTBVN+y4=; b=kLncZh2cCRZ0gNjwCfYl6p1PQyezmnZItOPl8xO95pu1Ti/hLdJbXVrou1ysqmXazB 7PH9ENNq2Q5B4DeJMpxogBK0l9MYkeHiCoSBZRhkcmK9VEMZJQAetH+5Luc3G4n0inb9 LARN+uSTx4uiUHwup0IrGD6hc5c5iEwp35LUboyTZJLxBrlWbxIBv34Qpf5aoFe0hpqw C4tp7+sNjjLemzpJZ9JnbnTPg5lfeeyADPfE8iDUbLEcgKmjKPNMJhauhx+Z6rOoRp9G Wz9bi7yTWfEIMMcehYPdAIKBTtok6KK1GAbp5ntrwgD7JOUg4Go66lcXxxsC3xnC9f9+ uhXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=cT93Lxc9mPWCnChsVCUCuYS7cifJUMOpzXauTBVN+y4=; b=56ty48uOle20mumGwG7910h2faCvekxIYN2KGZ7xmkX2227Rcop4sBQu+zTpC/24Me wQVmU+tDPgAVORsxr0nsK8u/0siLtUC+KBiLLSbnuukFR7u9at9yya6Va79Ojn7/U+Pi Jt/kgf27+vMHemtGajckMtiD9ryVq6mNBA4DYRDT8BDQQbB0sScU5bixgP3LDJMJypAP 1wYUCn1YDYuVZTJ+wlf0iDm1c2WSuHoqdnEeBgI6qk2xWeVCNeJSlI9GP7W5qWjEo7N1 Vm1UsVG1Wt51+JG38ei8uLagAPH/jvPbpai+VzL1MeuN0GH8x828aXXN3TcZdi2OzFE/ Qg7g== X-Gm-Message-State: AJIora+5AXlNjQ0mbgA0rtzfUZ7ijKTUqpOO2PK3GHwNQYaQyt9Mm45n WDkDBHtrcmtKGc0pt4hvQNrSPs5Dws2rRmnN X-Google-Smtp-Source: AGRyM1vC1D3OQuYhedlWbfVEMIdO+2Xk+WTKFGbADRqykgVDIfdnUMmDOgIvwMG3CRXwMLqIgGdxAA== X-Received: by 2002:a17:902:7402:b0:16c:9e2:3b1c with SMTP id g2-20020a170902740200b0016c09e23b1cmr4179855pll.128.1657295282168; Fri, 08 Jul 2022 08:48:02 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [RISU PATCH v4 18/29] Compute reginfo_size based on the reginfo Date: Fri, 8 Jul 2022 21:16:49 +0530 Message-Id: <20220708154700.18682-19-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1036; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1036.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657298657849100001 Content-Type: text/plain; charset="utf-8" This will allow dumping of SVE frames without having to know the SVE vector length beforehand. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- risu.h | 2 +- risu.c | 9 +++++++-- risu_reginfo_aarch64.c | 4 ++-- risu_reginfo_arm.c | 4 ++-- risu_reginfo_i386.c | 4 ++-- risu_reginfo_m68k.c | 4 ++-- risu_reginfo_ppc64.c | 4 ++-- 7 files changed, 18 insertions(+), 13 deletions(-) diff --git a/risu.h b/risu.h index bfcf0af..3cad3d5 100644 --- a/risu.h +++ b/risu.h @@ -126,6 +126,6 @@ int reginfo_dump(struct reginfo *ri, FILE * f); int reginfo_dump_mismatch(struct reginfo *m, struct reginfo *a, FILE *f); =20 /* return size of reginfo */ -const int reginfo_size(void); +int reginfo_size(struct reginfo *ri); =20 #endif /* RISU_H */ diff --git a/risu.c b/risu.c index a248db1..a70b778 100644 --- a/risu.c +++ b/risu.c @@ -125,7 +125,7 @@ static RisuResult send_register_info(void *uc) case OP_TESTEND: case OP_COMPARE: case OP_SIGILL: - header.size =3D reginfo_size(); + header.size =3D reginfo_size(&ri[MASTER]); extra =3D &ri[MASTER]; break; case OP_COMPAREMEM: @@ -209,7 +209,12 @@ static RisuResult recv_register_info(struct reginfo *r= i) return RES_BAD_SIZE; } respond(RES_OK); - return read_buffer(ri, header.size); + res =3D read_buffer(ri, header.size); + if (res =3D=3D RES_OK && header.size !=3D reginfo_size(ri)) { + /* The payload size is not self-consistent with the data. */ + return RES_BAD_SIZE; + } + return res; =20 case OP_COMPAREMEM: if (header.size !=3D MEMBLOCKLEN) { diff --git a/risu_reginfo_aarch64.c b/risu_reginfo_aarch64.c index 028c690..7044648 100644 --- a/risu_reginfo_aarch64.c +++ b/risu_reginfo_aarch64.c @@ -69,7 +69,7 @@ void process_arch_opt(int opt, const char *arg) #endif } =20 -const int reginfo_size(void) +int reginfo_size(struct reginfo *ri) { int size =3D offsetof(struct reginfo, simd.end); #ifdef SVE_MAGIC @@ -194,7 +194,7 @@ void reginfo_init(struct reginfo *ri, ucontext_t *uc) /* reginfo_is_eq: compare the reginfo structs, returns nonzero if equal */ int reginfo_is_eq(struct reginfo *r1, struct reginfo *r2) { - return memcmp(r1, r2, reginfo_size()) =3D=3D 0; + return memcmp(r1, r2, reginfo_size(r1)) =3D=3D 0; } =20 #ifdef SVE_MAGIC diff --git a/risu_reginfo_arm.c b/risu_reginfo_arm.c index 3662f12..47c52e8 100644 --- a/risu_reginfo_arm.c +++ b/risu_reginfo_arm.c @@ -36,9 +36,9 @@ void process_arch_opt(int opt, const char *arg) abort(); } =20 -const int reginfo_size(void) +int reginfo_size(struct reginfo *ri) { - return sizeof(struct reginfo); + return sizeof(*ri); } =20 static void reginfo_init_vfp(struct reginfo *ri, ucontext_t *uc) diff --git a/risu_reginfo_i386.c b/risu_reginfo_i386.c index 60fc239..50505ab 100644 --- a/risu_reginfo_i386.c +++ b/risu_reginfo_i386.c @@ -74,9 +74,9 @@ void process_arch_opt(int opt, const char *arg) } } =20 -const int reginfo_size(void) +int reginfo_size(struct reginfo *ri) { - return sizeof(struct reginfo); + return sizeof(*ri); } =20 static void *xsave_feature_buf(struct _xstate *xs, int feature) diff --git a/risu_reginfo_m68k.c b/risu_reginfo_m68k.c index 32b28c8..4eb30cd 100644 --- a/risu_reginfo_m68k.c +++ b/risu_reginfo_m68k.c @@ -23,9 +23,9 @@ void process_arch_opt(int opt, const char *arg) abort(); } =20 -const int reginfo_size(void) +int reginfo_size(struct reginfo *ri) { - return sizeof(struct reginfo); + return sizeof(*ri); } =20 /* reginfo_init: initialize with a ucontext */ diff --git a/risu_reginfo_ppc64.c b/risu_reginfo_ppc64.c index 071c951..39e8f1c 100644 --- a/risu_reginfo_ppc64.c +++ b/risu_reginfo_ppc64.c @@ -32,9 +32,9 @@ void process_arch_opt(int opt, const char *arg) abort(); } =20 -const int reginfo_size(void) +int reginfo_size(struct reginfo *ri) { - return sizeof(struct reginfo); + return sizeof(*ri); } =20 /* reginfo_init: initialize with a ucontext */ --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657298336; cv=none; d=zohomail.com; s=zohoarc; b=W8l3t/lWfWF0FagO7UYkFZ0SJmwBQ3/cgWZkrzlZ4Jj3cZbKUhffeYWsZebMlrrdOC7MNEKrr7XZScRzv3HpCtBArcS/4RQwAWZTlVwTUlSOaXgFucOQtI9+0452et45vgx2mFfAxioYu/bpgfHJ72RPydii8Iom1W/1hgjManA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657298336; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=vlO0Hy0xq7x5BD/ngIXXowwVL1t8ftN3CmLzeuQQxqU=; b=bIrusGnCtmXj8PgrVfX6W4OYeOheVqrJ5c4FVD2LDJ2/Oze7JU4ka3t5GrRXb/3ztWH8pKys839ke1zNYsrDBm7sPD3QxyKKn23/YzKIYKMcxyDwy/PAmojRzmHaJ0YO4+BFonPkbspaWUEExcTMdwPTjQ0h21sfxtpbtEfcorU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657298336816569.0076239352627; Fri, 8 Jul 2022 09:38:56 -0700 (PDT) Received: from localhost ([::1]:51662 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9r0J-00043i-HA for importer@patchew.org; Fri, 08 Jul 2022 12:38:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45074) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qD8-0005yi-Ux for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:08 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]:53036) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qD7-0002Ra-A4 for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:06 -0400 Received: by mail-pj1-x1036.google.com with SMTP id fz10so12265977pjb.2 for ; Fri, 08 Jul 2022 08:48:04 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.48.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:48:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=vlO0Hy0xq7x5BD/ngIXXowwVL1t8ftN3CmLzeuQQxqU=; b=k7NtZtb/c/RkM48ccJZB8FEawARumCpACdsbVAjUMYfQBdDRkLJvoSlJBjkWs0sbop knQ1w33qO9tHTCwgcBw7LwdkhKAnHB4Aelc0jSFkbg89qLRu3iZTmLSe/2RuX+WA/x3c 3RTtUqArfNriGtvemu1ILADTB6L11CH5yFB3+eHmfT54inJlKfHrGKNrMTEGR+cJrezP cTxpMtiKlzvODNybmacg5nMuN0umBo4oiT8CEAMc0KH5rxUxrjoeFvdtx3ibsKqoXJ5j dtYJDt5hwwGcDo4FPwH1XQXLjcpeDQcl8g6fUj4Al19fYB+klYtk0a5UWL1tPXJvcmPu +9Ig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=vlO0Hy0xq7x5BD/ngIXXowwVL1t8ftN3CmLzeuQQxqU=; b=F6z/Mlad4TEMGZMQ+2zc1ejgxaV+IsvhXfbCYqzGOPDrOms75aOIXEuP5vp8LWKgI7 e6MiHILsZJt6Lq/cWYbTQe+4mq4NXRgiLEmW6o3vFtB+KPiCyHmhyNIJm/kZsmAIhcFP zOvEfab0DHfpsLtbTDgID8i1u4doJ/MXNjglFRe6JeSZPJebhAWg3Rl7KuqMEV05hC+V pEMuFIfPBr2CrlSwlWLWrrahS6zW9jHeNaU41FZBmmLaal7APY7veJRBXSwB+2WD+jqF ptS+xQnyZ6tq6yNI157fikvSbczsnv45L/V8ClpYRyEiEJ3i0LBGVKBUn7utyNYuDs/o EtPA== X-Gm-Message-State: AJIora/gXazXOEZn819Sn3EdrtATiehyxDhdkfIMzmVWbH7dNkC3eKny BW7fjbpBLRC5rbhhmY4YjS4/NFFZjUZPRiDh X-Google-Smtp-Source: AGRyM1t6dp3w2ShfeuCNiwGNwiaVkme4szswTJelxklC2IV3DClOhaUNTm4guGvYHgby5fNNNXyMag== X-Received: by 2002:a17:90a:474c:b0:1ec:f898:d85b with SMTP id y12-20020a17090a474c00b001ecf898d85bmr518525pjg.11.1657295284590; Fri, 08 Jul 2022 08:48:04 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [RISU PATCH v4 19/29] aarch64: Assume system support for SVE Date: Fri, 8 Jul 2022 21:16:50 +0530 Message-Id: <20220708154700.18682-20-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1036; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1036.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657298337998100001 Content-Type: text/plain; charset="utf-8" SVE support is no longer new, assume it's present. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- risu_reginfo_aarch64.h | 4 ---- risu_reginfo_aarch64.c | 24 ------------------------ 2 files changed, 28 deletions(-) diff --git a/risu_reginfo_aarch64.h b/risu_reginfo_aarch64.h index c33b86f..efbca56 100644 --- a/risu_reginfo_aarch64.h +++ b/risu_reginfo_aarch64.h @@ -20,7 +20,6 @@ struct simd_reginfo { char end[0]; }; =20 -#ifdef SVE_MAGIC struct sve_reginfo { /* SVE */ uint16_t vl; /* current VL */ @@ -29,7 +28,6 @@ struct sve_reginfo { uint16_t ffr[SVE_VQ_MAX]; char end[0]; }; -#endif =20 /* The kernel headers set this based on future arch extensions. The current arch maximum is 16. Save space below. */ @@ -50,9 +48,7 @@ struct reginfo { =20 union { struct simd_reginfo simd; -#ifdef SVE_MAGIC struct sve_reginfo sve; -#endif }; }; =20 diff --git a/risu_reginfo_aarch64.c b/risu_reginfo_aarch64.c index 7044648..16a57ba 100644 --- a/risu_reginfo_aarch64.c +++ b/risu_reginfo_aarch64.c @@ -24,11 +24,6 @@ #include "risu.h" #include "risu_reginfo_aarch64.h" =20 -#ifndef SVE_MAGIC -const struct option * const arch_long_opts; -const char * const arch_extra_help; -#else - /* Should we test SVE register state */ static int test_sve; static const struct option extra_opts[] =3D { @@ -39,11 +34,9 @@ static const struct option extra_opts[] =3D { const struct option * const arch_long_opts =3D &extra_opts[0]; const char * const arch_extra_help =3D " --test-sve=3D Compare SVE registers with VQ\n"; -#endif =20 void process_arch_opt(int opt, const char *arg) { -#ifdef SVE_MAGIC long want, got; =20 assert(opt =3D=3D FIRST_ARCH_OPT); @@ -64,19 +57,14 @@ void process_arch_opt(int opt, const char *arg) } exit(EXIT_FAILURE); } -#else - abort(); -#endif } =20 int reginfo_size(struct reginfo *ri) { int size =3D offsetof(struct reginfo, simd.end); -#ifdef SVE_MAGIC if (test_sve) { size =3D offsetof(struct reginfo, sve.end); } -#endif return size; } =20 @@ -86,9 +74,7 @@ void reginfo_init(struct reginfo *ri, ucontext_t *uc) int i; struct _aarch64_ctx *ctx, *extra =3D NULL; struct fpsimd_context *fp =3D NULL; -#ifdef SVE_MAGIC struct sve_context *sve =3D NULL; -#endif =20 /* necessary to be able to compare with memcmp later */ memset(ri, 0, sizeof(*ri)); @@ -110,14 +96,12 @@ void reginfo_init(struct reginfo *ri, ucontext_t *uc) case FPSIMD_MAGIC: fp =3D (void *)ctx; break; -#ifdef SVE_MAGIC case SVE_MAGIC: sve =3D (void *)ctx; break; case EXTRA_MAGIC: extra =3D (void *)((struct extra_context *)(ctx))->datap; break; -#endif case 0: /* End of list. */ ctx =3D extra; @@ -137,7 +121,6 @@ void reginfo_init(struct reginfo *ri, ucontext_t *uc) ri->fpsr =3D fp->fpsr; ri->fpcr =3D fp->fpcr; =20 -#ifdef SVE_MAGIC if (test_sve) { int vq =3D test_sve; =20 @@ -184,7 +167,6 @@ void reginfo_init(struct reginfo *ri, ucontext_t *uc) =20 return; } -#endif /* SVE_MAGIC */ =20 for (i =3D 0; i < 32; i++) { ri->simd.vregs[i] =3D fp->vregs[i]; @@ -197,7 +179,6 @@ int reginfo_is_eq(struct reginfo *r1, struct reginfo *r= 2) return memcmp(r1, r2, reginfo_size(r1)) =3D=3D 0; } =20 -#ifdef SVE_MAGIC static int sve_zreg_is_eq(int vq, const void *z1, const void *z2) { return memcmp(z1, z2, vq * 16) =3D=3D 0; @@ -241,7 +222,6 @@ static void sve_dump_zreg_diff(FILE *f, int vq, const _= _uint128_t *z1, } } } -#endif =20 /* reginfo_dump: print state to a stream, returns nonzero on success */ int reginfo_dump(struct reginfo *ri, FILE * f) @@ -259,7 +239,6 @@ int reginfo_dump(struct reginfo *ri, FILE * f) fprintf(f, " fpsr : %08x\n", ri->fpsr); fprintf(f, " fpcr : %08x\n", ri->fpcr); =20 -#ifdef SVE_MAGIC if (test_sve) { int q, vq =3D test_sve; =20 @@ -287,7 +266,6 @@ int reginfo_dump(struct reginfo *ri, FILE * f) =20 return !ferror(f); } -#endif =20 for (i =3D 0; i < 32; i++) { fprintf(f, " V%-2d : %016" PRIx64 "%016" PRIx64 "\n", i, @@ -336,7 +314,6 @@ int reginfo_dump_mismatch(struct reginfo *m, struct reg= info *a, FILE * f) fprintf(f, " fpcr : %08x vs %08x\n", m->fpcr, a->fpcr); } =20 -#ifdef SVE_MAGIC if (test_sve) { int vq =3D sve_vq_from_vl(m->sve.vl); =20 @@ -365,7 +342,6 @@ int reginfo_dump_mismatch(struct reginfo *m, struct reg= info *a, FILE * f) =20 return !ferror(f); } -#endif =20 for (i =3D 0; i < 32; i++) { if (m->simd.vregs[i] !=3D a->simd.vregs[i]) { --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657298280; cv=none; d=zohomail.com; s=zohoarc; b=QUOa54Mgns/shj5YCOJ8TE0aR91j9kBDE6pbzFdgVvDbNpCdxMHhBd9wyeI83toLnbB1mrVvr8Z/lU9aBqQLuLDmtPpd0pZqMhEgv+7Z9O9sXDTO1SyZNZGMwwWXl12x4v0QktKG5Z0QcRml9VFYsqZhWGTYyUOA9GzAo659rJg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657298280; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=loeSKEoq2daOdPkhNfaGpJOqptRl1Z7V1/Ub8FEvBaI=; b=TdihIcMhLxaW+LN0i8DjVP9e7o6ua7diNPJzQdfIYGnzURjPKEv9DHUrNvBXxfK17Q5NyeXq+W76ktzKh5uGFVi4mxA9X5VJlM75+4611HPx2gJ9vmh5Tl4NSnb+t2lBuMz5ePNRiKz8QUv0RDKS1mJtsSuyxxXuX7B9egNGD/k= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657298280892131.08545653986687; Fri, 8 Jul 2022 09:38:00 -0700 (PDT) Received: from localhost ([::1]:49848 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9qzO-0002im-Ti for importer@patchew.org; Fri, 08 Jul 2022 12:37:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45110) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qDC-000603-NR for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:12 -0400 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]:45960) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qDA-0002TL-Mm for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:10 -0400 Received: by mail-pl1-x62a.google.com with SMTP id d5so16628722plo.12 for ; Fri, 08 Jul 2022 08:48:08 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.48.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:48:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=loeSKEoq2daOdPkhNfaGpJOqptRl1Z7V1/Ub8FEvBaI=; b=yAWiX0IDExF2W3/az9f1pb9+g5X8j3M/IFU0SQUgjQIG5zT2TaQKlW0yTc1zKc5YaH MrKYR8cQFs59MdWDICOKzQEa0JcNe6NLG9RKf1Pp/nZYyKk+2EKCpLsj1Qd/TeBhwov+ mYHQJBiFYHN+8h4nDeuYazoExfrv+RDF3Sh4Uq/914U4x75CjbB2fwL7MHbYJOooyfc7 kCfcb0DxMSrpAmcdiWqYTyiu+Y/pA7dle1rYHB4zYBhYQmOLb+camM8+ZJ1aYh+wQPu6 8BdF1qwy8EgC8aags+FeRCbmfC+cAtcV5/ESPB8sKecVSsNEpo0ZMprTpEV/b33M8JfB 6ZAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=loeSKEoq2daOdPkhNfaGpJOqptRl1Z7V1/Ub8FEvBaI=; b=wZA/bOhlrTUWWUpSBsOZFiGVfP7oaSRk1MBs7GTO8AN3w4hnl8TVj0rM1fkGP3/UlK whxGtmmUKfLsx57h4Soo+Wz4YpWIwQFzrwmCxASMo16WTWRkXcAo5E4bb7NXS8bFchG5 i1/dU5O31IL+hDORAJoynP1vN2S25Xz/be6cuqVcVGC6xNd5HaRH44AP4jhxi8pvY7bL 5CGNAJx1+GITqmx0H4eFDmovjldzmalwKB4inqKchsIcbzJrK5qCrxNi57AbBSOr5lug 75Qes6kRX57RrBS5s1X6vyaE3+mpMDs8t1LGaCf2DFtgBTNv99bzSVJUnewT8pLFg7hZ i3Hw== X-Gm-Message-State: AJIora99z4NONmS4bPn24D6i0TGd7Im1blKQjEUY9V2q3sRsOMJEJFA6 Z10GmKxkFJSgaXFkoVYKdUvvGPA2nkyaKBbV X-Google-Smtp-Source: AGRyM1ulhArIgeXbW2NGihSncptKukuLQEl4ZnH6+yWUaPIOmbqOQmE0/xpsgxJ6gdt1tDC7lYz+Uw== X-Received: by 2002:a17:90a:6383:b0:1ef:c181:3777 with SMTP id f3-20020a17090a638300b001efc1813777mr556182pjj.50.1657295287871; Fri, 08 Jul 2022 08:48:07 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [RISU PATCH v4 20/29] aarch64: Reorg sve reginfo to save space Date: Fri, 8 Jul 2022 21:16:51 +0530 Message-Id: <20220708154700.18682-21-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62a; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657298281601100001 Content-Type: text/plain; charset="utf-8" Mirror the signal frame by storing all of the registers as a lump. Use the signal macros to pull out the values. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- risu_reginfo_aarch64.h | 45 ++++++----- risu_reginfo_aarch64.c | 171 ++++++++++++++++++++--------------------- 2 files changed, 108 insertions(+), 108 deletions(-) diff --git a/risu_reginfo_aarch64.h b/risu_reginfo_aarch64.h index efbca56..536c12b 100644 --- a/risu_reginfo_aarch64.h +++ b/risu_reginfo_aarch64.h @@ -13,27 +13,17 @@ #ifndef RISU_REGINFO_AARCH64_H #define RISU_REGINFO_AARCH64_H =20 -#include /* for SVE_MAGIC */ - -struct simd_reginfo { - __uint128_t vregs[32]; - char end[0]; -}; - -struct sve_reginfo { - /* SVE */ - uint16_t vl; /* current VL */ - __uint128_t zregs[SVE_NUM_ZREGS][SVE_VQ_MAX]; - uint16_t pregs[SVE_NUM_PREGS][SVE_VQ_MAX]; - uint16_t ffr[SVE_VQ_MAX]; - char end[0]; -}; +#include =20 /* The kernel headers set this based on future arch extensions. The current arch maximum is 16. Save space below. */ #undef SVE_VQ_MAX #define SVE_VQ_MAX 16 =20 +#define ROUND_UP(SIZE, POW2) (((SIZE) + (POW2) - 1) & -(POW2)) +#define RISU_SVE_REGS_SIZE(VQ) ROUND_UP(SVE_SIG_REGS_SIZE(VQ), 16) +#define RISU_SIMD_REGS_SIZE (32 * 16) + struct reginfo { uint64_t fault_address; uint64_t regs[31]; @@ -45,11 +35,28 @@ struct reginfo { /* FP/SIMD */ uint32_t fpsr; uint32_t fpcr; + uint16_t sve_vl; + uint16_t reserved; =20 - union { - struct simd_reginfo simd; - struct sve_reginfo sve; - }; + char extra[RISU_SVE_REGS_SIZE(SVE_VQ_MAX)] + __attribute__((aligned(16))); }; =20 +static inline uint64_t *reginfo_vreg(struct reginfo *ri, int i) +{ + return (uint64_t *)&ri->extra[i * 16]; +} + +static inline uint64_t *reginfo_zreg(struct reginfo *ri, int vq, int i) +{ + return (uint64_t *)&ri->extra[SVE_SIG_ZREG_OFFSET(vq, i) - + SVE_SIG_REGS_OFFSET]; +} + +static inline uint16_t *reginfo_preg(struct reginfo *ri, int vq, int i) +{ + return (uint16_t *)&ri->extra[SVE_SIG_PREG_OFFSET(vq, i) - + SVE_SIG_REGS_OFFSET]; +} + #endif /* RISU_REGINFO_AARCH64_H */ diff --git a/risu_reginfo_aarch64.c b/risu_reginfo_aarch64.c index 16a57ba..81a77ba 100644 --- a/risu_reginfo_aarch64.c +++ b/risu_reginfo_aarch64.c @@ -61,9 +61,13 @@ void process_arch_opt(int opt, const char *arg) =20 int reginfo_size(struct reginfo *ri) { - int size =3D offsetof(struct reginfo, simd.end); - if (test_sve) { - size =3D offsetof(struct reginfo, sve.end); + int size =3D offsetof(struct reginfo, extra); + + if (ri->sve_vl) { + int vq =3D sve_vq_from_vl(ri->sve_vl); + size +=3D RISU_SVE_REGS_SIZE(vq); + } else { + size +=3D RISU_SIMD_REGS_SIZE; } return size; } @@ -128,6 +132,7 @@ void reginfo_init(struct reginfo *ri, ucontext_t *uc) fprintf(stderr, "risu_reginfo_aarch64: failed to get SVE state= \n"); return; } + if (sve->vl !=3D sve_vl_from_vq(vq)) { fprintf(stderr, "risu_reginfo_aarch64: " "unexpected SVE state: %d !=3D %d\n", @@ -135,42 +140,22 @@ void reginfo_init(struct reginfo *ri, ucontext_t *uc) return; } =20 - ri->sve.vl =3D sve->vl; - - if (sve->head.size < SVE_SIG_CONTEXT_SIZE(vq)) { - if (sve->head.size =3D=3D sizeof(*sve)) { - /* SVE state is empty -- not an error. */ - } else { - fprintf(stderr, "risu_reginfo_aarch64: " - "failed to get complete SVE state\n"); - } + if (sve->head.size <=3D SVE_SIG_CONTEXT_SIZE(0)) { + /* Only AdvSIMD state is present. */ + } else if (sve->head.size < SVE_SIG_CONTEXT_SIZE(vq)) { + fprintf(stderr, "risu_reginfo_aarch64: " + "failed to get complete SVE state\n"); + return; + } else { + ri->sve_vl =3D sve->vl; + memcpy(reginfo_zreg(ri, vq, 0), + (char *)sve + SVE_SIG_REGS_OFFSET, + SVE_SIG_REGS_SIZE(vq)); return; } - - /* Copy ZREG's one at a time */ - for (i =3D 0; i < SVE_NUM_ZREGS; i++) { - memcpy(&ri->sve.zregs[i], - (void *)sve + SVE_SIG_ZREG_OFFSET(vq, i), - SVE_SIG_ZREG_SIZE(vq)); - } - - /* Copy PREG's one at a time */ - for (i =3D 0; i < SVE_NUM_PREGS; i++) { - memcpy(&ri->sve.pregs[i], - (void *)sve + SVE_SIG_PREG_OFFSET(vq, i), - SVE_SIG_PREG_SIZE(vq)); - } - - /* Finally the FFR */ - memcpy(&ri->sve.ffr, (void *)sve + SVE_SIG_FFR_OFFSET(vq), - SVE_SIG_FFR_SIZE(vq)); - - return; } =20 - for (i =3D 0; i < 32; i++) { - ri->simd.vregs[i] =3D fp->vregs[i]; - } + memcpy(reginfo_vreg(ri, 0), fp->vregs, RISU_SIMD_REGS_SIZE); } =20 /* reginfo_is_eq: compare the reginfo structs, returns nonzero if equal */ @@ -206,18 +191,20 @@ static void sve_dump_preg_diff(FILE *f, int vq, const= uint16_t *p1, fprintf(f, "\n"); } =20 -static void sve_dump_zreg_diff(FILE *f, int vq, const __uint128_t *z1, - const __uint128_t *z2) +static void sve_dump_zreg_diff(FILE *f, int vq, const uint64_t *za, + const uint64_t *zb) { const char *pad =3D ""; int q; =20 for (q =3D 0; q < vq; ++q) { - if (z1[q] !=3D z2[q]) { + uint64_t za0 =3D za[2 * q], za1 =3D za[2 * q + 1]; + uint64_t zb0 =3D zb[2 * q], zb1 =3D zb[2 * q + 1]; + + if (za0 !=3D zb0 || za1 !=3D zb1) { fprintf(f, "%sq%-2d: %016" PRIx64 "%016" PRIx64 - " vs %016" PRIx64 "%016" PRIx64"\n", pad, q, - (uint64_t)(z1[q] >> 64), (uint64_t)z1[q], - (uint64_t)(z2[q] >> 64), (uint64_t)z2[q]); + " vs %016" PRIx64 "%016" PRIx64"\n", + pad, q, za1, za0, zb1, zb0); pad =3D " "; } } @@ -239,38 +226,41 @@ int reginfo_dump(struct reginfo *ri, FILE * f) fprintf(f, " fpsr : %08x\n", ri->fpsr); fprintf(f, " fpcr : %08x\n", ri->fpcr); =20 - if (test_sve) { - int q, vq =3D test_sve; + if (ri->sve_vl) { + int vq =3D sve_vq_from_vl(ri->sve_vl); + int q; =20 - fprintf(f, " vl : %d\n", ri->sve.vl); + fprintf(f, " vl : %d\n", ri->sve_vl); =20 - for (i =3D 0; i < 32; i++) { - fprintf(f, " Z%-2d q%-2d: %016" PRIx64 "%016" PRIx64 "\n", i,= 0, - (uint64_t)(ri->sve.zregs[i][0] >> 64), - (uint64_t)ri->sve.zregs[i][0]); + for (i =3D 0; i < SVE_NUM_ZREGS; i++) { + uint64_t *z =3D reginfo_zreg(ri, vq, i); + + fprintf(f, " Z%-2d q%-2d: %016" PRIx64 "%016" PRIx64 "\n", + i, 0, z[1], z[0]); for (q =3D 1; q < vq; ++q) { - fprintf(f, " q%-2d: %016" PRIx64 "%016" PRIx64 "\n", = q, - (uint64_t)(ri->sve.zregs[i][q] >> 64), - (uint64_t)ri->sve.zregs[i][q]); + fprintf(f, " q%-2d: %016" PRIx64 "%016" PRIx64 "\n", + q, z[q * 2 + 1], z[q * 2]); } } =20 - for (i =3D 0; i < 16; i++) { - fprintf(f, " P%-2d : ", i); - sve_dump_preg(f, vq, &ri->sve.pregs[i][0]); + for (i =3D 0; i < SVE_NUM_PREGS + 1; i++) { + uint16_t *p =3D reginfo_preg(ri, vq, i); + + if (i =3D=3D SVE_NUM_PREGS) { + fprintf(f, " FFR : "); + } else { + fprintf(f, " P%-2d : ", i); + } + sve_dump_preg(f, vq, p); fprintf(f, "\n"); } - fprintf(f, " FFR : "); - sve_dump_preg(f, vq, &ri->sve.ffr[0]); - fprintf(f, "\n"); - return !ferror(f); } =20 for (i =3D 0; i < 32; i++) { - fprintf(f, " V%-2d : %016" PRIx64 "%016" PRIx64 "\n", i, - (uint64_t) (ri->simd.vregs[i] >> 64), - (uint64_t) (ri->simd.vregs[i])); + uint64_t *v =3D reginfo_vreg(ri, i); + fprintf(f, " V%-2d : %016" PRIx64 "%016" PRIx64 "\n", + i, v[1], v[0]); } =20 return !ferror(f); @@ -314,44 +304,47 @@ int reginfo_dump_mismatch(struct reginfo *m, struct r= eginfo *a, FILE * f) fprintf(f, " fpcr : %08x vs %08x\n", m->fpcr, a->fpcr); } =20 - if (test_sve) { - int vq =3D sve_vq_from_vl(m->sve.vl); + if (m->sve_vl !=3D a->sve_vl) { + fprintf(f, " vl : %d vs %d\n", m->sve_vl, a->sve_vl); + } =20 - if (m->sve.vl !=3D a->sve.vl) { - fprintf(f, " vl : %d vs %d\n", m->sve.vl, a->sve.vl); - } + if (m->sve_vl) { + int vq =3D sve_vq_from_vl(m->sve_vl); =20 for (i =3D 0; i < SVE_NUM_ZREGS; i++) { - if (!sve_zreg_is_eq(vq, &m->sve.zregs[i], &a->sve.zregs[i])) { - fprintf(f, " Z%-2d ", i); - sve_dump_zreg_diff(f, vq, &m->sve.zregs[i][0], - &a->sve.zregs[i][0]); - } - } - for (i =3D 0; i < SVE_NUM_PREGS; i++) { - if (!sve_preg_is_eq(vq, &m->sve.pregs[i], &a->sve.pregs[i])) { - fprintf(f, " P%-2d : ", i); - sve_dump_preg_diff(f, vq, &m->sve.pregs[i][0], - &a->sve.pregs[i][0]); - } - } - if (!sve_preg_is_eq(vq, &m->sve.ffr, &a->sve.ffr)) { - fprintf(f, " FFR : "); - sve_dump_preg_diff(f, vq, &m->sve.pregs[i][0], &a->sve.pregs[i= ][0]); - } + uint64_t *zm =3D reginfo_zreg(m, vq, i); + uint64_t *za =3D reginfo_zreg(a, vq, i); =20 + if (!sve_zreg_is_eq(vq, zm, za)) { + fprintf(f, " Z%-2d ", i); + sve_dump_zreg_diff(f, vq, zm, za); + } + } + for (i =3D 0; i < SVE_NUM_PREGS + 1; i++) { + uint16_t *pm =3D reginfo_preg(m, vq, i); + uint16_t *pa =3D reginfo_preg(a, vq, i); + + if (!sve_preg_is_eq(vq, pm, pa)) { + if (i =3D=3D SVE_NUM_PREGS) { + fprintf(f, " FFR : "); + } else { + fprintf(f, " P%-2d : ", i); + } + sve_dump_preg_diff(f, vq, pm, pa); + } + } return !ferror(f); } =20 for (i =3D 0; i < 32; i++) { - if (m->simd.vregs[i] !=3D a->simd.vregs[i]) { + uint64_t *mv =3D reginfo_vreg(m, i); + uint64_t *av =3D reginfo_vreg(a, i); + + if (mv[0] !=3D av[0] || mv[1] !=3D av[1]) { fprintf(f, " V%-2d : " "%016" PRIx64 "%016" PRIx64 " vs " - "%016" PRIx64 "%016" PRIx64 "\n", i, - (uint64_t) (m->simd.vregs[i] >> 64), - (uint64_t) m->simd.vregs[i], - (uint64_t) (a->simd.vregs[i] >> 64), - (uint64_t) a->simd.vregs[i]); + "%016" PRIx64 "%016" PRIx64 "\n", + i, mv[1], mv[0], av[1], av[0]); } } =20 --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657299064; cv=none; d=zohomail.com; s=zohoarc; b=WhMcV6lao59DSq960UmecgkkpSmn6ZAccxi6EjqJAR0tuDl1Lu7O/+xYKJqHccP1GzrHZxdYKbb6LR84DB8cjp2+DjeSj2vOcKboVrAseV0HJS857oU3lG7RLQT6WnkmL7Aq0Q/10TCj98wt3FwsHw+MXSNGut+K5WTfnuowdTU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657299064; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=OwqfXs1ctqU0QGS8GCRxY+Fnt9l80nbupzRO9DnIL6Y=; b=dOzXUpqFH3FuG+t8H+mtAdOsgxnBqFyd+XbhjpAuVRatxmQfHH+rgVKkVKSl9ldAZybyVzvU2dhilsAbOcb8/FDoVzR2eqAoTFPwlwXV11T/jkhTwUbH/o8Z0CrDfiy45t3IM9HRWdfd9+YM+DIEYR80NdiJo9XM+L1YNb2EF0k= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657299064445268.8248557275688; Fri, 8 Jul 2022 09:51:04 -0700 (PDT) Received: from localhost ([::1]:41688 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9rC3-0000y7-4h for importer@patchew.org; Fri, 08 Jul 2022 12:51:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45176) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qDG-000618-0j for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:14 -0400 Received: from mail-pg1-x52d.google.com ([2607:f8b0:4864:20::52d]:46782) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qDD-0002VH-PQ for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:13 -0400 Received: by mail-pg1-x52d.google.com with SMTP id s27so22651756pga.13 for ; Fri, 08 Jul 2022 08:48:11 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.48.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:48:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=OwqfXs1ctqU0QGS8GCRxY+Fnt9l80nbupzRO9DnIL6Y=; b=v0tapvvjc/RSRu8EnB650HvpopRNbuUYSXh6pl4cfi/QTYviVdu9TzuHKXJ59YqFCv qFjTx5+QZHe6TGX7HgibiT3dzzUXwU3vtfScGb4Qo2iPYeZFhsKsnZ0LaUQi0hRHYrHw MwHD+RNE7vNM0uXMKfEPjW8QE8u33wdcEikX6w0z8axIY92/q7jzLuF6zrj8UUtHiX/h hlBahTo7hl3B0BTzqWJVnuoLOHSapnB/2+M5oL8eWL6PSzUFr7c0+YtK31sWDsaKAL9a v9wKVVi3Bd8kWi9RIu3yi0NQxL3JPMbdspw+k0vIb8e4Squr23zJVdkUPH7TSHA+ZV7/ AMiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=OwqfXs1ctqU0QGS8GCRxY+Fnt9l80nbupzRO9DnIL6Y=; b=m9wdXQ/qSq8+ZjmWIh9cEyPAykZgJ4XKNKrdHs26qJYHBZl8a/TwIXPxEGfSjRyWqs 4+BB4X/Zrwzk+p3B7SlgnrveguPoBIL+or2nbCEWoV/CtDykGxFRuf+a6E2PI5+xKoRf S318bPclOSFXYoXetk1TpJenkE6dAGZ13s0mzV0E942SFzmp9ZJiHAIHGn84DGkhiNnI 0WSQRyUglTdCQewbS668U77N81dCEmPlTL3vXpPU0jY5gqLGd+bLuYKYjPZWA1gJDlJp ll8cQxbnL9K4RJwh/HxoCZcJAx8QNxpb5asyGLWsR54BHFh1I5CX3O58UPIAu0CkLIcV doMA== X-Gm-Message-State: AJIora/Ie7AX1zPgIxSmUYZFDP1ZEjV0p8QPCZ3zFYsr3Af+EcN95KdN +9oruta7maPasGvUkA/YEdr5+qiZPk36gF+r X-Google-Smtp-Source: AGRyM1vqd7nO7YcyTDCFfHK2ndJAIXjElMmdlpAItGHBFx8ecIN9DVWv7dqhJ0wKOENi6cnEXPYAwA== X-Received: by 2002:a05:6a00:f0e:b0:528:1b63:c9be with SMTP id cr14-20020a056a000f0e00b005281b63c9bemr4562339pfb.61.1657295290997; Fri, 08 Jul 2022 08:48:10 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [RISU PATCH v4 21/29] aarch64: Use arch_init to configure sve Date: Fri, 8 Jul 2022 21:16:52 +0530 Message-Id: <20220708154700.18682-22-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52d; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657299065310100001 Content-Type: text/plain; charset="utf-8" Adjust some of the aarch64 code to look at the reginfo struct instead of looking at test_sve, so that we do not need to pass the --test-sve option in order to dump sve trace files. Diagnose EINVAL as either cpu or kernel does not support SVE. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- risu.h | 1 + risu.c | 3 +++ risu_reginfo_aarch64.c | 31 ++++++++++++++++++++----------- risu_reginfo_arm.c | 4 ++++ risu_reginfo_i386.c | 4 ++++ risu_reginfo_m68k.c | 4 ++++ risu_reginfo_ppc64.c | 4 ++++ 7 files changed, 40 insertions(+), 11 deletions(-) diff --git a/risu.h b/risu.h index 3cad3d5..bdb70c1 100644 --- a/risu.h +++ b/risu.h @@ -23,6 +23,7 @@ extern const struct option * const arch_long_opts; extern const char * const arch_extra_help; void process_arch_opt(int opt, const char *arg); +void arch_init(void); #define FIRST_ARCH_OPT 0x100 =20 /* GCC computed include to pull in the correct risu_reginfo_*.h for diff --git a/risu.c b/risu.c index a70b778..1c096a8 100644 --- a/risu.c +++ b/risu.c @@ -617,6 +617,9 @@ int main(int argc, char **argv) =20 load_image(imgfile); =20 + /* E.g. select requested SVE vector length. */ + arch_init(); + if (ismaster) { return master(); } else { diff --git a/risu_reginfo_aarch64.c b/risu_reginfo_aarch64.c index 81a77ba..be47980 100644 --- a/risu_reginfo_aarch64.c +++ b/risu_reginfo_aarch64.c @@ -19,6 +19,7 @@ #include #include #include +#include #include =20 #include "risu.h" @@ -37,8 +38,6 @@ const char * const arch_extra_help =20 void process_arch_opt(int opt, const char *arg) { - long want, got; - assert(opt =3D=3D FIRST_ARCH_OPT); test_sve =3D strtol(arg, 0, 10); =20 @@ -46,16 +45,26 @@ void process_arch_opt(int opt, const char *arg) fprintf(stderr, "Invalid value for VQ (1-%d)\n", SVE_VQ_MAX); exit(EXIT_FAILURE); } - want =3D sve_vl_from_vq(test_sve); - got =3D prctl(PR_SVE_SET_VL, want); - if (want !=3D got) { - if (got < 0) { - perror("prctl PR_SVE_SET_VL"); - } else { - fprintf(stderr, "Unsupported value for VQ (%d !=3D %d)\n", - test_sve, (int)sve_vq_from_vl(got)); +} + +void arch_init(void) +{ + long want, got; + + if (test_sve) { + want =3D sve_vl_from_vq(test_sve); + got =3D prctl(PR_SVE_SET_VL, want); + if (want !=3D got) { + if (got >=3D 0) { + fprintf(stderr, "Unsupported VQ for SVE (%d !=3D %d)\n", + test_sve, (int)sve_vq_from_vl(got)); + } else if (errno =3D=3D EINVAL) { + fprintf(stderr, "System does not support SVE\n"); + } else { + perror("prctl PR_SVE_SET_VL"); + } + exit(EXIT_FAILURE); } - exit(EXIT_FAILURE); } } =20 diff --git a/risu_reginfo_arm.c b/risu_reginfo_arm.c index 47c52e8..202120b 100644 --- a/risu_reginfo_arm.c +++ b/risu_reginfo_arm.c @@ -36,6 +36,10 @@ void process_arch_opt(int opt, const char *arg) abort(); } =20 +void arch_init(void) +{ +} + int reginfo_size(struct reginfo *ri) { return sizeof(*ri); diff --git a/risu_reginfo_i386.c b/risu_reginfo_i386.c index 50505ab..e9730be 100644 --- a/risu_reginfo_i386.c +++ b/risu_reginfo_i386.c @@ -74,6 +74,10 @@ void process_arch_opt(int opt, const char *arg) } } =20 +void arch_init(void) +{ +} + int reginfo_size(struct reginfo *ri) { return sizeof(*ri); diff --git a/risu_reginfo_m68k.c b/risu_reginfo_m68k.c index 4eb30cd..4c25e77 100644 --- a/risu_reginfo_m68k.c +++ b/risu_reginfo_m68k.c @@ -23,6 +23,10 @@ void process_arch_opt(int opt, const char *arg) abort(); } =20 +void arch_init(void) +{ +} + int reginfo_size(struct reginfo *ri) { return sizeof(*ri); diff --git a/risu_reginfo_ppc64.c b/risu_reginfo_ppc64.c index 39e8f1c..c80e387 100644 --- a/risu_reginfo_ppc64.c +++ b/risu_reginfo_ppc64.c @@ -32,6 +32,10 @@ void process_arch_opt(int opt, const char *arg) abort(); } =20 +void arch_init(void) +{ +} + int reginfo_size(struct reginfo *ri) { return sizeof(*ri); --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657298622; cv=none; d=zohomail.com; s=zohoarc; b=OH3pbpjnNS3ZSaQ+Xo9uvYyQA4DolfE0+i1FrSRMCFv+be1TSZe4FwhUpfBOVrsdWPYMVH4imn72VE11wf+RuHwDHDcUIlAKr1rawSDFhu0AztYRBgdd7B3KpLyYk2kBjMcns/PmdNoM/JebrFWYGfJmBk5JmT2Qu0aASUx9naQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657298622; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=myUdBY5H3tCXb2rWK3d2K6+iu2kUnl6sA6mhAcxF+sg=; b=HY9mawshZEH7fHm3XbTn0YZfnC9253Eq/sPw/tMslPqJmgijkyB7ccoICH+Mie4YkBcgk7Z58fRbW0jqxO5nlCArjd3MZqpOk75K5eSKsI68qbW9TcWgwl8bo3ZvEQN8/6gU0nuf3fXMu2KZ9j9/g5/ZxKD3vu88G8a0TVvNpu4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657298622061779.4746416176521; Fri, 8 Jul 2022 09:43:42 -0700 (PDT) Received: from localhost ([::1]:60750 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9r4u-0002Ix-Tz for importer@patchew.org; Fri, 08 Jul 2022 12:43:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45220) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qDK-00063t-QG for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:20 -0400 Received: from mail-pg1-x533.google.com ([2607:f8b0:4864:20::533]:42655) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qDJ-0002Z2-7i for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:18 -0400 Received: by mail-pg1-x533.google.com with SMTP id o18so21494706pgu.9 for ; Fri, 08 Jul 2022 08:48:15 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.48.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:48:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=myUdBY5H3tCXb2rWK3d2K6+iu2kUnl6sA6mhAcxF+sg=; b=rCchghh7ehU5GXG+b3vmNZ3ff+p/FNFnmXx/WMgqVLAvfmjWeA4pmVn0blCirazz7C hH9MKyzDmBpDLN7oofbkhX17/Wowk4++60Kf8j9b2TPV5hhxEHqghQcm1nTELshNtpR/ 5Jsf1svcQQVj4jNAsrDsn5KPJOfcLT7lHtmF/57dw3DanFCj2xNRsm+NbgmPJEMVPkwK +sxSLC9KgD4QCtwNFf5X61uNMyBJB/+jSkURI/gezI2w//gW1Mi9o7OxBJE3GOszohHJ q/UBPZoYoszX2hfyQtQCZMm0ax6X9Bk9zIqMRAdlWGS9j1PYDqXVpeN6IDdO+mM3baxq 8Jeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=myUdBY5H3tCXb2rWK3d2K6+iu2kUnl6sA6mhAcxF+sg=; b=iIv4EAcK3vSS2qS2/x7owHBvZp54mcKuP7MZ0eM1RVih/5L3DWSfrWw5fgFyboCxRB GDEjnWgGTyJ56/JmaGMPt2qKaXKfLAczd3WGBdJYJvwmHQ4zHdli3Lf1FzmTu91Fq9IO txZvH5nkeI/AAHqOsOgectNLBIJIVO87AS5R/Duwtjfi+RwV8mwlBn4ueWznmSkq6PhJ zlWl6yQJmj1Z+MCys1/8TaCC1NTEitDjkJGCzNeiQ3d91KCpK9QCGsfj+WRVvcCmXccI mJSh2liswsAJG1zK/U1DS16qL1lWjyPE8d6vFQlA3FWLEoS4bUGzKBvHRXnJv6oAkTwH UDcQ== X-Gm-Message-State: AJIora9eihz6TI1LHrgCZMj9BKNNwo5OCcfJtOQj+OOrdJaEbjuq/t+w jvR5W22l9LN+tfA4RhF64mphNi8cvXYua9NV X-Google-Smtp-Source: AGRyM1ta4ZQ/vue6UPAOfiSZB1/mefwrgaSjjeaM83f+mWrbqwPdLYB2wVERUXOO8EYLieXBckx4Ww== X-Received: by 2002:a05:6a00:1941:b0:50d:807d:530b with SMTP id s1-20020a056a00194100b0050d807d530bmr4354348pfk.17.1657295294218; Fri, 08 Jul 2022 08:48:14 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [RISU PATCH v4 22/29] ppc64: Use uint64_t to represent double Date: Fri, 8 Jul 2022 21:16:53 +0530 Message-Id: <20220708154700.18682-23-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::533; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x533.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657298623857100001 Content-Type: text/plain; charset="utf-8" We want to do exact bitwise comparisons of the data, not be held hostage to IEEE comparisons and NaNs. Signed-off-by: Richard Henderson Reviewed-by: Matheus Ferst --- risu_reginfo_ppc64.h | 3 ++- risu_reginfo_ppc64.c | 29 +++++++++-------------------- 2 files changed, 11 insertions(+), 21 deletions(-) diff --git a/risu_reginfo_ppc64.h b/risu_reginfo_ppc64.h index 7f2c962..4b1d8bd 100644 --- a/risu_reginfo_ppc64.h +++ b/risu_reginfo_ppc64.h @@ -20,7 +20,8 @@ struct reginfo { uint64_t nip; uint64_t prev_addr; gregset_t gregs; - fpregset_t fpregs; + uint64_t fpregs[32]; + uint64_t fpscr; vrregset_t vrregs; }; =20 diff --git a/risu_reginfo_ppc64.c b/risu_reginfo_ppc64.c index c80e387..9899b36 100644 --- a/risu_reginfo_ppc64.c +++ b/risu_reginfo_ppc64.c @@ -45,6 +45,7 @@ int reginfo_size(struct reginfo *ri) void reginfo_init(struct reginfo *ri, ucontext_t *uc) { int i; + memset(ri, 0, sizeof(*ri)); =20 ri->faulting_insn =3D *((uint32_t *) uc->uc_mcontext.regs->nip); @@ -54,16 +55,11 @@ void reginfo_init(struct reginfo *ri, ucontext_t *uc) ri->gregs[i] =3D uc->uc_mcontext.gp_regs[i]; } =20 - for (i =3D 0; i < NFPREG; i++) { - ri->fpregs[i] =3D uc->uc_mcontext.fp_regs[i]; - } + memcpy(ri->fpregs, uc->uc_mcontext.fp_regs, 32 * sizeof(double)); + ri->fpscr =3D uc->uc_mcontext.fp_regs[32]; =20 - for (i =3D 0; i < 32; i++) { - ri->vrregs.vrregs[i][0] =3D uc->uc_mcontext.v_regs->vrregs[i][0]; - ri->vrregs.vrregs[i][1] =3D uc->uc_mcontext.v_regs->vrregs[i][1]; - ri->vrregs.vrregs[i][2] =3D uc->uc_mcontext.v_regs->vrregs[i][2]; - ri->vrregs.vrregs[i][3] =3D uc->uc_mcontext.v_regs->vrregs[i][3]; - } + memcpy(ri->vrregs.vrregs, uc->uc_mcontext.v_regs->vrregs, + sizeof(ri->vrregs.vrregs[0]) * 32); ri->vrregs.vscr =3D uc->uc_mcontext.v_regs->vscr; ri->vrregs.vrsave =3D uc->uc_mcontext.v_regs->vrsave; } @@ -91,10 +87,6 @@ int reginfo_is_eq(struct reginfo *m, struct reginfo *a) } =20 for (i =3D 0; i < 32; i++) { - if (isnan(m->fpregs[i]) && isnan(a->fpregs[i])) { - continue; - } - if (m->fpregs[i] !=3D a->fpregs[i]) { return 0; } @@ -141,10 +133,10 @@ int reginfo_dump(struct reginfo *ri, FILE * f) fprintf(f, "\tdscr : %16lx\n\n", ri->gregs[44]); =20 for (i =3D 0; i < 16; i++) { - fprintf(f, "\tf%2d: %.4f\tf%2d: %.4f\n", i, ri->fpregs[i], + fprintf(f, "\tf%2d: %016lx\tf%2d: %016lx\n", i, ri->fpregs[i], i + 16, ri->fpregs[i + 16]); } - fprintf(f, "\tfpscr: %f\n\n", ri->fpregs[32]); + fprintf(f, "\tfpscr: %016lx\n\n", ri->fpscr); =20 for (i =3D 0; i < 32; i++) { fprintf(f, "vr%02d: %8x, %8x, %8x, %8x\n", i, @@ -181,13 +173,10 @@ int reginfo_dump_mismatch(struct reginfo *m, struct r= eginfo *a, FILE *f) } =20 for (i =3D 0; i < 32; i++) { - if (isnan(m->fpregs[i]) && isnan(a->fpregs[i])) { - continue; - } - if (m->fpregs[i] !=3D a->fpregs[i]) { fprintf(f, "Mismatch: Register f%d\n", i); - fprintf(f, "m: [%f] !=3D a: [%f]\n", m->fpregs[i], a->fpregs[i= ]); + fprintf(f, "m: [%016lx] !=3D a: [%016lx]\n", + m->fpregs[i], a->fpregs[i]); } } =20 --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657299476; cv=none; d=zohomail.com; s=zohoarc; b=f4KzKAZ1/wbYgZYQLsI1tDc95KylKLIwawcsmpi0PdwVHreQRBXedm6RQJ8Mbwo3TTNW2627Hn0jrEqDchP9bNeN6//SfA0lekltxlIRoVORaA9ULANdgHvCMMpNn0y9UnoxWC2a+eBUrQRzMXJMQaCe5h65LFoHhY5pKU/gFj4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657299476; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=OYX/d+01tGy3cBxW/0xpcYjEwZc6/OMjB3i/YA7k0a4=; b=engr6KbTokum4Ute2MXMDOGtwTCP8KDj+j9ofll64IoLBoLJ17QTDrj7pRaziDr7fg+EjwZDRUHI/qF8MBK61Z6Xix5GjNukOs5BQWLE7W30PpmKEKSpazNcfr6VgMf9pLnI+lvZdXt4v3Y5rayYkPJVSZGBrcNQH1k/+WAf8yM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657299476621494.89454422752635; Fri, 8 Jul 2022 09:57:56 -0700 (PDT) Received: from localhost ([::1]:48574 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9rIg-00061l-Nl for importer@patchew.org; Fri, 08 Jul 2022 12:57:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45248) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qDM-00065a-LS for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:20 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]:51735) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qDK-0002ZH-98 for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:20 -0400 Received: by mail-pj1-x1032.google.com with SMTP id o15so13889915pjh.1 for ; Fri, 08 Jul 2022 08:48:17 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.48.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:48:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=OYX/d+01tGy3cBxW/0xpcYjEwZc6/OMjB3i/YA7k0a4=; b=SQ593bbcqoAQar/qHavBiBV3rQAYb1ufwNzL/zbCJDVwDWa7Pg8sFk6tlrYxJWNemW UTYvPPYRzU1DwFFDy5Mfdvh0iFc19pl9yoY9pOQ/gabJH1IiU8/jH0QSTge4WjK7YU+j efasqkOi/QirKx/y4ab3YLpcwURnG5i1Dw3cAe/LxDOinwS0TVPkpYRt6yJPfYZ3ktx/ NO5mY/r6j160lMcpUiMb2N+D6kO/FkBx2blJiwEj8ncNcJSdPeujE6sBQlIFbPolda7A +hY3jvYVCrEjin/8ZrkdCQOkNZMdwUlo22GJSTJKA8Okr2U7dfozT/OLm4vQx/UM+lkh 7y5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=OYX/d+01tGy3cBxW/0xpcYjEwZc6/OMjB3i/YA7k0a4=; b=auBsL2KvaflgFDNKuyxqsZ2R7/RIYh1gLSNHl/lGkYZOoCnTpmfksMmU7aGZc0oPqi +SP0WBX/atvcUqBBETdtNra1YqTlLuy7M8vzM4ov7st+E7qRLhL4ol1+gzK00dNMPitv u6pX15PCOQ5RuM66RzL0aZtATqLiqAI/2Kx6O38vX3LDjsHjClY1z5USTTsS7+7Ub4GV mDw25Nkfh7CDUji640OGgeKGuPQAMseMPDljn8NmK0G+K50zOZh7ISJ1oO6XJuP6lz3I a1u3Bv/Gw2JfIWw69TF89et4DysrdWGOYr19evexlYXeGxyrPc8MeNW8WMPw3CBW6xLA Dzog== X-Gm-Message-State: AJIora+u0hKtHu6fqb34+tycmkxp/78Qpjr2chQVUtdH3PLZNmMX7V2l 7jD04qJ/ri5V5rmvbDbVyG6pa4N6RLxBFD/M X-Google-Smtp-Source: AGRyM1vFhmc5hNcp1Q7gBxuY0Wy8QTSmfIUp8Ta1RE5UO2IpYEEpQf9qfY68JCIBOUlkH0oEHctmeg== X-Received: by 2002:a17:90a:9d8a:b0:1ef:7a8d:1808 with SMTP id k10-20020a17090a9d8a00b001ef7a8d1808mr496746pjp.135.1657295296928; Fri, 08 Jul 2022 08:48:16 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [RISU PATCH v4 23/29] Standardize reginfo_dump_mismatch printing Date: Fri, 8 Jul 2022 21:16:54 +0530 Message-Id: <20220708154700.18682-24-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1032; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1032.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657299477590100001 Content-Type: text/plain; charset="utf-8" Hoist the "master vs apprentice" label to apprentice(), since we will want different labels for dumping. Remove all of the "mismatch" text from reginfo_dump_mismatch -- just print "vs". Signed-off-by: Richard Henderson --- risu.h | 4 ++-- risu.c | 1 + risu_reginfo_aarch64.c | 12 +++++------- risu_reginfo_arm.c | 18 ++++++++--------- risu_reginfo_i386.c | 6 +----- risu_reginfo_m68k.c | 23 +++++++--------------- risu_reginfo_ppc64.c | 44 ++++++++++++++++++------------------------ 7 files changed, 44 insertions(+), 64 deletions(-) diff --git a/risu.h b/risu.h index bdb70c1..99f0d8e 100644 --- a/risu.h +++ b/risu.h @@ -123,8 +123,8 @@ int reginfo_is_eq(struct reginfo *r1, struct reginfo *r= 2); /* print reginfo state to a stream, returns 1 on success, 0 on failure */ int reginfo_dump(struct reginfo *ri, FILE * f); =20 -/* reginfo_dump_mismatch: print mismatch details to a stream, ret nonzero= =3Dok */ -int reginfo_dump_mismatch(struct reginfo *m, struct reginfo *a, FILE *f); +/* reginfo_dump_mismatch: print mismatch details to a stream */ +void reginfo_dump_mismatch(struct reginfo *m, struct reginfo *a, FILE *f); =20 /* return size of reginfo */ int reginfo_size(struct reginfo *ri); diff --git a/risu.c b/risu.c index 1c096a8..f613fa9 100644 --- a/risu.c +++ b/risu.c @@ -449,6 +449,7 @@ static int apprentice(void) reginfo_dump(&ri[MASTER], stderr); fprintf(stderr, "apprentice reginfo:\n"); reginfo_dump(&ri[APPRENTICE], stderr); + fprintf(stderr, "mismatch detail (master : apprentice):\n"); reginfo_dump_mismatch(&ri[MASTER], &ri[APPRENTICE], stderr); return EXIT_FAILURE; =20 diff --git a/risu_reginfo_aarch64.c b/risu_reginfo_aarch64.c index be47980..e0f80c0 100644 --- a/risu_reginfo_aarch64.c +++ b/risu_reginfo_aarch64.c @@ -275,15 +275,15 @@ int reginfo_dump(struct reginfo *ri, FILE * f) return !ferror(f); } =20 -/* reginfo_dump_mismatch: print mismatch details to a stream, ret nonzero= =3Dok */ -int reginfo_dump_mismatch(struct reginfo *m, struct reginfo *a, FILE * f) +void reginfo_dump_mismatch(struct reginfo *m, struct reginfo *a, FILE * f) { int i; - fprintf(f, "mismatch detail (master : apprentice):\n"); + if (m->faulting_insn !=3D a->faulting_insn) { - fprintf(f, " faulting insn mismatch %08x vs %08x\n", + fprintf(f, " faulting insn: %08x vs %08x\n", m->faulting_insn, a->faulting_insn); } + for (i =3D 0; i < 31; i++) { if (m->regs[i] !=3D a->regs[i]) { fprintf(f, " X%-2d : %016" PRIx64 " vs %016" PRIx64 "\n", @@ -342,7 +342,7 @@ int reginfo_dump_mismatch(struct reginfo *m, struct reg= info *a, FILE * f) sve_dump_preg_diff(f, vq, pm, pa); } } - return !ferror(f); + return; } =20 for (i =3D 0; i < 32; i++) { @@ -356,6 +356,4 @@ int reginfo_dump_mismatch(struct reginfo *m, struct reg= info *a, FILE * f) i, mv[1], mv[0], av[1], av[0]); } } - - return !ferror(f); } diff --git a/risu_reginfo_arm.c b/risu_reginfo_arm.c index 202120b..ba1035e 100644 --- a/risu_reginfo_arm.c +++ b/risu_reginfo_arm.c @@ -183,32 +183,33 @@ int reginfo_dump(struct reginfo *ri, FILE *f) return !ferror(f); } =20 -int reginfo_dump_mismatch(struct reginfo *m, struct reginfo *a, FILE *f) +void reginfo_dump_mismatch(struct reginfo *m, struct reginfo *a, FILE *f) { int i; - fprintf(f, "mismatch detail (master : apprentice):\n"); =20 if (m->faulting_insn_size !=3D a->faulting_insn_size) { - fprintf(f, " faulting insn size mismatch %d vs %d\n", + fprintf(f, " faulting insn size: %d vs %d\n", m->faulting_insn_size, a->faulting_insn_size); } else if (m->faulting_insn !=3D a->faulting_insn) { if (m->faulting_insn_size =3D=3D 2) { - fprintf(f, " faulting insn mismatch %04x vs %04x\n", + fprintf(f, " faulting insn: %04x vs %04x\n", m->faulting_insn, a->faulting_insn); } else { - fprintf(f, " faulting insn mismatch %08x vs %08x\n", + fprintf(f, " faulting insn: %08x vs %08x\n", m->faulting_insn, a->faulting_insn); } } + for (i =3D 0; i < 16; i++) { if (m->gpreg[i] !=3D a->gpreg[i]) { - fprintf(f, " r%d: %08x vs %08x\n", i, m->gpreg[i], - a->gpreg[i]); + fprintf(f, " r%d: %08x vs %08x\n", i, m->gpreg[i], a->gpreg[i= ]); } } + if (m->cpsr !=3D a->cpsr) { fprintf(f, " cpsr: %08x vs %08x\n", m->cpsr, a->cpsr); } + for (i =3D 0; i < 32; i++) { if (m->fpregs[i] !=3D a->fpregs[i]) { fprintf(f, " d%d: %016llx vs %016llx\n", i, @@ -216,9 +217,8 @@ int reginfo_dump_mismatch(struct reginfo *m, struct reg= info *a, FILE *f) (unsigned long long) a->fpregs[i]); } } + if (m->fpscr !=3D a->fpscr) { fprintf(f, " fpscr: %08x vs %08x\n", m->fpscr, a->fpscr); } - - return !ferror(f); } diff --git a/risu_reginfo_i386.c b/risu_reginfo_i386.c index e9730be..57e4c00 100644 --- a/risu_reginfo_i386.c +++ b/risu_reginfo_i386.c @@ -349,14 +349,12 @@ int reginfo_dump(struct reginfo *ri, FILE *f) return !ferror(f); } =20 -int reginfo_dump_mismatch(struct reginfo *m, struct reginfo *a, FILE *f) +void reginfo_dump_mismatch(struct reginfo *m, struct reginfo *a, FILE *f) { int i, j, n, w; uint64_t features; char r; =20 - fprintf(f, "Mismatch (master v apprentice):\n"); - for (i =3D 0; i < NGREG; i++) { if (m->gregs[i] !=3D a->gregs[i]) { assert(regname[i]); @@ -399,6 +397,4 @@ int reginfo_dump_mismatch(struct reginfo *m, struct reg= info *a, FILE *f) i, m->kregs[i], a->kregs[i]); } } - - return !ferror(f); } diff --git a/risu_reginfo_m68k.c b/risu_reginfo_m68k.c index 4c25e77..29edce9 100644 --- a/risu_reginfo_m68k.c +++ b/risu_reginfo_m68k.c @@ -118,13 +118,12 @@ int reginfo_dump(struct reginfo *ri, FILE *f) return !ferror(f); } =20 -int reginfo_dump_mismatch(struct reginfo *m, struct reginfo *a, FILE * f) +void reginfo_dump_mismatch(struct reginfo *m, struct reginfo *a, FILE *f) { int i; =20 if (m->gregs[R_PS] !=3D a->gregs[R_PS]) { - fprintf(f, "Mismatch: Register PS\n"); - fprintf(f, "master: [%x] - apprentice: [%x]\n", + fprintf(f, " PS: %08x vs %08x\n", m->gregs[R_PS], a->gregs[R_PS]); } =20 @@ -133,22 +132,18 @@ int reginfo_dump_mismatch(struct reginfo *m, struct r= eginfo *a, FILE * f) continue; } if (m->gregs[i] !=3D a->gregs[i]) { - fprintf(f, "Mismatch: Register %c%d\n", i < 8 ? 'D' : 'A', - i % 8); - fprintf(f, "master: [%x] - apprentice: [%x]\n", m->gregs[i], - a->gregs[i]); + fprintf(f, " %c%d: %08x vs %08x\n", + i < 8 ? 'D' : 'A', i % 8, m->gregs[i], a->gregs[i]); } } =20 if (m->fpregs.f_pcr !=3D a->fpregs.f_pcr) { - fprintf(f, "Mismatch: Register FPCR\n"); - fprintf(f, "m: [%04x] !=3D a: [%04x]\n", + fprintf(f, " FPCR: %04x vs %04x\n", m->fpregs.f_pcr, a->fpregs.f_pcr); } =20 if (m->fpregs.f_psr !=3D a->fpregs.f_psr) { - fprintf(f, "Mismatch: Register FPSR\n"); - fprintf(f, "m: [%08x] !=3D a: [%08x]\n", + fprintf(f, " FPSR: %04x vs %04x\n", m->fpregs.f_psr, a->fpregs.f_psr); } =20 @@ -156,14 +151,10 @@ int reginfo_dump_mismatch(struct reginfo *m, struct r= eginfo *a, FILE * f) if (m->fpregs.f_fpregs[i][0] !=3D a->fpregs.f_fpregs[i][0] || m->fpregs.f_fpregs[i][1] !=3D a->fpregs.f_fpregs[i][1] || m->fpregs.f_fpregs[i][2] !=3D a->fpregs.f_fpregs[i][2]) { - fprintf(f, "Mismatch: Register FP%d\n", i); - fprintf(f, "m: [%08x %08x %08x] !=3D a: [%08x %08x %08x]\n", + fprintf(f, " FP%d: %08x%08x%08x vs %08x%08x%08x\n", i, m->fpregs.f_fpregs[i][0], m->fpregs.f_fpregs[i][1], m->fpregs.f_fpregs[i][2], a->fpregs.f_fpregs[i][0], a->fpregs.f_fpregs[i][1], a->fpregs.f_fpregs[i][2]); } } - - - return !ferror(f); } diff --git a/risu_reginfo_ppc64.c b/risu_reginfo_ppc64.c index 9899b36..e96dc48 100644 --- a/risu_reginfo_ppc64.c +++ b/risu_reginfo_ppc64.c @@ -27,6 +27,15 @@ const struct option * const arch_long_opts; const char * const arch_extra_help; =20 +static const char * const greg_names[NGREG] =3D { + "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", + "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31", + [XER] =3D "xer", + [CCR] =3D "ccr", +}; + void process_arch_opt(int opt, const char *arg) { abort(); @@ -147,35 +156,21 @@ int reginfo_dump(struct reginfo *ri, FILE * f) return !ferror(f); } =20 -int reginfo_dump_mismatch(struct reginfo *m, struct reginfo *a, FILE *f) +void reginfo_dump_mismatch(struct reginfo *m, struct reginfo *a, FILE *f) { int i; - for (i =3D 0; i < 32; i++) { - if (i =3D=3D 1 || i =3D=3D 13) { - continue; + + for (i =3D 0; i < NGREG; i++) { + if (greg_names[i] !=3D NULL && m->gregs[i] !=3D a->gregs[i]) { + fprintf(f, "%6s: %016lx vs %016lx\n", + greg_names[i], m->gregs[i], a->gregs[i]); } - - if (m->gregs[i] !=3D a->gregs[i]) { - fprintf(f, "Mismatch: Register r%d\n", i); - fprintf(f, "master: [%lx] - apprentice: [%lx]\n", - m->gregs[i], a->gregs[i]); - } - } - - if (m->gregs[XER] !=3D a->gregs[XER]) { - fprintf(f, "Mismatch: XER\n"); - fprintf(f, "m: [%lx] !=3D a: [%lx]\n", m->gregs[XER], a->gregs[XER= ]); - } - - if (m->gregs[CCR] !=3D a->gregs[CCR]) { - fprintf(f, "Mismatch: Cond. Register\n"); - fprintf(f, "m: [%lx] !=3D a: [%lx]\n", m->gregs[CCR], a->gregs[CCR= ]); } =20 for (i =3D 0; i < 32; i++) { if (m->fpregs[i] !=3D a->fpregs[i]) { - fprintf(f, "Mismatch: Register f%d\n", i); - fprintf(f, "m: [%016lx] !=3D a: [%016lx]\n", + fprintf(f, "%*s%d: %016lx vs %016lx\n", + 6 - (i < 10 ? 1 : 2), "f", i, m->fpregs[i], a->fpregs[i]); } } @@ -186,13 +181,12 @@ int reginfo_dump_mismatch(struct reginfo *m, struct r= eginfo *a, FILE *f) m->vrregs.vrregs[i][2] !=3D a->vrregs.vrregs[i][2] || m->vrregs.vrregs[i][3] !=3D a->vrregs.vrregs[i][3]) { =20 - fprintf(f, "Mismatch: Register vr%d\n", i); - fprintf(f, "m: [%x, %x, %x, %x] !=3D a: [%x, %x, %x, %x]\n", + fprintf(f, "%*s%d: %08x%08x%08x%08x vs %08x%08x%08x%08x\n", + 6 - (i < 10 ? 1 : 2), "vr", i, m->vrregs.vrregs[i][0], m->vrregs.vrregs[i][1], m->vrregs.vrregs[i][2], m->vrregs.vrregs[i][3], a->vrregs.vrregs[i][0], a->vrregs.vrregs[i][1], a->vrregs.vrregs[i][2], a->vrregs.vrregs[i][3]); } } - return !ferror(f); } --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657298978; cv=none; d=zohomail.com; s=zohoarc; b=Maa5978oQSP8mkF+fP7QpSO5ScovObbDWACTSwsaMIdviWC4PLN4EeBTo+zjDIjlDw6CtMCMIrC8ol+LNhv3k5K0vbY7WiiUoSwgPdHLeCjRe+mozMluzy5GKcQ3Qi7DyKKVrX9LKtbThB80v7MJ3CVAjVF8OhuGDI++ENzZ5qc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657298978; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=0Z/3Dbr+/QrC8cn7TV42VKcjGJrg87Itb54NG8zLcNw=; b=IDa9UsHSv85q4MH6pdJ8sICUsHFMG3Wcyb2Q8dVFXn5026Hvg34JXuH/m7t3SEV+VthFiXMAAxzrnviDGfekaFJYuI5QfO/XUU0JQ2pssOHkBY1NY4TqMI2rZ33x/RIk/TTa3BSA2oXUYmjlQUnpsK9ebK0Hh53AplLUdki83Nk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657298978830291.2602110056522; Fri, 8 Jul 2022 09:49:38 -0700 (PDT) Received: from localhost ([::1]:40812 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9rAe-0000FN-Eu for importer@patchew.org; Fri, 08 Jul 2022 12:49:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45284) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qDO-0006Bq-6K for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:22 -0400 Received: from mail-pl1-x62c.google.com ([2607:f8b0:4864:20::62c]:40715) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qDM-0002Y0-5W for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:21 -0400 Received: by mail-pl1-x62c.google.com with SMTP id b2so16657171plx.7 for ; Fri, 08 Jul 2022 08:48:19 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.48.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:48:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0Z/3Dbr+/QrC8cn7TV42VKcjGJrg87Itb54NG8zLcNw=; b=p4hQzLPICnUpOLOSIrooAeEV0I8IJaC4V251azmGcCkHvDgFr7/cH8NBU/8NW1uo9U +nq2VtFp5QVd5IW5+tc9s/+EqW0XwSRTsAo1kj+VlV4ixGQ5aXTH8P0ZPQyLrcRZ5Sht R+d8zn6hTwXOXcgdG68c+6gsZ/jsczH2dkGHQJ+WmqBaeHMruVuGBRt40/LoIBl9JFdm xy+RLOW98ztWgNt95dbKm2kv2v2cHRrG8a4rIwRwbrIs9HFwoGjxi8PQt7pxEqFcyXvr 8c1taC1xusBFFxSba6E4Yibj09WB7fLqIMdUI6f1/3iU2e0Nu9Xo9nqJu2BkwzXNNiWG MlFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=0Z/3Dbr+/QrC8cn7TV42VKcjGJrg87Itb54NG8zLcNw=; b=fmLAKr2jq/2d9swLL1itcrOsMk+OFMMso89PuoZa9SU8XEILSjCnIFUEDiWCWWgToV IyQJ5AX/lARx/hzRHcu+KIEQr0rI68/LxA74KRf6/iVDGYSQ2gcPc+/7x0LB2Hm2hWP2 ve92tXNC8C2+x5qAzPPgri0iaURDtH76bCfz4W282GYlYtZGLfQsQMDM9Xr31v9w5B8J z4HD0oxcv3WAc0tydieNZhS41qA3+90XPbe2Ygqqp1l05rKzS8KcFN6qGnnQdQnhlUNc xb/y4oct0kUNyNaUAeoYGDBONjXBYo/qv9FmuKKcnaDkqHt1HsI2cjdUDgkbtPYcWJE8 Kgfw== X-Gm-Message-State: AJIora/w0Y1iNSPTC0VXrytwaOpIyOBWsVmk1tnfunKmu/1Woam8V7L/ WneweKkXPtlq3+86VigobuRE7TzdPMjFMG5h X-Google-Smtp-Source: AGRyM1u3nTO35Y4Cm/A71XQJeZJzEQsiZYU9pdCtrrBOyebnnJgMldT/8tIiWRWyOQql7ENgrxQ6vw== X-Received: by 2002:a17:903:228b:b0:16b:ee10:b91 with SMTP id b11-20020a170903228b00b0016bee100b91mr4445375plh.27.1657295299400; Fri, 08 Jul 2022 08:48:19 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [RISU PATCH v4 24/29] Add --fulldump and --diffdup options Date: Fri, 8 Jul 2022 21:16:55 +0530 Message-Id: <20220708154700.18682-25-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62c; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657298980094100001 Content-Type: text/plain; charset="utf-8" These allow the inspection of the trace files. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- risu.c | 117 +++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 102 insertions(+), 15 deletions(-) diff --git a/risu.c b/risu.c index f613fa9..8d907d9 100644 --- a/risu.c +++ b/risu.c @@ -484,23 +484,101 @@ static int apprentice(void) } } =20 -static int ismaster; +static int dump_trace(bool isfull) +{ + RisuResult res; + int tick =3D 0; + + while (1) { + struct reginfo *this_ri; + + this_ri =3D &ri[tick & 1]; + res =3D recv_register_info(this_ri); + + switch (res) { + case RES_OK: + switch (header.risu_op) { + case OP_COMPARE: + case OP_TESTEND: + case OP_SIGILL: + printf("%s: (pc %#lx)\n", op_name(header.risu_op), + (unsigned long)header.pc); + + if (isfull || tick =3D=3D 0) { + reginfo_dump(this_ri, stdout); + } else { + struct reginfo *prev_ri =3D &ri[(tick - 1) & 1]; + + if (reginfo_is_eq(prev_ri, this_ri)) { + /* + * ??? There should never be no change -- at minim= um + * PC should have advanced. But for completeness.= .. + */ + printf("change detail: none\n"); + } else { + printf("change detail (prev : next):\n"); + reginfo_dump_mismatch(prev_ri, this_ri, stdout); + } + } + putchar('\n'); + if (header.risu_op =3D=3D OP_TESTEND) { + return EXIT_SUCCESS; + } + tick++; + break; + + case OP_COMPAREMEM: + /* TODO: Dump 8k of data? */ + /* fall through */ + default: + printf("%s\n", op_name(header.risu_op)); + break; + } + break; + + case RES_BAD_IO: + fprintf(stderr, "I/O error\n"); + return EXIT_FAILURE; + case RES_BAD_MAGIC: + fprintf(stderr, "Unexpected magic number: %#08x\n", header.mag= ic); + return EXIT_FAILURE; + case RES_BAD_SIZE: + fprintf(stderr, "Unexpected payload size: %u\n", header.size); + return EXIT_FAILURE; + case RES_BAD_OP: + fprintf(stderr, "Unexpected opcode: %d\n", header.risu_op); + return EXIT_FAILURE; + default: + fprintf(stderr, "Unexpected recv result %d\n", res); + return EXIT_FAILURE; + } + } +} + +enum { + DO_APPRENTICE, + DO_MASTER, + DO_FULLDUMP, + DO_DIFFDUMP, +}; + +static int operation =3D DO_APPRENTICE; =20 static void usage(void) { fprintf(stderr, - "Usage: risu [--master] [--host ] [--port ] " - "\n\n"); - fprintf(stderr, - "Run through the pattern file verifying each instruction\n"); - fprintf(stderr, "between master and apprentice risu processes.\n\n"); - fprintf(stderr, "Options:\n"); - fprintf(stderr, " --master Be the master (server)\n"); - fprintf(stderr, " -t, --trace=3DFILE Record/playback " TRACE_TYPE " = trace file\n"); - fprintf(stderr, - " -h, --host=3DHOST Specify master host machine (apprentice= only)" - "\n"); - fprintf(stderr, + "Usage: risu [--master|--fulldump|--diffdump]\n" + " [--host ] [--port ] \n" + "\n" + "Run through the pattern file verifying each instruction\n" + "between master and apprentice risu processes.\n" + "\n" + "Options:\n" + " --master Be the master (server)\n" + " --fulldump Dump each record\n" + " --diffdump Dump difference between each record\n" + " -t, --trace=3DFILE Record/playback " TRACE_TYPE " trace fi= le\n" + " -h, --host=3DHOST Specify master host machine\n" " -p, --port=3DPORT Specify the port to connect to/listen o= n " "(default 9191)\n"); if (arch_extra_help) { @@ -512,7 +590,9 @@ static struct option * setup_options(char **short_opts) { static struct option default_longopts[] =3D { {"help", no_argument, 0, '?'}, - {"master", no_argument, &ismaster, 1}, + {"master", no_argument, &operation, DO_MASTER}, + {"fulldump", no_argument, &operation, DO_FULLDUMP}, + {"diffdump", no_argument, &operation, DO_DIFFDUMP}, {"host", required_argument, 0, 'h'}, {"port", required_argument, 0, 'p'}, {"trace", required_argument, 0, 't'}, @@ -520,7 +600,7 @@ static struct option * setup_options(char **short_opts) }; struct option *lopts =3D &default_longopts[0]; =20 - *short_opts =3D "h:p:t:"; + *short_opts =3D "d:h:p:t:"; =20 if (arch_long_opts) { const size_t osize =3D sizeof(struct option); @@ -551,6 +631,7 @@ int main(int argc, char **argv) char *trace_fn =3D NULL; struct option *longopts; char *shortopts; + bool ismaster; =20 longopts =3D setup_options(&shortopts); =20 @@ -586,6 +667,8 @@ int main(int argc, char **argv) } } =20 + ismaster =3D operation =3D=3D DO_MASTER; + if (trace) { if (strcmp(trace_fn, "-") =3D=3D 0) { comm_fd =3D ismaster ? STDOUT_FILENO : STDIN_FILENO; @@ -609,6 +692,10 @@ int main(int argc, char **argv) } } =20 + if (operation =3D=3D DO_FULLDUMP || operation =3D=3D DO_DIFFDUMP) { + return dump_trace(operation =3D=3D DO_FULLDUMP); + } + imgfile =3D argv[optind]; if (!imgfile) { fprintf(stderr, "Error: must specify image file name\n\n"); --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657299866; cv=none; d=zohomail.com; s=zohoarc; b=PV2LCerggMtlZtxe17+u+DyBKCW15nmBdM6ovRbpildjy9rYXvoGWeolKrRgeX+3a4fuXQ818zONegswUme1Mfr4uY9MWq8Py1/V0rs5MQ/U1hlJ9HZjnk4Q01nekbeXGV7ci8AmBF5FT2zyO/g2vBfkT2pDvCSfcKnnCQO6qAY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657299866; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=KHCjODk+vnGajKdN8rNYoLNgAJ6Sd7+uxGwpqklP/xM=; b=Ds4ZRDkg+Zrnr2nWBmg7XTCPkkfpt21L6gmdFpP95+MqlUIDI1BiQKN4vLHwZwwx02kgpdhuO7CasbZFsJIkjoG0EBUNcuB+RnyEDn2jThnt+/7DNW78nowCOpF//b24MHIxA5h1KgNqx0JbCxp83qyyTnZNAf55uF0lqIHSV30= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657299866153591.3690486404959; Fri, 8 Jul 2022 10:04:26 -0700 (PDT) Received: from localhost ([::1]:55970 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9rOx-0002pr-Df for importer@patchew.org; Fri, 08 Jul 2022 13:04:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45318) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qDQ-0006MG-DM for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:24 -0400 Received: from mail-pl1-x62c.google.com ([2607:f8b0:4864:20::62c]:35622) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qDO-0002XV-Lu for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:24 -0400 Received: by mail-pl1-x62c.google.com with SMTP id y18so8656098plb.2 for ; Fri, 08 Jul 2022 08:48:22 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.48.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:48:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=KHCjODk+vnGajKdN8rNYoLNgAJ6Sd7+uxGwpqklP/xM=; b=NMEfns2BwCLb6OTZ9xSuMWVCZS6t/zVm7cN4YZ3Oqr8Hv6/XBGSA6h/dmCzS2cjtil 76WKGeB9oNxaW35tW10OgsV/Vcn8UVrkIG6vRmzmC2DkTHnS3vL32hnDxX4aaEH7riXU pHm1FQtgc927o+jITFmqg3Yk/J898pnJY0gR3yyTcpkhBBpE7lcFmSyKtGoJvhFcbqGP ahtLXhS+8wpXQJc8nUDvWC/ueOB5woZRb4IBokFk2+A5b+7GM3AVMz/GvJw2QW39yASL nU3DemIPREZauSulb4tnkYSh3RS1/snVkQBLAtA9DowmprN+3dTa7sFBiJI7gGjPo9V+ MwYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=KHCjODk+vnGajKdN8rNYoLNgAJ6Sd7+uxGwpqklP/xM=; b=UIA/KrOS8ZSLt16UAzA5zZLDs9gf0KVNLmPF+lVHe4g5lNKvkKWrZbXLbAnQA9HSEk KLKC48rL3fhLM0Aj80OiMN7dW/w81wnrTsObeor5mgePw+39h7vxftLHeQOiDN9oorK4 XX4jY7hOf57YVYwMmNW4SoL3g1eJ123kYEW/EqSl0zuMFFenZ7KWxiX0Rqvu/cMe2jVH FEKOYEoMljakpTPtKnZoYhAWnV33FOuK/v+6FlyRNwzPd83pXE+wTWUlRCdwYjdrSIPl V2R6JOg2ybmCzI9bKEMUAEKgp9wS7dgQbHDpiueAvdJjx3Mk+EWCntuA9jdXVq2oD89h GKYQ== X-Gm-Message-State: AJIora/so5FGOBbFMRguZWBCEL9A9sPR5zkFmNicAyeShICehMqeSM2s CL5rrCLC7oLYKW3IzHaoVOuiy35H+FjKJwKz X-Google-Smtp-Source: AGRyM1tGO2N2ImkEzLvj0GJJcGo3kLPn/efOEZFrENjaPg7hy6GNJPruEJJCbTylPXa8w8ojDCpTYQ== X-Received: by 2002:a17:90a:be0c:b0:1ef:accb:23a5 with SMTP id a12-20020a17090abe0c00b001efaccb23a5mr490128pjs.113.1657295301876; Fri, 08 Jul 2022 08:48:21 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [RISU PATCH v4 25/29] Remove return value from reginfo_dump Date: Fri, 8 Jul 2022 21:16:56 +0530 Message-Id: <20220708154700.18682-26-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62c; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657299867996100001 Content-Type: text/plain; charset="utf-8" No uses actually checked the error indication. Even if we wanted to check ferror on the stream, we should do that generically rather than per arch. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- risu.h | 4 ++-- risu_reginfo_aarch64.c | 8 +++----- risu_reginfo_arm.c | 6 ++---- risu_reginfo_i386.c | 6 ++---- risu_reginfo_m68k.c | 6 ++---- risu_reginfo_ppc64.c | 6 ++---- 6 files changed, 13 insertions(+), 23 deletions(-) diff --git a/risu.h b/risu.h index 99f0d8e..6eceb9f 100644 --- a/risu.h +++ b/risu.h @@ -120,8 +120,8 @@ void reginfo_init(struct reginfo *ri, ucontext_t *uc); /* return 1 if structs are equal, 0 otherwise. */ int reginfo_is_eq(struct reginfo *r1, struct reginfo *r2); =20 -/* print reginfo state to a stream, returns 1 on success, 0 on failure */ -int reginfo_dump(struct reginfo *ri, FILE * f); +/* print reginfo state to a stream */ +void reginfo_dump(struct reginfo *ri, FILE *f); =20 /* reginfo_dump_mismatch: print mismatch details to a stream */ void reginfo_dump_mismatch(struct reginfo *m, struct reginfo *a, FILE *f); diff --git a/risu_reginfo_aarch64.c b/risu_reginfo_aarch64.c index e0f80c0..b86864d 100644 --- a/risu_reginfo_aarch64.c +++ b/risu_reginfo_aarch64.c @@ -219,8 +219,8 @@ static void sve_dump_zreg_diff(FILE *f, int vq, const u= int64_t *za, } } =20 -/* reginfo_dump: print state to a stream, returns nonzero on success */ -int reginfo_dump(struct reginfo *ri, FILE * f) +/* reginfo_dump: print state to a stream */ +void reginfo_dump(struct reginfo *ri, FILE * f) { int i; fprintf(f, " faulting insn %08x\n", ri->faulting_insn); @@ -263,7 +263,7 @@ int reginfo_dump(struct reginfo *ri, FILE * f) sve_dump_preg(f, vq, p); fprintf(f, "\n"); } - return !ferror(f); + return; } =20 for (i =3D 0; i < 32; i++) { @@ -271,8 +271,6 @@ int reginfo_dump(struct reginfo *ri, FILE * f) fprintf(f, " V%-2d : %016" PRIx64 "%016" PRIx64 "\n", i, v[1], v[0]); } - - return !ferror(f); } =20 void reginfo_dump_mismatch(struct reginfo *m, struct reginfo *a, FILE * f) diff --git a/risu_reginfo_arm.c b/risu_reginfo_arm.c index ba1035e..09813c4 100644 --- a/risu_reginfo_arm.c +++ b/risu_reginfo_arm.c @@ -161,8 +161,8 @@ int reginfo_is_eq(struct reginfo *r1, struct reginfo *r= 2) return memcmp(r1, r2, sizeof(*r1)) =3D=3D 0; /* ok since we memset = 0 */ } =20 -/* reginfo_dump: print the state to a stream, returns nonzero on success */ -int reginfo_dump(struct reginfo *ri, FILE *f) +/* reginfo_dump: print the state to a stream */ +void reginfo_dump(struct reginfo *ri, FILE *f) { int i; if (ri->faulting_insn_size =3D=3D 2) { @@ -179,8 +179,6 @@ int reginfo_dump(struct reginfo *ri, FILE *f) i, (unsigned long long) ri->fpregs[i]); } fprintf(f, " fpscr: %08x\n", ri->fpscr); - - return !ferror(f); } =20 void reginfo_dump_mismatch(struct reginfo *m, struct reginfo *a, FILE *f) diff --git a/risu_reginfo_i386.c b/risu_reginfo_i386.c index 57e4c00..37506fa 100644 --- a/risu_reginfo_i386.c +++ b/risu_reginfo_i386.c @@ -310,8 +310,8 @@ static char get_vecletter(uint64_t features) } } =20 -/* reginfo_dump: print state to a stream, returns nonzero on success */ -int reginfo_dump(struct reginfo *ri, FILE *f) +/* reginfo_dump: print state to a stream */ +void reginfo_dump(struct reginfo *ri, FILE *f) { uint64_t features; int i, j, n, w; @@ -345,8 +345,6 @@ int reginfo_dump(struct reginfo *ri, FILE *f) fprintf(f, " k%-5d: %016" PRIx64 "\n", i, ri->kregs[i]); } } - - return !ferror(f); } =20 void reginfo_dump_mismatch(struct reginfo *m, struct reginfo *a, FILE *f) diff --git a/risu_reginfo_m68k.c b/risu_reginfo_m68k.c index 29edce9..38d7dd3 100644 --- a/risu_reginfo_m68k.c +++ b/risu_reginfo_m68k.c @@ -92,8 +92,8 @@ int reginfo_is_eq(struct reginfo *m, struct reginfo *a) return 1; } =20 -/* reginfo_dump: print state to a stream, returns nonzero on success */ -int reginfo_dump(struct reginfo *ri, FILE *f) +/* reginfo_dump: print state to a stream */ +void reginfo_dump(struct reginfo *ri, FILE *f) { int i; fprintf(f, " pc \e[1;101;37m0x%08x\e[0m\n", ri->pc); @@ -114,8 +114,6 @@ int reginfo_dump(struct reginfo *ri, FILE *f) } =20 fprintf(f, "\n"); - - return !ferror(f); } =20 void reginfo_dump_mismatch(struct reginfo *m, struct reginfo *a, FILE *f) diff --git a/risu_reginfo_ppc64.c b/risu_reginfo_ppc64.c index e96dc48..134a152 100644 --- a/risu_reginfo_ppc64.c +++ b/risu_reginfo_ppc64.c @@ -112,8 +112,8 @@ int reginfo_is_eq(struct reginfo *m, struct reginfo *a) return 1; } =20 -/* reginfo_dump: print state to a stream, returns nonzero on success */ -int reginfo_dump(struct reginfo *ri, FILE * f) +/* reginfo_dump: print state to a stream */ +void reginfo_dump(struct reginfo *ri, FILE * f) { int i; =20 @@ -152,8 +152,6 @@ int reginfo_dump(struct reginfo *ri, FILE * f) ri->vrregs.vrregs[i][0], ri->vrregs.vrregs[i][1], ri->vrregs.vrregs[i][2], ri->vrregs.vrregs[i][3]); } - - return !ferror(f); } =20 void reginfo_dump_mismatch(struct reginfo *m, struct reginfo *a, FILE *f) --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657296777; cv=none; d=zohomail.com; s=zohoarc; b=BlDbkujy7uKSXH/BIoaRA87QLPhPEt2f5S05UqmyKMoTIVjk7LBr+OUOHVQAS8KkqF53l50xvaVwBH9TOXb+TbPe69spWgDa6bAdEgKsYcTVCPttm1oB7R/cIhYdYmCpekzHo0ioBnNjZdpUEv+TfVbINH4JZJvO++U291snwYg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657296777; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Gkz60hItXrZkNCsstqfCphoprTGAep7xB2MfvanXt1s=; b=R2MjQxditFkjsNVS8ozG7cYQYpoLolRKRMSK+leoXUt3M+8smVDcqItgXFUmk9xZ4HXj+VKphR/CFz1DTWVMuLWOTpKpNgOynYkTIZFcWZv1JmQXmutU1NSYiuOMeOxo06tfEiILH1TZR5TB2XEYoCuzsARPM2yov2xsrAYrqGo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 165729677736669.26082101966779; Fri, 8 Jul 2022 09:12:57 -0700 (PDT) Received: from localhost ([::1]:49784 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9qb9-0003Rf-Ay for importer@patchew.org; Fri, 08 Jul 2022 12:12:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45360) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qDT-0006Xf-IH for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:27 -0400 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]:37535) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qDR-0002bj-QT for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:27 -0400 Received: by mail-pj1-x1029.google.com with SMTP id y14-20020a17090a644e00b001ef775f7118so2311843pjm.2 for ; Fri, 08 Jul 2022 08:48:25 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.48.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:48:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Gkz60hItXrZkNCsstqfCphoprTGAep7xB2MfvanXt1s=; b=vQ0vn6lMzOSY8bE1bJ27YtqaxETWdngV19L7OhPVSGe8mwa8cEZXeI7o39TIrWQ1J4 HpSSn725Vlq5IBcFVmKp8B5mnBc+abHk2erfFzkhfZsIU3I9vOQkD3ADiddLRYVPEF94 RIde31578iVTd4gjlaoz6pmBZMVfM0ImVDf4U6X6SSMAwU8Wg4dx9pgAvWSJpFitOIhU bPWkRoKFpP/Fz502BvqNEZKjKz8r4gAufzTpSYIRqdKztEdtNbvBhv07msFHkfSul2H5 xDhvQykmfLJKHq49x7Kcn0upa4aXhchFXEYsfVP5r2u0HoJVGBJoLhPQd3sR6uqUGnMw yWcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Gkz60hItXrZkNCsstqfCphoprTGAep7xB2MfvanXt1s=; b=jKVvSEGU7/hqFpopgyU0yDGHvOozlH+ekRSAgnLdCMthPJOW/Qk1bWxLNeWxRCTlxT kS/DTD6qzgxnBQz5ZcrttOhYJZqUmoE+AcreB+npaF3ddo5Z37KC4esabinmR7jNMa+8 7U0qQsrnJOqEnr1DiR4QwROgBmJak/CB9pMuaYUsDgftFitwjKvCb845cMNKkX3Cs5p6 zEg3E3ef6notrMFLVEdlacO3KWW+r+nmEVr8Gz2wgOQn8RgXFn4kkukqAWKt21e4HS9y y3R+3H3qDlC26IAhcfL06Sm4o4ejBVTvNicDqZ5w3Qo+DcCeBHFvLcuXkd2QgOdCIGLB fL5w== X-Gm-Message-State: AJIora9fxlrdilLsjCclqFvGqYTwSAwjqkP8mGb15byBG+U52Dy9FqpO HaldAY/eIUiFzuZzqDKBkXPcUERZayvz91ye X-Google-Smtp-Source: AGRyM1vH6C5aimmb2hsEbEvGQKwpU0JgDxaWC050V6MedN+ypelwnknnU8kRUWC/4K3SpOHmPvBf4Q== X-Received: by 2002:a17:90a:dc01:b0:1ef:e3bd:a473 with SMTP id i1-20020a17090adc0100b001efe3bda473mr489405pjv.129.1657295304517; Fri, 08 Jul 2022 08:48:24 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [RISU PATCH v4 26/29] ppc64: Clean up reginfo handling Date: Fri, 8 Jul 2022 21:16:57 +0530 Message-Id: <20220708154700.18682-27-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1029; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1029.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657296778246100001 Content-Type: text/plain; charset="utf-8" Several of the gp_reg[] elements are not relevant -- e.g. orig r3, which is related to system calls. Omit those from the original reginfo_init(), so that any differences are automatically hidden. Do not only compare bit 4 of CCR -- this register is 32 bits wide with 8 cr subfields. We should compare all of them. Tidy reginfo_dump() output. Especially, do not dump the non- relevant fields. Signed-off-by: Richard Henderson --- risu_reginfo_ppc64.c | 114 +++++++++++++++++-------------------------- 1 file changed, 44 insertions(+), 70 deletions(-) diff --git a/risu_reginfo_ppc64.c b/risu_reginfo_ppc64.c index 134a152..eeb0460 100644 --- a/risu_reginfo_ppc64.c +++ b/risu_reginfo_ppc64.c @@ -21,19 +21,30 @@ #include "risu.h" #include "risu_reginfo_ppc64.h" =20 -#define XER 37 -#define CCR 38 +/* Names for indexes within gregset_t, ignoring those irrelevant here */ +enum { + NIP =3D 32, + MSR =3D 33, + CTR =3D 35, + LNK =3D 36, + XER =3D 37, + CCR =3D 38, +}; =20 const struct option * const arch_long_opts; const char * const arch_extra_help; =20 static const char * const greg_names[NGREG] =3D { - "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", - "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", - "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", - "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31", - [XER] =3D "xer", - [CCR] =3D "ccr", + "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", + "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31", + [NIP] =3D "nip", + [MSR] =3D "msr", + [CTR] =3D "ctr", + [LNK] =3D "lnk", + [XER] =3D "xer", + [CCR] =3D "ccr", }; =20 void process_arch_opt(int opt, const char *arg) @@ -61,8 +72,13 @@ void reginfo_init(struct reginfo *ri, ucontext_t *uc) ri->nip =3D uc->uc_mcontext.regs->nip - image_start_address; =20 for (i =3D 0; i < NGREG; i++) { - ri->gregs[i] =3D uc->uc_mcontext.gp_regs[i]; + /* Do not copy gp_reg entries not relevant to the context. */ + if (greg_names[i]) { + ri->gregs[i] =3D uc->uc_mcontext.gp_regs[i]; + } } + ri->gregs[1] =3D 0xdeadbeef; /* sp */ + ri->gregs[13] =3D 0xdeadbeef; /* gp */ =20 memcpy(ri->fpregs, uc->uc_mcontext.fp_regs, 32 * sizeof(double)); ri->fpscr =3D uc->uc_mcontext.fp_regs[32]; @@ -76,79 +92,37 @@ void reginfo_init(struct reginfo *ri, ucontext_t *uc) /* reginfo_is_eq: compare the reginfo structs, returns nonzero if equal */ int reginfo_is_eq(struct reginfo *m, struct reginfo *a) { - int i; - for (i =3D 0; i < 32; i++) { - if (i =3D=3D 1 || i =3D=3D 13) { - continue; - } - - if (m->gregs[i] !=3D a->gregs[i]) { - return 0; - } - } - - if (m->gregs[XER] !=3D a->gregs[XER]) { - return 0; - } - - if ((m->gregs[CCR] & 0x10) !=3D (a->gregs[CCR] & 0x10)) { - return 0; - } - - for (i =3D 0; i < 32; i++) { - if (m->fpregs[i] !=3D a->fpregs[i]) { - return 0; - } - } - - for (i =3D 0; i < 32; i++) { - if (m->vrregs.vrregs[i][0] !=3D a->vrregs.vrregs[i][0] || - m->vrregs.vrregs[i][1] !=3D a->vrregs.vrregs[i][1] || - m->vrregs.vrregs[i][2] !=3D a->vrregs.vrregs[i][2] || - m->vrregs.vrregs[i][3] !=3D a->vrregs.vrregs[i][3]) { - return 0; - } - } - return 1; + return memcmp(m, a, sizeof(*m)) =3D=3D 0; } =20 /* reginfo_dump: print state to a stream */ void reginfo_dump(struct reginfo *ri, FILE * f) { - int i; + const char *sep; + int i, j; =20 - fprintf(f, " faulting insn 0x%x\n", ri->faulting_insn); - fprintf(f, " prev insn 0x%x\n", ri->prev_insn); - fprintf(f, " prev addr 0x%" PRIx64 "\n\n", ri->nip); + fprintf(f, "%6s: %08x\n", "insn", ri->faulting_insn); + fprintf(f, "%6s: %016lx\n", "pc", ri->nip); =20 - for (i =3D 0; i < 16; i++) { - fprintf(f, "\tr%2d: %16lx\tr%2d: %16lx\n", i, ri->gregs[i], - i + 16, ri->gregs[i + 16]); + sep =3D ""; + for (i =3D j =3D 0; i < NGREG; i++) { + if (greg_names[i] !=3D NULL) { + fprintf(f, "%s%6s: %016lx", sep, greg_names[i], ri->gregs[i]); + sep =3D (++j & 1 ? " " : "\n"); + } } =20 - fprintf(f, "\n"); - fprintf(f, "\tnip : %16lx\n", ri->gregs[32]); - fprintf(f, "\tmsr : %16lx\n", ri->gregs[33]); - fprintf(f, "\torig r3: %16lx\n", ri->gregs[34]); - fprintf(f, "\tctr : %16lx\n", ri->gregs[35]); - fprintf(f, "\tlnk : %16lx\n", ri->gregs[36]); - fprintf(f, "\txer : %16lx\n", ri->gregs[37]); - fprintf(f, "\tccr : %16lx\n", ri->gregs[38]); - fprintf(f, "\tmq : %16lx\n", ri->gregs[39]); - fprintf(f, "\ttrap : %16lx\n", ri->gregs[40]); - fprintf(f, "\tdar : %16lx\n", ri->gregs[41]); - fprintf(f, "\tdsisr : %16lx\n", ri->gregs[42]); - fprintf(f, "\tresult : %16lx\n", ri->gregs[43]); - fprintf(f, "\tdscr : %16lx\n\n", ri->gregs[44]); - - for (i =3D 0; i < 16; i++) { - fprintf(f, "\tf%2d: %016lx\tf%2d: %016lx\n", i, ri->fpregs[i], - i + 16, ri->fpregs[i + 16]); + sep =3D "\n"; + for (i =3D j =3D 0; i < 32; i++) { + fprintf(f, "%s%*s%d: %016lx", + sep, 6 - (i < 10 ? 1 : 2), "f", i, ri->fpregs[i]); + sep =3D (++j & 1 ? " " : "\n"); } - fprintf(f, "\tfpscr: %016lx\n\n", ri->fpscr); + fprintf(f, "\n%6s: %016lx\n", "fpscr", ri->fpscr); =20 for (i =3D 0; i < 32; i++) { - fprintf(f, "vr%02d: %8x, %8x, %8x, %8x\n", i, + fprintf(f, "%*s%d: %08x %08x %08x %08x\n", + 6 - (i < 10 ? 1 : 2), "vr", i, ri->vrregs.vrregs[i][0], ri->vrregs.vrregs[i][1], ri->vrregs.vrregs[i][2], ri->vrregs.vrregs[i][3]); } --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657299490; cv=none; d=zohomail.com; s=zohoarc; b=HXBzf3b0jc4tE8gZLVi57C1+Vrky3ZOHq0ufm6fHihDLf/m0IpXmDELhc4MI3LoqrRqPQVnWSrYzqv4JgOdAufOrcJoXv+a985V0YJUAb+8Ipbq837xOJu1/LaAXpMIs244PbmrZe6s4PIOTuHfj9FPr8kZM5CHTcfpL8cwsqiQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657299490; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=MRrXY542sxSC6HnNhvHgU6gcthc4iZQb6z5fd5sN5yQ=; b=cW8EnIJRVi49Cve+Dklpu+2VzitPMkaDPhE0afp8hqCnbgRC30Ix1R298F4adW3KxTv3xir52e3Wa2cpI2IQB8kikZK4HgyeN3zzeGQsG5B5dVRh/qpQtAohfFKRPgnr1bPdTbJQ3GitybgKOdfTiCHMbKhWbeH+NbPRnAFyVC0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657299490495618.6900415756886; Fri, 8 Jul 2022 09:58:10 -0700 (PDT) Received: from localhost ([::1]:49312 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9rIu-0006XG-Qc for importer@patchew.org; Fri, 08 Jul 2022 12:58:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45398) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qDV-0006fG-JJ for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:29 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]:38442) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qDT-0002Tp-Pv for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:29 -0400 Received: by mail-pj1-x1032.google.com with SMTP id 89-20020a17090a09e200b001ef7638e536so2313991pjo.3 for ; Fri, 08 Jul 2022 08:48:27 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.48.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:48:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=MRrXY542sxSC6HnNhvHgU6gcthc4iZQb6z5fd5sN5yQ=; b=oy9P6QLJFpVzQfPTl+1dkA12XPxWvQEkFRK3GHArgM+CAdseCpBg5wOuJY0x6Bnx8T Y+oejF7vkJAI7qVs6lbeMy94tEb2BbkHkZyZrzkqbJUzftPAdCRtAaOrhQ08IWjvxBf8 xS7Z/57NA0/q/HOF8b4N2qgtZVzy7ZZBPt9W8yfdQs2oQUVJ0pDzxtk+YBE7aOO5plWA Z0mrBhrBHb4MGxJJA3G7YpKoXc1sOZEtzT8GkdjhHfnJFcUI9+HaCKV+MjdnwRoJ9pmW FmKJgHAbfm35PN9ssYUFjoxo7s/Gj97QWbrLk1WuEGLK/1aKzglosxRN8IBYmEDcKU/H B95g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=MRrXY542sxSC6HnNhvHgU6gcthc4iZQb6z5fd5sN5yQ=; b=KdbkB7+n6t5f16jnr6TwezIE3pNfDW1Iu0h7qU0CUoP3AJ4BbjWLjXwsXIfdngZDjL aau/x2IqXH4fkAWzzF1OFpfGQtQnCLo7hSyATTsYJ9X6mqvepd+xfi8XtSV34iKpOzvj 8u+GzHrgWXUNKUCy8N8+ofSLajZZVKb/OvH185UlUc/Tt3Vn76Zyu+OC4M6t3A03cY9P n3w/37FutO53Gsd6tKFIq+O4/kVJ5XkSc1trU2l0tl0Wdx3JPNF7T9P1nUqTcMnzCYE2 mjp17ViCQbZ7xW9YYUqmfgAGkt17t0o3lUpF1sSnBPkL5ttUEPtShzv+/7mWPOi/P0z+ fR1A== X-Gm-Message-State: AJIora9lCPTSteKRTAFn7coXGtAB/K3ioXHq03dOf6hzgwAMQ3mGKPgP P+GppvIbXWuhdaudyl4WXYFwOYLXyzS05ava X-Google-Smtp-Source: AGRyM1tPqwj0MSFhc/J8aSP+HC/8+OV2TuJxQM0u/I8ZM1CYnielbU/Th4tV2g5pxRRjSunIM/lD6Q== X-Received: by 2002:a17:90a:3e09:b0:1ef:8399:398b with SMTP id j9-20020a17090a3e0900b001ef8399398bmr487886pjc.39.1657295306991; Fri, 08 Jul 2022 08:48:26 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [RISU PATCH v4 27/29] aarch64: Tidy reginfo dumping ahead of ZA state Date: Fri, 8 Jul 2022 21:16:58 +0530 Message-Id: <20220708154700.18682-28-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1032; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1032.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657299491523100001 Content-Type: text/plain; charset="utf-8" A misalignment for sve_vl, plus add a bit more space on the left for the ZA[n] field name. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- risu_reginfo_aarch64.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/risu_reginfo_aarch64.c b/risu_reginfo_aarch64.c index b86864d..9ea0acf 100644 --- a/risu_reginfo_aarch64.c +++ b/risu_reginfo_aarch64.c @@ -183,6 +183,18 @@ static int sve_preg_is_eq(int vq, const void *p1, cons= t void *p2) return memcmp(p1, p2, vq * 2) =3D=3D 0; } =20 +static void sve_dump_zreg(FILE *f, int vq, const uint64_t *z) +{ + const char *pad =3D ""; + int q; + + for (q =3D 0; q < vq; q++) { + fprintf(f, "%s[%-2d] %016" PRIx64 "%016" PRIx64 "\n", + pad, q, z[2 * q + 1], z[2 * q]); + pad =3D " "; /* 11 spaces */ + } +} + static void sve_dump_preg(FILE *f, int vq, const uint16_t *p) { int q; @@ -211,10 +223,10 @@ static void sve_dump_zreg_diff(FILE *f, int vq, const= uint64_t *za, uint64_t zb0 =3D zb[2 * q], zb1 =3D zb[2 * q + 1]; =20 if (za0 !=3D zb0 || za1 !=3D zb1) { - fprintf(f, "%sq%-2d: %016" PRIx64 "%016" PRIx64 + fprintf(f, "%s[%-2d]: %016" PRIx64 "%016" PRIx64 " vs %016" PRIx64 "%016" PRIx64"\n", pad, q, za1, za0, zb1, zb0); - pad =3D " "; + pad =3D " "; /* 11 spaces */ } } } @@ -237,19 +249,14 @@ void reginfo_dump(struct reginfo *ri, FILE * f) =20 if (ri->sve_vl) { int vq =3D sve_vq_from_vl(ri->sve_vl); - int q; =20 fprintf(f, " vl : %d\n", ri->sve_vl); =20 for (i =3D 0; i < SVE_NUM_ZREGS; i++) { uint64_t *z =3D reginfo_zreg(ri, vq, i); =20 - fprintf(f, " Z%-2d q%-2d: %016" PRIx64 "%016" PRIx64 "\n", - i, 0, z[1], z[0]); - for (q =3D 1; q < vq; ++q) { - fprintf(f, " q%-2d: %016" PRIx64 "%016" PRIx64 "\n", - q, z[q * 2 + 1], z[q * 2]); - } + fprintf(f, " Z%-2d : ", i); + sve_dump_zreg(f, vq, z); } =20 for (i =3D 0; i < SVE_NUM_PREGS + 1; i++) { @@ -312,7 +319,7 @@ void reginfo_dump_mismatch(struct reginfo *m, struct re= ginfo *a, FILE * f) } =20 if (m->sve_vl !=3D a->sve_vl) { - fprintf(f, " vl : %d vs %d\n", m->sve_vl, a->sve_vl); + fprintf(f, " vl : %d vs %d\n", m->sve_vl, a->sve_vl); } =20 if (m->sve_vl) { @@ -323,7 +330,7 @@ void reginfo_dump_mismatch(struct reginfo *m, struct re= ginfo *a, FILE * f) uint64_t *za =3D reginfo_zreg(a, vq, i); =20 if (!sve_zreg_is_eq(vq, zm, za)) { - fprintf(f, " Z%-2d ", i); + fprintf(f, " Z%-2d : ", i); sve_dump_zreg_diff(f, vq, zm, za); } } --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657300159; cv=none; d=zohomail.com; s=zohoarc; b=Iydg6i8YhFLs8l4NdM9ChQb373yTRVfsk5NmwVFpjOQMHwSDRSY2j5FNgZ1AYdVz2+Wa5ykmnvb4Wd7MgFqikSfB6W6eipqGftO0Cqb8RbPvoDrwTpW3wf18GqKnhJwEWg2x9bB3j07su535LsGK1A0mCplsyP3SbmQb1f6gJf0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657300159; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=v0mp2fwMAm/3QWt6/khtoo1bYBedtATdI31SE5nBFNs=; b=LgShbKSUTIRE3XzEPFMCrjTTDv6LU6PuF3XPE9bOZB9QfVUSP8cOlaM0bPbijomoAJSd1YrntDa7PxVS62Z6tMTlNcgnJLeHmYmQIxDSLpd2uhsL4AnlBKAvoW5nOQLT5x4bvYIIfVCMrpHGLpP9tUExD6dyZpTBayXaJfVM/qA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 165730015959652.547777323351966; Fri, 8 Jul 2022 10:09:19 -0700 (PDT) Received: from localhost ([::1]:33982 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9rTh-0007Bf-Sj for importer@patchew.org; Fri, 08 Jul 2022 13:09:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45448) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qDb-0006yY-GN for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:35 -0400 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]:33314) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qDY-0002cp-NC for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:35 -0400 Received: by mail-pl1-x632.google.com with SMTP id p16so1945965plo.0 for ; Fri, 08 Jul 2022 08:48:32 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.48.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:48:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=v0mp2fwMAm/3QWt6/khtoo1bYBedtATdI31SE5nBFNs=; b=DyveKn7nHnlRo64TdMxrSezLt3U4Dqfw+SoJOH+Opg2LiBeRjKFVJsnsOx4/6dMef7 A9V9viJSMUcJm+690shHgQHsbnkonWiawop1aJVX+0dld5H7lO2wqBoHUtXbGt6a2ogh fJsvTNKKx0naRn/amePeZITQ6HEaXgCiZydRK3gtA4KhPFuhI8fR1LhZsi5cxyQ38TxO H6RhM5iL8pc3OBHfKtB/0eke9P6/8Iyi3j/5Hub2Qs7i+kHYj23RKTGFkoRwvSd5TBRa jgq+WtDzbRsIAJs+OYJUKc7R2jX4bNyQnC7Vy2e2W3WcHyQXNigV2xyKo/zS9do2EnUa Um1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=v0mp2fwMAm/3QWt6/khtoo1bYBedtATdI31SE5nBFNs=; b=Kc8i9UlJ/hRFviKGnqPzKxy3wa0Zos+RJwtX30Vw0RwPeFBh4frhDUXrXhHlyU4WJm qBwmZ5MhWTQqL72K/epDjjSWJSX1i4+qHW/vVWnnNovp1tPb2ju+wE/HtrHWBH4sWSLy C53BY8O7VX4ebdqgQKFQ4Ujzg51lpWW6+AeW/tulUA4JelGCWqNFJ6zXHjOsZCFyKi+H PqNdHwZYD7KQaCoNzmbwua0iBNZhTQ4XDS9YCwSwLHo1UyMMwbfRfwWH7AdLJujhH5QV EtRk8+syrX9nnTWrKhFHHvIhdaLtJ6kLeFWxbLyXeXyNHrGJ3hV8XCQKfVM4j9N2fddN dzJw== X-Gm-Message-State: AJIora8E5SHcaccN5x9Q69o4nJVHtNnfFmlcQeFzBPLghtFogXRRaXdz 8vaKcFAP705UoimO6sTQyeDic+dYI4VFPe47 X-Google-Smtp-Source: AGRyM1tGBohz2TxEEc+kszW1NPpFnyCxN7hI3gVkGC7cQn3Y/tpgQ1ekJ/yB8BEttpjTolJa2Q6caQ== X-Received: by 2002:a17:902:f790:b0:16b:d796:3696 with SMTP id q16-20020a170902f79000b0016bd7963696mr4257201pln.97.1657295311415; Fri, 08 Jul 2022 08:48:31 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [RISU PATCH v4 28/29] aarch64: Add support for ZA storage Date: Fri, 8 Jul 2022 21:16:59 +0530 Message-Id: <20220708154700.18682-29-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::632; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x632.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657300161569100001 Content-Type: text/plain; charset="utf-8" Require NVL =3D=3D SVL on startup, to make it easier to manage reginfo. Most of the time PSTATE.SM would be active with PSTATE.ZA anyway, for any non-trivial SME testing. Extend saved storage only when PSTATE.ZA is active. Use a carefully reserved uint16_t for saving SVCR. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- risu_reginfo_aarch64.h | 52 ++++++++++++- risu_reginfo_aarch64.c | 161 ++++++++++++++++++++++++++++++++++++----- 2 files changed, 191 insertions(+), 22 deletions(-) diff --git a/risu_reginfo_aarch64.h b/risu_reginfo_aarch64.h index 536c12b..097b7ad 100644 --- a/risu_reginfo_aarch64.h +++ b/risu_reginfo_aarch64.h @@ -21,6 +21,43 @@ #define SVE_VQ_MAX 16 =20 #define ROUND_UP(SIZE, POW2) (((SIZE) + (POW2) - 1) & -(POW2)) + +#ifdef ZA_MAGIC +/* System headers have all Streaming SVE definitions. */ +typedef struct sve_context risu_sve_context; +typedef struct za_context risu_za_context; +#else +#define ZA_MAGIC 0x54366345 +#define SVE_SIG_FLAG_SM 1 + +/* System headers missing flags field. */ +typedef struct { + struct _aarch64_ctx head; + uint16_t vl; + uint16_t flags; + uint16_t reserved[2]; +} risu_sve_context; + +typedef struct { + struct _aarch64_ctx head; + uint16_t vl; + uint16_t reserved[3]; +} risu_za_context; + +#define ZA_SIG_REGS_OFFSET \ + ROUND_UP(sizeof(risu_za_context), SVE_VQ_BYTES) + +#define ZA_SIG_REGS_SIZE(vq) \ + ((vq) * (vq) * SVE_VQ_BYTES * SVE_VQ_BYTES) + +#define ZA_SIG_ZAV_OFFSET(vq, n) \ + (ZA_SIG_REGS_OFFSET + (SVE_SIG_ZREG_SIZE(vq) * n)) + +#define ZA_SIG_CONTEXT_SIZE(vq) \ + (ZA_SIG_REGS_OFFSET + ZA_SIG_REGS_SIZE(vq)) + +#endif /* ZA_MAGIC */ + #define RISU_SVE_REGS_SIZE(VQ) ROUND_UP(SVE_SIG_REGS_SIZE(VQ), 16) #define RISU_SIMD_REGS_SIZE (32 * 16) =20 @@ -36,12 +73,16 @@ struct reginfo { uint32_t fpsr; uint32_t fpcr; uint16_t sve_vl; - uint16_t reserved; + uint16_t svcr; =20 - char extra[RISU_SVE_REGS_SIZE(SVE_VQ_MAX)] + char extra[RISU_SVE_REGS_SIZE(SVE_VQ_MAX) + + ZA_SIG_REGS_SIZE(SVE_VQ_MAX)] __attribute__((aligned(16))); }; =20 +#define SVCR_SM 1 +#define SVCR_ZA 2 + static inline uint64_t *reginfo_vreg(struct reginfo *ri, int i) { return (uint64_t *)&ri->extra[i * 16]; @@ -59,4 +100,11 @@ static inline uint16_t *reginfo_preg(struct reginfo *ri= , int vq, int i) SVE_SIG_REGS_OFFSET]; } =20 +static inline uint64_t *reginfo_zav(struct reginfo *ri, int vq, int i) +{ + return (uint64_t *)&ri->extra[RISU_SVE_REGS_SIZE(vq) + + ZA_SIG_ZAV_OFFSET(vq, i) - + ZA_SIG_REGS_OFFSET]; +} + #endif /* RISU_REGINFO_AARCH64_H */ diff --git a/risu_reginfo_aarch64.c b/risu_reginfo_aarch64.c index 9ea0acf..af620f3 100644 --- a/risu_reginfo_aarch64.c +++ b/risu_reginfo_aarch64.c @@ -25,25 +25,44 @@ #include "risu.h" #include "risu_reginfo_aarch64.h" =20 +#ifndef PR_SME_SET_VL +#define PR_SME_SET_VL 63 +#endif + /* Should we test SVE register state */ static int test_sve; +static int test_za; static const struct option extra_opts[] =3D { {"test-sve", required_argument, NULL, FIRST_ARCH_OPT }, + {"test-za", required_argument, NULL, FIRST_ARCH_OPT + 1 }, {0, 0, 0, 0} }; =20 const struct option * const arch_long_opts =3D &extra_opts[0]; const char * const arch_extra_help - =3D " --test-sve=3D Compare SVE registers with VQ\n"; + =3D " --test-sve=3D Compare SVE registers with VQ\n" + " --test-za=3D Compare ZA storage with VQ\n"; =20 void process_arch_opt(int opt, const char *arg) { - assert(opt =3D=3D FIRST_ARCH_OPT); - test_sve =3D strtol(arg, 0, 10); - - if (test_sve <=3D 0 || test_sve > SVE_VQ_MAX) { - fprintf(stderr, "Invalid value for VQ (1-%d)\n", SVE_VQ_MAX); - exit(EXIT_FAILURE); + switch (opt) { + case FIRST_ARCH_OPT: + test_sve =3D strtol(arg, 0, 10); + if (test_sve <=3D 0 || test_sve > SVE_VQ_MAX) { + fprintf(stderr, "Invalid value for SVE VQ (1-%d)\n", SVE_VQ_MA= X); + exit(EXIT_FAILURE); + } + break; + case FIRST_ARCH_OPT + 1: + test_za =3D strtol(arg, 0, 10); + if (test_za <=3D 0 || test_za > SVE_VQ_MAX + || (test_za & (test_za - 1))) { + fprintf(stderr, "Invalid value for ZA VQ (1-%d)\n", SVE_VQ_MAX= ); + exit(EXIT_FAILURE); + } + break; + default: + abort(); } } =20 @@ -51,6 +70,31 @@ void arch_init(void) { long want, got; =20 + if (test_za) { + /* + * For now, reginfo requires NVL =3D=3D SVL. + * There doesn't seem to be much advantage to differing. + */ + if (test_sve && test_sve !=3D test_za) { + fprintf(stderr, "Mismatched values for SVE and ZA VQ\n"); + exit(EXIT_FAILURE); + } + + want =3D sve_vl_from_vq(test_za); + got =3D prctl(PR_SME_SET_VL, want); + if (want !=3D got) { + if (got >=3D 0) { + fprintf(stderr, "Unsupported VQ for ZA (%d !=3D %d)\n", + test_za, (int)sve_vq_from_vl(got)); + } else if (errno =3D=3D EINVAL) { + fprintf(stderr, "System does not support SME\n"); + } else { + perror("prctl PR_SME_SET_VL"); + } + exit(EXIT_FAILURE); + } + } + if (test_sve) { want =3D sve_vl_from_vq(test_sve); got =3D prctl(PR_SVE_SET_VL, want); @@ -75,6 +119,9 @@ int reginfo_size(struct reginfo *ri) if (ri->sve_vl) { int vq =3D sve_vq_from_vl(ri->sve_vl); size +=3D RISU_SVE_REGS_SIZE(vq); + if (ri->svcr & SVCR_ZA) { + size +=3D ZA_SIG_REGS_SIZE(vq); + } } else { size +=3D RISU_SIMD_REGS_SIZE; } @@ -84,10 +131,11 @@ int reginfo_size(struct reginfo *ri) /* reginfo_init: initialize with a ucontext */ void reginfo_init(struct reginfo *ri, ucontext_t *uc) { - int i; + int i, vq; struct _aarch64_ctx *ctx, *extra =3D NULL; struct fpsimd_context *fp =3D NULL; - struct sve_context *sve =3D NULL; + risu_sve_context *sve =3D NULL; + risu_za_context *za =3D NULL; =20 /* necessary to be able to compare with memcmp later */ memset(ri, 0, sizeof(*ri)); @@ -112,6 +160,9 @@ void reginfo_init(struct reginfo *ri, ucontext_t *uc) case SVE_MAGIC: sve =3D (void *)ctx; break; + case ZA_MAGIC: + za =3D (void *)ctx; + break; case EXTRA_MAGIC: extra =3D (void *)((struct extra_context *)(ctx))->datap; break; @@ -134,21 +185,55 @@ void reginfo_init(struct reginfo *ri, ucontext_t *uc) ri->fpsr =3D fp->fpsr; ri->fpcr =3D fp->fpcr; =20 - if (test_sve) { - int vq =3D test_sve; + /* + * Note that arch_init required NVL=3D=3DSVL, so test_sve and test_za + * are equal when non-zero. We will verify this matches below. + */ + vq =3D test_sve | test_za; + ri->sve_vl =3D sve_vl_from_vq(vq); =20 - if (sve =3D=3D NULL) { - fprintf(stderr, "risu_reginfo_aarch64: failed to get SVE state= \n"); + if (test_za) { + if (za =3D=3D NULL) { + /* ZA_MAGIC is supposed to be present, even if empty. */ + fprintf(stderr, "risu_reginfo_aarch64: missing ZA state\n"); return; } + assert(za->head.size >=3D ZA_SIG_CONTEXT_SIZE(0)); =20 - if (sve->vl !=3D sve_vl_from_vq(vq)) { + if (za->vl !=3D ri->sve_vl) { fprintf(stderr, "risu_reginfo_aarch64: " - "unexpected SVE state: %d !=3D %d\n", - sve->vl, sve_vl_from_vq(vq)); + "unexpected ZA VQ: %d !=3D %d\n", + za->vl, ri->sve_vl); + return; + } + if (za->head.size =3D=3D ZA_SIG_CONTEXT_SIZE(0)) { + /* ZA storage is disabled. */ + } else if (za->head.size < ZA_SIG_CONTEXT_SIZE(vq)) { + fprintf(stderr, "risu_reginfo_aarch64: " + "failed to get complete ZA state\n"); + return; + } else { + ri->svcr |=3D SVCR_ZA; + memcpy(reginfo_zav(ri, vq, 0), (char *)za + ZA_SIG_REGS_OFFSET, + ZA_SIG_CONTEXT_SIZE(vq) - ZA_SIG_REGS_OFFSET); + } + } + + if (test_sve) { + if (sve =3D=3D NULL) { + /* SVE_MAGIC is supposed to be present, even if empty. */ + fprintf(stderr, "risu_reginfo_aarch64: missing SVE state\n"); return; } =20 + if (sve->vl !=3D ri->sve_vl) { + fprintf(stderr, "risu_reginfo_aarch64: " + "unexpected SVE VQ: %d !=3D %d\n", + sve->vl, ri->sve_vl); + return; + } + + ri->svcr |=3D sve->flags & SVE_SIG_FLAG_SM; if (sve->head.size <=3D SVE_SIG_CONTEXT_SIZE(0)) { /* Only AdvSIMD state is present. */ } else if (sve->head.size < SVE_SIG_CONTEXT_SIZE(vq)) { @@ -156,7 +241,6 @@ void reginfo_init(struct reginfo *ri, ucontext_t *uc) "failed to get complete SVE state\n"); return; } else { - ri->sve_vl =3D sve->vl; memcpy(reginfo_zreg(ri, vq, 0), (char *)sve + SVE_SIG_REGS_OFFSET, SVE_SIG_REGS_SIZE(vq)); @@ -164,7 +248,18 @@ void reginfo_init(struct reginfo *ri, ucontext_t *uc) } } =20 - memcpy(reginfo_vreg(ri, 0), fp->vregs, RISU_SIMD_REGS_SIZE); + /* + * Be prepared for ZA state present but SVE state absent (VQ !=3D 0). + * In which case, copy AdvSIMD vregs into the low portion of zregs; + * pregs remain all zero. + */ + if (vq =3D=3D 0) { + memcpy(reginfo_vreg(ri, 0), fp->vregs, RISU_SIMD_REGS_SIZE); + } else { + for (i =3D 0; i < 32; ++i) { + memcpy(reginfo_zreg(ri, vq, i), &fp->vregs[i], 16); + } + } } =20 /* reginfo_is_eq: compare the reginfo structs, returns nonzero if equal */ @@ -248,9 +343,11 @@ void reginfo_dump(struct reginfo *ri, FILE * f) fprintf(f, " fpcr : %08x\n", ri->fpcr); =20 if (ri->sve_vl) { - int vq =3D sve_vq_from_vl(ri->sve_vl); + int vl =3D ri->sve_vl; + int vq =3D sve_vq_from_vl(vl); =20 - fprintf(f, " vl : %d\n", ri->sve_vl); + fprintf(f, " vl : %d\n", vl); + fprintf(f, " svcr : %d\n", ri->svcr); =20 for (i =3D 0; i < SVE_NUM_ZREGS; i++) { uint64_t *z =3D reginfo_zreg(ri, vq, i); @@ -270,6 +367,14 @@ void reginfo_dump(struct reginfo *ri, FILE * f) sve_dump_preg(f, vq, p); fprintf(f, "\n"); } + + if (ri->svcr & SVCR_ZA) { + for (i =3D 0; i < vl; ++i) { + uint64_t *z =3D reginfo_zav(ri, vq, i); + fprintf(f, " ZA[%-3d]: ", i); + sve_dump_zreg(f, vq, z); + } + } return; } =20 @@ -322,6 +427,10 @@ void reginfo_dump_mismatch(struct reginfo *m, struct r= eginfo *a, FILE * f) fprintf(f, " vl : %d vs %d\n", m->sve_vl, a->sve_vl); } =20 + if (m->svcr !=3D a->svcr) { + fprintf(f, " svcr : %d vs %d\n", m->svcr, a->svcr); + } + if (m->sve_vl) { int vq =3D sve_vq_from_vl(m->sve_vl); =20 @@ -347,6 +456,18 @@ void reginfo_dump_mismatch(struct reginfo *m, struct r= eginfo *a, FILE * f) sve_dump_preg_diff(f, vq, pm, pa); } } + + if (m->svcr & a->svcr & SVCR_ZA) { + for (i =3D 0; i < vq * 16; i++) { + uint64_t *zm =3D reginfo_zav(m, vq, i); + uint64_t *za =3D reginfo_zav(a, vq, i); + + if (!sve_zreg_is_eq(vq, zm, za)) { + fprintf(f, " ZA[%-3d]: ", i); + sve_dump_zreg_diff(f, vq, zm, za); + } + } + } return; } =20 --=20 2.34.1 From nobody Fri May 17 13:55:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1657300469; cv=none; d=zohomail.com; s=zohoarc; b=IlxTilwavFzKHTEt9LVBZiOFlTjcpR7PWAHHnIxCBXesqumUeKRZzon0Cs8bfc+Jo6H0ubYxBXd1ToV+PSQUhKATWs34ylIlv+qZmDCxffPDG0ZXZt/DIjMhh8XW7/wIjXaqumqGkD58lZ5aeHRTcudUqdSITdCC0nPpY1F8jeM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657300469; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=tDlq7Gwmx8RjkvitHJnXFST75wSJBtl/6C34V4BWgAA=; b=gwIMbYfp6fDuPcqJqZs+Id9gRuPlGUxsN/BXHgKl1kXeOTkcKANyvAl3QT4DE2ahF3S2rix20jUa4qBnikGSGYpHRX+RrzPU8VjljW17ZSFwnOCmF6phJr0bJ+mqtZSc3mkvnd/ZfFbQLpwbioyNXvWEke1sEZDOpR88tq65G0s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657300469227612.4727145899179; Fri, 8 Jul 2022 10:14:29 -0700 (PDT) Received: from localhost ([::1]:38728 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o9rYg-00027R-CL for importer@patchew.org; Fri, 08 Jul 2022 13:14:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45476) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o9qDd-00072v-2Z for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:37 -0400 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]:36520) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o9qDb-0002d6-G7 for qemu-devel@nongnu.org; Fri, 08 Jul 2022 11:48:36 -0400 Received: by mail-pl1-x62a.google.com with SMTP id m2so16684030plx.3 for ; Fri, 08 Jul 2022 08:48:35 -0700 (PDT) Received: from stoup.. ([122.255.60.245]) by smtp.gmail.com with ESMTPSA id y3-20020a17090a390300b001ef81bac701sm1782089pjb.42.2022.07.08.08.48.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jul 2022 08:48:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=tDlq7Gwmx8RjkvitHJnXFST75wSJBtl/6C34V4BWgAA=; b=G7+mIjoXub1NheYWmd06XLVXHaJz5wicH2cKKE3fyO49E2kltVlkfxZSk44pgDXa/u RFRwnmnPq2KB32DgvCx1bi4urniouKay2rqJCv77Kd/ILWff16d3subaDknaMjJM6o8q byJD6mrSIw1ZgXT4QsBG52TgIlqCHLWzmVOuaj4sYA0cod6/eh3h0CIh0JZRsX59q5jP oB5e7HPXjkk+vqnfs/hjmeZX7I4lnYkCyJJlGE5obU8HC4Gd6y4BTRJcENLqM1UHH+Oy hCkB5jgfCDXXMBxTiijzjecy66CdCguugfWL4jzxta5qgeUR9NZLnObMj2NJN/WMjblf ydQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=tDlq7Gwmx8RjkvitHJnXFST75wSJBtl/6C34V4BWgAA=; b=PtBcDj2n4u2D3r7mezQ5SV9i431s70axVuYsNXTOrRYqh09lsRo7mFVbJDJh3kV5Zb 8/sfWceqWmbcghc8da24WHCC/3uSPG/hEvPz+2JzSzpy3VmYGycIzXTzgyRELyBxBGWj pL49rfmDg4SS9Jq34dB0Lx7YvydD/Njf78Xr/qJGCTiODrDszwIkK+TDMBgAebyREubV OpcdjGfqn2lg7E7TL6kZInNbITny7x4GPFf28ynBureOjYg+2cxN8D9XOreRaP71HQoe S4AiR+x5vOk0EBx5405y2pNyh4as8uFUrXd0KuN4Ubhel75QMXe5esM+QKVNgZ+HCC9c EbSQ== X-Gm-Message-State: AJIora8i8LFobKIT6rmdmfdj9PuUpynijdwOuZW4n4wNTP+B6uKwQpWQ WV4tUVYVPBaVJy6yn4OC0oBZm6lo6HnBMyIx X-Google-Smtp-Source: AGRyM1vrGlEr90v8ZPOYN6w9xF5QRwTvQXsc93MSL3Xwo1TwiLQu2EOacwuPZg/GQh/2X2kf9VpcTw== X-Received: by 2002:a17:902:d707:b0:16b:e35e:abd4 with SMTP id w7-20020a170902d70700b0016be35eabd4mr4275451ply.111.1657295314262; Fri, 08 Jul 2022 08:48:34 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [RISU PATCH v4 29/29] aarch64: Trivial SME test Date: Fri, 8 Jul 2022 21:17:00 +0530 Message-Id: <20220708154700.18682-30-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220708154700.18682-1-richard.henderson@linaro.org> References: <20220708154700.18682-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62a; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1657300472619100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- test_sme_aarch64.s | 55 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 test_sme_aarch64.s diff --git a/test_sme_aarch64.s b/test_sme_aarch64.s new file mode 100644 index 0000000..a5ef909 --- /dev/null +++ b/test_sme_aarch64.s @@ -0,0 +1,55 @@ + .arch_extension sme + + mov w0, #0 + mov w1, #0 + mov w2, #0 + mov w3, #0 + mov w4, #0 + mov w5, #0 + mov w6, #0 + mov w7, #0 + mov w8, #0 + mov w9, #0 + mov w10, #0 + mov w11, #0 + mov w12, #0 + mov w13, #0 + mov w14, #0 + mov w15, #0 + mov w16, #0 + mov w17, #0 + mov w18, #0 + mov w19, #0 + mov w20, #0 + mov w21, #0 + mov w22, #0 + mov w23, #0 + mov w24, #0 + mov w25, #0 + mov w26, #0 + mov w27, #0 + mov w28, #0 + mov w29, #0 + mov w30, #0 + + smstart + + ptrue p0.b + rdsvl x12, #1 + +0: subs w12, w12, #1 + lsl w13, w12, #4 + index z0.b, w13, #1 + mova za0h.b[w12, #0], p0/m, z0.b + b.ne 0b + + .inst 0x00005af0 /* compare */ + + rdsvl x12, #1 +0: subs w12, w12, #1 + lsl w13, w12, #4 + index z0.b, w13, #1 + mova za0v.b[w12, #0], p0/m, z0.b + b.ne 0b + + .inst 0x00005af1 /* exit */ --=20 2.34.1