From patchwork Fri Jul 5 00:34:15 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pierrick Bouvier X-Patchwork-Id: 810344 Delivered-To: patch@linaro.org Received: by 2002:adf:a199:0:b0:367:895a:4699 with SMTP id u25csp1388112wru; Thu, 4 Jul 2024 17:35:15 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVLZaFNYitI9dJEIe80xCDhZSGHqcbfKINqelBQNg9i7ZPoxGGStEGdcr2l9f/ItyuPre+ma3woParsrNGiIrIs X-Google-Smtp-Source: AGHT+IH03nc8m70QTtqRSoKdGsyVPZrd7n3a4LPQG6YmMMlIhX02xlh7DuFV6xQjOMEhZwEPE1PB X-Received: by 2002:ad4:5ca8:0:b0:6b5:213e:c30e with SMTP id 6a1803df08f44-6b5ed034692mr42318236d6.45.1720139715453; Thu, 04 Jul 2024 17:35:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1720139715; cv=none; d=google.com; s=arc-20160816; b=Uyk3v2y3BhtZqpiIPXhP/c7ymXO8w7hmnDzjn6k18PXV0Oqrupj1PyeO20NsyembhF otLN8LYdKK3cL3Ev7fx1KRaXCnpmwQ6d8IgrUz9gI9mKPogqNWPhm5mtWeaJfKoczyCk +y6ZVj5pe97Lg0FtetT33UR4j2h3VpjKi/QsQqXExlFRF1CoW+S5p0eCifxz90Yahuj3 iYuf8tnWxrzsaAA1x8cmK+j4A26ekG+yNiSrXZpWdU74v1igYkSM9x8Pyb+/iY8/T9iD xDtB15iiD6A6qbtzu1/A83ARJCY7OOKAIbWr/DEqbgttZYnzak8cx3Q4HlnXwf7KIR15 zPnA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=h1iFjXkNAAiUT1/HXJR1NSUSkejcZSCzgqp885X9UqQ=; fh=bvAuOvh1AKvMo7NXObJGN9xe0u3hHEkijA6HXPQQm8c=; b=NNWnUCnT5ToXL1KOWaxofy8E10Yfg+mQPKsppvoyew5zd7fc/0TYkph0SDhGa5IWCD TVqrUJG1qyq+9A1IgjyuGxYLyhso7eYFIsNRCACaQobjGN5d3/u5rCFxuCOU/0abuxM3 DFA27dL6GO9mAHtZpexi1lAi/oOnqBjZfqda1QC6inYMvZURKLvbQU51I4dY8GhcYSea MiIqia72LqMu0ZErkha7BITQnxCXiI9vA1UvpzYGHNJ9EZuXWcTYjCQdcg3+CEeH36Z6 NC183EaC4UzC5t2AJ+qGptvl0FeoHn6YI4E5/kPTCqTmeMSJMkgHJxrAAiX530TDlUDB 0Eqw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=eD4XBSFp; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id 6a1803df08f44-6b5f20bbb4esi12994876d6.218.2024.07.04.17.35.15 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 04 Jul 2024 17:35:15 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=eD4XBSFp; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sPWuW-0002qv-BF; Thu, 04 Jul 2024 20:34:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sPWuU-0002qW-UH for qemu-devel@nongnu.org; Thu, 04 Jul 2024 20:34:47 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1sPWuT-00005m-GE for qemu-devel@nongnu.org; Thu, 04 Jul 2024 20:34:46 -0400 Received: by mail-pl1-x62e.google.com with SMTP id d9443c01a7336-1fb472eacf4so1480695ad.1 for ; Thu, 04 Jul 2024 17:34:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1720139682; x=1720744482; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=h1iFjXkNAAiUT1/HXJR1NSUSkejcZSCzgqp885X9UqQ=; b=eD4XBSFpAs7y3Ufc8Gm8AsEe4iKkEAv/bkM7Dm4nn2sohe65wfajiK/PUyem1okib4 1aKgjvgN2vir1mydEqCpE9RVEmMnqeMUbl7RxSfGM0A7n6YR9jvDKzPs8qhUYBioQBHc WhCXSgzSWI+MgAtH2RNTXVSg87bDTMsJsDhPmj/frnO47VrfOtfps9+nyAHmaGe9UDdx /yAHrAj/qAbzDO4zQrw3s1lBYVOZ9JYZGwwSuywxPpknIr8sLNBMzDnSNuChrBxyWX6m CO1I+iWzyP7XplcCuRgZEnsfXbpED7N/YJNHRmxdf0305+8dkVwF3RvTtigLq6fRqi6G XolA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1720139682; x=1720744482; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=h1iFjXkNAAiUT1/HXJR1NSUSkejcZSCzgqp885X9UqQ=; b=u+1pRWpwu7fRW3qfpU1CRdFA4hzz4hgTJeNah77s4YC3gQGhCU8T/h2W1tcxQhqQrK 6mnhog/19o5qvB+Qj6W/PQaounrwc3S3nPCg2Dk5WGUDrOrSiEgUPANPFylVuBlQY2FD IbEThNLkVdoYfCokYyd9aiA5+mOoD9DFoLVxn/KTC2XN3FrqaZw+ULi/63+PEfVeiba2 pG4ieIV4i1E6R2UgN8IkiIjkfX7sEzNmKlH6nZgb1f3Z9BSvfFtQzCLpkNNIkv7pYeNt b/Izk+KqCLovThHt3XTQLmZPSuw7L6tNKzf8Jfqvh2DiFnBrJdrNcdSALPKxYxdXaQbX olfg== X-Gm-Message-State: AOJu0YylzvREgywqHncK/SF8I9u6BuMPxhtS8mXaNiSVhI1kxYBxfeRq qFfsytB/fCegdkG2KTeUE2rm2GTZFHqQVQD7OT8Pwy05TLe2MjduUCfyG1G3q40rImTO9HlWOsd WKn0= X-Received: by 2002:a17:903:244a:b0:1f7:345a:e23d with SMTP id d9443c01a7336-1fb33e7ef9emr26496615ad.31.1720139682084; Thu, 04 Jul 2024 17:34:42 -0700 (PDT) Received: from linaro.vn.shawcable.net ([2604:3d08:9384:1d00::2193]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-1fb1a075616sm39008595ad.15.2024.07.04.17.34.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Jul 2024 17:34:41 -0700 (PDT) From: Pierrick Bouvier To: qemu-devel@nongnu.org Cc: Alexandre Iooss , Richard Henderson , Marcel Apfelbaum , Pierrick Bouvier , =?utf-8?q?Alex_Benn=C3=A9e?= , Paolo Bonzini , Yanan Wang , Mahmoud Mandour , Eduardo Habkost , =?utf-8?q?Philippe_Mathieu-Daud?= =?utf-8?q?=C3=A9?= , Xingtao Yao Subject: [PATCH v5 1/7] plugins: fix mem callback array size Date: Thu, 4 Jul 2024 17:34:15 -0700 Message-Id: <20240705003421.750895-2-pierrick.bouvier@linaro.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240705003421.750895-1-pierrick.bouvier@linaro.org> References: <20240705003421.750895-1-pierrick.bouvier@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::62e; envelope-from=pierrick.bouvier@linaro.org; helo=mail-pl1-x62e.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 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+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org data was correctly copied, but size of array was not set (g_array_sized_new only reserves memory, but does not set size). As a result, callbacks were not called for code path relying on plugin_register_vcpu_mem_cb(). Found when trying to trigger mem access callbacks for atomic instructions. Reviewed-by: Xingtao Yao Reviewed-by: Richard Henderson Signed-off-by: Pierrick Bouvier --- accel/tcg/plugin-gen.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/accel/tcg/plugin-gen.c b/accel/tcg/plugin-gen.c index b6bae32b997..ec89a085b43 100644 --- a/accel/tcg/plugin-gen.c +++ b/accel/tcg/plugin-gen.c @@ -85,8 +85,7 @@ static void gen_enable_mem_helper(struct qemu_plugin_tb *ptb, len = insn->mem_cbs->len; arr = g_array_sized_new(false, false, sizeof(struct qemu_plugin_dyn_cb), len); - memcpy(arr->data, insn->mem_cbs->data, - len * sizeof(struct qemu_plugin_dyn_cb)); + g_array_append_vals(arr, insn->mem_cbs->data, len); qemu_plugin_add_dyn_cb_arr(arr); tcg_gen_st_ptr(tcg_constant_ptr((intptr_t)arr), tcg_env, From patchwork Fri Jul 5 00:34:16 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pierrick Bouvier X-Patchwork-Id: 810347 Delivered-To: patch@linaro.org Received: by 2002:adf:a199:0:b0:367:895a:4699 with SMTP id u25csp1388301wru; Thu, 4 Jul 2024 17:35:52 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWXPtj2KE3zAiwn+XCFdHm9L3I/hacmEGn5oLW6ydSiqVUDJIAc6XZC0ACt77mR6xS3kkEjTaDwoHB1f+xhRlZH X-Google-Smtp-Source: AGHT+IG36W417txqFVqZWlevY9Vd0VM+q99pnYNpP4u/fKck/YUUGNalSXbnEcIMAdVMVjC+XSQi X-Received: by 2002:a05:620a:31a4:b0:79a:2fcb:ed4f with SMTP id af79cd13be357-79eee1a5875mr404602685a.13.1720139752153; Thu, 04 Jul 2024 17:35:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1720139752; cv=none; d=google.com; s=arc-20160816; b=NXD5+Hfgq5C7GZtRZMOM4IXvYLkjfllOREFWSdWbHcUkj72b1NW7wbyyujKx4TweEK x5QnqdH8SQXD7sNSnGGn7rmIjFnigx8so308szHanINU8XeLs3AWeFql5nJkibQTXDf6 YaMvMQJJqRtjMzI2WKdnYyhdPWTIhcr42tKAEpx7NtHc7usIZGqxkjnx9Q0W9Whoxxl9 fOYquJ1CEiMuSkCzhBbufLLJCpH6uYEraOBMVg2oLg5SRB+7IqErM6XBd3aOpwLIxv2M HxvYgFcWGOmPOhgGNJDqf4Qmq/xk//Mt4FLJq+EXELXy5OyphiwXj8X+ajBFOUXvFEs6 FrXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=yOP79DkfK/fAVcgsdZKxRrcYS8Q5/qCqkdMA5kudYBI=; fh=2IzZKSAfkxDgXTtM7kFa1jWu0SUssVJhWA7cdsHH2KE=; b=saG9QAtKD1Y8Y9ps831Xbx+inEIu9Se1kmyU5rVwyxPWPxiZhAHIukSaRs9OUINsRA bMUTGC2O15Ph5qhQx+p9wCIYPCWM36G/4sUUEKqITwO9sqrG4EyK/NIl2aD5GZM9MQ0J oRQOoYjQrSeBBkuKHW0fuGAOZAMndDRRQtb8Iy7QyBbBBwguzLB8fTi2KzYWeVArwCp5 hD58xBPaiXNzLdJTKksha5i1mXeW4GvmFxQwdV0szmSk5D+WQTlt6vgM1hZCNWkHcsjy 7H72EuXwkdA1JjXlF5DMsr24+E6vtOcbLkWQcSzvLAGyJsdA2pB6YQ5qoG8thpn9Pmck VKqA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=LRJwnd2i; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id af79cd13be357-79d69261f61si1687974385a.134.2024.07.04.17.35.51 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 04 Jul 2024 17:35:52 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=LRJwnd2i; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sPWue-0002s6-Bt; Thu, 04 Jul 2024 20:34:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sPWuc-0002rN-8Z for qemu-devel@nongnu.org; Thu, 04 Jul 2024 20:34:54 -0400 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1sPWuV-000062-Q2 for qemu-devel@nongnu.org; Thu, 04 Jul 2024 20:34:54 -0400 Received: by mail-pl1-x635.google.com with SMTP id d9443c01a7336-1fb1c69e936so6506725ad.3 for ; Thu, 04 Jul 2024 17:34:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1720139685; x=1720744485; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=yOP79DkfK/fAVcgsdZKxRrcYS8Q5/qCqkdMA5kudYBI=; b=LRJwnd2iEaxN65l0ERWzs4/ge2aol7lcPWQqSRmyQm1iohnQY62/EUIAIuVoGrX5qh 6ycbM4fcZ0FObXxqQn3SbuiD6z1EQM7OEcW6PKbj1WYm4gjHWpn1lmGWv41CXu3sDrHV 3L6UfKoLiAuhQh8fSDEndhcnQBhF1bCdZ7X8h2Ob2f34v+eDGlLAZSBOGVHNF/NR8VWM JgA4zvbO2W5quhFSAoRXB7mz7/5u00w2zIMedS3f4MCZWhSa8bA2GQe9LIg1DhEhiZS7 REEBcAI+YQruAWmvYnmVx+MLukVk44r6HUsP17/8YIwoGqKap9+ZHf3rpBhBht74alZu iEsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1720139685; x=1720744485; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=yOP79DkfK/fAVcgsdZKxRrcYS8Q5/qCqkdMA5kudYBI=; b=sKrCbXMdZjNzpaqPqSI1F+qmOew7OmTnOD5/4437Wx9nVioMlBmFljExb0Ye4Dn29h MknWR4fvo2mPzJr33cskgE08YD2Tb3btGb8GOVOOBoQHBoskCud7wj8KSd98txlT9GV8 8h2+jkYcW5/meMC78ZWbdZv30Yhea9Ca0C9Gd5FlW45XLqt+up6YiR8uToXQePatDnFx 0s+ft9g+EXAaie0K4GgGhnUstboamF3bGl0aRFnlTkzoc4Oo/XPgLugAMxOpI0MPY5TE O2e3S3y5zxM8HHr62sGWFrZauwfinugan5stBIfHXwyq5Qxt5Db0whqiINfFTZ6icAsC z+gg== X-Gm-Message-State: AOJu0Yy9sLBjJX8LjltXelEfBbBPib+pr9DYVIg1lNhPoW5Tp5isfLGL uS4oaGjmy5/rU6quy3nl/OJW0ag+I4IZxqyZaat066yVS35lsYVS6KRTyjUf/e1RHmbPHROxiG2 IPPM= X-Received: by 2002:a17:902:d4cb:b0:1fb:3735:af84 with SMTP id d9443c01a7336-1fb3735b2c5mr19910635ad.67.1720139685346; Thu, 04 Jul 2024 17:34:45 -0700 (PDT) Received: from linaro.vn.shawcable.net ([2604:3d08:9384:1d00::2193]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-1fb1a075616sm39008595ad.15.2024.07.04.17.34.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Jul 2024 17:34:44 -0700 (PDT) From: Pierrick Bouvier To: qemu-devel@nongnu.org Cc: Alexandre Iooss , Richard Henderson , Marcel Apfelbaum , Pierrick Bouvier , =?utf-8?q?Alex_Benn=C3=A9e?= , Paolo Bonzini , Yanan Wang , Mahmoud Mandour , Eduardo Habkost , =?utf-8?q?Philippe_Mathieu-Daud?= =?utf-8?q?=C3=A9?= Subject: [PATCH v5 2/7] plugins: save value during memory accesses Date: Thu, 4 Jul 2024 17:34:16 -0700 Message-Id: <20240705003421.750895-3-pierrick.bouvier@linaro.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240705003421.750895-1-pierrick.bouvier@linaro.org> References: <20240705003421.750895-1-pierrick.bouvier@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::635; envelope-from=pierrick.bouvier@linaro.org; helo=mail-pl1-x635.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 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+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org Different code paths handle memory accesses: - tcg generated code - load/store helpers - atomic helpers This value is saved in cpu->neg.plugin_mem_value_{high,low}. Values are written only for accessed word size (upper bits are not set). Atomic operations are doing read/write at the same time, so we generate two memory callbacks instead of one, to allow plugins to access distinct values. For now, we can have access only up to 128 bits, thus split this in two 64 bits words. When QEMU will support wider operations, we'll be able to reconsider this. Reviewed-by: Richard Henderson Signed-off-by: Pierrick Bouvier --- accel/tcg/atomic_template.h | 66 ++++++++++++++++++++++++++++++----- include/hw/core/cpu.h | 4 +++ include/qemu/plugin.h | 4 +++ plugins/core.c | 6 ++++ tcg/tcg-op-ldst.c | 66 +++++++++++++++++++++++++++++++---- accel/tcg/atomic_common.c.inc | 13 ++++++- accel/tcg/ldst_common.c.inc | 38 ++++++++++++-------- 7 files changed, 167 insertions(+), 30 deletions(-) diff --git a/accel/tcg/atomic_template.h b/accel/tcg/atomic_template.h index 1dc2151dafd..89593b2502f 100644 --- a/accel/tcg/atomic_template.h +++ b/accel/tcg/atomic_template.h @@ -53,6 +53,14 @@ # error unsupported data size #endif +#if DATA_SIZE == 16 +# define VALUE_LOW(val) int128_getlo(val) +# define VALUE_HIGH(val) int128_gethi(val) +#else +# define VALUE_LOW(val) val +# define VALUE_HIGH(val) 0 +#endif + #if DATA_SIZE >= 4 # define ABI_TYPE DATA_TYPE #else @@ -83,7 +91,12 @@ ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, abi_ptr addr, ret = qatomic_cmpxchg__nocheck(haddr, cmpv, newv); #endif ATOMIC_MMU_CLEANUP; - atomic_trace_rmw_post(env, addr, oi); + atomic_trace_rmw_post(env, addr, + VALUE_LOW(ret), + VALUE_HIGH(ret), + VALUE_LOW(newv), + VALUE_HIGH(newv), + oi); return ret; } @@ -97,7 +110,12 @@ ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, abi_ptr addr, ABI_TYPE val, ret = qatomic_xchg__nocheck(haddr, val); ATOMIC_MMU_CLEANUP; - atomic_trace_rmw_post(env, addr, oi); + atomic_trace_rmw_post(env, addr, + VALUE_LOW(ret), + VALUE_HIGH(ret), + VALUE_LOW(val), + VALUE_HIGH(val), + oi); return ret; } @@ -109,7 +127,12 @@ ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, abi_ptr addr, \ haddr = atomic_mmu_lookup(env_cpu(env), addr, oi, DATA_SIZE, retaddr); \ ret = qatomic_##X(haddr, val); \ ATOMIC_MMU_CLEANUP; \ - atomic_trace_rmw_post(env, addr, oi); \ + atomic_trace_rmw_post(env, addr, \ + VALUE_LOW(ret), \ + VALUE_HIGH(ret), \ + VALUE_LOW(val), \ + VALUE_HIGH(val), \ + oi); \ return ret; \ } @@ -145,7 +168,12 @@ ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, abi_ptr addr, \ cmp = qatomic_cmpxchg__nocheck(haddr, old, new); \ } while (cmp != old); \ ATOMIC_MMU_CLEANUP; \ - atomic_trace_rmw_post(env, addr, oi); \ + atomic_trace_rmw_post(env, addr, \ + VALUE_LOW(old), \ + VALUE_HIGH(old), \ + VALUE_LOW(xval), \ + VALUE_HIGH(xval), \ + oi); \ return RET; \ } @@ -188,7 +216,12 @@ ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, abi_ptr addr, ret = qatomic_cmpxchg__nocheck(haddr, BSWAP(cmpv), BSWAP(newv)); #endif ATOMIC_MMU_CLEANUP; - atomic_trace_rmw_post(env, addr, oi); + atomic_trace_rmw_post(env, addr, + VALUE_LOW(ret), + VALUE_HIGH(ret), + VALUE_LOW(newv), + VALUE_HIGH(newv), + oi); return BSWAP(ret); } @@ -202,7 +235,12 @@ ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, abi_ptr addr, ABI_TYPE val, ret = qatomic_xchg__nocheck(haddr, BSWAP(val)); ATOMIC_MMU_CLEANUP; - atomic_trace_rmw_post(env, addr, oi); + atomic_trace_rmw_post(env, addr, + VALUE_LOW(ret), + VALUE_HIGH(ret), + VALUE_LOW(val), + VALUE_HIGH(val), + oi); return BSWAP(ret); } @@ -214,7 +252,12 @@ ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, abi_ptr addr, \ haddr = atomic_mmu_lookup(env_cpu(env), addr, oi, DATA_SIZE, retaddr); \ ret = qatomic_##X(haddr, BSWAP(val)); \ ATOMIC_MMU_CLEANUP; \ - atomic_trace_rmw_post(env, addr, oi); \ + atomic_trace_rmw_post(env, addr, \ + VALUE_LOW(ret), \ + VALUE_HIGH(ret), \ + VALUE_LOW(val), \ + VALUE_HIGH(val), \ + oi); \ return BSWAP(ret); \ } @@ -247,7 +290,12 @@ ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, abi_ptr addr, \ ldn = qatomic_cmpxchg__nocheck(haddr, ldo, BSWAP(new)); \ } while (ldo != ldn); \ ATOMIC_MMU_CLEANUP; \ - atomic_trace_rmw_post(env, addr, oi); \ + atomic_trace_rmw_post(env, addr, \ + VALUE_LOW(old), \ + VALUE_HIGH(old), \ + VALUE_LOW(xval), \ + VALUE_HIGH(xval), \ + oi); \ return RET; \ } @@ -281,3 +329,5 @@ GEN_ATOMIC_HELPER_FN(add_fetch, ADD, DATA_TYPE, new) #undef SUFFIX #undef DATA_SIZE #undef SHIFT +#undef VALUE_LOW +#undef VALUE_HIGH diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h index a2c8536943f..e92cba049fd 100644 --- a/include/hw/core/cpu.h +++ b/include/hw/core/cpu.h @@ -350,6 +350,8 @@ typedef union IcountDecr { * from CPUArchState, via small negative offsets. * @can_do_io: True if memory-mapped IO is allowed. * @plugin_mem_cbs: active plugin memory callbacks + * @plugin_mem_value_low: 64 lower bits of latest accessed mem value. + * @plugin_mem_value_high: 64 higher bits of latest accessed mem value. */ typedef struct CPUNegativeOffsetState { CPUTLB tlb; @@ -358,6 +360,8 @@ typedef struct CPUNegativeOffsetState { * The callback pointer are accessed via TCG (see gen_empty_mem_helper). */ GArray *plugin_mem_cbs; + uint64_t plugin_mem_value_low; + uint64_t plugin_mem_value_high; #endif IcountDecr icount_decr; bool can_do_io; diff --git a/include/qemu/plugin.h b/include/qemu/plugin.h index bc5aef979e7..a67f23c745e 100644 --- a/include/qemu/plugin.h +++ b/include/qemu/plugin.h @@ -164,6 +164,8 @@ qemu_plugin_vcpu_syscall(CPUState *cpu, int64_t num, uint64_t a1, void qemu_plugin_vcpu_syscall_ret(CPUState *cpu, int64_t num, int64_t ret); void qemu_plugin_vcpu_mem_cb(CPUState *cpu, uint64_t vaddr, + uint64_t value_low, + uint64_t value_high, MemOpIdx oi, enum qemu_plugin_mem_rw rw); void qemu_plugin_flush_cb(void); @@ -248,6 +250,8 @@ void qemu_plugin_vcpu_syscall_ret(CPUState *cpu, int64_t num, int64_t ret) { } static inline void qemu_plugin_vcpu_mem_cb(CPUState *cpu, uint64_t vaddr, + uint64_t value_low, + uint64_t value_high, MemOpIdx oi, enum qemu_plugin_mem_rw rw) { } diff --git a/plugins/core.c b/plugins/core.c index 9d737d82787..9e3a65e38db 100644 --- a/plugins/core.c +++ b/plugins/core.c @@ -575,6 +575,8 @@ void exec_inline_op(enum plugin_dyn_cb_type type, } void qemu_plugin_vcpu_mem_cb(CPUState *cpu, uint64_t vaddr, + uint64_t value_low, + uint64_t value_high, MemOpIdx oi, enum qemu_plugin_mem_rw rw) { GArray *arr = cpu->neg.plugin_mem_cbs; @@ -583,6 +585,10 @@ void qemu_plugin_vcpu_mem_cb(CPUState *cpu, uint64_t vaddr, if (arr == NULL) { return; } + + cpu->neg.plugin_mem_value_low = value_low; + cpu->neg.plugin_mem_value_high = value_high; + for (i = 0; i < arr->len; i++) { struct qemu_plugin_dyn_cb *cb = &g_array_index(arr, struct qemu_plugin_dyn_cb, i); diff --git a/tcg/tcg-op-ldst.c b/tcg/tcg-op-ldst.c index 85101602581..f04ea40ecbc 100644 --- a/tcg/tcg-op-ldst.c +++ b/tcg/tcg-op-ldst.c @@ -148,11 +148,11 @@ static TCGv_i64 plugin_maybe_preserve_addr(TCGTemp *addr) return NULL; } +#ifdef CONFIG_PLUGIN static void plugin_gen_mem_callbacks(TCGv_i64 copy_addr, TCGTemp *orig_addr, MemOpIdx oi, enum qemu_plugin_mem_rw rw) { -#ifdef CONFIG_PLUGIN if (tcg_ctx->plugin_insn != NULL) { qemu_plugin_meminfo_t info = make_plugin_meminfo(oi, rw); @@ -172,6 +172,54 @@ plugin_gen_mem_callbacks(TCGv_i64 copy_addr, TCGTemp *orig_addr, MemOpIdx oi, } } } +} +#endif + +static void +plugin_gen_mem_callbacks_i32(TCGv_i32 val, + TCGv_i64 copy_addr, TCGTemp *orig_addr, + MemOpIdx oi, enum qemu_plugin_mem_rw rw) +{ +#ifdef CONFIG_PLUGIN + if (tcg_ctx->plugin_insn != NULL) { + tcg_gen_st_i32(val, tcg_env, + offsetof(CPUState, neg.plugin_mem_value_low) - + sizeof(CPUState)); + plugin_gen_mem_callbacks(copy_addr, orig_addr, oi, rw); + } +#endif +} + +static void +plugin_gen_mem_callbacks_i64(TCGv_i64 val, + TCGv_i64 copy_addr, TCGTemp *orig_addr, + MemOpIdx oi, enum qemu_plugin_mem_rw rw) +{ +#ifdef CONFIG_PLUGIN + if (tcg_ctx->plugin_insn != NULL) { + tcg_gen_st_i64(val, tcg_env, + offsetof(CPUState, neg.plugin_mem_value_low) - + sizeof(CPUState)); + plugin_gen_mem_callbacks(copy_addr, orig_addr, oi, rw); + } +#endif +} + +static void +plugin_gen_mem_callbacks_i128(TCGv_i128 val, + TCGv_i64 copy_addr, TCGTemp *orig_addr, + MemOpIdx oi, enum qemu_plugin_mem_rw rw) +{ +#ifdef CONFIG_PLUGIN + if (tcg_ctx->plugin_insn != NULL) { + tcg_gen_st_i64(TCGV128_LOW(val), tcg_env, + offsetof(CPUState, neg.plugin_mem_value_low) - + sizeof(CPUState)); + tcg_gen_st_i64(TCGV128_HIGH(val), tcg_env, + offsetof(CPUState, neg.plugin_mem_value_high) - + sizeof(CPUState)); + plugin_gen_mem_callbacks(copy_addr, orig_addr, oi, rw); + } #endif } @@ -203,7 +251,8 @@ static void tcg_gen_qemu_ld_i32_int(TCGv_i32 val, TCGTemp *addr, opc = INDEX_op_qemu_ld_a64_i32; } gen_ldst(opc, tcgv_i32_temp(val), NULL, addr, oi); - plugin_gen_mem_callbacks(copy_addr, addr, orig_oi, QEMU_PLUGIN_MEM_R); + plugin_gen_mem_callbacks_i32(val, copy_addr, addr, orig_oi, + QEMU_PLUGIN_MEM_R); if ((orig_memop ^ memop) & MO_BSWAP) { switch (orig_memop & MO_SIZE) { @@ -271,7 +320,7 @@ static void tcg_gen_qemu_st_i32_int(TCGv_i32 val, TCGTemp *addr, } } gen_ldst(opc, tcgv_i32_temp(val), NULL, addr, oi); - plugin_gen_mem_callbacks(NULL, addr, orig_oi, QEMU_PLUGIN_MEM_W); + plugin_gen_mem_callbacks_i32(val, NULL, addr, orig_oi, QEMU_PLUGIN_MEM_W); if (swap) { tcg_temp_free_i32(swap); @@ -324,7 +373,8 @@ static void tcg_gen_qemu_ld_i64_int(TCGv_i64 val, TCGTemp *addr, opc = INDEX_op_qemu_ld_a64_i64; } gen_ldst_i64(opc, val, addr, oi); - plugin_gen_mem_callbacks(copy_addr, addr, orig_oi, QEMU_PLUGIN_MEM_R); + plugin_gen_mem_callbacks_i64(val, copy_addr, addr, orig_oi, + QEMU_PLUGIN_MEM_R); if ((orig_memop ^ memop) & MO_BSWAP) { int flags = (orig_memop & MO_SIGN @@ -396,7 +446,7 @@ static void tcg_gen_qemu_st_i64_int(TCGv_i64 val, TCGTemp *addr, opc = INDEX_op_qemu_st_a64_i64; } gen_ldst_i64(opc, val, addr, oi); - plugin_gen_mem_callbacks(NULL, addr, orig_oi, QEMU_PLUGIN_MEM_W); + plugin_gen_mem_callbacks_i64(val, NULL, addr, orig_oi, QEMU_PLUGIN_MEM_W); if (swap) { tcg_temp_free_i64(swap); @@ -606,7 +656,8 @@ static void tcg_gen_qemu_ld_i128_int(TCGv_i128 val, TCGTemp *addr, tcg_constant_i32(orig_oi)); } - plugin_gen_mem_callbacks(ext_addr, addr, orig_oi, QEMU_PLUGIN_MEM_R); + plugin_gen_mem_callbacks_i128(val, ext_addr, addr, orig_oi, + QEMU_PLUGIN_MEM_R); } void tcg_gen_qemu_ld_i128_chk(TCGv_i128 val, TCGTemp *addr, TCGArg idx, @@ -722,7 +773,8 @@ static void tcg_gen_qemu_st_i128_int(TCGv_i128 val, TCGTemp *addr, tcg_constant_i32(orig_oi)); } - plugin_gen_mem_callbacks(ext_addr, addr, orig_oi, QEMU_PLUGIN_MEM_W); + plugin_gen_mem_callbacks_i128(val, ext_addr, addr, orig_oi, + QEMU_PLUGIN_MEM_W); } void tcg_gen_qemu_st_i128_chk(TCGv_i128 val, TCGTemp *addr, TCGArg idx, diff --git a/accel/tcg/atomic_common.c.inc b/accel/tcg/atomic_common.c.inc index 95a5c5ff12d..6056598c23d 100644 --- a/accel/tcg/atomic_common.c.inc +++ b/accel/tcg/atomic_common.c.inc @@ -14,9 +14,20 @@ */ static void atomic_trace_rmw_post(CPUArchState *env, uint64_t addr, + uint64_t read_value_low, + uint64_t read_value_high, + uint64_t write_value_low, + uint64_t write_value_high, MemOpIdx oi) { - qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, oi, QEMU_PLUGIN_MEM_RW); + if (cpu_plugin_mem_cbs_enabled(env_cpu(env))) { + qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, + read_value_low, read_value_high, + oi, QEMU_PLUGIN_MEM_R); + qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, + write_value_low, write_value_high, + oi, QEMU_PLUGIN_MEM_W); + } } /* diff --git a/accel/tcg/ldst_common.c.inc b/accel/tcg/ldst_common.c.inc index 87ceb954873..ebbf380d767 100644 --- a/accel/tcg/ldst_common.c.inc +++ b/accel/tcg/ldst_common.c.inc @@ -123,10 +123,15 @@ void helper_st_i128(CPUArchState *env, uint64_t addr, Int128 val, MemOpIdx oi) * Load helpers for cpu_ldst.h */ -static void plugin_load_cb(CPUArchState *env, abi_ptr addr, MemOpIdx oi) +static void plugin_load_cb(CPUArchState *env, abi_ptr addr, + uint64_t value_low, + uint64_t value_high, + MemOpIdx oi) { if (cpu_plugin_mem_cbs_enabled(env_cpu(env))) { - qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, oi, QEMU_PLUGIN_MEM_R); + qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, + value_low, value_high, + oi, QEMU_PLUGIN_MEM_R); } } @@ -136,7 +141,7 @@ uint8_t cpu_ldb_mmu(CPUArchState *env, abi_ptr addr, MemOpIdx oi, uintptr_t ra) tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_UB); ret = do_ld1_mmu(env_cpu(env), addr, oi, ra, MMU_DATA_LOAD); - plugin_load_cb(env, addr, oi); + plugin_load_cb(env, addr, ret, 0, oi); return ret; } @@ -147,7 +152,7 @@ uint16_t cpu_ldw_mmu(CPUArchState *env, abi_ptr addr, tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_16); ret = do_ld2_mmu(env_cpu(env), addr, oi, ra, MMU_DATA_LOAD); - plugin_load_cb(env, addr, oi); + plugin_load_cb(env, addr, ret, 0, oi); return ret; } @@ -158,7 +163,7 @@ uint32_t cpu_ldl_mmu(CPUArchState *env, abi_ptr addr, tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_32); ret = do_ld4_mmu(env_cpu(env), addr, oi, ra, MMU_DATA_LOAD); - plugin_load_cb(env, addr, oi); + plugin_load_cb(env, addr, ret, 0, oi); return ret; } @@ -169,7 +174,7 @@ uint64_t cpu_ldq_mmu(CPUArchState *env, abi_ptr addr, tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_64); ret = do_ld8_mmu(env_cpu(env), addr, oi, ra, MMU_DATA_LOAD); - plugin_load_cb(env, addr, oi); + plugin_load_cb(env, addr, ret, 0, oi); return ret; } @@ -180,7 +185,7 @@ Int128 cpu_ld16_mmu(CPUArchState *env, abi_ptr addr, tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_128); ret = do_ld16_mmu(env_cpu(env), addr, oi, ra); - plugin_load_cb(env, addr, oi); + plugin_load_cb(env, addr, int128_getlo(ret), int128_gethi(ret), oi); return ret; } @@ -188,10 +193,15 @@ Int128 cpu_ld16_mmu(CPUArchState *env, abi_ptr addr, * Store helpers for cpu_ldst.h */ -static void plugin_store_cb(CPUArchState *env, abi_ptr addr, MemOpIdx oi) +static void plugin_store_cb(CPUArchState *env, abi_ptr addr, + uint64_t value_low, + uint64_t value_high, + MemOpIdx oi) { if (cpu_plugin_mem_cbs_enabled(env_cpu(env))) { - qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, oi, QEMU_PLUGIN_MEM_W); + qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, + value_low, value_high, + oi, QEMU_PLUGIN_MEM_W); } } @@ -199,7 +209,7 @@ void cpu_stb_mmu(CPUArchState *env, abi_ptr addr, uint8_t val, MemOpIdx oi, uintptr_t retaddr) { helper_stb_mmu(env, addr, val, oi, retaddr); - plugin_store_cb(env, addr, oi); + plugin_store_cb(env, addr, val, 0, oi); } void cpu_stw_mmu(CPUArchState *env, abi_ptr addr, uint16_t val, @@ -207,7 +217,7 @@ void cpu_stw_mmu(CPUArchState *env, abi_ptr addr, uint16_t val, { tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_16); do_st2_mmu(env_cpu(env), addr, val, oi, retaddr); - plugin_store_cb(env, addr, oi); + plugin_store_cb(env, addr, val, 0, oi); } void cpu_stl_mmu(CPUArchState *env, abi_ptr addr, uint32_t val, @@ -215,7 +225,7 @@ void cpu_stl_mmu(CPUArchState *env, abi_ptr addr, uint32_t val, { tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_32); do_st4_mmu(env_cpu(env), addr, val, oi, retaddr); - plugin_store_cb(env, addr, oi); + plugin_store_cb(env, addr, val, 0, oi); } void cpu_stq_mmu(CPUArchState *env, abi_ptr addr, uint64_t val, @@ -223,7 +233,7 @@ void cpu_stq_mmu(CPUArchState *env, abi_ptr addr, uint64_t val, { tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_64); do_st8_mmu(env_cpu(env), addr, val, oi, retaddr); - plugin_store_cb(env, addr, oi); + plugin_store_cb(env, addr, val, 0, oi); } void cpu_st16_mmu(CPUArchState *env, abi_ptr addr, Int128 val, @@ -231,7 +241,7 @@ void cpu_st16_mmu(CPUArchState *env, abi_ptr addr, Int128 val, { tcg_debug_assert((get_memop(oi) & MO_SIZE) == MO_128); do_st16_mmu(env_cpu(env), addr, val, oi, retaddr); - plugin_store_cb(env, addr, oi); + plugin_store_cb(env, addr, int128_getlo(val), int128_gethi(val), oi); } /* From patchwork Fri Jul 5 00:34:17 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pierrick Bouvier X-Patchwork-Id: 810346 Delivered-To: patch@linaro.org Received: by 2002:adf:a199:0:b0:367:895a:4699 with SMTP id u25csp1388174wru; Thu, 4 Jul 2024 17:35:26 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUgj212DGtleyo9Pwp1KPjGFY0cUZ4z2W2pdgxE3f/+hyLqcJDAuvl6Dopu1+3zYoOhDGs4whAYPI+rjjq+Jum8 X-Google-Smtp-Source: AGHT+IEM13yqHJTKWQw+1XiNWWbebjnHvRK0XZlkapseSVd2Lrw+EHx9gkHz6FGj0DNkaB3tHrsa X-Received: by 2002:a05:6214:2423:b0:6b5:3f58:bb7d with SMTP id 6a1803df08f44-6b5ecf7a09fmr38506586d6.5.1720139726472; Thu, 04 Jul 2024 17:35:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1720139726; cv=none; d=google.com; s=arc-20160816; b=t61OTYglCYX7kB46PIhpUb0cmz8H8fnB6KPRYz5PGRAL+KZqa+hG4TYpTjSGwOm3Qr EKrh5cGw+8PPpC/Udp3se+eMVQWxzb3bEEeanBtXp6zOw0u4e0ozDr/IioIuCRb8saHt WPLzv9Ap1a3+zNFMHi7/qLdscZv10cr6w7RxwtPbv96b+yMU5LFfVKZ6Br9VjYst1hZ6 J+QY9ewQ6VFaaNUzJ0RI4vdzOPjT+D/SrrznMxOhhYh4++agtxyqpDhh6exH7eKle9QM ErNk6Ue1OfQf9zQvd5o3xCQgr8P+8PFS2JmWxMFtuokrXKpYJg46o/Jz5wwZTMMMEn3z J1Lg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=52Vup5Vdc05sfIMDswHWSFk4NK0aeE4AML942us+C+U=; fh=2IzZKSAfkxDgXTtM7kFa1jWu0SUssVJhWA7cdsHH2KE=; b=pScJGVJhPgE9w29XpS07Bp+Dh/m10+TgKUD7uppn01YGUGaTIM+r2ZRxxNquz4TTE3 d9OAUh71SBWzYbglEldkO+h+HlI76IGVcIXce+OeLCM+rKe1Fs0D40lwne/raDwmP8ru Lq4XewZIWeXrXBmENU9sP9CYbtsqdpdVJqn0Qd6tvL+oeeUeClt6l+JgQjYLCOxWpAcQ HbsetRTFauLWBccxFqQzdngwzAA7/HbgfsIyYYDMppqmRcQIcf72pM2MCiqw9Y/q6u+M +Nqe52lT4oYX9DhyXyPCppWI7HkvBdN3LXA6c7UWZszyLcH3lxKXbOmwxS7aQLOgfRCz TRzQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Toctc8Ls; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id 6a1803df08f44-6b5dd21151esi60311326d6.510.2024.07.04.17.35.26 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 04 Jul 2024 17:35:26 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Toctc8Ls; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sPWuc-0002rb-Tz; Thu, 04 Jul 2024 20:34:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sPWuc-0002rJ-2f for qemu-devel@nongnu.org; Thu, 04 Jul 2024 20:34:54 -0400 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1sPWuZ-00006V-UY for qemu-devel@nongnu.org; Thu, 04 Jul 2024 20:34:53 -0400 Received: by mail-pl1-x632.google.com with SMTP id d9443c01a7336-1fb0d88fdc8so5394465ad.2 for ; Thu, 04 Jul 2024 17:34:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1720139689; x=1720744489; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=52Vup5Vdc05sfIMDswHWSFk4NK0aeE4AML942us+C+U=; b=Toctc8Ls06cXO3O/ssBTSPa/f3E2r0VJlSfHgITUVb6efrJ/C5bwOO7yNfU22oWPTS EkE2tC7aDgxciEoxfUtx+aimSOUXUJyfdiSOdC+E6AWUW/MVI3m7SvafWsRgHupqWXCp pJxoRVqyXxS0lYXbULZH42bHgyd6/p4wD3VXGFoy22Uh5K5bpYHEU3K4ax0b+KtJZa+Z a/bevT1+PcktxQWoGZYQj4QoGhWiqPhifiiOGbKsZiQ/rZRZQKvwDhIH2oeHW1IBJyzf 0k3s/t9HdiBIiKOKwfPk51OK/9c6Sye8WwYcePr8CAeqS+mLliy7EJBsN/RoSz/FxCrs z/JQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1720139689; x=1720744489; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=52Vup5Vdc05sfIMDswHWSFk4NK0aeE4AML942us+C+U=; b=clI/DJd2Yivf/GTxMoFnO6Km+ToHQ6z+bVjbm0FciGiEWJe/tUsVqYk39KAibUsjQR 3xwQKBwW9ZVnaSf7kvJRKgAZRKdt2h7wUXpI4VRRYCltoTvHnnsgKFHeilcLn3JPclYt 7u8sz4SONLB/tUBnGet6v/iH2N6FXfd1kT6ohc76jU12VsEfT+wVCsfstyTjHy+2zrS3 M9rwY0IWjEaOkU0gWwLkVnYYwZ4iTTffh85kYctFebP5tG4RS3vx0ZEw+sxBQs5gzpDM UB81tIX5qoqw3sYUkJbv+i+KKOVT6Ck24wIVRpN+uekBh5x3pyUGRZEurC1+m+U/zxRO 3kJA== X-Gm-Message-State: AOJu0Yy+Z3dplkjy7iZc0QUX8xWbfx1s4zozAwJj+j+dVgVhCez/pN8+ L1mNIbQVmL6Wlez7CEVRbCuy5tufX4vsAjMxOTVaWu9x/nerUqds0MPFWvgCQX4WFhbPQ/Bg40D KXPw= X-Received: by 2002:a17:903:1212:b0:1fb:2bce:4322 with SMTP id d9443c01a7336-1fb33e0a368mr24114995ad.11.1720139689520; Thu, 04 Jul 2024 17:34:49 -0700 (PDT) Received: from linaro.vn.shawcable.net ([2604:3d08:9384:1d00::2193]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-1fb1a075616sm39008595ad.15.2024.07.04.17.34.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Jul 2024 17:34:49 -0700 (PDT) From: Pierrick Bouvier To: qemu-devel@nongnu.org Cc: Alexandre Iooss , Richard Henderson , Marcel Apfelbaum , Pierrick Bouvier , =?utf-8?q?Alex_Benn=C3=A9e?= , Paolo Bonzini , Yanan Wang , Mahmoud Mandour , Eduardo Habkost , =?utf-8?q?Philippe_Mathieu-Daud?= =?utf-8?q?=C3=A9?= Subject: [PATCH v5 3/7] plugins: extend API to get latest memory value accessed Date: Thu, 4 Jul 2024 17:34:17 -0700 Message-Id: <20240705003421.750895-4-pierrick.bouvier@linaro.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240705003421.750895-1-pierrick.bouvier@linaro.org> References: <20240705003421.750895-1-pierrick.bouvier@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::632; envelope-from=pierrick.bouvier@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 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+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org This value can be accessed only during a memory callback, using new qemu_plugin_mem_get_value function. Returned value can be extended when QEMU will support accesses wider than 128 bits. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1719 Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2152 Reviewed-by: Richard Henderson Signed-off-by: Pierrick Bouvier Reviewed-by: Xingtao Yao --- include/qemu/qemu-plugin.h | 32 ++++++++++++++++++++++++++++++++ plugins/api.c | 33 +++++++++++++++++++++++++++++++++ plugins/qemu-plugins.symbols | 1 + 3 files changed, 66 insertions(+) diff --git a/include/qemu/qemu-plugin.h b/include/qemu/qemu-plugin.h index c71c705b699..649ce89815f 100644 --- a/include/qemu/qemu-plugin.h +++ b/include/qemu/qemu-plugin.h @@ -262,6 +262,29 @@ enum qemu_plugin_mem_rw { QEMU_PLUGIN_MEM_RW, }; +enum qemu_plugin_mem_value_type { + QEMU_PLUGIN_MEM_VALUE_U8, + QEMU_PLUGIN_MEM_VALUE_U16, + QEMU_PLUGIN_MEM_VALUE_U32, + QEMU_PLUGIN_MEM_VALUE_U64, + QEMU_PLUGIN_MEM_VALUE_U128, +}; + +/* typedef qemu_plugin_mem_value - value accessed during a load/store */ +typedef struct { + enum qemu_plugin_mem_value_type type; + union { + uint8_t u8; + uint16_t u16; + uint32_t u32; + uint64_t u64; + struct { + uint64_t low; + uint64_t high; + } u128; + } data; +} qemu_plugin_mem_value; + /** * enum qemu_plugin_cond - condition to enable callback * @@ -551,6 +574,15 @@ bool qemu_plugin_mem_is_big_endian(qemu_plugin_meminfo_t info); QEMU_PLUGIN_API bool qemu_plugin_mem_is_store(qemu_plugin_meminfo_t info); +/** + * qemu_plugin_mem_get_mem_value() - return last value loaded/stored + * @info: opaque memory transaction handle + * + * Returns: memory value + */ +QEMU_PLUGIN_API +qemu_plugin_mem_value qemu_plugin_mem_get_value(qemu_plugin_meminfo_t info); + /** * qemu_plugin_get_hwaddr() - return handle for memory operation * @info: opaque memory info structure diff --git a/plugins/api.c b/plugins/api.c index 2ff13d09de6..3316d4a04d4 100644 --- a/plugins/api.c +++ b/plugins/api.c @@ -351,6 +351,39 @@ bool qemu_plugin_mem_is_store(qemu_plugin_meminfo_t info) return get_plugin_meminfo_rw(info) & QEMU_PLUGIN_MEM_W; } +qemu_plugin_mem_value qemu_plugin_mem_get_value(qemu_plugin_meminfo_t info) +{ + uint64_t low = current_cpu->neg.plugin_mem_value_low; + qemu_plugin_mem_value value; + + switch (qemu_plugin_mem_size_shift(info)) { + case 0: + value.type = QEMU_PLUGIN_MEM_VALUE_U8; + value.data.u8 = (uint8_t)low; + break; + case 1: + value.type = QEMU_PLUGIN_MEM_VALUE_U16; + value.data.u16 = (uint16_t)low; + break; + case 2: + value.type = QEMU_PLUGIN_MEM_VALUE_U32; + value.data.u32 = (uint32_t)low; + break; + case 3: + value.type = QEMU_PLUGIN_MEM_VALUE_U64; + value.data.u64 = low; + break; + case 4: + value.type = QEMU_PLUGIN_MEM_VALUE_U128; + value.data.u128.low = low; + value.data.u128.high = current_cpu->neg.plugin_mem_value_high; + break; + default: + g_assert_not_reached(); + } + return value; +} + /* * Virtual Memory queries */ diff --git a/plugins/qemu-plugins.symbols b/plugins/qemu-plugins.symbols index ca773d8d9fe..eed9d8abd90 100644 --- a/plugins/qemu-plugins.symbols +++ b/plugins/qemu-plugins.symbols @@ -13,6 +13,7 @@ qemu_plugin_insn_size; qemu_plugin_insn_symbol; qemu_plugin_insn_vaddr; + qemu_plugin_mem_get_value; qemu_plugin_mem_is_big_endian; qemu_plugin_mem_is_sign_extended; qemu_plugin_mem_is_store; From patchwork Fri Jul 5 00:34:18 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pierrick Bouvier X-Patchwork-Id: 810343 Delivered-To: patch@linaro.org Received: by 2002:adf:a199:0:b0:367:895a:4699 with SMTP id u25csp1388057wru; Thu, 4 Jul 2024 17:35:06 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXe2cFsz21AgWVIQWKmYxRDiupvD/yG6+aAVo1h+poja309azEIekiEmlXS0Ppvb/ZUVTFxLFA/m7cB05nrJcXX X-Google-Smtp-Source: AGHT+IGB2XAES5mS+WijmU/1AKX/UKW1WDcJ3h+TlyaLZCJhRm3qAS9OeFsm0pTo/mp9sZIUvrfP X-Received: by 2002:a05:690c:7082:b0:615:20db:4a4d with SMTP id 00721157ae682-652da44dfa9mr40721707b3.35.1720139706344; Thu, 04 Jul 2024 17:35:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1720139706; cv=none; d=google.com; s=arc-20160816; b=ejk4dzdSvpHAUD5hL4FhZrpwNqo4uiaKhqrbSK/MjC8YGVVqC9cIg7Cemmfz997/r5 pWQU5pem41bZqhgGJvpaCfupd/8B9nqBPPKNSpvb7Du4ul/F8EsEAkRcD9a6fCP18OyS xWliSRSSvMdSvceoQGFM+iFY3c7Qc1aoHM1A5UKYxho1Nd9+5yknsN0M73NfZ09nkZnf ogOlRvh064g3Os0I2AXpISJcK4ce4Rn7Fow6b+Y/QVSU5ZtdDXy/4dsAe00O/KIZ/Tz3 A8QnW8rH8P73aB+8bG4AK+A7L1zixWbwzM/4CSlDdEcw/unlliNDC0P/mrbIxr2691DH arNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=XfhwC1XNHeRrJpRL3CXnBSOq4oYvCsk8gfHdkEU9ETU=; fh=bvAuOvh1AKvMo7NXObJGN9xe0u3hHEkijA6HXPQQm8c=; b=QLsG/7QUGntwepENlJKrdeDIwRtfYNeyXJZPS6NVQTnboPNFswGv6Xlm1112WwaA8+ VO+nYg7+ZgDkzLBbwh+NetMBJ/bwTH+E/kTTQPc5dxuJtqu1FEzoGoxwfXe68Z6lJv34 Fcsdl56FixSs4sI/bHJRJAW1G9krEzOAlC0RCLiVS2nwL/qY4Qmlc2iTi2yOkSEe1wm0 T7BTCq7wO+T1NhQbiL5WsBT1LDtB3ccetQVir2YwdI6sEs2o8AG9RlVLcF5dxnqy83Nz eh6phqu6FngOoFUWrDmgK4lk1mspz0yHsip82HWe4GSQpq51+DutBBMgdVTAxG3e09Z2 HQPg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=LKHsSmpV; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id af79cd13be357-79ef801cd7esi4127385a.695.2024.07.04.17.35.06 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 04 Jul 2024 17:35:06 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=LKHsSmpV; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sPWug-0002t7-19; Thu, 04 Jul 2024 20:34:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sPWue-0002rs-23 for qemu-devel@nongnu.org; Thu, 04 Jul 2024 20:34:56 -0400 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1sPWuc-00006p-Gk for qemu-devel@nongnu.org; Thu, 04 Jul 2024 20:34:55 -0400 Received: by mail-pl1-x62b.google.com with SMTP id d9443c01a7336-1fafb9a33b3so6132245ad.1 for ; Thu, 04 Jul 2024 17:34:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1720139692; x=1720744492; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=XfhwC1XNHeRrJpRL3CXnBSOq4oYvCsk8gfHdkEU9ETU=; b=LKHsSmpVGqQmb7c5a62/3YCI/2vCLcWGmCuUmOOodrUs8fVj9i4Rnw0ty00UmbHG29 T5R05bYmahvxHdXpEfQnHf/oCvOywUCKZnj7B8HrJxNJjIR/r7ugzqfXwjLWxW+7Bp0p AXvDt1T/sf3OrIHNvsgbgMb+winczjXXJUutK6TD5EsQd0HBJGzg/jWrse8Pyupu7AXi HIyJBEbXQnwv5Pn3Jc6XzBJyzwzhI/G1M1PNIqLhz4BKB2+cTNHk1aAHk0YfumHTL1jO lygKNdylwdUZ9XmYAlwHri4VBzNMrtdbugZQQ3XwC7lS1sVL2AuvOGk48TYL9B7VyOVe onvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1720139692; x=1720744492; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=XfhwC1XNHeRrJpRL3CXnBSOq4oYvCsk8gfHdkEU9ETU=; b=nm8rvXlrBVVdgiLsKaWFh80b5eKYsIFtrysLD1yv/nSvxsrIvgFoKJGIR1lGNvGmZU xbcPG1usL4t04TezuCI68pVEGsuFmU8w6cd7cp/6Oqd5g3Bs9GXbisCwzvvo+ViViIHu YCvPtoy22nq7nq9oNLESmvI7/Ul9fdmfgAK4D8R98BwlRTg3xbcaLOJlN0LEJZdAEyU6 +0MAlxfIdkzbBd/sppDdaKKbE92CHjz6g5VMAYFox4yXDpzzInl6mfUsj0lEXT83DqsO cZuPOiBMW1B54KvaiaTGqGUDBMxd0VFAYB0AVzN2skomzWyTXQffPMxW80IGmFjqxTdr AW/Q== X-Gm-Message-State: AOJu0Yys5VOtNeu0HIjrWEWyqQUXFFlDzPBqBsJVE3dgySWe72coXGdp v4l7Z4/jtoq6NehcA8LX19EzuaaL8aN6fomZN2Kl1IFm7EIkSCqMOl5Myflv6njB6VWlYSvn/tS oGNE= X-Received: by 2002:a17:903:2349:b0:1fa:8f64:8afd with SMTP id d9443c01a7336-1fb33df595dmr21259635ad.11.1720139692552; Thu, 04 Jul 2024 17:34:52 -0700 (PDT) Received: from linaro.vn.shawcable.net ([2604:3d08:9384:1d00::2193]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-1fb1a075616sm39008595ad.15.2024.07.04.17.34.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Jul 2024 17:34:52 -0700 (PDT) From: Pierrick Bouvier To: qemu-devel@nongnu.org Cc: Alexandre Iooss , Richard Henderson , Marcel Apfelbaum , Pierrick Bouvier , =?utf-8?q?Alex_Benn=C3=A9e?= , Paolo Bonzini , Yanan Wang , Mahmoud Mandour , Eduardo Habkost , =?utf-8?q?Philippe_Mathieu-Daud?= =?utf-8?q?=C3=A9?= , Xingtao Yao Subject: [PATCH v5 4/7] tests/tcg: add mechanism to run specific tests with plugins Date: Thu, 4 Jul 2024 17:34:18 -0700 Message-Id: <20240705003421.750895-5-pierrick.bouvier@linaro.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240705003421.750895-1-pierrick.bouvier@linaro.org> References: <20240705003421.750895-1-pierrick.bouvier@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::62b; envelope-from=pierrick.bouvier@linaro.org; helo=mail-pl1-x62b.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 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+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org Only multiarch tests are run with plugins, and we want to be able to run per-arch test with plugins too. Tested-by: Xingtao Yao Reviewed-by: Richard Henderson Signed-off-by: Pierrick Bouvier --- tests/tcg/Makefile.target | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/tcg/Makefile.target b/tests/tcg/Makefile.target index f21be50d3b2..dc5c8b7a3b4 100644 --- a/tests/tcg/Makefile.target +++ b/tests/tcg/Makefile.target @@ -152,10 +152,11 @@ PLUGINS=$(patsubst %.c, lib%.so, $(notdir $(wildcard $(PLUGIN_SRC)/*.c))) # only expand MULTIARCH_TESTS which are common on most of our targets # to avoid an exponential explosion as new tests are added. We also # add some special helpers the run-plugin- rules can use below. +# In more, extra tests can be added using PLUGINS_TESTS variable. ifneq ($(MULTIARCH_TESTS),) $(foreach p,$(PLUGINS), \ - $(foreach t,$(MULTIARCH_TESTS),\ + $(foreach t,$(MULTIARCH_TESTS) $(PLUGINS_TESTS),\ $(eval run-plugin-$(t)-with-$(p): $t $p) \ $(eval RUN_TESTS+=run-plugin-$(t)-with-$(p)))) endif # MULTIARCH_TESTS From patchwork Fri Jul 5 00:34:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pierrick Bouvier X-Patchwork-Id: 810348 Delivered-To: patch@linaro.org Received: by 2002:adf:a199:0:b0:367:895a:4699 with SMTP id u25csp1388384wru; Thu, 4 Jul 2024 17:36:09 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUwmVeteBLLzHs4ehnxvFKQMaqwNnMF20QzlUY+j/yUnDq8wPltHvr5xtzhHnftsWceaX0RVpYfQi+xpqjA0LWz X-Google-Smtp-Source: AGHT+IHTBW1IPiEhk1DkdFts5iByD6Yn9/GYLr2hqFEeUHhAjHfPgTjGdowIFxp4i96w3hSRQ+Gu X-Received: by 2002:a05:622a:494:b0:446:4007:4c22 with SMTP id d75a77b69052e-447cbf0352amr33907541cf.35.1720139769603; Thu, 04 Jul 2024 17:36:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1720139769; cv=none; d=google.com; s=arc-20160816; b=oRO9uMD8Zri9RZLwkTRy8Dkz7REw5zFWL+Dz0hvWIskKEeG4B5xE6jEWKBgMC7d5AQ uaj+0cOcVG06oWQYBn9R/JZ1VUW/jgK5UklCzNcE6s20cnnH0LSzNcv2f7Jrhwu9prB2 //4MYyCpZ0sdPylrkQLCgvDhA1fIc+h8to+f5En786U5Ch7qhD4idijRdypde4ulhoRh yuiz5Nfw8J7aTx8+dIIl08KIOyDG6aqHFR5ZAj/ke8gBFH44Pa7uhw9Gey/pjevWIQ3f 6l85HAFzMfKc1l1+HkscJDppglYMwbGj8T8c7uIVt88bHmjoj7GvZ0I+wsv7LxQYpaJ0 THwg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=70GLN4QAz+IlBAZY2/ey3oOeez9V0zHIxcaWOnyG2XY=; fh=bvAuOvh1AKvMo7NXObJGN9xe0u3hHEkijA6HXPQQm8c=; b=hWXpZXF2fU23mb5CuQ9AEuZkdQgSw3ojwux0KhHd86bI2SKpoh7/Ld5xo7RPuA+eWd pSvP+4faP7YlF9FJ3VuDaXIyYtjsOphv+rJHa/HpqihtF8FqCmCWLq6RWFoS1PUuhrHD LdUxbVkA+9gP0TMMPm52he5dF1flbZUp8HvCJv0Hm8xYy0F+iNa1fuiJ+yXiwd/LCfB+ vCUzA7y6LfsWuwpozYJmw7DRfgaf/LomQBKRWo1anSc5kqPmJWMh5tPVU/M3SdtYpqiQ rPHUK2n074YkoomGOt0sPryALq39lXTlkd0A290cb6xS4P80zCqAIRNU1oBYbzZW1I7e tpPQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=a+q2x4dh; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id d75a77b69052e-446514c20cesi159631881cf.584.2024.07.04.17.36.09 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 04 Jul 2024 17:36:09 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=a+q2x4dh; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sPWuk-0002xb-LL; Thu, 04 Jul 2024 20:35:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sPWui-0002wV-Ri for qemu-devel@nongnu.org; Thu, 04 Jul 2024 20:35:00 -0400 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1sPWuh-00007d-2L for qemu-devel@nongnu.org; Thu, 04 Jul 2024 20:35:00 -0400 Received: by mail-pl1-x630.google.com with SMTP id d9443c01a7336-1fa9f540f45so6587755ad.1 for ; Thu, 04 Jul 2024 17:34:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1720139697; x=1720744497; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=70GLN4QAz+IlBAZY2/ey3oOeez9V0zHIxcaWOnyG2XY=; b=a+q2x4dh+tqv3133dcytreSIGU68KPXT7vCZb/01ciZD89QiGofpI2eFNr27uwaJij d0Yi89KV9VBLoo4fhuiLlomZLBlT2CQvHLAxp1KBiJS72+fhy7a2fFKz/tgi2c5G2agN 5MPuLUWmOUL8f/cmKGMNbcgs8iuxbfZf0TynLSNpmUUMXglQl9f/XFOm9qbUTE1fup8G 9ecb3vr17YUk6kvvr8yWx6VSGwfPTKgZh/C6qj0ga+whFIwuRrn2CnPcV4+s96/23ftH YfJaQ+INv8R+zxuOjHh/CZJmRTV5GLfMbgF0YmUUhYF0T1Fp43Exsr3/H7mQ615U43Cy MtKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1720139697; x=1720744497; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=70GLN4QAz+IlBAZY2/ey3oOeez9V0zHIxcaWOnyG2XY=; b=J3+EoiavSWcwxh7Ohh8pqyWOAEnBVNjQ2qrYK4hI5dDmuF3r0d/lGlF4k9aqguNHo8 8dtxpPPK32JiYdpgSbMqcGy+rXgxuO5jqlF0T0eBskm0ij6OY+hxBxggglpbx1J9/2tb CoS2OmlbFEg+gB47gX/B6knCa2YipXly0JjsYrKUvT+Bx38qGVkvPrbUzm0YBeW83/XY Op3rzogpMrM0/h6rIgI3+cSexzvyPYI3xCHcUxzRFTqRVrqmcsT3Td854l9jSXKASJyL /Y/8kbSQXZZC7e0sgCqbHhCsl2G1pKgWA2G0AnD8M4LnL/YxLOLByZornMWVBu/nV1Tm jcCA== X-Gm-Message-State: AOJu0YwQuU4vh26bJ8lsoTfzc1exwyzpJ59xsAlq6Z1bPk13gxyHSxFb PRzNg6+jdPX+14vxGRxKXvhA3htEOTr/fRMOz+vlKVUdkleIuGyJLKtfjzZq0ZdpHhqgUPE0PBv AYLA= X-Received: by 2002:a17:902:d4c9:b0:1fb:3e9f:ff6f with SMTP id d9443c01a7336-1fb3ea002e6mr19037185ad.40.1720139696768; Thu, 04 Jul 2024 17:34:56 -0700 (PDT) Received: from linaro.vn.shawcable.net ([2604:3d08:9384:1d00::2193]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-1fb1a075616sm39008595ad.15.2024.07.04.17.34.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Jul 2024 17:34:56 -0700 (PDT) From: Pierrick Bouvier To: qemu-devel@nongnu.org Cc: Alexandre Iooss , Richard Henderson , Marcel Apfelbaum , Pierrick Bouvier , =?utf-8?q?Alex_Benn=C3=A9e?= , Paolo Bonzini , Yanan Wang , Mahmoud Mandour , Eduardo Habkost , =?utf-8?q?Philippe_Mathieu-Daud?= =?utf-8?q?=C3=A9?= , Xingtao Yao Subject: [PATCH v5 5/7] tests/tcg: allow to check output of plugins Date: Thu, 4 Jul 2024 17:34:19 -0700 Message-Id: <20240705003421.750895-6-pierrick.bouvier@linaro.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240705003421.750895-1-pierrick.bouvier@linaro.org> References: <20240705003421.750895-1-pierrick.bouvier@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::630; envelope-from=pierrick.bouvier@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 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+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org A specific plugin test can now read and check a plugin output, to ensure it contains expected values. Tested-by: Xingtao Yao Reviewed-by: Richard Henderson Signed-off-by: Pierrick Bouvier --- tests/tcg/Makefile.target | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/tcg/Makefile.target b/tests/tcg/Makefile.target index dc5c8b7a3b4..b78fd99c337 100644 --- a/tests/tcg/Makefile.target +++ b/tests/tcg/Makefile.target @@ -90,6 +90,7 @@ CFLAGS= LDFLAGS= QEMU_OPTS= +CHECK_PLUGIN_OUTPUT_COMMAND=true # If TCG debugging, or TCI is enabled things are a lot slower @@ -180,6 +181,9 @@ run-plugin-%: -plugin $(PLUGIN_LIB)/$(call extract-plugin,$@)$(PLUGIN_ARGS) \ -d plugin -D $*.pout \ $(call strip-plugin,$<)) + $(call quiet-command, $(CHECK_PLUGIN_OUTPUT_COMMAND) $*.pout, \ + TEST, check plugin $(call extract-plugin,$@) output \ + with $(call strip-plugin,$<)) else run-%: % $(call run-test, $<, \ @@ -194,6 +198,9 @@ run-plugin-%: -plugin $(PLUGIN_LIB)/$(call extract-plugin,$@)$(PLUGIN_ARGS) \ -d plugin -D $*.pout \ $(QEMU_OPTS) $(call strip-plugin,$<)) + $(call quiet-command, $(CHECK_PLUGIN_OUTPUT_COMMAND) $*.pout, \ + TEST, check plugin $(call extract-plugin,$@) output \ + with $(call strip-plugin,$<)) endif gdb-%: % From patchwork Fri Jul 5 00:34:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pierrick Bouvier X-Patchwork-Id: 810345 Delivered-To: patch@linaro.org Received: by 2002:adf:a199:0:b0:367:895a:4699 with SMTP id u25csp1388122wru; Thu, 4 Jul 2024 17:35:17 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWxNlxR0JSmoz7TcNvOikt2nGecNo1cdFZHNUZ4NUgAeMtY3pOXGBjX3PidYb1rU3e/2+2X9p12ZLsnC2pFN4Vx X-Google-Smtp-Source: AGHT+IE0obQUlBf91txxEtkt46isfap2dnQ7BV8Ox27gmewTXrhzQ1cmcpdfgBheu99Y7EzS4lUo X-Received: by 2002:a25:b121:0:b0:df4:b01b:3d21 with SMTP id 3f1490d57ef6-e03c19e9ee8mr3601679276.49.1720139717117; Thu, 04 Jul 2024 17:35:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1720139717; cv=none; d=google.com; s=arc-20160816; b=Qo16E2nAAAjgjMIS+kFv8Vn1nWJJ3sxJ/plvHLVSBQQNmDkuCg4a5exCWZpgyft3Oc aE/MRRev+QiVHiOKICPBYrFYXlXASVRXhX2/Cssf2NVb4pN0XjBLwOi6PCLfPND+bRmg Ta+WKMqmbGV09OoN6qPXFRhTJB8UmowIq8WghNnE9IWhcW9yqTEuNnRu0H8lcZTpF/I9 WkgrMBh0rLZtPlxpgHjRdHEGMHTj764ar1HVLicavAbm0ok7CrWmyuIDlWdqm0v7oX9w eTTcE55BlOjD76SoVhmgzruZRzgGrY09eY8nBaS67nI1taaHLmOkZL5K6SmtnnEendNh 09rw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=pLoy+86fAS0seygToReysvwiKoc42KvDoYrVATorcNM=; fh=2IzZKSAfkxDgXTtM7kFa1jWu0SUssVJhWA7cdsHH2KE=; b=fMreENX6JoWINYuOjaCrHsFXCOrCqJQRl/Qb/SCS4/N2FuAFgPga8itTcs4JuiA6pp SKMTsWC86jkqdTd6kBWvdWSR5ptS2SXr40B0Qmw43i3T71n/3/fPVgc/YF7WJvFwMiZY 9AT0HiUZGd2Mkb4IAPk1E+oVuC5h6iYW6iF0sMBEwMuO5ePw2eT8mM+sPXhnvlfVPOX6 Na/US9WcOUXyIx469RSPmNrZhOD+gRPm01C6VPFBuZdAxTHtf23i3O3dGInwn4S8P1ru ihMfBsM0fhcW0PZC14uuZLorz3F5L6t5qUjzFeCPQRr7qbG77Ln3S7BQnLxTQzPMiUmk 5/lw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=miPJh4In; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id 6a1803df08f44-6b5df9bfbeesi53592966d6.588.2024.07.04.17.35.16 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 04 Jul 2024 17:35:17 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=miPJh4In; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sPWuo-00038I-U4; Thu, 04 Jul 2024 20:35:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sPWun-00030x-5T for qemu-devel@nongnu.org; Thu, 04 Jul 2024 20:35:05 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1sPWul-000087-61 for qemu-devel@nongnu.org; Thu, 04 Jul 2024 20:35:04 -0400 Received: by mail-pl1-x62e.google.com with SMTP id d9443c01a7336-1fafb9a33b3so6132575ad.1 for ; Thu, 04 Jul 2024 17:35:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1720139701; x=1720744501; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=pLoy+86fAS0seygToReysvwiKoc42KvDoYrVATorcNM=; b=miPJh4InyiaoHTYWbWeB7lXlWY2Q+7SBo3YWfHTiCXkbWHj0/HnmG6Kv0EwjGl8HAa 2MitpWuNeg4Y2pz31IggiCoLadjbK7ooM2UIoysmNRhYiGaCW1KeakQp2KgdfOQ9nkAn Y+2Z90kNRyUkhppq/tf6ayatrR0tyhDExFrrjLF2m/qCp/MopNBIlRShgdtC6DpWk1Zv PI4chre2lUoZ0RlVwsHDoFLCFiayaTJ/u8yffmX/btwBr2gRFOcG4lqOJWBuQuzhrK1x Ri0djAf0qUqiLr42YYyEkTnBjkoqIfVxK3f92a6aYEM+NEEpTPvrVBHk7CprCwizkkf6 3NPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1720139701; x=1720744501; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pLoy+86fAS0seygToReysvwiKoc42KvDoYrVATorcNM=; b=FkZWt2StUGv5PZH3RV+sJlEhfNra98Rt+DBtOHGqRbG/ps0h13SHFS+HPcV+F1GaPy APm5G1oh9PkmA/wnPsUqt3OUapD3FQs/t0WXCuJYGK/AHskjBlE6XDNeUCXOAFmfIXqd ceHau4Ud0aZqHY5G67EBZxUTD0hOJDsnirS21b74jfO059Z43B55DTfXhI+ejv2kE0D+ VvKe3eQvBc4iKXu1/B65JiUaSNlrF7+TYlV5DzTq6qfvVsUn4ToqYsW2v2WUTXNyKU3w 3E/0LgJq4AA5RDWEXw9ZXR7SR8FG9PTb9knmwZJabGq47urVzL+UL8u7DjsfoforyW9H RdrQ== X-Gm-Message-State: AOJu0YzNlycSssnfmBll2sLh1HSBRY/chkvnhoS/TKGY1q9Cy3C5J3B7 paKhaeMFaPXDX/wygJ8yxljqHR/TF62i0En37Vz1BJpP8XTvQ0YDT+hk6NxXdD6BXLV9LO2FHjS bDLI= X-Received: by 2002:a17:902:eccd:b0:1fb:2b6b:2789 with SMTP id d9443c01a7336-1fb33e84c98mr24969155ad.37.1720139700930; Thu, 04 Jul 2024 17:35:00 -0700 (PDT) Received: from linaro.vn.shawcable.net ([2604:3d08:9384:1d00::2193]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-1fb1a075616sm39008595ad.15.2024.07.04.17.34.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Jul 2024 17:35:00 -0700 (PDT) From: Pierrick Bouvier To: qemu-devel@nongnu.org Cc: Alexandre Iooss , Richard Henderson , Marcel Apfelbaum , Pierrick Bouvier , =?utf-8?q?Alex_Benn=C3=A9e?= , Paolo Bonzini , Yanan Wang , Mahmoud Mandour , Eduardo Habkost , =?utf-8?q?Philippe_Mathieu-Daud?= =?utf-8?q?=C3=A9?= Subject: [PATCH v5 6/7] tests/plugin/mem: add option to print memory accesses Date: Thu, 4 Jul 2024 17:34:20 -0700 Message-Id: <20240705003421.750895-7-pierrick.bouvier@linaro.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240705003421.750895-1-pierrick.bouvier@linaro.org> References: <20240705003421.750895-1-pierrick.bouvier@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::62e; envelope-from=pierrick.bouvier@linaro.org; helo=mail-pl1-x62e.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 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+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org By using "print-accesses=true" option, mem plugin will now print every value accessed, with associated size, type (store vs load), symbol, instruction address and phys/virt address accessed. Reviewed-by: Richard Henderson Signed-off-by: Pierrick Bouvier Reviewed-by: Xingtao Yao --- tests/plugin/mem.c | 69 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) diff --git a/tests/plugin/mem.c b/tests/plugin/mem.c index b650dddcce1..086e6f5bdfc 100644 --- a/tests/plugin/mem.c +++ b/tests/plugin/mem.c @@ -21,10 +21,15 @@ typedef struct { uint64_t io_count; } CPUCount; +typedef struct { + uint64_t vaddr; + const char *sym; +} InsnInfo; + static struct qemu_plugin_scoreboard *counts; static qemu_plugin_u64 mem_count; static qemu_plugin_u64 io_count; -static bool do_inline, do_callback; +static bool do_inline, do_callback, do_print_accesses; static bool do_haddr; static enum qemu_plugin_mem_rw rw = QEMU_PLUGIN_MEM_RW; @@ -60,6 +65,44 @@ static void vcpu_mem(unsigned int cpu_index, qemu_plugin_meminfo_t meminfo, } } +static void print_access(unsigned int cpu_index, qemu_plugin_meminfo_t meminfo, + uint64_t vaddr, void *udata) +{ + InsnInfo *insn_info = udata; + unsigned size = 8 << qemu_plugin_mem_size_shift(meminfo); + const char *type = qemu_plugin_mem_is_store(meminfo) ? "store" : "load"; + qemu_plugin_mem_value value = qemu_plugin_mem_get_value(meminfo); + uint64_t hwaddr = + qemu_plugin_hwaddr_phys_addr(qemu_plugin_get_hwaddr(meminfo, vaddr)); + g_autoptr(GString) out = g_string_new(""); + g_string_printf(out, + "0x%"PRIx64",%s,0x%"PRIx64",0x%"PRIx64",%d,%s,", + insn_info->vaddr, insn_info->sym, + vaddr, hwaddr, size, type); + switch (value.type) { + case QEMU_PLUGIN_MEM_VALUE_U8: + g_string_append_printf(out, "0x%02"PRIx8, value.data.u8); + break; + case QEMU_PLUGIN_MEM_VALUE_U16: + g_string_append_printf(out, "0x%04"PRIx16, value.data.u16); + break; + case QEMU_PLUGIN_MEM_VALUE_U32: + g_string_append_printf(out, "0x%08"PRIx32, value.data.u32); + break; + case QEMU_PLUGIN_MEM_VALUE_U64: + g_string_append_printf(out, "0x%016"PRIx64, value.data.u64); + break; + case QEMU_PLUGIN_MEM_VALUE_U128: + g_string_append_printf(out, "0x%016"PRIx64"%016"PRIx64, + value.data.u128.high, value.data.u128.low); + break; + default: + g_assert_not_reached(); + } + g_string_append_printf(out, "\n"); + qemu_plugin_outs(out->str); +} + static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb) { size_t n = qemu_plugin_tb_n_insns(tb); @@ -79,6 +122,16 @@ static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb) QEMU_PLUGIN_CB_NO_REGS, rw, NULL); } + if (do_print_accesses) { + /* we leak this pointer, to avoid locking to keep track of it */ + InsnInfo *insn_info = g_malloc(sizeof(InsnInfo)); + const char *sym = qemu_plugin_insn_symbol(insn); + insn_info->sym = sym ? sym : ""; + insn_info->vaddr = qemu_plugin_insn_vaddr(insn); + qemu_plugin_register_vcpu_mem_cb(insn, print_access, + QEMU_PLUGIN_CB_NO_REGS, + rw, (void *) insn_info); + } } } @@ -117,6 +170,12 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id, fprintf(stderr, "boolean argument parsing failed: %s\n", opt); return -1; } + } else if (g_strcmp0(tokens[0], "print-accesses") == 0) { + if (!qemu_plugin_bool_parse(tokens[0], tokens[1], + &do_print_accesses)) { + fprintf(stderr, "boolean argument parsing failed: %s\n", opt); + return -1; + } } else { fprintf(stderr, "option parsing failed: %s\n", opt); return -1; @@ -129,6 +188,14 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id, return -1; } + if (do_print_accesses) { + g_autoptr(GString) out = g_string_new(""); + g_string_printf(out, + "insn_vaddr,insn_symbol,mem_vaddr,mem_hwaddr," + "access_size,access_type,mem_value\n"); + qemu_plugin_outs(out->str); + } + counts = qemu_plugin_scoreboard_new(sizeof(CPUCount)); mem_count = qemu_plugin_scoreboard_u64_in_struct( counts, CPUCount, mem_count); From patchwork Fri Jul 5 00:34:21 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pierrick Bouvier X-Patchwork-Id: 810349 Delivered-To: patch@linaro.org Received: by 2002:adf:a199:0:b0:367:895a:4699 with SMTP id u25csp1388462wru; Thu, 4 Jul 2024 17:36:24 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUqDUt4APYIPLtw05l8tCda+F9rv8734lmMxna4AyxsWX9itBvrjIsp02erBH/KvpghPrN57Xw6kQVS5TgO3zff X-Google-Smtp-Source: AGHT+IF7yDJ1gpgiHOCMJScK14Rf7quMs2W7kio4l5MWRkWJaHrInQm+X8AMH86RTVY5AHCICaQr X-Received: by 2002:a05:690c:986:b0:63b:df6e:3f6d with SMTP id 00721157ae682-652d78707aamr27691757b3.37.1720139784055; Thu, 04 Jul 2024 17:36:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1720139784; cv=none; d=google.com; s=arc-20160816; b=HqvNw2T1wq8ISCbmLIKQEd3K3ryPYMxruVKZuzDzvfS5NuTWoaV7C7fVNnbpmRQKbq LzTDX5dDlMgGGfaeAool6Jk3PZEpuUL2Skv5sD7AUvVRJra68GMcDhrEN/fzUZZPQjfg jQLUtA81WkoqPwzYGvedAFqpJv+mIemVSlEKLFM68tUtUywMMzW9llFNy6T2q5EubFXV 2zNiBqm4ELMl5tKFoWby1WXp9m+eORPnEoqgAPOS1S2upGrYLMYFnTp78oWSI1sxznwd 19NLSH8j3832Jx3xPPwzFVGe88GFTGWZBQMYmrB/Xs4+NLiPK8VdJKbZt4/vAgGiWQ6B 1wEA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=jSYKX7tgmPWgH1eoungM9Ek83i1kIQO2hxPk9JjJ0jw=; fh=bvAuOvh1AKvMo7NXObJGN9xe0u3hHEkijA6HXPQQm8c=; b=OebRlsZ8c/1fHGVo2a1VONa307ZQH5bLPIONiS/YsGFWbbhicVUp3NWAioj0M3MqAA HWGHXE6yFncmxe2HgFjck+Rn19zDIACygYN3avreD80xfoyomK6k33vf1VRH0uAHBGyn 7qRjDFkh2xAaKoI7ahxKb2jbbDZUXyjm132kZ63l533rWj/ssyOTCYSqmcZl13e6Cwpv TN6xz2/doPPRkdKJZPIJMZOt1fOCJixLIan/aTbiSEAR9hBpNMEunYiOG5vTnhBzJr0M XbSZlZBId2sU2Py7qr6I8gmqqtjwT5dPMiyGoSP2g7XEv3oJ6Iws/8U4Bbgp7KKe4N2d 6Dsg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=vRkAzjdT; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id af79cd13be357-79ef73fb8a6si15553585a.612.2024.07.04.17.36.23 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 04 Jul 2024 17:36:24 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=vRkAzjdT; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sPWuy-0003Je-Ai; Thu, 04 Jul 2024 20:35:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sPWuv-0003Cj-Du for qemu-devel@nongnu.org; Thu, 04 Jul 2024 20:35:14 -0400 Received: from mail-pf1-x42e.google.com ([2607:f8b0:4864:20::42e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1sPWur-0000Lf-E8 for qemu-devel@nongnu.org; Thu, 04 Jul 2024 20:35:11 -0400 Received: by mail-pf1-x42e.google.com with SMTP id d2e1a72fcca58-70b04cb28baso625819b3a.1 for ; Thu, 04 Jul 2024 17:35:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1720139706; x=1720744506; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=jSYKX7tgmPWgH1eoungM9Ek83i1kIQO2hxPk9JjJ0jw=; b=vRkAzjdTvPGmU/1+xUouQGopLgI2z3kIUt/HjGCMvn7rMNfuB6wJSwB13Oll9ou9bx lbSx6TWARqdSm1y7JCvir+NOQEpVXKi2e5oO+0no7Zg8WsI1N4jneUc1bpzUhNyc3CBi mCQpxruPL2etgW2JkkPX/9WraBUmCJ+8WDGmnnfrkBD/c1FOG5iM0BF3eMOdH4vHIPkG qR+BdxfeU7y6DFz6HcCqsQ1vae/Ob5B1KwbytRAoTALsOww6Z2nnJB18kOwE3NaHOQ62 IWaFeH0lC/uydHDC6aSRWrS1h1hsMK9Ior46l3eYn/RT0jU99jDhIKXEds5fr7dce9hr V05Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1720139706; x=1720744506; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jSYKX7tgmPWgH1eoungM9Ek83i1kIQO2hxPk9JjJ0jw=; b=IBCGdX47Vm0JN7c1i6bRN+GHTjImjYpQZRx2aHjhcYVTEnk0kbUP0so6PHCVtfS/M2 XXvcFOj22OTKUlXBS390k2ItIbstIMOr8KvuCbz67KQQSK/V760q4d5A2nLW5wJn3E3o Kzz8kARbVCoFJLQedKyGngBAaDkDz76TWhinhRBU5iODmm8zcrKnfD4hM5WavnbWtkx4 vkVHIhid3QetGV3hjuCORLkhksZL/1XiYNhGeJDleERQ9Gj5UWnlU5m18ccjD8jvD97o IAk5uPUOupmJGyP9gI1xCuUMc6W26MKqPYkWcipTOJQ/69KWxY6q/dgwtrZeOiJBn7PH 0drw== X-Gm-Message-State: AOJu0YyjkqPUddu9oFVAOLAddeR/8/vojOdQpZVvhxIfAp27iEVIGupB znH+Sd3K0iZyi59P02PYbH2cMadcUbBTFNa2Ep7sBA22CdrooWbmlM9UbmPxIyxex22zB6dbTmC lYlQ= X-Received: by 2002:a05:6a20:4f22:b0:1bd:4bc7:1ee4 with SMTP id adf61e73a8af0-1c0ccb0fa0dmr2609174637.58.1720139706195; Thu, 04 Jul 2024 17:35:06 -0700 (PDT) Received: from linaro.vn.shawcable.net ([2604:3d08:9384:1d00::2193]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-1fb1a075616sm39008595ad.15.2024.07.04.17.35.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Jul 2024 17:35:05 -0700 (PDT) From: Pierrick Bouvier To: qemu-devel@nongnu.org Cc: Alexandre Iooss , Richard Henderson , Marcel Apfelbaum , Pierrick Bouvier , =?utf-8?q?Alex_Benn=C3=A9e?= , Paolo Bonzini , Yanan Wang , Mahmoud Mandour , Eduardo Habkost , =?utf-8?q?Philippe_Mathieu-Daud?= =?utf-8?q?=C3=A9?= , Xingtao Yao Subject: [PATCH v5 7/7] tests/tcg/x86_64: add test for plugin memory access Date: Thu, 4 Jul 2024 17:34:21 -0700 Message-Id: <20240705003421.750895-8-pierrick.bouvier@linaro.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240705003421.750895-1-pierrick.bouvier@linaro.org> References: <20240705003421.750895-1-pierrick.bouvier@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::42e; envelope-from=pierrick.bouvier@linaro.org; helo=mail-pf1-x42e.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 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+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org Add an explicit test to check expected memory values are read/written. For sizes 8, 16, 32, 64 and 128, we generate a load/store operation. For size 8 -> 64, we generate an atomic __sync_val_compare_and_swap too. For 128bits memory access, we rely on SSE2 instructions. By default, atomic accesses are non atomic if a single cpu is running, so we force creation of a second one by creating a new thread first. load/store helpers code path can't be triggered easily in user mode (no softmmu), so we can't test it here. Can be run with: make -C build/tests/tcg/x86_64-linux-user run-plugin-test-plugin-mem-access-with-libmem.so Tested-by: Xingtao Yao Signed-off-by: Pierrick Bouvier --- tests/tcg/x86_64/test-plugin-mem-access.c | 89 +++++++++++++++++++++ tests/tcg/x86_64/Makefile.target | 7 ++ tests/tcg/x86_64/check-plugin-mem-access.sh | 48 +++++++++++ 3 files changed, 144 insertions(+) create mode 100644 tests/tcg/x86_64/test-plugin-mem-access.c create mode 100755 tests/tcg/x86_64/check-plugin-mem-access.sh diff --git a/tests/tcg/x86_64/test-plugin-mem-access.c b/tests/tcg/x86_64/test-plugin-mem-access.c new file mode 100644 index 00000000000..7fdd6a55829 --- /dev/null +++ b/tests/tcg/x86_64/test-plugin-mem-access.c @@ -0,0 +1,89 @@ +#include +#include +#include +#include + +static void *data; + +#define DEFINE_STORE(name, type, value) \ +static void store_##name(void) \ +{ \ + *((type *)data) = value; \ +} + +#define DEFINE_ATOMIC_OP(name, type, value) \ +static void atomic_op_##name(void) \ +{ \ + *((type *)data) = 0x42; \ + __sync_val_compare_and_swap((type *)data, 0x42, value); \ +} + +#define DEFINE_LOAD(name, type) \ +static void load_##name(void) \ +{ \ + register type var asm("eax") = *((type *) data); \ + (void)var; \ +} + +DEFINE_STORE(u8, uint8_t, 0xf1) +DEFINE_ATOMIC_OP(u8, uint8_t, 0xf1) +DEFINE_LOAD(u8, uint8_t) +DEFINE_STORE(u16, uint16_t, 0xf123) +DEFINE_ATOMIC_OP(u16, uint16_t, 0xf123) +DEFINE_LOAD(u16, uint16_t) +DEFINE_STORE(u32, uint32_t, 0xff112233) +DEFINE_ATOMIC_OP(u32, uint32_t, 0xff112233) +DEFINE_LOAD(u32, uint32_t) +DEFINE_STORE(u64, uint64_t, 0xf123456789abcdef) +DEFINE_ATOMIC_OP(u64, uint64_t, 0xf123456789abcdef) +DEFINE_LOAD(u64, uint64_t) + +static void store_u128(void) +{ + _mm_store_si128(data, _mm_set_epi32(0xf1223344, 0x55667788, + 0xf1234567, 0x89abcdef)); +} + +static void load_u128(void) +{ + __m128i var = _mm_load_si128(data); + (void)var; +} + +static void *f(void *p) +{ + return NULL; +} + +int main(void) +{ + /* + * We force creation of a second thread to enable cpu flag CF_PARALLEL. + * This will generate atomic operations when needed. + */ + pthread_t thread; + pthread_create(&thread, NULL, &f, NULL); + pthread_join(thread, NULL); + + data = malloc(sizeof(__m128i)); + atomic_op_u8(); + store_u8(); + load_u8(); + + atomic_op_u16(); + store_u16(); + load_u16(); + + atomic_op_u32(); + store_u32(); + load_u32(); + + atomic_op_u64(); + store_u64(); + load_u64(); + + store_u128(); + load_u128(); + + free(data); +} diff --git a/tests/tcg/x86_64/Makefile.target b/tests/tcg/x86_64/Makefile.target index eda9bd7396c..3edc29b924d 100644 --- a/tests/tcg/x86_64/Makefile.target +++ b/tests/tcg/x86_64/Makefile.target @@ -16,6 +16,7 @@ X86_64_TESTS += noexec X86_64_TESTS += cmpxchg X86_64_TESTS += adox X86_64_TESTS += test-1648 +PLUGINS_TESTS += test-plugin-mem-access TESTS=$(MULTIARCH_TESTS) $(X86_64_TESTS) test-x86_64 else TESTS=$(MULTIARCH_TESTS) @@ -26,6 +27,12 @@ adox: CFLAGS=-O2 run-test-i386-ssse3: QEMU_OPTS += -cpu max run-plugin-test-i386-ssse3-%: QEMU_OPTS += -cpu max +run-plugin-test-plugin-mem-access-with-libmem.so: \ + PLUGIN_ARGS=$(COMMA)print-accesses=true +run-plugin-test-plugin-mem-access-with-libmem.so: \ + CHECK_PLUGIN_OUTPUT_COMMAND= \ + $(SRC_PATH)/tests/tcg/x86_64/check-plugin-mem-access.sh + test-x86_64: LDFLAGS+=-lm -lc test-x86_64: test-i386.c test-i386.h test-i386-shift.h test-i386-muldiv.h $(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) diff --git a/tests/tcg/x86_64/check-plugin-mem-access.sh b/tests/tcg/x86_64/check-plugin-mem-access.sh new file mode 100755 index 00000000000..163f1cfad34 --- /dev/null +++ b/tests/tcg/x86_64/check-plugin-mem-access.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash + +set -euo pipefail + +die() +{ + echo "$@" 1>&2 + exit 1 +} + +check() +{ + file=$1 + pattern=$2 + grep "$pattern" "$file" > /dev/null || die "\"$pattern\" not found in $file" +} + +[ $# -eq 1 ] || die "usage: plugin_out_file" + +plugin_out=$1 + +expected() +{ + cat << EOF +,store_u8,.*,8,store,0xf1 +,atomic_op_u8,.*,8,load,0x42 +,atomic_op_u8,.*,8,store,0xf1 +,load_u8,.*,8,load,0xf1 +,store_u16,.*,16,store,0xf123 +,atomic_op_u16,.*,16,load,0x0042 +,atomic_op_u16,.*,16,store,0xf123 +,load_u16,.*,16,load,0xf123 +,store_u32,.*,32,store,0xff112233 +,atomic_op_u32,.*,32,load,0x00000042 +,atomic_op_u32,.*,32,store,0xff112233 +,load_u32,.*,32,load,0xff112233 +,store_u64,.*,64,store,0xf123456789abcdef +,atomic_op_u64,.*,64,load,0x0000000000000042 +,atomic_op_u64,.*,64,store,0xf123456789abcdef +,load_u64,.*,64,load,0xf123456789abcdef +,store_u128,.*,128,store,0xf122334455667788f123456789abcdef +,load_u128,.*,128,load,0xf122334455667788f123456789abcdef +EOF +} + +expected | while read line; do + check "$plugin_out" "$line" +done