From nobody Sat Apr 11 23:04:11 2026 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; arc=pass (i=1 dmarc=pass fromdomain=epfl.ch); dmarc=pass(p=quarantine dis=none) header.from=epfl.ch ARC-Seal: i=2; a=rsa-sha256; t=1772543426; cv=pass; d=zohomail.com; s=zohoarc; b=OGG2Td/IjjG3zSAwac9pruBBSBfRgWbwxwomjUfmBH9WZDXQqlV6T2SOxjo9yUdM/BhusX67n8lhZD6q+g1R0yXp0T0AJWn88dPjLbFCjTeErieRT7YV9gJLqxy8Gq13wDxGycX1lXkdCMKo0x85zmNOfDT6Z9siNeiLzqDP+Pc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772543426; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=gUXnfatmEsAmfIU5ILZBfL/gIZ28r9pvMnP8uEMKOxA=; b=UEXAI1YLSVhyeE7h7ove/vSPwGtKGhWNVG9x/ieVMM1GJwg7PYiE+7XuGAfzatgvoxgNGICLmjgfGuP1/xa1Tniw2udb/vFdQyEmvitf3jhNcAO4ZvMDwJ4OYlALd/nHy2kKpjl8F/L+IlrJHdaPqYKlSNsk9mrv6OkPblPvspA= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=epfl.ch); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772543425755683.9416587158637; Tue, 3 Mar 2026 05:10:25 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vxPVR-0007fI-9r; Tue, 03 Mar 2026 08:09:45 -0500 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 1vxPV8-0007RD-Ft for qemu-devel@nongnu.org; Tue, 03 Mar 2026 08:09:33 -0500 Received: from mail-switzerlandnorthazlp170100000.outbound.protection.outlook.com ([2a01:111:f403:c213::] helo=ZRAP278CU002.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vxPUz-0000OD-LF for qemu-devel@nongnu.org; Tue, 03 Mar 2026 08:09:20 -0500 Received: from ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::2a0) by GV0P278MB0984.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:4f::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.22; Tue, 3 Mar 2026 13:08:43 +0000 Received: from ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM ([fe80::6830:19f2:4a5b:749e]) by ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM ([fe80::6830:19f2:4a5b:749e%2]) with mapi id 15.20.9654.022; Tue, 3 Mar 2026 13:08:43 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bMYUQLXh04DfcqbdbF0YczW5DCJ5JkAqVLCsk2Q51fx+VOZIx6cwW5nCFZKKBYCm8OnbuwjWthTTUrEJPpQISVqUDGaocuWHBZYeL6rSqXaHXNn6vyrVpxOuLF97/1bJ/o+FlOyMhkj5Rxx4R6dyDuPs7nxuHyZMH2NSW4kae0uwQEgjlk3G/Wq6StVW5gQLFYKx/GihAzY9JofpdHacEFTIooBRryLuQ8Fhe+6ta0IzWrJvPy4AUVwGJrd7Dx9YCLczWwPDHX0dSKD3bA2ZLgfwDnqtvUKxGYkk0IIg8nd7pl8qjpKmUybKLT/QyQTUn8WwUPupHwr0is9RjF6Yvg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=gUXnfatmEsAmfIU5ILZBfL/gIZ28r9pvMnP8uEMKOxA=; b=Mv/Vmlk9eYd8gWT5T7F2Jk2GppMcefCoaQijsGzTZ5ixeqTDHZ7z4ewmYDh0qyzJtswHHyGc+50RIJ/+la0lBWiRN7HxijJyZOER+UOKSGEEoC3cjnyPBb8/ZdkoxSmNcyuXsK72fLAmHUNa/f+LZCV4esYZ8OfWF6FjAgFpsZlpCFAnCIzXP4/9Y1yhshdhY2V22PV9EIUiLZGDw+abU0FR5dip3CFcK4GG+81kRqAzpYvmuU2A7lnO90cJKBiQw1kzKlm11kgSh6+8B3Pj4bkFBMpHxBwQxsz1kQgyQwKkAj8TFwm6qoZIWTaz/ceqMui1+u6q+X5TPo6B7kIipQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epfl.ch; dmarc=pass action=none header.from=epfl.ch; dkim=pass header.d=epfl.ch; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epfl.ch; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gUXnfatmEsAmfIU5ILZBfL/gIZ28r9pvMnP8uEMKOxA=; b=lLvCQayB2Y/vkSVN/9WnjHUcDtXays/QvEnofdMKg/Qick8kziyWYen5lu43kXNLSl/4FSHioM6BF57aQXf27MFBpD1eV4tUacHLO6uVisBwJ+uX2CkMhX5ftYM0ip2t3w+uEv2j0381hU4CpMjxFanP/qDV588g4sq62KlJ+og= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epfl.ch; From: Florian Hofhammer To: qemu-devel@nongnu.org Cc: Florian Hofhammer , =?utf-8?q?Alex_Benn=C3=A9e?= , Pierrick Bouvier , Laurent Vivier , berrange@redhat.com, richard.henderson@linaro.org, imp@bsdimp.com Subject: [PATCH v6 1/7] plugins: add flag to specify whether PC is rw Date: Tue, 3 Mar 2026 14:07:27 +0100 Message-ID: <20260303-setpc-v5-v6-1-15c77cfe184e@epfl.ch> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260303-setpc-v5-v6-0-15c77cfe184e@epfl.ch> References: <20260303-setpc-v5-v6-0-15c77cfe184e@epfl.ch> Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=7742; i=florian.hofhammer@epfl.ch; h=from:subject:message-id; bh=1eBfWvBd2sU0mz5+WSHjXxLNi8omPy0N6ZUjNno/wHI=; b=owEBbQKS/ZANAwAKAZbrJ7oxX8d8AcsmYgBppr1fShCASXNACa2uOdgGn7fIxsiDUoJflPgw7 weUJhxbmQiJAjMEAAEKAB0WIQSoIHw/Sr677ZtN+EmW6ye6MV/HfAUCaaa9XwAKCRCW6ye6MV/H fNcLD/9iBErgiOsN+VR18frTu9w86HH8CwRsFbaD4KGb/o1OE+/iktiO29Yrue0P4OA7vYsjUgq kbWaagbJYr3mHvocwZBkDai23ZDaiNMUYc5zynmB9pOVTPFnTSun5idp59z14zmOTV6g4CcLdsL BtxipS4F2c7P5n0IuagNK64FhKMO/s9Wn80P8GmgZPkrE5LfbkGs90FiDgzijjeMnQxEYAmwKe0 /UWryWFuALAWkLpPJujUnPVEBCCpsU39dTO0fp5Udwq2ZYbfn+618H1mHagBQlIvKKkqWFp58IA 1whBxCacVmYinrR853YgpoUea051ALTKgWbfNb3RFUvXFfzmRhGAXQt6+ydLcZaX7C5Y3n5wCd/ J0VvDgRkZsgwF9y4Iv3QOhv41JzyiRzYs6oL8fkUqerdhv5Nr9geT+U4aMjaa6Ksjm+oywZOjMe 2Zms6f9B3bdbP2fhoMxsK5jdd1i04id6jJypArSKSbS2tNSD509j9oS+0sFwaD84lZpBCB6ST14 LC7LHMDs1N3HeE7co6pW+4varpjuYc6LeYtd+wkT/wXh3OhPTpIVPWPKILe4CgRq60ggYEPOxU3 89Akr8xDPw2s/EmLFVrcM1jPtrX7vcyQqnKmLOHhPiDEO7PJA0B934ELbXVBomNM2LbX7WTiOFn 31ls2Ta1oOOXpEw== X-Developer-Key: i=florian.hofhammer@epfl.ch; a=openpgp; fpr=A8207C3F4ABEBBED9B4DF84996EB27BA315FC77C Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: GVAP278CA0012.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:20::22) To ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::2a0) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: ZR1PPF9AC83A6B5:EE_|GV0P278MB0984:EE_ X-MS-Office365-Filtering-Correlation-Id: 9ef384bf-be5d-4d7f-9629-08de7925ff42 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|786006|376014|1800799024|19092799006|366016; X-Microsoft-Antispam-Message-Info: d9Ue9BgKYT28MH+ZwJ+EP+Sibh9cemb5J7wJEPKuE0jD8V8hfJmfTNsibB54+UDYKoN+AKsG+BJJcOmK9l4fwscJJoiEVxI4i7JaaVKJiPUHO5l2CkkhSdr8YRz1Wu2SX26ZGNQpBYWx7G0JB6wQeg4PaOiRkDtJPlip3eH30yX8fimaKeUBxmdUJHsAgeVrl3M2s4lsTNCoka6eyVdte+hK61OA3BIPTHYdg1M2twWLJtR+40vRV99ZVww1VMDe0ZMCQ5UaUOkdxBVyjwsiivBDNLrf9HJNoswhosWgEpmLcIBXDz0rOLRurs6oOL7/jPa5YCqKhO5qozz18lJu9R66qgOsxfL4buhLZriUt5Q8fcr8XMvTd9TsA8K5hDwaj7XJm45TY4Fknd+d3jvUTQLIR+gH0H+bpKwVJpvO2novu1ddBhtcadf9L2Dq1v3BhBRM/bM5yndmOZcmyNfceWT6lWgOuKtkxw7xnlMQ9l9EypzVl/2e8mcpE2ZzmkhhrDVjJTsk3nWQvdxf8OU3eq5VGWdXm2cUkS5YU6FZqy1jsT5n14P3Lzwsxtu9z1r368B0kRAtbUBxN2i+xMcH5teBZHQUPzZK6xhjzvvdJxcpTuamd8iAo16YDQ/tgJmFQCWUBfaCu3cgbsHSDoMaIXSVZ27DX5qaFt7kqww4Uu70vQG+K6hgusSXnUFj4uhU7z7UDeQkPWRD3Vd4i3eCg0QiLNJyCO0tEtmZ2psbTMk= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(786006)(376014)(1800799024)(19092799006)(366016); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NWhoOTJOMVk2ZWpsVWNCcVRBUmw3Z1hPMlJvM0dsVEV1aVV4RkJqOFYrOEVF?= =?utf-8?B?bFBRUHdCbXlpS1UyNGF4QzRLaHk1YlVaZy9QK3JJczRWSGhJSWFnY2hXMGRU?= =?utf-8?B?OWlMZ0ZRNWluZ3BueWdvVUhUelp1a1UxTnMvMzlkSHhTcS9IUjhZcWhFR3JD?= =?utf-8?B?N0RGOHRpVlFMVlptRHVnTWY2enBOQTVJMVZtaTR6VkNvNy9XSnk2cS80VDVD?= =?utf-8?B?U0JBZXF6V3cvRDBVbXMyWjZFZUJVNi9lZmxRU0dpU0dMU3prWGVBdmV1WE9v?= =?utf-8?B?VDlta2NzK2QrczJzRktrM1NFTE82Tk1UTjZGK2dUWXAvQXIzMjc3TGR5U081?= =?utf-8?B?QVdoRmM0c1VndUhSL0JDZkVlOUZqZjRvVk1QdVJ3TXE3NHJJWlRTTVh4VXBQ?= =?utf-8?B?WkNiKzNpZWxRQnpxSktFYlNkaGdLRmdPU3d2bUp2QU1PUWxWQXJvQVdJTzM5?= =?utf-8?B?WGpIMUx5SUlFVlI5UjRKczF3dThXY2JsMHA2OE9NeURKZ1F1Zld1TkN4dS82?= =?utf-8?B?Uk04SENkWEE1cXU4YWFIRmZScE9DMTh2ZzVBZkNwVURSZlBpQlREaWtyNTY0?= =?utf-8?B?bG9nSTh1U2lrT01XWFhtZTJZczc5K3BXUHBYZDZaTjZYaXcySlN3dnRaYnl2?= =?utf-8?B?YmRuK2ljbnlVUWhEQ1pER2hKNmQxalZnZWU5TmlGRC9VdVI3eGl2Yi92Zzdw?= =?utf-8?B?WCtoYkowMU0zOGJGK2VWQ1B3cGJFTVRSRkZOaGJOQlVTUHlyZ25GeVUrVFpQ?= =?utf-8?B?ZEdkNEM4WEkzVXY4N1ptZW1pYkt0SWdzSWMxdGhTSFhDaXk0UnNVR0JWUzgv?= =?utf-8?B?TWZVRDF5NHY1VC85RmFQMHFqVU9qMER2dGl2QTl3LzJBRkl4SURKVGtqVFJR?= =?utf-8?B?K28wSGdkRVl2YjU4SU9HbWR3VkdPMGhlMFZReW1BeEt3OVp6K3UwYUFsSnMz?= =?utf-8?B?VlVKOXgyRWFYbjVHSjNSZU4rRDJVZzNKZGYwdXoycG12ZllkNlM3VXVMSWJB?= =?utf-8?B?NEJ6VjlnUzVhSDc1Z0FyVXFTQlc1K0hTa1oyRnRISTJMVHhzSG9Hajd3SmRT?= =?utf-8?B?ZHpid3FWeG1TZERObU9xZ21iYTF1NlJzSHNTY3ZxMEo5K2tCK2lSc28vMm9N?= =?utf-8?B?MGRLdFJScjlEeXFqUHZsTndZWGkxMjdRZW91ZjB5emVJb2hhWit2SWtSYUdh?= =?utf-8?B?blh1TEFvamtsSzg5dXR0WEtSNzZWbkNtaHhPTHZxTzFDcU0zZ0ZIbWpuL1RV?= =?utf-8?B?YU1WMm9OOVdwMC93TnFUV1BRKzdmTG9qYlYvcUp2WGFrMEZRNGxldkxKMkV1?= =?utf-8?B?djBybnRpUzRhT2pzd2VGUXpBODlJUUVzbzh0VkNDQ2dRdWJCalRzUnpERkRG?= =?utf-8?B?V28wTGVYKzl5c0pQcGhpUkdDMDdhUEM1VjBjWE52Z1FjV1RQUDJPeldoMmhk?= =?utf-8?B?STNvenNSOXB6S3p3R0NuemVkbDlEQVBZbnNKV1BpdWhxK3hrQTRYWnFDWSto?= =?utf-8?B?ZmtZOXNjQTZGbHVOZEtoSGhMUS9Ud0E1cTNMTzZ5Q25UUlJVU292QWN5VzNN?= =?utf-8?B?NU5EZ0M5WHZ3ZSt1OXFvTEtOWEE3c3NPMW0xdFBYayt2SHVCUlpmODBZVWRx?= =?utf-8?B?T012SFMrRXJGU3g2TnA3WENURkh0NnEveWZvdGVacmpVdlkzSldFU2wrQVhP?= =?utf-8?B?UUlMMUV3d3NzK2ZOdlVHbm43dm5WSEE3UE1VWkpQcGpCaDE0TFRjc1NEd1Fs?= =?utf-8?B?NjBleGpKSkRhdnZMY3BQUGQ0c2lLNyswOFl2cDBDVjgyZFdVc25PWnhDa3I3?= =?utf-8?B?SDd0OHNDTWlXZ2IyWTZuV0h4UzhpbVdacEpiaDNqdFBia2xaa3BsVnBBRXJ5?= =?utf-8?B?d1B4a0xnSElGMktWRkFRbU45dXE3cUdRbTU5bmc5VlB2U1drZVFvSGpnUW5V?= =?utf-8?B?TG1yZFlnRjQzRGJOdnQ5dE5IWGxuWnZSSVFydUpSZVFGY2VUSVRpMU81L2tQ?= =?utf-8?B?M1lrTU80T2gzbGxDN1E5S0JPMWRLTVFaODFBckNtZmJHR04zeUtaV1dVUzB2?= =?utf-8?B?N0d2aHZ1ekhBTk9jNk15MUpLNTduRTl2ZHlMVktVUDRlVGhtMzJJUndKNzVz?= =?utf-8?B?R25nYzJkRjF2SlR2VlhKTCthUE9PRUJTQ3lRclZOblFTWVNkYkdqRVEvczc2?= =?utf-8?B?R0RpUHlBaTNuaGd2M0xXc21PdENVR0k1WXEvZVRXRCsvQWlxWCsyZGcwOHBp?= =?utf-8?B?aE5rOExtVnBqTlN6KzBFclB1ZTByVE5xUEFGR3lWaUs1VDlzS0FwM1BvNTVM?= =?utf-8?B?RjQvUnBjOEw2SzNiaWYvSEFBNlZYdEcyb1Y4NEx6b21sZVFIWWd2UT09?= X-OriginatorOrg: epfl.ch X-MS-Exchange-CrossTenant-Network-Message-Id: 9ef384bf-be5d-4d7f-9629-08de7925ff42 X-MS-Exchange-CrossTenant-AuthSource: ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2026 13:08:43.7908 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f6c2556a-c4fb-4ab1-a2c7-9e220df11c43 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 5/5ciuEtCdEha86zuqn30Kl9zx2EjKh/lx2jIt2tEwU+ewYH+a07Ymcd9jQEMnijfQTEsiC+jVXgh1M/fWqUY9ghsN/+FNOnXP8anoNxTPI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV0P278MB0984 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=2a01:111:f403:c213::; envelope-from=florian.hofhammer@epfl.ch; helo=ZRAP278CU002.outbound.protection.outlook.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_PASS=-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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @epfl.ch) X-ZM-MESSAGEID: 1772543969827139100 In addition to the flags specifying whether general-purpose registers are read-write (rw) during a plugin callback, we add an additional flag explicitly stating whether the PC is writable. This is in preparation of a patch that allows to explicitly set the PC to divert control flow from within a plugin callback, which is currently not possible. Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Florian Hofhammer Reviewed-by: Pierrick Bouvier --- include/plugins/qemu-plugin.h | 3 +++ plugins/api.c | 4 +++- plugins/core.c | 29 ++++++++++++++++------------- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/include/plugins/qemu-plugin.h b/include/plugins/qemu-plugin.h index 17a834dca9..a6ec8e275d 100644 --- a/include/plugins/qemu-plugin.h +++ b/include/plugins/qemu-plugin.h @@ -325,11 +325,14 @@ typedef struct { * @QEMU_PLUGIN_CB_NO_REGS: callback does not access the CPU's regs * @QEMU_PLUGIN_CB_R_REGS: callback reads the CPU's regs * @QEMU_PLUGIN_CB_RW_REGS: callback reads and writes the CPU's regs + * @QEMU_PLUGIN_CB_RW_REGS_PC: callback reads and writes the CPU's + * regs and updates the PC */ enum qemu_plugin_cb_flags { QEMU_PLUGIN_CB_NO_REGS, QEMU_PLUGIN_CB_R_REGS, QEMU_PLUGIN_CB_RW_REGS, + QEMU_PLUGIN_CB_RW_REGS_PC, }; =20 enum qemu_plugin_mem_rw { diff --git a/plugins/api.c b/plugins/api.c index 04ca7da7f1..32eb086300 100644 --- a/plugins/api.c +++ b/plugins/api.c @@ -458,7 +458,9 @@ bool qemu_plugin_write_register(struct qemu_plugin_regi= ster *reg, { g_assert(current_cpu); =20 - if (buf->len =3D=3D 0 || qemu_plugin_get_cb_flags() !=3D QEMU_PLUGIN_C= B_RW_REGS) { + if (buf->len =3D=3D 0 || + (qemu_plugin_get_cb_flags() !=3D QEMU_PLUGIN_CB_RW_REGS && + qemu_plugin_get_cb_flags() !=3D QEMU_PLUGIN_CB_RW_REGS_PC)) { return false; } =20 diff --git a/plugins/core.c b/plugins/core.c index 42fd986593..7220b9dbb4 100644 --- a/plugins/core.c +++ b/plugins/core.c @@ -119,7 +119,7 @@ static void plugin_vcpu_cb__discon(CPUState *cpu, struct qemu_plugin_cb *cb, *next; uint64_t to =3D cpu->cc->get_pc(cpu); =20 - qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_RW_REGS); + qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_RW_REGS_PC); if (cpu->cpu_index < plugin.num_vcpus) { /* iterate safely; plugins might uninstall themselves at any time = */ QLIST_FOREACH_SAFE_RCU(cb, &plugin.cb_lists[ev], entry, next) { @@ -395,15 +395,16 @@ void plugin_register_dyn_cb__udata(GArray **arr, enum qemu_plugin_cb_flags flags, void *udata) { - static TCGHelperInfo info[3] =3D { + static TCGHelperInfo info[4] =3D { [QEMU_PLUGIN_CB_NO_REGS].flags =3D TCG_CALL_NO_RWG, [QEMU_PLUGIN_CB_R_REGS].flags =3D TCG_CALL_NO_WG, [QEMU_PLUGIN_CB_RW_REGS].flags =3D 0, + [QEMU_PLUGIN_CB_RW_REGS_PC].flags =3D 0, /* * Match qemu_plugin_vcpu_udata_cb_t: * void (*)(uint32_t, void *) */ - [0 ... 2].typemask =3D (dh_typemask(void, 0) | + [0 ... 3].typemask =3D (dh_typemask(void, 0) | dh_typemask(i32, 1) | dh_typemask(ptr, 2)) }; @@ -425,15 +426,16 @@ void plugin_register_dyn_cond_cb__udata(GArray **arr, uint64_t imm, void *udata) { - static TCGHelperInfo info[3] =3D { + static TCGHelperInfo info[4] =3D { [QEMU_PLUGIN_CB_NO_REGS].flags =3D TCG_CALL_NO_RWG, [QEMU_PLUGIN_CB_R_REGS].flags =3D TCG_CALL_NO_WG, [QEMU_PLUGIN_CB_RW_REGS].flags =3D 0, + [QEMU_PLUGIN_CB_RW_REGS_PC].flags =3D 0, /* * Match qemu_plugin_vcpu_udata_cb_t: * void (*)(uint32_t, void *) */ - [0 ... 2].typemask =3D (dh_typemask(void, 0) | + [0 ... 3].typemask =3D (dh_typemask(void, 0) | dh_typemask(i32, 1) | dh_typemask(ptr, 2)) }; @@ -464,15 +466,16 @@ void plugin_register_vcpu_mem_cb(GArray **arr, !__builtin_types_compatible_p(qemu_plugin_meminfo_t, uint32_t) && !__builtin_types_compatible_p(qemu_plugin_meminfo_t, int32_t)); =20 - static TCGHelperInfo info[3] =3D { + static TCGHelperInfo info[4] =3D { [QEMU_PLUGIN_CB_NO_REGS].flags =3D TCG_CALL_NO_RWG, [QEMU_PLUGIN_CB_R_REGS].flags =3D TCG_CALL_NO_WG, [QEMU_PLUGIN_CB_RW_REGS].flags =3D 0, + [QEMU_PLUGIN_CB_RW_REGS_PC].flags =3D 0, /* * Match qemu_plugin_vcpu_mem_cb_t: * void (*)(uint32_t, qemu_plugin_meminfo_t, uint64_t, void *) */ - [0 ... 2].typemask =3D + [0 ... 3].typemask =3D (dh_typemask(void, 0) | dh_typemask(i32, 1) | (__builtin_types_compatible_p(qemu_plugin_meminfo_t, uint32_t) @@ -534,7 +537,7 @@ qemu_plugin_vcpu_syscall(CPUState *cpu, int64_t num, ui= nt64_t a1, uint64_t a2, QLIST_FOREACH_SAFE_RCU(cb, &plugin.cb_lists[ev], entry, next) { qemu_plugin_vcpu_syscall_cb_t func =3D cb->f.vcpu_syscall; =20 - qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_RW_REGS); + qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_RW_REGS_PC); func(cb->ctx->id, cpu->cpu_index, num, a1, a2, a3, a4, a5, a6, a7,= a8); qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_NO_REGS); } @@ -558,7 +561,7 @@ void qemu_plugin_vcpu_syscall_ret(CPUState *cpu, int64_= t num, int64_t ret) QLIST_FOREACH_SAFE_RCU(cb, &plugin.cb_lists[ev], entry, next) { qemu_plugin_vcpu_syscall_ret_cb_t func =3D cb->f.vcpu_syscall_ret; =20 - qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_RW_REGS); + qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_RW_REGS_PC); func(cb->ctx->id, cpu->cpu_index, num, ret); qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_NO_REGS); } @@ -584,7 +587,7 @@ qemu_plugin_vcpu_syscall_filter(CPUState *cpu, int64_t = num, uint64_t a1, return false; } =20 - qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_RW_REGS); + qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_RW_REGS_PC); =20 QLIST_FOREACH_SAFE_RCU(cb, &plugin.cb_lists[ev], entry, next) { qemu_plugin_vcpu_syscall_filter_cb_t func =3D cb->f.vcpu_syscall_f= ilter; @@ -605,7 +608,7 @@ void qemu_plugin_vcpu_idle_cb(CPUState *cpu) { /* idle and resume cb may be called before init, ignore in this case */ if (cpu->cpu_index < plugin.num_vcpus) { - qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_RW_REGS); + qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_RW_REGS_PC); plugin_vcpu_cb__simple(cpu, QEMU_PLUGIN_EV_VCPU_IDLE); qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_NO_REGS); } @@ -614,7 +617,7 @@ void qemu_plugin_vcpu_idle_cb(CPUState *cpu) void qemu_plugin_vcpu_resume_cb(CPUState *cpu) { if (cpu->cpu_index < plugin.num_vcpus) { - qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_RW_REGS); + qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_RW_REGS_PC); plugin_vcpu_cb__simple(cpu, QEMU_PLUGIN_EV_VCPU_RESUME); qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_NO_REGS); } @@ -885,6 +888,6 @@ enum qemu_plugin_cb_flags tcg_call_to_qemu_plugin_cb_fl= ags(int flags) } else if (flags & TCG_CALL_NO_WG) { return QEMU_PLUGIN_CB_R_REGS; } else { - return QEMU_PLUGIN_CB_RW_REGS; + return QEMU_PLUGIN_CB_RW_REGS_PC; } } --=20 2.53.0 From nobody Sat Apr 11 23:04:11 2026 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; arc=pass (i=1 dmarc=pass fromdomain=epfl.ch); dmarc=pass(p=quarantine dis=none) header.from=epfl.ch ARC-Seal: i=2; a=rsa-sha256; t=1772543465; cv=pass; d=zohomail.com; s=zohoarc; b=lXdQ8PoSt26uC4m6wgWxwQ2XJANaZh3Ywk7x2Edx5bCzgvXq3Ocwql+y147pyQzp+VcdS6syo/gVF7rhavi8ai4oWf0MJkitxB9mvtcyajWaCqCRcaW8ahAm4miLr+Wcp5mM+x7PmzpK2vorIP3b/koX0PHKw1fMLu/bDoH7XNs= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772543465; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=k1vwXZ9hFVcJT0K9OL3rLvJFqkjHRaZcLn/tcHEc7oo=; b=HRnVu9flomW2raQtMoal9b2Mvq5dfZkDdFTUwD1XgoJe3/l0SBn1fugZgEL5b57KsDA28gR+m7IHtoAQ0kbMTkqscx0SLYmvB0Yvnbz7NnsjXokZ9xreDgZFVYZBe8FlpBH/mAzLmBJ3uviphTdi8TmTsXG/JbDTJkZlczEszgc= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=epfl.ch); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772543465583706.3880753538295; Tue, 3 Mar 2026 05:11:05 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vxPVP-0007cf-5c; Tue, 03 Mar 2026 08:09:43 -0500 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 1vxPVE-0007Ud-8D for qemu-devel@nongnu.org; Tue, 03 Mar 2026 08:09:37 -0500 Received: from mail-switzerlandnorthazlp170100000.outbound.protection.outlook.com ([2a01:111:f403:c213::] helo=ZRAP278CU002.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vxPV9-0000OD-L0 for qemu-devel@nongnu.org; Tue, 03 Mar 2026 08:09:30 -0500 Received: from ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::2a0) by GV0P278MB0984.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:4f::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.22; Tue, 3 Mar 2026 13:08:44 +0000 Received: from ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM ([fe80::6830:19f2:4a5b:749e]) by ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM ([fe80::6830:19f2:4a5b:749e%2]) with mapi id 15.20.9654.022; Tue, 3 Mar 2026 13:08:44 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=S7A6fjH3gdGQ6p+KRdHn0YRZhgCvB7zqKWJk7DYdFuRoiOWshcjDlksoPHN3hEdDlVjnvkkde1YiKq5aTUOuO+MPTeIfMsxJP/sxsJoPt7cfiT6/HQr8+Rp95MUd+AtOZB4n6JttCe4oJBVoDzV7zUgJCbyenNxpESYCETkiJv1+FW5fFyn/f7YSKh3SczulrkSFNC0eOfsr7ZoRtNMub3LBvlKw/qtLF/FtlVW7o8lgPN4FZdr722Ybwv6nNUWRYL79XNfTi6IcypFa3E3VEmmZXZxFznJjYVfehgiQ/dc4XDUabBE4RcUIqLYdnnQY6ENgTYE2nu7+WBdGeoCdlw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=k1vwXZ9hFVcJT0K9OL3rLvJFqkjHRaZcLn/tcHEc7oo=; b=g7pisbzSnSX47FF4OnEYD5mVXPeGzEFD/G8EI8e4EzSUb1NqwVgavs9tBNpCb1j+bNqZq3OQkHxjEkYF+7M/QzRKBWjrVKe7G0gaWzL458Ua3f+PlrOTf3VyF4Bch6VLEUeNQTvycXjwugbuNEYXWwZ25rNHwdWI2MAeiOteBXwfS0V+Ih+AeXi+oJNXPmzwbpkzrKNHZe1SeluxuWdcYC5Qo2ov/lfVM7kcbjPL1I26bzO53wlhCeRVpdLqmN0CftypLz9Ma5rFOQwCJZyZjL8mGIwYvr3QsW+DFilZXzHgdmyniCVSDW9GSpmv8pWtCIRE9QISUielz9KiaB1yHg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epfl.ch; dmarc=pass action=none header.from=epfl.ch; dkim=pass header.d=epfl.ch; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epfl.ch; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=k1vwXZ9hFVcJT0K9OL3rLvJFqkjHRaZcLn/tcHEc7oo=; b=mTkfuiFCsgMn4Hpxa+7bdNt8h08gMqrw/ujj7RoISqwGV4gLHPxO0Qnh/zKd3Oqv+ffq7DD6x8w7UHMUPlNpfAPVP1/cC/PsUkikMz7wRZHcVd3MJ8xM6m3r9pGSqRgajbtid5vw+pXJtZDZzeDYqz/umqFMe/aS9I+C8eWtMbg= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epfl.ch; From: Florian Hofhammer To: qemu-devel@nongnu.org Cc: Florian Hofhammer , =?utf-8?q?Alex_Benn=C3=A9e?= , Pierrick Bouvier , Laurent Vivier , berrange@redhat.com, richard.henderson@linaro.org, imp@bsdimp.com Subject: [PATCH v6 2/7] linux-user: make syscall emulation interruptible Date: Tue, 3 Mar 2026 14:07:28 +0100 Message-ID: <20260303-setpc-v5-v6-2-15c77cfe184e@epfl.ch> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260303-setpc-v5-v6-0-15c77cfe184e@epfl.ch> References: <20260303-setpc-v5-v6-0-15c77cfe184e@epfl.ch> Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=14808; i=florian.hofhammer@epfl.ch; h=from:subject:message-id; bh=0zN94RKNMfqTrsNhvTmcSTkaX36dEL1iEvxYUsSMkRg=; b=owEBbQKS/ZANAwAKAZbrJ7oxX8d8AcsmYgBppr1hpeZQOx9zZQuFAnfPUg0fDrb0GJyMPwTRa o2QA+EZbRCJAjMEAAEKAB0WIQSoIHw/Sr677ZtN+EmW6ye6MV/HfAUCaaa9YQAKCRCW6ye6MV/H fIH+EACUembojo6QGpykSSulOKtpo1PN+1pXDZ4ne6m3JYu5h6GRoVXS/pgQmqyZbM4kmduMEcI +VvkyBfsV9zf5fn03qie/C5t4C7/ClDvTWFTCuhkELxfG7OxLt0dRw2eMs+mSTx1CeGw7m33li1 Rjk+ObWnBFgpYK+ENpTvsHoCynNBjpI8oYwDzSJJm/Y3mjamCdw+b7/D6SkzNHKLoUYoGzjag+F omDMxBb2E2b2CR/zre+3YTu7g4QPtNYa5Pq367+5s//EvIG++4cFqq+qKE6GIibkdHs1LfgUCSA OWxCjpiVa3b4G/7bUzkswYxKB6nn7OBt364TQzI9zW0LM9eDoHhYxGllgTvcBh5pjbq2u6y218K pMdqa+9uQBHwgJTXCHXheKIBDaa3yx1Fu4NH56/UP/Yu09jAsnoTtFi2yz7GnoTlRb3BAMJ34ey 6EL6oJnOpY6NxcUjzFn+ZPqyUtN7zGHmoaMc9lTxns4svZ6ZEQTc8qNQpXVR9NZaS1NBsrj6kd4 GQBHucikWan43w2/IuPVkE7elkzoV8qKqOlEfp2LZoOySZ2mA1zsee7qohD6kVEpjpR3Tazcy1U jx7GBP3Q+yb0DWvfE7BRf0YXHPPTTp34rp5mbeDoC+MaLvXyJYA92AWBA0iOtz51wEFFtcusnLW FHUs3FarsVxCrEg== X-Developer-Key: i=florian.hofhammer@epfl.ch; a=openpgp; fpr=A8207C3F4ABEBBED9B4DF84996EB27BA315FC77C Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: GVAP278CA0012.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:20::22) To ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::2a0) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: ZR1PPF9AC83A6B5:EE_|GV0P278MB0984:EE_ X-MS-Office365-Filtering-Correlation-Id: a01c0114-db9d-40ff-cc99-08de7925ff94 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|786006|376014|1800799024|19092799006|366016; X-Microsoft-Antispam-Message-Info: g9cbM9BbHB9/M5z598C3gjO5VhjyCUDtiHSaBDMR6belfafwvJYfc1slsZvMq5V/LinI6zEQdb35cHIAroc4sEi15wKr8HZkmjeebWpDo+ROBcJycskUeSORV8MuYY8Fs7O2yp60czFYm0VosyRtPGAuI1Hy49B6ax1Rthao0hDvk9vA5iSPnHChHdb8maVe94sy8ccZPiyU0+gC2JyW/gqDGtnTAAkOTOhlgSJtl3CgKyFcFxOmVcGVa6tRiOEvkYyOQlW47RHEYMU37dyMD/TvqrxR5xkbdeIgRoUGvjfUooxmiD7T176WT+O8EPVSU6ksaHKinHZ5jAPub301tgMNdhTm8M64a2pSmd1PeSx9Qc12LDtizFugqrJORRa6bAazFPF5/8Sm37CNPnkCMn7Sn/2YQozKgdOkhjKZ1CzIAYkxcgwTVzHPhvlwqeZU4Vsv8n7bo/MVg5Ho6Qy5TijW35LneQyPysw4T6qRaRrxS4HKjAnJtKYn+AH8F0Y1hB9qVnbzWGWRq7fdJAZAiRybwIP7bs/jTzPAdxvYr1s1TxiX0y4FjiH/BdW8RWc5Eb4NTYbQcX0lHQ8YbYE8jpFXHxnpYIe9KifxrA6+dUN0GzBcrCowhNNQqGNhXuGx9yOneTVd+RTlKBbY3XTMrQQ42fIDjGdqtp2ArTttHG5A8NritAvtLUKYE/SE8WKZMErVuPjHdGVHMe6jdd66cgOe1FTKv+wU6YKrZG5QgsQ= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(786006)(376014)(1800799024)(19092799006)(366016); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZWRkdFF3YkRNNUJuMTJoWEZBRXJYb1VVcGZOY1QwMlpySHc0TGQ1b1F5ajBU?= =?utf-8?B?RkViSE1scGRjRW5IWDk3SU8xeXpMbXVUcnFVbklhTTBIMTFKSkhiQWdmMkl0?= =?utf-8?B?Z0hFdnZRczRwYTlRZlZFQ2orUkFXcnNBUzdkVHN0eXdFTlVlc3dqRGdlVHZw?= =?utf-8?B?bVkyUUV2UnhTbnE2alpRT2NRWjQ4eURxcVd2RFpJNWF0dE1qVDRzRC9aa09X?= =?utf-8?B?UEx2TTN6bFlYUDBzWlJwS3VOdHlQZW1sYXBDSmlzYUc1L3pVY0YrRTFPN2NN?= =?utf-8?B?cW9WZ0ZWYW83Y3BlZWtBM0lQTUZ6L1BZZ1UzT3NCdkdOMWZTTXk3dmlCbERC?= =?utf-8?B?eDg3MldveDkwQ1YyZWdvaElwWUwrRFZnWW5BdTJqcVRqZzNWQThjK1NUSEZi?= =?utf-8?B?VlFYZG03ajExaVVOMkYwQXZObHVwRGptQTRUWTUyL1FKYWJ4dnlLZm9NdXRJ?= =?utf-8?B?SmFpT084ZTB5UnpOSTVUS1Y5MkVCaDRXMTRqSlJTZ0Y3N1FIYTE0QUR2UlZV?= =?utf-8?B?eVRITTY3bGhwdXkxUFB1dmlFZXpwYTc4NXRLMnAxdnR5OHNycnJLNU04Z045?= =?utf-8?B?dFlRRGxMYWZFTmdZSnYxZ1ZTY0M2bzZQY2tBRmExUzRGMFRUK1JOc0Z4eDd5?= =?utf-8?B?b1RUdDNKRFpzQStlb1NSLzdxbDBEVUpIMDJpcDZ1U0dzVkx5NFZZQkQwempT?= =?utf-8?B?MmtSSzNmYkJiSURlSE9UZGUyL1htNEJVZW5ySnhRRm1adWMyc2Z4bDNwQ0VB?= =?utf-8?B?dHdxSDU1RERCbDdzcTkySnFHcFNGajRIUG1uY2ZRZnNCcE84Z1d1bURKL3NF?= =?utf-8?B?Q01ETGpCZzA1dUdDWk9vdkFwQkMxVE9KaHBFY0ZkWHc2eVhFRXZiQjkwOXJh?= =?utf-8?B?Q28yM2IrNDVsM2NHNXFGaUN5cGJIVDZxeStGWHFFaDMyT3pmSXRjWFFpZk1L?= =?utf-8?B?b2p6aVNUOGpDN0JJS0FnS01oT1VaVmRKb01kMjdUWVAvY2tqL3dGejRUZzFN?= =?utf-8?B?VU8xQlh4aHJRVDdFbnEwRHJPUVc5VU5Ud3h5c285eWhEVXBWeC9CZTlUQjFD?= =?utf-8?B?TWgvQVc3LzZIU2lzb1k2UmdiK0ZmZnVnbGVwN1lVbXNrSVJnKzRTVlFzOUhu?= =?utf-8?B?UnF2UjBxU1RnZzNSZFVMQUM4YXlKcUdCL3JWNkVkblJpSnlNaXh1Z3MxM1Rp?= =?utf-8?B?Tm9qTDRFUlRaQ0F2VDRnUkZpY1Z3THdkNW8rU3pjT21CZ1BsYjJmOWdNUFpJ?= =?utf-8?B?aDdpeVpjTEIzRUNoK25idmhPQlNiNkNLbkpYYkJGVlkwK1dBdkw2TSt1cit0?= =?utf-8?B?ekQxUk15Wk1ValIySDBFSXlrNG90MEkrYWJ4NVFDYWU2V3VlSGppV3hQNzI2?= =?utf-8?B?S3hyMC8vVnZ1TTFJakVZcExoUDBQNUhCaXd4b0MyVEY0VWhmVWVqa2tTcHht?= =?utf-8?B?TzBYY3cyOEc5WFp4T3RYaDB4MzgvdHQ4dzhUMVRLRnhrU2V0ajlRQS9TUk1u?= =?utf-8?B?bDZ0bXlCRmtwbGU2TXFnZUJBMGluSGlhd1hOMTNtN2lnYXFxb3VtbEh0Q2tP?= =?utf-8?B?YkF1VWJJZ2lCM3BkWEU0ZFEzejRxUHRtdEZmeTFKeFFRckRVbDVaa0pJMjhn?= =?utf-8?B?TS85aDJkMGN1ZGNVKytsdm1GM2NQRlVDaVdoc0Rnc2N0YmFZRzhNcjkrb0k3?= =?utf-8?B?ZW9yVFphMnY4SitkVnEyYzZBRytvZW1KZDE0SEg0TFRlZUFjZEhnZVRUL2Nt?= =?utf-8?B?ZzlwL2MrVDNSSDdqeHBzU2s1L0tBbWgreTgvbHVtblQrWjRFQ3BmRXh3YSsv?= =?utf-8?B?S25yeEtqK2E5TEdzdFhIUklXM08reGRrQWljTENSNnpRaS9pc1YycTc3dmNo?= =?utf-8?B?N3Zzb28yZW81TE5vME83UTlkdDVtUU1KZm1vdnRjM0RQWHMvU0dKVmxDWkJt?= =?utf-8?B?a3l6UFlJdllIN2RIMy81bkdlYUxEZm52ZVM4Y3BFSUNSTURWTTk5VjBLQUpu?= =?utf-8?B?bVh5cVN2UmVSWHNnUVhUVmcrc1hRbWE5bFNlNmhTaXBtWjd3eUFnVnlSUTN5?= =?utf-8?B?RHFwWFhUQTI4V0dLWUIzWXQrTVpWZGtVWXdkclEzSlhDSVkvcVBsVWEzbGEz?= =?utf-8?B?SFlaT3dlNHJteTlKYi9jbWpGTTNiUVZobitjcVM2SGVnOVJwcCtNNnNxN21q?= =?utf-8?B?V2Q3NWV4OU9KVEVhbG9mY1BTbnd4OVFiSVk4YlJjeXdHZ2hubUhCQzdIajVl?= =?utf-8?B?TzhyZ3ZxR21kWm1rUVkyeVJtSHZEZWNFOUNGTXRubWlDWHI2dzFJSXBTd1k0?= =?utf-8?B?WUsyZGg2blBRWm1DbDA3Ums2ZG11WHNkbE90d20zUldyYlhoWVFNdz09?= X-OriginatorOrg: epfl.ch X-MS-Exchange-CrossTenant-Network-Message-Id: a01c0114-db9d-40ff-cc99-08de7925ff94 X-MS-Exchange-CrossTenant-AuthSource: ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2026 13:08:44.3195 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f6c2556a-c4fb-4ab1-a2c7-9e220df11c43 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: WP+6j9bplRRp+2UcArqFbj+cfDItGNrq96Xef8XHgqIWMLKjFCGNIJ5erfq3efnGDnRnF4jFs9GgUjblPS0LpU2WU8LCxa7B8OxGa2wYyqg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV0P278MB0984 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=2a01:111:f403:c213::; envelope-from=florian.hofhammer@epfl.ch; helo=ZRAP278CU002.outbound.protection.outlook.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_PASS=-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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @epfl.ch) X-ZM-MESSAGEID: 1772544160875139100 The syscall emulation code previously wasn't interruptible via cpu_loop_exit(), as this construct relies on a longjmp target that is not live anymore in the syscall handling code. Consequently, longjmp() would operate on a (potentially overwritten) stale jump buffer. This patch adds a= n additional setjmp and the necessary handling around it to make longjmp() (and by proxy cpu_loop_exit() safe to call even within a syscall context. Reviewed-by: Warner Losh Reviewed-by: Pierrick Bouvier Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Florian Hofhammer --- linux-user/aarch64/cpu_loop.c | 2 +- linux-user/alpha/cpu_loop.c | 2 +- linux-user/arm/cpu_loop.c | 2 +- linux-user/hexagon/cpu_loop.c | 2 +- linux-user/hppa/cpu_loop.c | 1 + linux-user/i386/cpu_loop.c | 8 +++++--- linux-user/include/special-errno.h | 8 ++++++++ linux-user/loongarch64/cpu_loop.c | 5 +++-- linux-user/m68k/cpu_loop.c | 2 +- linux-user/microblaze/cpu_loop.c | 2 +- linux-user/mips/cpu_loop.c | 9 ++++++--- linux-user/or1k/cpu_loop.c | 2 +- linux-user/ppc/cpu_loop.c | 10 +++++++--- linux-user/riscv/cpu_loop.c | 2 +- linux-user/s390x/cpu_loop.c | 2 +- linux-user/sh4/cpu_loop.c | 2 +- linux-user/sparc/cpu_loop.c | 4 +++- linux-user/syscall.c | 16 ++++++++++++++++ linux-user/xtensa/cpu_loop.c | 1 + 19 files changed, 60 insertions(+), 22 deletions(-) diff --git a/linux-user/aarch64/cpu_loop.c b/linux-user/aarch64/cpu_loop.c index 7f66a879ea..e7f643d69d 100644 --- a/linux-user/aarch64/cpu_loop.c +++ b/linux-user/aarch64/cpu_loop.c @@ -181,7 +181,7 @@ void cpu_loop(CPUARMState *env) 0, 0); if (ret =3D=3D -QEMU_ERESTARTSYS) { env->pc -=3D 4; - } else if (ret !=3D -QEMU_ESIGRETURN) { + } else if (ret !=3D -QEMU_ESIGRETURN && ret !=3D -QEMU_ESETPC)= { env->xregs[0] =3D ret; } break; diff --git a/linux-user/alpha/cpu_loop.c b/linux-user/alpha/cpu_loop.c index f93597c400..bef196b1f5 100644 --- a/linux-user/alpha/cpu_loop.c +++ b/linux-user/alpha/cpu_loop.c @@ -82,7 +82,7 @@ void cpu_loop(CPUAlphaState *env) env->pc -=3D 4; break; } - if (sysret =3D=3D -QEMU_ESIGRETURN) { + if (sysret =3D=3D -QEMU_ESIGRETURN || sysret =3D=3D -QEMU_= ESETPC) { break; } /* Syscall writes 0 to V0 to bypass error check, similar diff --git a/linux-user/arm/cpu_loop.c b/linux-user/arm/cpu_loop.c index 40aefc4c1d..19874f4c72 100644 --- a/linux-user/arm/cpu_loop.c +++ b/linux-user/arm/cpu_loop.c @@ -399,7 +399,7 @@ void cpu_loop(CPUARMState *env) 0, 0); if (ret =3D=3D -QEMU_ERESTARTSYS) { env->regs[15] -=3D env->thumb ? 2 : 4; - } else if (ret !=3D -QEMU_ESIGRETURN) { + } else if (ret !=3D -QEMU_ESIGRETURN && ret !=3D -QEMU= _ESETPC) { env->regs[0] =3D ret; } } diff --git a/linux-user/hexagon/cpu_loop.c b/linux-user/hexagon/cpu_loop.c index 5711055aff..9464246e9e 100644 --- a/linux-user/hexagon/cpu_loop.c +++ b/linux-user/hexagon/cpu_loop.c @@ -56,7 +56,7 @@ void cpu_loop(CPUHexagonState *env) 0, 0); if (ret =3D=3D -QEMU_ERESTARTSYS) { env->gpr[HEX_REG_PC] -=3D 4; - } else if (ret !=3D -QEMU_ESIGRETURN) { + } else if (ret !=3D -QEMU_ESIGRETURN && ret !=3D -QEMU_ESETPC)= { env->gpr[0] =3D ret; } break; diff --git a/linux-user/hppa/cpu_loop.c b/linux-user/hppa/cpu_loop.c index 972e85c487..4b4b663052 100644 --- a/linux-user/hppa/cpu_loop.c +++ b/linux-user/hppa/cpu_loop.c @@ -124,6 +124,7 @@ void cpu_loop(CPUHPPAState *env) break; case -QEMU_ERESTARTSYS: case -QEMU_ESIGRETURN: + case -QEMU_ESETPC: break; } break; diff --git a/linux-user/i386/cpu_loop.c b/linux-user/i386/cpu_loop.c index f3f58576af..fe922fceb5 100644 --- a/linux-user/i386/cpu_loop.c +++ b/linux-user/i386/cpu_loop.c @@ -181,7 +181,9 @@ static void emulate_vsyscall(CPUX86State *env) if (ret =3D=3D -TARGET_EFAULT) { goto sigsegv; } - env->regs[R_EAX] =3D ret; + if (ret !=3D -QEMU_ESETPC) { + env->regs[R_EAX] =3D ret; + } =20 /* Emulate a ret instruction to leave the vsyscall page. */ env->eip =3D caller; @@ -234,7 +236,7 @@ void cpu_loop(CPUX86State *env) 0, 0); if (ret =3D=3D -QEMU_ERESTARTSYS) { env->eip -=3D 2; - } else if (ret !=3D -QEMU_ESIGRETURN) { + } else if (ret !=3D -QEMU_ESIGRETURN && ret !=3D -QEMU_ESETPC)= { env->regs[R_EAX] =3D ret; } break; @@ -253,7 +255,7 @@ void cpu_loop(CPUX86State *env) 0, 0); if (ret =3D=3D -QEMU_ERESTARTSYS) { env->eip -=3D 2; - } else if (ret !=3D -QEMU_ESIGRETURN) { + } else if (ret !=3D -QEMU_ESIGRETURN && ret !=3D -QEMU_ESETPC)= { env->regs[R_EAX] =3D ret; } break; diff --git a/linux-user/include/special-errno.h b/linux-user/include/specia= l-errno.h index 4120455baa..1db757241a 100644 --- a/linux-user/include/special-errno.h +++ b/linux-user/include/special-errno.h @@ -29,4 +29,12 @@ */ #define QEMU_ESIGRETURN 513 =20 +/* + * This is returned after a plugin has used the qemu_plugin_set_pc API, to + * indicate that the plugin deliberately changed the PC and potentially + * modified the register values. The main loop should not touch the guest + * registers for this reason. + */ +#define QEMU_ESETPC 514 + #endif /* SPECIAL_ERRNO_H */ diff --git a/linux-user/loongarch64/cpu_loop.c b/linux-user/loongarch64/cpu= _loop.c index 26a5ce3a93..603fcc39c7 100644 --- a/linux-user/loongarch64/cpu_loop.c +++ b/linux-user/loongarch64/cpu_loop.c @@ -44,9 +44,10 @@ void cpu_loop(CPULoongArchState *env) env->pc -=3D 4; break; } - if (ret =3D=3D -QEMU_ESIGRETURN) { + if (ret =3D=3D -QEMU_ESIGRETURN || ret =3D=3D -QEMU_ESETPC) { /* - * Returning from a successful sigreturn syscall. + * Returning from a successful sigreturn syscall or from + * control flow diversion in a plugin callback. * Avoid clobbering register state. */ break; diff --git a/linux-user/m68k/cpu_loop.c b/linux-user/m68k/cpu_loop.c index 2c9f628241..b98ca8ff7b 100644 --- a/linux-user/m68k/cpu_loop.c +++ b/linux-user/m68k/cpu_loop.c @@ -66,7 +66,7 @@ void cpu_loop(CPUM68KState *env) 0, 0); if (ret =3D=3D -QEMU_ERESTARTSYS) { env->pc -=3D 2; - } else if (ret !=3D -QEMU_ESIGRETURN) { + } else if (ret !=3D -QEMU_ESIGRETURN && ret !=3D -QEMU_ESE= TPC) { env->dregs[0] =3D ret; } } diff --git a/linux-user/microblaze/cpu_loop.c b/linux-user/microblaze/cpu_l= oop.c index 78506ab23d..06d92c0b90 100644 --- a/linux-user/microblaze/cpu_loop.c +++ b/linux-user/microblaze/cpu_loop.c @@ -54,7 +54,7 @@ void cpu_loop(CPUMBState *env) if (ret =3D=3D -QEMU_ERESTARTSYS) { /* Wind back to before the syscall. */ env->pc -=3D 4; - } else if (ret !=3D -QEMU_ESIGRETURN) { + } else if (ret !=3D -QEMU_ESIGRETURN && ret !=3D -QEMU_ESETPC)= { env->regs[3] =3D ret; } /* All syscall exits result in guest r14 being equal to the diff --git a/linux-user/mips/cpu_loop.c b/linux-user/mips/cpu_loop.c index 2365de1de1..fa264b27ec 100644 --- a/linux-user/mips/cpu_loop.c +++ b/linux-user/mips/cpu_loop.c @@ -140,9 +140,12 @@ done_syscall: env->active_tc.PC -=3D 4; break; } - if (ret =3D=3D -QEMU_ESIGRETURN) { - /* Returning from a successful sigreturn syscall. - Avoid clobbering register state. */ + if (ret =3D=3D -QEMU_ESIGRETURN || ret =3D=3D -QEMU_ESETPC) { + /* + * Returning from a successful sigreturn syscall or from + * control flow diversion in a plugin callback. + * Avoid clobbering register state. + */ break; } if ((abi_ulong)ret >=3D (abi_ulong)-1133) { diff --git a/linux-user/or1k/cpu_loop.c b/linux-user/or1k/cpu_loop.c index 2167d880d5..e7e9929e6f 100644 --- a/linux-user/or1k/cpu_loop.c +++ b/linux-user/or1k/cpu_loop.c @@ -48,7 +48,7 @@ void cpu_loop(CPUOpenRISCState *env) cpu_get_gpr(env, 8), 0, 0); if (ret =3D=3D -QEMU_ERESTARTSYS) { env->pc -=3D 4; - } else if (ret !=3D -QEMU_ESIGRETURN) { + } else if (ret !=3D -QEMU_ESIGRETURN && ret !=3D -QEMU_ESETPC)= { cpu_set_gpr(env, 11, ret); } break; diff --git a/linux-user/ppc/cpu_loop.c b/linux-user/ppc/cpu_loop.c index b0b0cb14b4..1f9ee20bd0 100644 --- a/linux-user/ppc/cpu_loop.c +++ b/linux-user/ppc/cpu_loop.c @@ -340,9 +340,13 @@ void cpu_loop(CPUPPCState *env) env->nip -=3D 4; break; } - if (ret =3D=3D (target_ulong)(-QEMU_ESIGRETURN)) { - /* Returning from a successful sigreturn syscall. - Avoid corrupting register state. */ + if (ret =3D=3D (target_ulong)(-QEMU_ESIGRETURN) || + ret =3D=3D (target_ulong)(-QEMU_ESETPC)) { + /* + * Returning from a successful sigreturn syscall or from + * control flow diversion in a plugin callback. + * Avoid corrupting register state. + */ break; } if (ret > (target_ulong)(-515)) { diff --git a/linux-user/riscv/cpu_loop.c b/linux-user/riscv/cpu_loop.c index ce542540c2..eecc8d1517 100644 --- a/linux-user/riscv/cpu_loop.c +++ b/linux-user/riscv/cpu_loop.c @@ -65,7 +65,7 @@ void cpu_loop(CPURISCVState *env) } if (ret =3D=3D -QEMU_ERESTARTSYS) { env->pc -=3D 4; - } else if (ret !=3D -QEMU_ESIGRETURN) { + } else if (ret !=3D -QEMU_ESIGRETURN && ret !=3D -QEMU_ESETPC)= { env->gpr[xA0] =3D ret; } if (cs->singlestep_enabled) { diff --git a/linux-user/s390x/cpu_loop.c b/linux-user/s390x/cpu_loop.c index 4929b32e1f..67d2a803fb 100644 --- a/linux-user/s390x/cpu_loop.c +++ b/linux-user/s390x/cpu_loop.c @@ -83,7 +83,7 @@ void cpu_loop(CPUS390XState *env) env->regs[6], env->regs[7], 0, 0); if (ret =3D=3D -QEMU_ERESTARTSYS) { env->psw.addr -=3D env->int_svc_ilen; - } else if (ret !=3D -QEMU_ESIGRETURN) { + } else if (ret !=3D -QEMU_ESIGRETURN && ret !=3D -QEMU_ESETPC)= { env->regs[2] =3D ret; } =20 diff --git a/linux-user/sh4/cpu_loop.c b/linux-user/sh4/cpu_loop.c index 0c9d7e9c46..ee2958d0d9 100644 --- a/linux-user/sh4/cpu_loop.c +++ b/linux-user/sh4/cpu_loop.c @@ -50,7 +50,7 @@ void cpu_loop(CPUSH4State *env) 0, 0); if (ret =3D=3D -QEMU_ERESTARTSYS) { env->pc -=3D 2; - } else if (ret !=3D -QEMU_ESIGRETURN) { + } else if (ret !=3D -QEMU_ESIGRETURN && ret !=3D -QEMU_ESETPC)= { env->gregs[0] =3D ret; } break; diff --git a/linux-user/sparc/cpu_loop.c b/linux-user/sparc/cpu_loop.c index 7391e2add8..ab633eeae3 100644 --- a/linux-user/sparc/cpu_loop.c +++ b/linux-user/sparc/cpu_loop.c @@ -229,7 +229,9 @@ void cpu_loop (CPUSPARCState *env) env->regwptr[2], env->regwptr[3], env->regwptr[4], env->regwptr[5], 0, 0); - if (ret =3D=3D -QEMU_ERESTARTSYS || ret =3D=3D -QEMU_ESIGRETUR= N) { + if (ret =3D=3D -QEMU_ERESTARTSYS || + ret =3D=3D -QEMU_ESIGRETURN || + ret =3D=3D -QEMU_ESETPC) { break; } if ((abi_ulong)ret >=3D (abi_ulong)(-515)) { diff --git a/linux-user/syscall.c b/linux-user/syscall.c index d466d0e32f..99e1ed97d9 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -600,6 +601,9 @@ const char *target_strerror(int err) if (err =3D=3D QEMU_ESIGRETURN) { return "Successful exit from sigreturn"; } + if (err =3D=3D QEMU_ESETPC) { + return "Successfully redirected control flow"; + } =20 return strerror(target_to_host_errno(err)); } @@ -14410,6 +14414,18 @@ abi_long do_syscall(CPUArchState *cpu_env, int num= , abi_long arg1, return -QEMU_ESIGRETURN; } =20 + /* + * Set up a longjmp target here so that we can call cpu_loop_exit to + * redirect control flow back to the main loop even from within + * syscall-related plugin callbacks. + * For other types of callbacks or longjmp call sites, the longjmp tar= get + * is set up in the cpu loop itself but in syscalls the target is not = live + * anymore. + */ + if (unlikely(sigsetjmp(cpu->jmp_env, 0) !=3D 0)) { + return -QEMU_ESETPC; + } + record_syscall_start(cpu, num, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); =20 diff --git a/linux-user/xtensa/cpu_loop.c b/linux-user/xtensa/cpu_loop.c index a0ff10eff8..d2b4ccdfad 100644 --- a/linux-user/xtensa/cpu_loop.c +++ b/linux-user/xtensa/cpu_loop.c @@ -186,6 +186,7 @@ void cpu_loop(CPUXtensaState *env) break; =20 case -QEMU_ESIGRETURN: + case -QEMU_ESETPC: break; } break; --=20 2.53.0 From nobody Sat Apr 11 23:04:11 2026 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; arc=pass (i=1 dmarc=pass fromdomain=epfl.ch); dmarc=pass(p=quarantine dis=none) header.from=epfl.ch ARC-Seal: i=2; a=rsa-sha256; t=1772543400; cv=pass; d=zohomail.com; s=zohoarc; b=NXoX9+w2EwPY80ROM+C7fxY/+L640pglFdWXnjKxRrlOBkejSG1riLy4EENp3ARiAHHyLi5qQz6mpxkK/M1FqJYkS9rHMNjrTSKIw2+K00/oL2uVIGPo4PjcAbqlCNM9qYhVY4yc6/lJ5nrqFWGKwTTZwOb5qQ3hVhVAz4TXKAU= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772543400; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=eBrS7xkMX1n+psOQBGfxkii6J2QBN6t7Zytp3wmugQE=; b=Xns+Q4ljJbufhBPJwkRuC64DqAlCC9KMwkb2rZaN7ZTN++nOlX/sg0bupTwiSkNRJl01EQtONRYTCGNg2w54lL9cNn8yxoayCn1f9ZgPNro4VQFuY1cBPAb00PTJ1u3BuDjJx0Sh3cZtEpWTFI6rkMhVMtJW2gFFMsrRckYr8ys= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=epfl.ch); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772543399925738.3220230366275; Tue, 3 Mar 2026 05:09:59 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vxPVW-00080T-IC; Tue, 03 Mar 2026 08:09:50 -0500 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 1vxPVK-0007Vt-3d for qemu-devel@nongnu.org; Tue, 03 Mar 2026 08:09:38 -0500 Received: from mail-switzerlandnorthazlp170100000.outbound.protection.outlook.com ([2a01:111:f403:c213::] helo=ZRAP278CU002.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vxPVF-0000OD-03 for qemu-devel@nongnu.org; Tue, 03 Mar 2026 08:09:36 -0500 Received: from ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::2a0) by GV0P278MB0984.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:4f::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.22; Tue, 3 Mar 2026 13:08:44 +0000 Received: from ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM ([fe80::6830:19f2:4a5b:749e]) by ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM ([fe80::6830:19f2:4a5b:749e%2]) with mapi id 15.20.9654.022; Tue, 3 Mar 2026 13:08:44 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=azQmfeaOfq2omF4EMhmJVlr9hd4iUW4Y7F834VaUc/euRC6qT2nV2lLFDpJvqePNexKotVAsKMfUe4Y/z0sjVzqpD6ab8YCsqaE5ApBiaSZgznDCryHkC8955kpwQwAB8a2YDrxlwxW47jgvOnab8O+pq4gwIhzNqOxfBQTPGIeYUlIsnTjym1jO1ShyJL1It7PV7zQi23PwRgVGTTxMcEgxDS5uRVjHkSaNZHwx1WWejrWHLohlaJ34hKa0q9xVPAvgyMqB5iBaYBA3VMpOBKU9M4AwV1xOwPl8t8EK5KgilUke2vDspwxfLXnfssV8kTm2mId+d1TuTDlY7L4EUg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=eBrS7xkMX1n+psOQBGfxkii6J2QBN6t7Zytp3wmugQE=; b=HXOpw5zN5Y2j2eA6YwLtN8QuDTVuIWeR+SKUduLifWZ4pu4kFa5W2VwmDqwbr7ARTerobi9Y5aE81JwCSbflPBv9Jk+Da4dO+Jmq2c5Ks0rQcJBSUKX9waO6KY6Nq7IEX+wX6zAMqaHfN6UdPcy0nyU9gutueCu0BiqVIBUdhldWxQfrc0834SyvALXXLrycyg0iMIHq0qJbR/4zXJ4fzsvSlgV3mCQdKxJOLO8KWTwdEiTkGhPNh6bULWepQG9f0hlsNBJ9huRgZl6IIuUwociaHEpt+VPCu4esDpp+1WuXICIVvsDAIVaY8Pv4hUJ+GgPsMJF/m2Fl5GiGTMsdjw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epfl.ch; dmarc=pass action=none header.from=epfl.ch; dkim=pass header.d=epfl.ch; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epfl.ch; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=eBrS7xkMX1n+psOQBGfxkii6J2QBN6t7Zytp3wmugQE=; b=pBH+Bpd0VkDdwbwKSkUC4Pt+2q/ZM0JRX4jQ5ffNq/XjaX7xWtSfxr6PrZifWerWV1Bo9l351TbIAvvfVkQM3YnhtVVobGls/GB59iCMtQAcBpxYifGrPfQpJ8MBnAIhIn0Al54mRj76sgzEjRnL36xohL3t/DVCJ8P/M25Wmoo= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epfl.ch; From: Florian Hofhammer To: qemu-devel@nongnu.org Cc: Florian Hofhammer , =?utf-8?q?Alex_Benn=C3=A9e?= , Pierrick Bouvier , Laurent Vivier , berrange@redhat.com, richard.henderson@linaro.org, imp@bsdimp.com Subject: [PATCH v6 3/7] plugins: add PC diversion API function Date: Tue, 3 Mar 2026 14:07:29 +0100 Message-ID: <20260303-setpc-v5-v6-3-15c77cfe184e@epfl.ch> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260303-setpc-v5-v6-0-15c77cfe184e@epfl.ch> References: <20260303-setpc-v5-v6-0-15c77cfe184e@epfl.ch> Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2612; i=florian.hofhammer@epfl.ch; h=from:subject:message-id; bh=Cn1jLD9UmX0euaybTKaylQPlplFF+Eg1gh0I1CCp4hI=; b=owEBbQKS/ZANAwAKAZbrJ7oxX8d8AcsmYgBppr1i46GdbJeC2twr1LV9lzn0tf0pr9ghyGwpu 64EFKNykYCJAjMEAAEKAB0WIQSoIHw/Sr677ZtN+EmW6ye6MV/HfAUCaaa9YgAKCRCW6ye6MV/H fCSbD/4ziwTtqCcfBJFDa6CsDWbAeqGnqW46XJpbF6dOAvgZF819LSKFMrREr+jaLaRZMRb+QGG RAV8EZn83+BPXoo6hRXHjRdD3KtReq9usjGXpBJKfmCLTvdFBnX6IWg5eA/6d85txhdswuPsE6B Op6GslOqztiFxTdYp6VH7g2sFYbEN+ACGL5lm5jBd34YV0HDCwJ8A17uk7iRpJSNb6f4qtMTi7N rCBtXDbyFjls9dECm6084yTAy+OpIeUMZyx7gELPZySR3yld3BkK6sMbkZtFm1k2CCb2J9ktzie gSXVw0LND7KvPAvC2z4UUibXe4dNhCixSp2Hcn9wI/2kOPFB3zU5dt2n2+TfgVA6m4x/YT5yZSX IkrIZ+laoWwVIe5FVsi4xpUENgKpPcrxnmhge4KA9E6oxhFc+VPFBi1qGYA+sSgaUsQyD1H+4ci nOUwFBQBa1Kh5unIBTbgamTSVCX2XwWOplnYR/0nP1/EThx5jTn7mfq4iLNjdToBNb3RuxgiV0J jdRx2UWyoExfjrtfDVZdI7qy5/E9Z1+Ys8MEJAm7+4zPEJY2vux55pye4yCJr9wMlsXy9Yt1IPC VcCpbnTCQSKqTgc1PNfCSSsescIA2lxkkVrw2DDVm91WEuNFXhhbMio6aVzwPx9jxDACZSu5Snm UO6h+213a4x2A0Q== X-Developer-Key: i=florian.hofhammer@epfl.ch; a=openpgp; fpr=A8207C3F4ABEBBED9B4DF84996EB27BA315FC77C Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: GVAP278CA0012.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:20::22) To ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::2a0) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: ZR1PPF9AC83A6B5:EE_|GV0P278MB0984:EE_ X-MS-Office365-Filtering-Correlation-Id: 6a1fabc6-2bcc-40ec-9a79-08de7925ffde X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|786006|376014|1800799024|19092799006|366016; X-Microsoft-Antispam-Message-Info: 1mUodNvrXsRrUgm3ldX+y5D6tj4ptmSCFbmrTb6qNHlyeg2+Inefgo5jmhjUWBbaXenWBkUNRoSdAESlRALDL38jauEbUpVridqdCqjiz/hA3kaR1iE+bKzyz5PSoYT6r3q1CGdL18S5ZSpT7VYsvnGuCF69VYzrye2huZncVmMH3FjhyRm5CsHHl8ehTZrztxRl+GkjuMYuHNGejSr0/wWnc/cpCS7/H5gUbgJgENl473rUlKw717DvEkowFfJS2GGDq9Jtn4EF5RikkHhve1sQ1Xa7mPv0GoOarSWhfkeQc+IoYTIcUzFvvN45AzI3+t+PVUo4skEqzLFSInEPhCFDApA82CgLBWAZvR1vsm9QBHidVfQ8x0DHNPeL1x5AYLU5/z3rTKS3TrdOs8BjG2JL3kcVgr0dRZBm4MfPf1pRxxlZry9EmLKBdM8Qa0dZ33kgLeVqudb88QX6iBpMlMPTKNPGrbEPKKUvEeee4/lGnPkQ8CyAnwY3mWX1LVNSgFvCN0rbKsk/zusEfdpDSSw9WI/HezWWUK/Tr2sBdeln0DBKkdYhryAd7K7zQQOjIUaIzaYRYY1/OgKW/okqjMDMY5Jg5D7RaB/JIJItDFiUULl0wWvRU0yzizrDmLZCkLV/h/HneSBW2EuHKToUsmz1hB/HW5N4mnrJUqhR3xjr0eWSHl6biVZu0ecC8uMAQmMKUA3N98uJFZPWx2+AcqQOSwPoIxamOy2/2Ei2+ao= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(786006)(376014)(1800799024)(19092799006)(366016); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?QXEzcURkWm1BcXU1VEtuVWUrK0JYblJ6VlZhd1ZJMUJuMDNuOWQxeWtDeFVl?= =?utf-8?B?SGROUVVNclo4M2RLczZ1WXRiZ2VCMUtrVERjYW9kZTRzMG1INFpQbkx3UjA2?= =?utf-8?B?NzNTWFdoUXZoakRldUFCcDJ4NzJ1RU4zZTRzb25CTmkvY2FtQ3d6YmVYN1Jz?= =?utf-8?B?SE9jNzRIeE9PRjZUbjUzWUlKdm1VRzNNVW52a090VkxJblQ0M0hoRFI3VFYz?= =?utf-8?B?V21MR25sdzlWaC9JVDhQdjBCcDUrY3BjMjY4L1dGWTVKVzBGb3dxdnhZUUxq?= =?utf-8?B?WlN2eEhwZ3JSZU44em5DdnNhNFE2RjFFQ3N6bXRqc295aEhZdU9XYTcvSng4?= =?utf-8?B?YzNydkQrdUJyUjlvYThVNXZIYTRVWEhLeit1ZkU5MDB6QTRRcVg0WmpCalc2?= =?utf-8?B?YmgxcTA3cWM2OW9sUkYzLzZVclhtL20xR0hsc3RPZFZ0UFc1YTBwM01jZW1a?= =?utf-8?B?Z2hpdjZMY3Vnb29yNDYrL1JVYm5MRUZXL1BBTGxlQ0RsaXdxbmsvVXo2U09U?= =?utf-8?B?TWFFQktoamk3MVNYSlBqcVZ5SW0xM1ZkNmhxbERqMW0xa05xZkpCaTRtcmNn?= =?utf-8?B?WUhCVVFJQUhYait5aXIvRjk1TTJSaUxhS0ZhMGthcG43VXRvRmNOd0tkcUdm?= =?utf-8?B?cnh2ckk4TGdHNFdZbEN2OC9Jb2Q2ejJINnB6VjVVdHRYMDh4OExQdStIcDRU?= =?utf-8?B?NWg2N0NpQzVvMjd4RUJpM3JUUFBjdEVFTG1NTk9pVTBFOUp4NmxROWk0cjZk?= =?utf-8?B?YVpCUDJ4eDNwS3l4Vm1rdzZPZFJYa1k2bDdFNE9GSkl4U0ZkTGRiQ0RyTml4?= =?utf-8?B?S09LM0dWQmdjN21vUjRtcHlHcmREdjRKSkpRWTZ1amVjdVBmUEh3aU1BU1VV?= =?utf-8?B?S1BrNEdHbnhld05BVFF6L1NPOCtWanNhL3Nnc1VXYVQyczRrRnEvdmR4QWlD?= =?utf-8?B?QjM3QlovdmRUK1pnYUQ0d3NCSjVXVUF3c29nWTUvUXdURUlMV09xdWZPQU9z?= =?utf-8?B?NFZwdE4zMzJpNGRDVWdOVGFNTjBJa05ROHZtTkdjYnYyUThoOWNLb1BGNndB?= =?utf-8?B?NnB4WTk3dTNiZmtzOFBmTStTcnJJSERLZHFpMUw1K1VPdStlUkRHZkhqWDk2?= =?utf-8?B?SHZxUTdwaWJ5Q2w5dURTeVdWT2tvd2VrQ3NhdVQrc3lHbVBCb1hQQzdlRjJV?= =?utf-8?B?M0k3V0ZVeW1pQXZrRk1zT0o2YUhPTENVZy9XVWsrTE5DdEpJbHJ3Vmx6NTJU?= =?utf-8?B?TkR2OGRtZC9UMW9iM2Z3T0ZxS0IvTkNJbVVvb0QvekxzVjN3aXRIb3ptNGIy?= =?utf-8?B?bnMrTnl6dktVWVpvdStwRStvNDhaUm9SOWU1di9TbXVYR0F2TUJoZGxlMGZi?= =?utf-8?B?RUJXNCtzalhZS2ZmZmNOMERKM3BIOXFtTlYwSnVvc3VNUkhnQUE4Vk0xY2Fr?= =?utf-8?B?aXRUTlYyUUNiWmJucE4wTXdVSkFlZXp1ZS93QXlnQnVzSUF2ZE5SbkVwSnJu?= =?utf-8?B?TWxreEpWalg1UmZrek9jNTh3VVZhWmQ1eGNOVlFGTk9pTUQ2SmlFRjVqVFVN?= =?utf-8?B?anptMWpVTUxKdzk4WTU5UzB3aGdkM2VGeFZGUUQ0MVNJcFJqNDlVSVR3ZW4y?= =?utf-8?B?NGF1bHpaN3pOYUhYZWxJZHcxbUc2WkZ4d3psajdhMFBmd2luV0ZyTVRRT3px?= =?utf-8?B?dkJlQ3VMcUEwZ3FvUUlZeWlEUGdpTjhKblVhNXBjV3lnVy90NUw1QTlhT2Ny?= =?utf-8?B?OWVuTG5JSU9kNXc5WndvQjhXMEtpeU1CajE5alNtVk5IV3h0VksvNUZiQS9x?= =?utf-8?B?S1FFMUxQYWJjckFVK2NXWkdyR0ZzQllDcjlsUkFvYW9ic2xnL1NzdzlBUTRM?= =?utf-8?B?MWY1NUYvWG1KYjNwa0VFZkI0RlNtUTJQNkpBYUljZ2tUQzVOQnRrcXl2Q2NE?= =?utf-8?B?aUM5MEJxMjg3RlAzUk1PbjJkZzFmVjdFNHZBNTM0ZFRiR0t6V0kzOHh2UFR1?= =?utf-8?B?bDNFdzJFSElzd0hYa1BhRGpBbTZ1N1JnNDhvTUszZkJBWWpTdTJJaFRJYWRC?= =?utf-8?B?dE96YWt2WlBFcUdCL2NseGU4TDRkYzFuc0J5WGV1MThGMTBwNWdJUUtzNXA2?= =?utf-8?B?TXBLNDBnL2ZrbUl0WFJFUzB6UDdIYVBSdWI4bTAvTmkzN3ZTbnMvTnJsK3dX?= =?utf-8?B?Q2g5RUlxUTBTZHBNL25MQVBqOGZKYTlLWnpBcVBjSXdMdURwTHdUR01VY1gz?= =?utf-8?B?OFpyUW8rTmgwRjFGYnFrbm1WcGh0YnRRcWF5VjhmR2RLWWhndzNSOW53VU1m?= =?utf-8?B?dlVyOE10bWNvYnNNc2pDV0FkV3NrL0VhcHpKY2RWb3haK3R6NUp5UT09?= X-OriginatorOrg: epfl.ch X-MS-Exchange-CrossTenant-Network-Message-Id: 6a1fabc6-2bcc-40ec-9a79-08de7925ffde X-MS-Exchange-CrossTenant-AuthSource: ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2026 13:08:44.8053 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f6c2556a-c4fb-4ab1-a2c7-9e220df11c43 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: OV0qrct/Wh+RjvIsbU7JjAPTyBD9z8Tk1f1+uHR9JwCNjuLttSll3QyVnwxTOQjXrblTIagzQwaTWinfIHL8hcrfjxXfN+0UeRMzabmt2PI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV0P278MB0984 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=2a01:111:f403:c213::; envelope-from=florian.hofhammer@epfl.ch; helo=ZRAP278CU002.outbound.protection.outlook.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_PASS=-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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @epfl.ch) X-ZM-MESSAGEID: 1772544162828158500 This patch adds a plugin API function that allows diverting the program counter during execution. A potential use case for this functionality is to skip over parts of the code, e.g., by hooking into a specific instruction and setting the PC to the next instruction in the callback. Link: https://lists.nongnu.org/archive/html/qemu-devel/2025-08/msg00656.html Reviewed-by: Pierrick Bouvier Signed-off-by: Florian Hofhammer --- include/plugins/qemu-plugin.h | 13 +++++++++++++ plugins/api.c | 11 +++++++++++ 2 files changed, 24 insertions(+) diff --git a/include/plugins/qemu-plugin.h b/include/plugins/qemu-plugin.h index a6ec8e275d..f083c30fd3 100644 --- a/include/plugins/qemu-plugin.h +++ b/include/plugins/qemu-plugin.h @@ -76,6 +76,7 @@ typedef uint64_t qemu_plugin_id_t; * * version 6: * - changed return value of qemu_plugin_{read,write}_register from int to= bool + * - added qemu_plugin_set_pc */ =20 extern QEMU_PLUGIN_EXPORT int qemu_plugin_version; @@ -1042,6 +1043,18 @@ QEMU_PLUGIN_API bool qemu_plugin_write_register(struct qemu_plugin_register *handle, GByteArray *buf); =20 +/** + * qemu_plugin_set_pc() - set the program counter for the current vCPU + * + * @vaddr: the new virtual (guest) address for the program counter + * + * This function sets the program counter for the current vCPU to @vaddr a= nd + * resumes execution at that address. This function does not return. + */ +QEMU_PLUGIN_API +G_NORETURN +void qemu_plugin_set_pc(uint64_t vaddr); + /** * qemu_plugin_read_memory_vaddr() - read from memory using a virtual addr= ess * diff --git a/plugins/api.c b/plugins/api.c index 32eb086300..23c291f644 100644 --- a/plugins/api.c +++ b/plugins/api.c @@ -41,6 +41,7 @@ #include "qemu/log.h" #include "system/memory.h" #include "tcg/tcg.h" +#include "exec/cpu-common.h" #include "exec/gdbstub.h" #include "exec/target_page.h" #include "exec/translation-block.h" @@ -467,6 +468,16 @@ bool qemu_plugin_write_register(struct qemu_plugin_reg= ister *reg, return (gdb_write_register(current_cpu, buf->data, GPOINTER_TO_INT(reg= ) - 1) > 0); } =20 +void qemu_plugin_set_pc(uint64_t vaddr) +{ + g_assert(current_cpu); + + g_assert(qemu_plugin_get_cb_flags() =3D=3D QEMU_PLUGIN_CB_RW_REGS_PC); + + cpu_set_pc(current_cpu, vaddr); + cpu_loop_exit(current_cpu); +} + bool qemu_plugin_read_memory_vaddr(uint64_t addr, GByteArray *data, size_t= len) { g_assert(current_cpu); --=20 2.53.0 From nobody Sat Apr 11 23:04:11 2026 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; arc=pass (i=1 dmarc=pass fromdomain=epfl.ch); dmarc=pass(p=quarantine dis=none) header.from=epfl.ch ARC-Seal: i=2; a=rsa-sha256; t=1772543560; cv=pass; d=zohomail.com; s=zohoarc; b=V3294jVX1JwZIFvC2a9YHkrOEGLqaWbjYA0gzHG/dcyuR5tPthJ4wlxNEvHZHjE9pRsEzyg4QW3tYzSV21uYYQMR49i5nFxAYvNosgseci7XHeCrG2rnuN3U/QnqwRkU9t7rNAv4/XwvZUCv9DqnPBwqr6O4XiP9ulE5Mc64N6g= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772543560; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=iIUTjvmupTW4oUu393QgwqOUndkfozLBBtMj+Et5e1c=; b=KrfEAngxvZ8t93SmCbtClD0dLmhJmDvCM3REIemCaTI+HCZwhRX4jjBd5n6SkVs9aH3Pu9ROXey3GNtdGarZuK/Or7URmVNrdLtgDVU4JN8UHUwmY8XhE4rnBBeR9cm2bO5+ODhMP6LkkI/pmNslAoZtUEvgk4qHWzKghYTG1tU= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=epfl.ch); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772543560029254.15405082830773; Tue, 3 Mar 2026 05:12:40 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vxPVS-0007mp-5b; Tue, 03 Mar 2026 08:09:46 -0500 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 1vxPVN-0007Y1-Eo for qemu-devel@nongnu.org; Tue, 03 Mar 2026 08:09:41 -0500 Received: from mail-switzerlandnorthazlp170100000.outbound.protection.outlook.com ([2a01:111:f403:c213::] helo=ZRAP278CU002.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vxPVK-0000OD-Qm for qemu-devel@nongnu.org; Tue, 03 Mar 2026 08:09:40 -0500 Received: from ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::2a0) by GV0P278MB0984.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:4f::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.22; Tue, 3 Mar 2026 13:08:45 +0000 Received: from ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM ([fe80::6830:19f2:4a5b:749e]) by ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM ([fe80::6830:19f2:4a5b:749e%2]) with mapi id 15.20.9654.022; Tue, 3 Mar 2026 13:08:45 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=IGbameknhdH1965+xNjrfyZSRcJmlruyq7+ft2Gc/XukctvDMVA6jz7MIMq/JGnl3bQcoHZEj3V4DB9x5DywKa/oLWJFCE+R5hBc1Mg+MX7RJdfti2NlES+K8TihyJ2+3VLLk+RBfyOP1QDnUeEnMu7Zjjg5EWgPPSoal/AI5tGWhcomSFiQ6K1O7OXWAkAM9tgTeG2TLBfNkruvg1PBQdkG7Bk6+and73U94zW1CX3DZfSepvseHhdfi9pzSlNiTVoZos21S/MZQ/tg+tV9d+L9BMXTjZsYtkt8KRqaE03oJnYO5apZH3CRo1ft/erQ/2tRlB454YnShY5t2xfEEw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=iIUTjvmupTW4oUu393QgwqOUndkfozLBBtMj+Et5e1c=; b=B7fB+svPFhlYDpKz5nhcyfTeTnOo2eiDyOD3y1R5Ze7JN6F3T4YIBgSuWVZQWBMFRzwregVrbKwL4yjv2VYU5KKYk8dVUca6HfngliXZsMajG+ON7WSB6HPqOHmn//rbi9noJlrnN0FIbyQkPzeCq9LTR8XmomOKixsm6SCz56LSicC/IDW4Y/f7LWOwxnsepphsb+fBOIUGC0w1GGEXxCFEyG7SJ/liGeeIhdWIMQYpG7YslIbnnqQGI5FOxZyOL49U4PoRzrFk0Fqq/NEwWhMYC7dgz1A5nDg7k49rsXgkTT7lFgvDFZRSGD8oGHocKbBleZdrE3iPORwwx+8v+g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epfl.ch; dmarc=pass action=none header.from=epfl.ch; dkim=pass header.d=epfl.ch; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epfl.ch; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=iIUTjvmupTW4oUu393QgwqOUndkfozLBBtMj+Et5e1c=; b=beH3H3q8OVuRIorJ+wJ7G1J+yfdkfdBk+7abwNl4nHIiZNr7xJtefcd1vWnkvhEF8N5AatroALT/A41FEgSmGeDKFKN03w67E5U33xcS2OTdtB+vFhhmYt8oKGr8ZBfHmW6M2gTBWuyblNmYS0gX8W82RnB4iORtBsRUBPGlNBE= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epfl.ch; From: Florian Hofhammer To: qemu-devel@nongnu.org Cc: Florian Hofhammer , =?utf-8?q?Alex_Benn=C3=A9e?= , Pierrick Bouvier , Laurent Vivier , berrange@redhat.com, richard.henderson@linaro.org, imp@bsdimp.com Subject: [PATCH v6 4/7] tests/tcg: add tests for qemu_plugin_set_pc API Date: Tue, 3 Mar 2026 14:07:30 +0100 Message-ID: <20260303-setpc-v5-v6-4-15c77cfe184e@epfl.ch> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260303-setpc-v5-v6-0-15c77cfe184e@epfl.ch> References: <20260303-setpc-v5-v6-0-15c77cfe184e@epfl.ch> Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=14186; i=florian.hofhammer@epfl.ch; h=from:subject:message-id; bh=+ujrLZ3RxHwYE8erbsTXTHFnJ/wJgv7f2bVn5MtG8rU=; b=owEBbQKS/ZANAwAKAZbrJ7oxX8d8AcsmYgBppr1jY8eFjbQhgvyA1Cfa7TXhH30D41+RP6Bvs 0MbKOi1YHiJAjMEAAEKAB0WIQSoIHw/Sr677ZtN+EmW6ye6MV/HfAUCaaa9YwAKCRCW6ye6MV/H fNWND/9zA7Mfk0xaFuiU7dUeNoNInXsbB3ncxpOIuZ/vK2GqnEIw60RW+Do30U31bKLX/GPInR7 AiBZdlnXvVKWXJ/zqWonnESfFnGXge3uYhM11i5fltI3rI4niKP5Q2SNIwHl62jv6U4OTvsFIJd f8gOJnybnuLGgh7pTTorwmPJ2c0NZLu0vP1Qc5X73boZFgthLbB1rwt9shx6EjbUmQMYJKpECnY OZSIeLVi5l1ELDEeX6Unw2ZqPQu15r5FVoRo/is9kZO4DG7WCBOeWL7rpIZrOzBB4gL02My02xt aSRZ7he1odtyONrIsLqzQLKM8eNFI4qSG65ORmsm00yGTqWExNBlrUcPzObNvZB0qQLRn5WPbPm 4FPGxTxz2UBBoDGugNeuqU1B6NfSYpK0EOYSWgXSsnNbzCG5knRtM7Zzwq4eF9UxOtBJL4Cv7+6 69YyNm/hH589Fr9MzX+/Wcgy1W9WB4BK1sw39LS2+oraPiCimjDHRNq+n1JmAIAsBC6dNmYdk8Z Sh5plkIStrcKVdGZ7877fKhkSJKtY/8i6jU7Wg+syk+H/wlyK3pV5An4O1MFr9h/8pczK3zpwyy drWEv3aoQbQxwDw5H5yzZyvyuURkcghGgBV7lHLsPcA6wCOh3DuvTId8CqZuM9hJfs5BWkNhyFM YZQBuJZyhC5LfVQ== X-Developer-Key: i=florian.hofhammer@epfl.ch; a=openpgp; fpr=A8207C3F4ABEBBED9B4DF84996EB27BA315FC77C Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: GVAP278CA0012.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:20::22) To ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::2a0) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: ZR1PPF9AC83A6B5:EE_|GV0P278MB0984:EE_ X-MS-Office365-Filtering-Correlation-Id: a83ed145-1eba-4ade-d448-08de79260027 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|786006|376014|1800799024|19092799006|366016; X-Microsoft-Antispam-Message-Info: lSDQ5qDTXq3Vjao0QrRdkfDe7atP/j1VCFuY4A89Mp6q4Rpu+QkWNp4PX3mc5e7AsYPiNCmOFessBekGOfxvSrmtpbcLthodECIQAfoE4EfwvqMr/52wYs2DggcfvErF+nRzFsD8otJwqMtG6blVFu7b4QPhtWcNJipM8lOQTOBBAWwXY54FqI609DeCgfxeFY5h9dxCS0CCxbRlBqjFh2hMEo88Z9klheJf9aNvE3O0FCgoLh9KGIGOFwAgdd37F67VM06RP2iQ2Bfqq35Jsh0t+S+NJIe2qYqhgVYJQOlQYi1ytqzGwf16njS8Gvj98xZJEYLG7jMja7rvUFkrhbxKCKSSz6WKu/Rmm3e2AowZvmrKea4Bi+wo/LgKLddtC0Zhx86cbbimNh6oM6TMrloCZrX8ljhoaHZwpQgXm65yLD1DXAJrz3s9uymgiqBkJlbC4IF2tCkHj8AAgCRVq5RGql77/WB427mUTKnkFaimzUtJOGoSc70munI70ph3eJrZJB8Yz6cUrhGyPtu0cgojIaOuL2jLIRmVzO8LXzxezN+mxm4RdceYd1BeSrVZo49+gRpx9FJCeSo0hCyD+7fkLFq1aAs9AuLhhRKO7kJD5/REqO0XEZftvDDQ1xk+undAkQ4vkEcRc8bS7wOeWez6P3q7iMuDHTapq6EfbLywcT4qdYg2yKbEen53DVo65lAifiLmFcdDQ1rIGA/lDL2QWpnN6RsEnKqDH4jrlFE= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(786006)(376014)(1800799024)(19092799006)(366016); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NGtwb1BrWmNScUhTYUpiTWVTd3RWS0ZqZDJvSUxRUTZaU281K3d2d0p1MmNr?= =?utf-8?B?am9yakkwOVN2T3pnYlJwNG84M1RIUnlBajdxdGE5VG01OGk1UmdTUldLU0Rn?= =?utf-8?B?UHFqdXZObkI4N0dkUllueTBuVFpJcXhETTB5dmlWb2Z0VVF6bE1uR2dQNkth?= =?utf-8?B?YlpFU0ltWWZ6ajRudDBBdUVienA4UVJEOW5COEs3NXdYMlVrYmRrMmQ1UG90?= =?utf-8?B?dDMxTTZCdjhtMC9SMVpvVm9sc0w5bTZkOGhYUjFZV3ZFZWdVSnlGRUxxUEF1?= =?utf-8?B?cUJDWWlDZGxkL0Iwc1ZNczZPY1pSZWloZkliRUlMWFl6ZlhGZ05QdEtzS1Vi?= =?utf-8?B?NXIxNU1HN1gybnhtdFhuRlh2T2kzZkgwVWNmd3FLc1pScnl4QW5CaExxV2Y0?= =?utf-8?B?ekhRM2lOMzRsNkRLMXIrcGt6bTRQSkJPcStkYVFnUzBZWllmSTVaMG85NU42?= =?utf-8?B?MHBUUGIycTh5WFltcm5HZi85MVNJVkMrT0R3VWQwNTQ3WDRDTjhIVENBT3Bp?= =?utf-8?B?N2xkLzAzMEd1aGtZdjRiaFFxaHdmdFRxQXV2T3lkNXJYQkR2WUVjNWZIQ2sw?= =?utf-8?B?YmkwcE5PUHJJYjNWWUVHNlc5cDJ5d0pUQVpveEJsdXIzOU9XN0xlc1UzU2pK?= =?utf-8?B?azIrbXhaSVJQNVRlUnZkOXdJL1lVbEZMSnQyUTJGcTNCaGlpSk9lcDl1TVg2?= =?utf-8?B?YUFUSUlKQ3VHRm82QjA1QzNOcjl6TS9tR0xVbzM3Y3hFQzFmK0IycFNIVkdR?= =?utf-8?B?VHdmQVJVbWx5Wlkyb0M4M1hOTFdIK0JsazBFL1BiU3lyYk1oc29vVWhUVFdT?= =?utf-8?B?ajF5b3MxZnYxY3ZlOW9lc2RyTVF3ZHNLUHFYS3JQYkRVSkUrVkVVTHpZRnV6?= =?utf-8?B?bGt0L1J6V3RKVlZJS0NhdFZnN3ZDdHVDTmhXYzVtZEdZYlFxSGhRZ3NVNG1p?= =?utf-8?B?R1pkNS9NbVpKVlZVVE1laU80bVdtN1prWE41ZWNacWxGNFpEbGFCWk8yZnpB?= =?utf-8?B?bnJ2U2x4RFR4MTRoUVB0c0R1SldvOTh0NTdONXdWL2pmR2VvVTVoRGRGbWU2?= =?utf-8?B?MU8xK3BwYWRIMXppOUtwcFBVb2g3bWlWSzZha3d1a0tJMjhOd3o0L2w4L0JG?= =?utf-8?B?ak9BTzJ5STFlMnRLc24wajF2TVVsamp5eDRvdmU5bDJVNTN1Njl6bXlZaHNM?= =?utf-8?B?ZWpnWUEyQ0pvMWJoVDNtVDQ2OEErbnd4cGExclpVN24zR3Zlb2lieFJwVGEy?= =?utf-8?B?VkZ6Mjd5RUpzYTBaMVRLSFRMcXdoNXBSSm56REQwbjRVcjE5dmJkcVRtVll0?= =?utf-8?B?TW9Sa0U0Nk9sOG0vUFQxaUx2Qi9qS2dERjJUbEpkT1RrTjVHanNFUWM0eVlw?= =?utf-8?B?TnBvN0MxS1BncWZsa2ZZa1dhUms5bkFzK3M3N1NTLzMzdTVaY2RoaGxHb3cv?= =?utf-8?B?djY3VEoxUk4rTGk3TzNtL2dtcTZ6NjJpWE0zcCsyY24wRjJXWGdNSXM4SFFM?= =?utf-8?B?SXZnRGZoclNCUkJGdU96STdYSklaODB5YlNFZUw3Zkw1bVNtYXJZR3JXS2Vu?= =?utf-8?B?NGZCL1Jhd1g5dW5UeFViVjEwZ0RSSytxZmVlMUtibngwNkpWQmltQ21ad1l5?= =?utf-8?B?QndlRjcrcVF1azFCNUVqQ08yejU0SFBVOGkrK0VRdWxMYnI5eW4rUTNEcVd4?= =?utf-8?B?YUxNdVJGUi9acU1NQ0R6c3MvaVhNNDAwREFraDZpbXBMV05kNUFCZm5ZVjdE?= =?utf-8?B?MUp4MUxUeTE2V2MrRGZDekZpU25jVGZ6VHRIaW41dzNqVURoN2p0NVBNQ0F4?= =?utf-8?B?ZFFSeEpzWmhNd3dYVTJmRmRYK2I1Nkc2eFh4czhxWUN0Yjd6Z0tpdmhpeU5l?= =?utf-8?B?cU80NlVVZ3FhTUFyUlJRV2lkMkRDOFBNV3FhSnFSVDNIbWR0SjBqbW5ZK2U0?= =?utf-8?B?LzBmUG9kT2xPcFdlSElQZ29veVpFbUJLUTd5YzB6alZ4RkVxZU5FODdGcGp0?= =?utf-8?B?cm5JNDZmUTB1T2JBcjd0aTBYKzJ4UGdCK04rWFE5TStGcGIva0R0dkx6Q0w1?= =?utf-8?B?SHVyODRIMW9xQ0VEZDlON2ZWMjBCeGV4TzJTVnBCRCtKYTU2dU9IRGJxNmJ1?= =?utf-8?B?TTRmUlFPSjRETVlMU0tObjdFSjFXTGpLNElrYldLTTVmWTlaNmhJajVTV2E3?= =?utf-8?B?dFY5YUlkazZaOHVGZUk1LzY4Y2dWM2ozbEFXYm9jY0Q1OFRaSHROcVRkb2Ey?= =?utf-8?B?bDJjYmduM2U1ajRlR3ZjYXhPa2YzTEVhZE1LNk0vUG1aZS9meURnZEtTOFQ3?= =?utf-8?B?d200MFRJTUxVK3FyNE16dTlaN2ZpdGFJTFpKdksyWGROdjFNYk00UT09?= X-OriginatorOrg: epfl.ch X-MS-Exchange-CrossTenant-Network-Message-Id: a83ed145-1eba-4ade-d448-08de79260027 X-MS-Exchange-CrossTenant-AuthSource: ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2026 13:08:45.3687 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f6c2556a-c4fb-4ab1-a2c7-9e220df11c43 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: B6B3Rj9wTXSemoJzCVCZKErffg49sIsJ4mofKZZKIAHm4TsrKVsPXWewC2a6CDOg6UbJEGUJgn0eIe3ObBWOcJRhBGipGV7ASzcQSmL1pm8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV0P278MB0984 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=2a01:111:f403:c213::; envelope-from=florian.hofhammer@epfl.ch; helo=ZRAP278CU002.outbound.protection.outlook.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_PASS=-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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @epfl.ch) X-ZM-MESSAGEID: 1772543790286154100 The test plugin intercepts execution in different contexts. Without the plugin, any of the implemented test functions would trigger an assert and fail. With the plugin, control flow is redirected to skip the assert and return cleanly via the qemu_plugin_set_pc() API. Signed-off-by: Florian Hofhammer --- MAINTAINERS | 1 + tests/tcg/arm/Makefile.target | 6 + tests/tcg/multiarch/Makefile.target | 17 ++- .../multiarch/{ =3D> plugin}/check-plugin-output.sh | 0 .../{ =3D> plugin}/test-plugin-mem-access.c | 0 tests/tcg/multiarch/plugin/test-plugin-set-pc.c | 140 +++++++++++++++++= ++++ tests/tcg/plugins/meson.build | 1 + tests/tcg/plugins/setpc.c | 120 ++++++++++++++++++ 8 files changed, 282 insertions(+), 3 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index 6698e5ff69..63c0af4d86 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -4104,6 +4104,7 @@ S: Maintained F: docs/devel/tcg-plugins.rst F: plugins/ F: tests/tcg/plugins/ +F: tests/tcg/multiarch/plugin/ F: tests/functional/aarch64/test_tcg_plugins.py F: contrib/plugins/ F: scripts/qemu-plugin-symbols.py diff --git a/tests/tcg/arm/Makefile.target b/tests/tcg/arm/Makefile.target index 6189d7a0e2..613bbf0939 100644 --- a/tests/tcg/arm/Makefile.target +++ b/tests/tcg/arm/Makefile.target @@ -78,4 +78,10 @@ sha512-vector: sha512.c =20 ARM_TESTS +=3D sha512-vector =20 +ifeq ($(CONFIG_PLUGIN),y) +# Require emitting arm32 instructions, otherwise the vCPU might accidental= ly +# try to execute Thumb instructions in arm32 mode after qemu_plugin_set_pc= () +test-plugin-set-pc: CFLAGS+=3D-marm +endif + TESTS +=3D $(ARM_TESTS) diff --git a/tests/tcg/multiarch/Makefile.target b/tests/tcg/multiarch/Make= file.target index 07d0b27bdd..a347efbadf 100644 --- a/tests/tcg/multiarch/Makefile.target +++ b/tests/tcg/multiarch/Makefile.target @@ -14,6 +14,10 @@ ifeq ($(filter %-linux-user, $(TARGET)),$(TARGET)) VPATH +=3D $(MULTIARCH_SRC)/linux MULTIARCH_SRCS +=3D $(notdir $(wildcard $(MULTIARCH_SRC)/linux/*.c)) endif +ifeq ($(CONFIG_PLUGIN),y) +VPATH +=3D $(MULTIARCH_SRC)/plugin +MULTIARCH_SRCS +=3D $(notdir $(wildcard $(MULTIARCH_SRC)/plugin/*.c)) +endif MULTIARCH_TESTS =3D $(MULTIARCH_SRCS:.c=3D) =20 # @@ -200,13 +204,20 @@ run-plugin-test-plugin-mem-access-with-libmem.so: \ PLUGIN_ARGS=3D$(COMMA)print-accesses=3Dtrue run-plugin-test-plugin-mem-access-with-libmem.so: \ CHECK_PLUGIN_OUTPUT_COMMAND=3D \ - $(SRC_PATH)/tests/tcg/multiarch/check-plugin-output.sh \ + $(SRC_PATH)/tests/tcg/multiarch/plugin/check-plugin-output.sh \ $(QEMU) $< run-plugin-test-plugin-syscall-filter-with-libsyscall.so: +run-plugin-test-plugin-set-pc-with-libsetpc.so: =20 EXTRA_RUNS_WITH_PLUGIN +=3D run-plugin-test-plugin-mem-access-with-libmem.= so \ - run-plugin-test-plugin-syscall-filter-with-libsyscall.so -else + run-plugin-test-plugin-syscall-filter-with-libsyscall.so \ + run-plugin-test-plugin-set-pc-with-libsetpc.so + +else # CONFIG_PLUGIN=3Dn +# Do not build the syscall skipping test if it's not tested with the setpc +# plugin because it will simply fail the test. +MULTIARCH_TESTS :=3D $(filter-out test-plugin-set-pc, $(MULTIARCH_TESTS)) + # test-plugin-syscall-filter needs syscall plugin to succeed test-plugin-syscall-filter: CFLAGS+=3D-DSKIP endif diff --git a/tests/tcg/multiarch/check-plugin-output.sh b/tests/tcg/multiar= ch/plugin/check-plugin-output.sh similarity index 100% rename from tests/tcg/multiarch/check-plugin-output.sh rename to tests/tcg/multiarch/plugin/check-plugin-output.sh diff --git a/tests/tcg/multiarch/test-plugin-mem-access.c b/tests/tcg/multi= arch/plugin/test-plugin-mem-access.c similarity index 100% rename from tests/tcg/multiarch/test-plugin-mem-access.c rename to tests/tcg/multiarch/plugin/test-plugin-mem-access.c diff --git a/tests/tcg/multiarch/plugin/test-plugin-set-pc.c b/tests/tcg/mu= ltiarch/plugin/test-plugin-set-pc.c new file mode 100644 index 0000000000..40d9a9e8f0 --- /dev/null +++ b/tests/tcg/multiarch/plugin/test-plugin-set-pc.c @@ -0,0 +1,140 @@ +/* + * SPDX-License-Identifier: GPL-2.0-or-later + * + * Copyright (C) 2026, Florian Hofhammer + * + * This test set exercises the qemu_plugin_set_pc() function in four diffe= rent + * contexts: + * 1. in a syscall callback, + * 2. in an instruction callback during normal execution, + * 3. in an instruction callback during signal handling, + * 4. in a memory access callback. + * Note: using the volatile guards is necessary to prevent the compiler fr= om + * doing dead code elimination even on -O0, which would cause everything a= fter + * the asserts and thus also the target labels to be optimized away. + */ +#include +#include +#include +#include +#include +#include +#include + +#define NOINLINE __attribute__((noinline)) +#define NORETURN __attribute__((noreturn)) + +static int signal_handled; +/* + * The volatile variable is used as a guard to prevent the compiler from + * optimizing away "unreachable" labels. + */ +static volatile uint32_t guard =3D 1; + +/* + * This test executes a magic syscall which communicates two addresses to = the + * plugin via the syscall arguments. Whenever we reach the "bad" instructi= on + * during normal execution, the plugin should redirect control flow to the + * "good" instruction instead. + */ +NOINLINE void test_insn(void) +{ + long ret =3D syscall(4095, &&bad_insn, &&good_insn, NULL); + assert(ret =3D=3D 0 && "Syscall filter did not return expected value"); + if (guard) { +bad_insn: + assert(0 && "PC redirection in instruction callback failed"); + } else { +good_insn: + return; + } +} + +/* + * This signal handler communicates a "bad" and a "good" address to the pl= ugin + * similar to the previous test, and skips to the "good" address when the = "bad" + * one is reached. This serves to test whether PC redirection via + * qemu_plugin_set_pc() also works properly in a signal handler context. + */ +NOINLINE void usr1_handler(int signum) +{ + long ret =3D syscall(4095, &&bad_signal, &&good_signal, NULL); + assert(ret =3D=3D 0 && "Syscall filter did not return expected value"); + if (guard) { +bad_signal: + assert(0 && "PC redirection in instruction callback failed"); + } else { +good_signal: + signal_handled =3D 1; + return; + } +} + +/* + * This test sends a signal to the process, which should trigger the above + * signal handler. The signal handler should then exercise the PC redirect= ion + * functionality in the context of a signal handler, which behaves a bit + * differently from normal execution. + */ +NOINLINE void test_sighandler(void) +{ + struct sigaction sa =3D {0}; + sa.sa_handler =3D usr1_handler; + sigaction(SIGUSR1, &sa, NULL); + pid_t pid =3D getpid(); + kill(pid, SIGUSR1); + assert(signal_handled =3D=3D 1 && "Signal handler was not executed pro= perly"); +} + +/* + * This test communicates a "good" address and the address of a local vari= able + * to the plugin. Upon accessing the local variable, the plugin should then + * redirect control flow to the "good" address via qemu_plugin_set_pc(). + */ +NOINLINE void test_mem(void) +{ + long ret =3D syscall(4095, NULL, &&good_mem, &guard); + assert(ret =3D=3D 0 && "Syscall filter did not return expected value"); + if (guard) { + assert(0 && "PC redirection in memory access callback failed"); + } else { +good_mem: + return; + } +} + +/* + * This test executes a magic syscall which is intercepted and its actual + * execution skipped via the qemu_plugin_set_pc() API. In a proper plugin, + * syscall skipping would rather be implemented via the syscall filtering + * callback, but we want to make sure qemu_plugin_set_pc() works in differ= ent + * contexts. + */ +NOINLINE NORETURN +void test_syscall(void) +{ + syscall(4096, &&good_syscall); + if (guard) { + assert(0 && "PC redirection in syscall callback failed"); + } else { +good_syscall: + /* + * Note: we execute this test last and exit straight from here bec= ause + * when the plugin redirects control flow upon syscall, the stack = frame + * for the syscall function (and potential other functions in the = call + * chain in libc) is still live and the stack is not unwound prope= rly. + * Thus, returning from here is risky and breaks on some architect= ures, + * so we just exit directly from this test. + */ + _exit(EXIT_SUCCESS); + } +} + + +int main(int argc, char *argv[]) +{ + test_insn(); + test_sighandler(); + test_mem(); + test_syscall(); +} diff --git a/tests/tcg/plugins/meson.build b/tests/tcg/plugins/meson.build index c5e49753fd..b3e3a9a6d0 100644 --- a/tests/tcg/plugins/meson.build +++ b/tests/tcg/plugins/meson.build @@ -7,6 +7,7 @@ test_plugins =3D [ 'mem.c', 'patch.c', 'reset.c', +'setpc.c', 'syscall.c', ] =20 diff --git a/tests/tcg/plugins/setpc.c b/tests/tcg/plugins/setpc.c new file mode 100644 index 0000000000..72ae31a0ef --- /dev/null +++ b/tests/tcg/plugins/setpc.c @@ -0,0 +1,120 @@ +/* + * SPDX-License-Identifier: GPL-2.0-or-later + * + * Copyright (C) 2026, Florian Hofhammer + */ +#include +#include +#include +#include + +#include + +QEMU_PLUGIN_EXPORT int qemu_plugin_version =3D QEMU_PLUGIN_VERSION; + +static uint64_t source_pc; +static uint64_t target_pc; +static uint64_t target_vaddr; + +static void vcpu_syscall(qemu_plugin_id_t id, unsigned int vcpu_index, + int64_t num, uint64_t a1, uint64_t a2, + uint64_t a3, uint64_t a4, uint64_t a5, + uint64_t a6, uint64_t a7, uint64_t a8) +{ + if (num =3D=3D 4096) { + qemu_plugin_outs("Marker syscall detected, jump to clean return\n"= ); + qemu_plugin_set_pc(a1); + } +} + +static bool vcpu_syscall_filter(qemu_plugin_id_t id, unsigned int vcpu_ind= ex, + int64_t num, uint64_t a1, uint64_t a2, + uint64_t a3, uint64_t a4, uint64_t a5, + uint64_t a6, uint64_t a7, uint64_t a8, + uint64_t *sysret) +{ + if (num =3D=3D 4095) { + qemu_plugin_outs("Communication syscall detected, set target_pc / " + "target_vaddr\n"); + source_pc =3D a1; + target_pc =3D a2; + target_vaddr =3D a3; + if (source_pc >> 63 || target_pc >> 63 || target_vaddr >> 63) { + /* + * Some architectures (e.g., m68k) use 32-bit addresses with t= he + * top bit set, which causes them to get sign-extended somewhe= re in + * the chain to this callback. We mask the top bits off here t= o get + * the actual addresses. + */ + qemu_plugin_outs("High bit in addresses detected: possible sig= n " + "extension in syscall, masking off top bits\n= "); + source_pc &=3D UINT32_MAX; + target_pc &=3D UINT32_MAX; + target_vaddr &=3D UINT32_MAX; + } + *sysret =3D 0; + return true; + } + return false; +} + +static void vcpu_insn_exec(unsigned int vcpu_index, void *userdata) +{ + uint64_t vaddr =3D (uint64_t)userdata; + if (vaddr =3D=3D source_pc) { + g_assert(target_pc !=3D 0); + g_assert(target_vaddr =3D=3D 0); + + qemu_plugin_outs("Marker instruction detected, jump to clean retur= n\n"); + qemu_plugin_set_pc(target_pc); + } +} + +static void vcpu_mem_access(unsigned int vcpu_index, + qemu_plugin_meminfo_t info, + uint64_t vaddr, void *userdata) +{ + if (vaddr !=3D 0 && vaddr =3D=3D target_vaddr) { + g_assert(source_pc =3D=3D 0); + g_assert(target_pc !=3D 0); + qemu_plugin_mem_value val =3D qemu_plugin_mem_get_value(info); + /* target_vaddr points to our volatile guard =3D=3D> should always= be 1 */ + g_assert(val.type =3D=3D QEMU_PLUGIN_MEM_VALUE_U32); + g_assert(val.data.u32 =3D=3D 1); + + qemu_plugin_outs("Marker mem access detected, jump to clean return= \n"); + qemu_plugin_set_pc(target_pc); + } +} + +static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb) +{ + size_t insns =3D qemu_plugin_tb_n_insns(tb); + for (size_t i =3D 0; i < insns; i++) { + struct qemu_plugin_insn *insn =3D qemu_plugin_tb_get_insn(tb, i); + uint64_t insn_vaddr =3D qemu_plugin_insn_vaddr(insn); + /* + * Note: we cannot only register the callbacks if the instruction = is + * in one of the functions of interest, because symbol lookup for + * filtering does not work for all architectures (e.g., ppc64). + */ + qemu_plugin_register_vcpu_insn_exec_cb(insn, vcpu_insn_exec, + QEMU_PLUGIN_CB_RW_REGS_PC, + (void *)insn_vaddr); + qemu_plugin_register_vcpu_mem_cb(insn, vcpu_mem_access, + QEMU_PLUGIN_CB_RW_REGS_PC, + QEMU_PLUGIN_MEM_R, NULL); + } +} + + +QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id, + const qemu_info_t *info, + int argc, char **argv) +{ + + qemu_plugin_register_vcpu_syscall_cb(id, vcpu_syscall); + qemu_plugin_register_vcpu_syscall_filter_cb(id, vcpu_syscall_filter); + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans); + return 0; +} --=20 2.53.0 From nobody Sat Apr 11 23:04:11 2026 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; arc=pass (i=1 dmarc=pass fromdomain=epfl.ch); dmarc=pass(p=quarantine dis=none) header.from=epfl.ch ARC-Seal: i=2; a=rsa-sha256; t=1772543396; cv=pass; d=zohomail.com; s=zohoarc; b=dClHgZv14JG+G6UvosaOVZxEQwkAmHf6FAzdJayCJFluyI0DFVp7zJZ9lPYJ+S9SAFWU9TcLK0t2ofMI6iWRv08bvRL3SH1z+TAjq3E5PHXqUmV7ps7YgxYZ67qzBITy+GPNRkwafEuKYm5EioquixtluCs6MPy4sMqqm3dZ2WA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772543396; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=q0xfrZfM2WFGw8pe3Mm/p0V+KJz4nKuXFMldsD99vIE=; b=AneAnombwFPeMN9Myw7m+ynk/P7T9bb8pKWglWARJv19yqgCDFi8j4OtY46DMIZybmK/Dvb5vsrxecPg8GazMoAoeROCZ3QHyzYe/V4DXhaSRqGmrsIVy9RKjwZidU7z1JCQHQ/mi93lYk+scBy5U1sv7RZ0xl+Eu+iiFzTQCdk= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=epfl.ch); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772543396351743.7345750868412; Tue, 3 Mar 2026 05:09:56 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vxPVL-0007XJ-NU; Tue, 03 Mar 2026 08:09:41 -0500 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 1vxPUd-0007H5-K6 for qemu-devel@nongnu.org; Tue, 03 Mar 2026 08:08:56 -0500 Received: from mail-switzerlandnorthazlp170110002.outbound.protection.outlook.com ([2a01:111:f403:c213::2] helo=ZRZP278CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vxPUa-0000JJ-9K for qemu-devel@nongnu.org; Tue, 03 Mar 2026 08:08:55 -0500 Received: from ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::2a0) by ZRZP278MB1808.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:b7::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.22; Tue, 3 Mar 2026 13:08:47 +0000 Received: from ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM ([fe80::6830:19f2:4a5b:749e]) by ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM ([fe80::6830:19f2:4a5b:749e%2]) with mapi id 15.20.9654.022; Tue, 3 Mar 2026 13:08:47 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FzOmA+ZdUwKMWYKvmuptbqSpe5fZcWagZ4bEiovjbuVuVIiF2iassYIarUpVXAnWofc/3ghmHyCGvP7tG2OUCdRheH8pRHuz7hV0xOTMbvj/vQVC24h1/oIgeZNLRK1Q692AWiJ7hAuUIPHWGyQthzQRHmMl3Ks1kEmONo+YHTd6Gg3ZjPqWoNeMxK/BGPjkOIwLfT04cMDXprwDtxavnvNGYQfyT3dsrhC13OM+k3RnmWBOm/+Ld5k0iJvlKBmZWgrFrCoAANhkhra44/O1v1Qxdwh63vAlb2tEQMCAq+V+H2tnqhOEK5H7Z1GfOCYhA3OZl3SpawXQoDSMdqhCGw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=q0xfrZfM2WFGw8pe3Mm/p0V+KJz4nKuXFMldsD99vIE=; b=odCT947wXIZcZzBS5oFeciB2hJTFqNubYTCk58EI+Ird0PWB+/ECVbY4w3WxdvW0+wD5Xnww0dth46ZG5gxBh0VxVtWHezaGo70JWazG5vjHcUTNh7jMk84WwHcTmVgPXrjyP7VgnyT2nj/I5tYhPjWGWnezMW+8LcmPhJiGlVvlz4MUZRJl48pnfjR4uWPZiHskVZztZRMmOKnYN8KRr+PV74k1PmslyP5719V6S590E2Ew7MeJ++exwer0s1+9A8Lm+q5mvtVpKCv6+msu65clr9cTIgGv7t+T8d/Lv6ar/H6RiPxyFmh4PYFbSSHv5m2aDL1AhcSnPwzmA0x7hQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epfl.ch; dmarc=pass action=none header.from=epfl.ch; dkim=pass header.d=epfl.ch; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epfl.ch; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=q0xfrZfM2WFGw8pe3Mm/p0V+KJz4nKuXFMldsD99vIE=; b=rXzYeL/JOjCzeLBlFXpac51FwpfoLAHbv5+tXPr7upDBdCFW9KppFdlGWBUUUEnr9IY12kR4SLYEtV+JX5MBT03TMOQpL32j7jGz4uMbIXGUyy12nVC3YdR45ZK2EchIw8xFXzX3JAFbm0Xh3hnLnwkcRloeM7l0FkhbaA/guw0= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epfl.ch; From: Florian Hofhammer To: qemu-devel@nongnu.org Cc: Florian Hofhammer , =?utf-8?q?Alex_Benn=C3=A9e?= , Pierrick Bouvier , Laurent Vivier , berrange@redhat.com, richard.henderson@linaro.org, imp@bsdimp.com Subject: [PATCH v6 5/7] plugins: add read-only property for registers Date: Tue, 3 Mar 2026 14:07:31 +0100 Message-ID: <20260303-setpc-v5-v6-5-15c77cfe184e@epfl.ch> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260303-setpc-v5-v6-0-15c77cfe184e@epfl.ch> References: <20260303-setpc-v5-v6-0-15c77cfe184e@epfl.ch> Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2788; i=florian.hofhammer@epfl.ch; h=from:subject:message-id; bh=Q9uEmDHxcY0R4KqWAXtElZSsthn+umT9ya7XG+4eC9g=; b=owEBbQKS/ZANAwAKAZbrJ7oxX8d8AcsmYgBppr1kCpn7QgLlnC8xNJojVoakl2UAuKHjxV/kd 0p/6SyVjDaJAjMEAAEKAB0WIQSoIHw/Sr677ZtN+EmW6ye6MV/HfAUCaaa9ZAAKCRCW6ye6MV/H fDrxEAC4/PrJ1YKqrCuOIZCKJMGB7TUP9sEKxBORzyomgvxuzCnZ4AZ3+gtIJllnnY+Ll4oPhQk l0GnFPJHApAZP7xgUuAkiO3VescsBD1SLIKj4mjv7bLyCf8c7UI/r92o5nB14qZkhKbzlRC9gm1 cbolN5NQeaaxX9gB0JESd1Fznvc5KiY68wQXjuWChIeeheMlJZos5iQV9WkPPcHTGsgZ1+4b8hk 74VSfli47bxCTfjHUqv8R+L6H3zzZ5LLktPRMZCcZOw273aVOqKEIZ+WOtksWNvUbxPcemYub63 BiH/o22m1iPkJodEYDiYLuFEmLc7XcH2RppCMwYtTB0VoCGa00W/9fkNVK99v1Lc2hMy0Xw64a1 P53xoyoV7jiUuSA67CW7lqVzCfw+9TWJMYXOnncL4gh4N6AS4uzIbZ8NIduD0mxdoIoNBr3YH2A 1DqbMPU+s8joCvysZjR3excIE2KqGCnjjP0GYDWyYK1pD3rzRab6YF1bh3hjcXaLktMcLSKyirR sc8xwYwpmswnPyt0MR1lbrr6jks3NhMnXbs8m/aW/YtgmkMp9iY6YClHCwjBuWTyACaa9rMXmnh TnwwI1Mr9ftp/kPLZXaa0YYIZ5CMfdwSUpOmhXF/0ESL77V7BUGyCjgu2oGKOp9B/7UGXcYPuBq 3X2JIDAsaXOpNYQ== X-Developer-Key: i=florian.hofhammer@epfl.ch; a=openpgp; fpr=A8207C3F4ABEBBED9B4DF84996EB27BA315FC77C Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: GVAP278CA0012.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:20::22) To ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::2a0) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: ZR1PPF9AC83A6B5:EE_|ZRZP278MB1808:EE_ X-MS-Office365-Filtering-Correlation-Id: 08f0ef23-f847-4d1d-492a-08de79260083 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|19092799006|786006|1800799024|376014|366016; X-Microsoft-Antispam-Message-Info: w4ik+TXgkQjmLKfF3vd7FuJZSCMyDD4tQFquPRX2QgUAydGnkrQme2ugTTYkk5LAClPdxue34+4UG71Vff6t5bAN4bHNXUz7HiDoTQt8gOBeiCbhKdqinsPETidfqn+UsCKzs2cfX8iC2bIitmEt/oRAId8JTbJxhLfbopE5jeA/S4+EHS/mVWoDtE4ANarNKA8knqOuBokAct4MbQPksA/vQcuBQRZ2lkrWWE8QD774htxIBvgWzfG6hNwshKbhTheF1xpHTGuVAA/GALuH8VTXv4YqOp++Z0AlbETUSp4Dsw12uGaKG1rBi3E4R95C7x70KXf1l/bi5Wt7JIQctWAaqT3htmLiBxtP7IYN5L8+rO88JCw47rqW3gSnX/I97vRTyz3xjm8NiEy9kkozMfUkijUe3zfzV9F74+nw85UVOk3RV+cz6pjcr7b3CjJBl+YdYslNsz3CrZmu8+mYftpyfQ3TkhO1V0cUXqyyiyEUVOI6MpfCmZrLijHjd0ohKbocasWv9VtKFU6HdVCvGubZRjrXIOLSmYdk2Tvvp4dFyOeASFjdxnTcNtMNRohFTVNSoeLMiRzURJ3T5AG1LH132DXYhNrYPWtV4ND/6YrKnxCf+N1W99t866MijuLBjxKO3KVpg6NM7i0knayYjx/8hBV06hrkUTBC1HmKXdA7+0sQLnZgmXAPFJqFRqaEYVUYfJ1ll0Qq2RDYN2DV1Ld/V/cTBnZrp2j71qr4efE= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(19092799006)(786006)(1800799024)(376014)(366016); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RDl5THk4ZExkWkJiMUdPOGlFY0ZmY0VaeFYra1lSSlZGckoyTEpFYkVVTWxO?= =?utf-8?B?RTBVNk8rWFFteDJFWEhEYTluUkJUa0I3Z1VQSXlFUmxucDdMRm5XTHZORGhW?= =?utf-8?B?NHdmQTZieklvS1hUN1JpQm50VlhHQWxTMUJSSjM5amJzc25ROHVlVFBXWGlH?= =?utf-8?B?ZkIrR3hNY3dLenB1c3I2K2R1RlJlVVd0RnowSUVQR3NCMk9KQWVVd3dQa0Q2?= =?utf-8?B?Q011RU9ueHI3MUdzd1RDZXZhZHVpaEIzSlNUTllXMCtwUE9FVnFPT094bC9D?= =?utf-8?B?SHVZYWFBOWZYanFnZmMwb1d5RlM4SFQ2Snhpc0tadXBiTWdSMjdyT0ZDNjNt?= =?utf-8?B?azBWRWdJbHBmejZCZGE3S0VBZzFCQ2hzTGtwUkYreW1ZdG9vYnJhMzhBczY4?= =?utf-8?B?bUlYbk9LdHFXYXRSejh4NlJkUnZJa2FOby9CdHdtNU8vVU1SajZJYWRTSnpB?= =?utf-8?B?dHFVTXYrNUdLOXJ0NFBtNzQvaG9JMEU0WlRvZG1uVHd4RjhiVUVoWFZJbXVN?= =?utf-8?B?UTJkUlJTaXlMN25KRFBwWDk2NEVwZWJZaDhpWVl1K3FGcENpZElMWE4yR0xX?= =?utf-8?B?eDFxMGxrUHFURzNORTJKQVk4MjZKWlkrTDdNRHZYRTRmSzFpaFpKc1lqbTQ0?= =?utf-8?B?bSsyRURzcldPZERaY3pHdUR4OHAzZEF6N3dTcG9GT083bWs5YllQL2xTWUlr?= =?utf-8?B?MnRDMXVodkhRTXJVTmZCZCs2T2FQenJsQkdHeFFXYmpDODF6RTlkQng5SnBE?= =?utf-8?B?TnhHR3d2WnNodkZ2YzJuNnY4eEc2OC9hVk1mNU93d1lsbk5CTTdhaVpYMGdU?= =?utf-8?B?QUFza1ZxZGJvUVNVZ0ZPYk5qeXY1eXY4aFFta0NqR2tWNXd6K0p1TUJqUG5D?= =?utf-8?B?OWh3Y3d3S2tIWExXWnNyU253V0pTN2xETTBDUDNFa250Zy8zcmFZSWFhazZT?= =?utf-8?B?T3BhU2RNdHdGQ3NMenlhRmxETXZzR2lwTGpyWlB0bnhkdUFYbVBLSnNXaHZn?= =?utf-8?B?WG8xZEdlUEtidll3VFdyZzFLS2JNZDRUMG5pb1RvN0hQWCtUcURTSzZrUC8x?= =?utf-8?B?SmVlWXFMYlJYM2VwQ2I1cHBTRVF6dHVpNTI0ODgwaGQxbnRNZ05Samg1QXRk?= =?utf-8?B?L2ZiUHA1MFJtQ2lPenNMUHd2bXBGRGZ5dkhGOUFXT1dUYUlMUjNwTE9PdkZK?= =?utf-8?B?aTZpL2JhdFZwWVdmekJERFJxK1JDZ2tPc1lmZUsrdEl1SkJCbFYwa1lrSEgy?= =?utf-8?B?RkV3TkVMSHc4MW5aeTFJdUJNNng5OFdZOGVZZHM5TDNxMldSYmhvbm1jaUdo?= =?utf-8?B?Rnl2TUtlR0xwZnFWcG1zRXljR2lGTTdwd095T1NTSzYyUm0zcytPWXY3a3Bv?= =?utf-8?B?a2xhckp6N2ZzMkZOS0JlcVloakpPZ20yWWlOUjFIdVBhbTdFUDFCSkxaM00z?= =?utf-8?B?ek9Hd3ZBVTUwM1ovcEMzYllFTE0wSWRja0cyY0VDejdHdExJRm0rMjdiaUh5?= =?utf-8?B?bFE1bGhlbFdETW5BN2NsNW54RUIvdTdxVisyZkUvWTZadkdWS2ZDWDRiYTRz?= =?utf-8?B?RWdFdTBOc2hQR2VuTjJhaFFsWkNwVk50aDkzN0h6TmhwWXVDUEJxWkEwbnpD?= =?utf-8?B?L1BMcVFWdmxiZjEreTNFTU1xYmFWd01YTnhqSWZFaVU5Qkd1eUFFVXpCT1J3?= =?utf-8?B?TW9SeTBFZGkvZWpKdG95djIwTldWb3k3ZkJhSjV1MVV6MkhrQjdEYmVZNUl5?= =?utf-8?B?V2gzQXR1U01VeU1uZnBBcDJEY2c3S2crcHlwdWViVGEzYW41MHFlbTJNQmpa?= =?utf-8?B?bStBTFlnNzBYU3VKWTdwZjVrMzRUOXV5WmJpMUFZRDBTNFZkTGR6cmpiRjg5?= =?utf-8?B?U2I1MW9CZERKN1ZRTHhFb3BBVzR0SjcrQWl1V1pzU2tjM0N0NFZNRitqZU1K?= =?utf-8?B?VlFNRGVFZ1AwWE51QTVybXBtZ01wTFJsNStXRi96ZEJqdUsrWDhjSXErcUtV?= =?utf-8?B?OTlSS3dXNkxwaU9PUHBTNkkrdURmU1hzem5LNlFkZElkZFloa242cm56NExy?= =?utf-8?B?NUEyRWkvSHR4c3gwT2E0ZlRCRGJtbnUyN1NLMWxyZ1cya21HMW5iMVNoazND?= =?utf-8?B?cTF2ODJzQlVGWkNSajBxc0V4blNDMHJtM01wdEVwUkVlWFRnSGFrVkU2Z3h0?= =?utf-8?B?Y3NlcGJBbTFwdDRSU2VHNTBkUWNRUUpIU2xPbHVUQVVvRWhUd1FLUlJycVAw?= =?utf-8?B?QW5IWU1DWlowSm1lZzBXWkhkZWFaSE9pRmlzVlNmcWMyUDFYZGhNVWc4R1U5?= =?utf-8?B?VDlsL2RsK09aemd1MGdTVHdoY2wySzZSWUVQMXpwRFU3VUxMR0lHUT09?= X-OriginatorOrg: epfl.ch X-MS-Exchange-CrossTenant-Network-Message-Id: 08f0ef23-f847-4d1d-492a-08de79260083 X-MS-Exchange-CrossTenant-AuthSource: ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2026 13:08:45.8477 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f6c2556a-c4fb-4ab1-a2c7-9e220df11c43 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ArzVZBTHurps5QbZy6pGbf4pkrV75G24PyXmbZXeDokv9rPiCT0Gwdkl6nOkf1pmktuQChFssddJR1uJjNCQyLYel9Lv/BWzKaeYlFwGl4E= X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZRZP278MB1808 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=2a01:111:f403:c213::2; envelope-from=florian.hofhammer@epfl.ch; helo=ZRZP278CU001.outbound.protection.outlook.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_PASS=-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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @epfl.ch) X-ZM-MESSAGEID: 1772544023618158500 Some registers should be marked as read-only from a plugin API perspective, as writing to them via qemu_plugin_write_register has no effect. This includes the program counter, and we expose this fact to the plugins with this patch. Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Florian Hofhammer Reviewed-by: Pierrick Bouvier --- include/plugins/qemu-plugin.h | 3 +++ plugins/api.c | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/include/plugins/qemu-plugin.h b/include/plugins/qemu-plugin.h index f083c30fd3..791d223df4 100644 --- a/include/plugins/qemu-plugin.h +++ b/include/plugins/qemu-plugin.h @@ -979,11 +979,14 @@ struct qemu_plugin_register; * writing value with qemu_plugin_write_register * @name: register name * @feature: optional feature descriptor, can be NULL + * @is_readonly: true if the register cannot be written via + * qemu_plugin_write_register */ typedef struct { struct qemu_plugin_register *handle; const char *name; const char *feature; + bool is_readonly; } qemu_plugin_reg_descriptor; =20 /** diff --git a/plugins/api.c b/plugins/api.c index 23c291f644..85b34949cb 100644 --- a/plugins/api.c +++ b/plugins/api.c @@ -410,6 +410,12 @@ bool qemu_plugin_bool_parse(const char *name, const ch= ar *value, bool *ret) * ancillary data the plugin might find useful. */ =20 +static const char pc_str[] =3D "pc"; /* generic name for program counter */ +static const char eip_str[] =3D "eip"; /* x86-specific name for PC */ +static const char rip_str[] =3D "rip"; /* x86_64-specific name for PC */ +static const char pswa_str[] =3D "pswa"; /* s390x-specific name for PC */ +static const char iaoq_str[] =3D "iaoq"; /* HP/PA-specific name for PC */ +static const char rpc_str[] =3D "rpc"; /* microblaze-specific name for PC = */ static GArray *create_register_handles(GArray *gdbstub_regs) { GArray *find_data =3D g_array_new(true, true, @@ -427,6 +433,16 @@ static GArray *create_register_handles(GArray *gdbstub= _regs) /* Create a record for the plugin */ desc.handle =3D GINT_TO_POINTER(grd->gdb_reg + 1); desc.name =3D g_intern_string(grd->name); + desc.is_readonly =3D false; + if (g_strcmp0(desc.name, pc_str) =3D=3D 0 + || g_strcmp0(desc.name, eip_str) =3D=3D 0 + || g_strcmp0(desc.name, rip_str) =3D=3D 0 + || g_strcmp0(desc.name, pswa_str) =3D=3D 0 + || g_strcmp0(desc.name, iaoq_str) =3D=3D 0 + || g_strcmp0(desc.name, rpc_str) =3D=3D 0 + ) { + desc.is_readonly =3D true; + } desc.feature =3D g_intern_string(grd->feature_name); g_array_append_val(find_data, desc); } --=20 2.53.0 From nobody Sat Apr 11 23:04:11 2026 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; arc=pass (i=1 dmarc=pass fromdomain=epfl.ch); dmarc=pass(p=quarantine dis=none) header.from=epfl.ch ARC-Seal: i=2; a=rsa-sha256; t=1772543466; cv=pass; d=zohomail.com; s=zohoarc; b=TGL4LG9bzo/SPeatGjH6NpEx6Q3zZRgDYuRvlGw6VX5HwGhnoA5quMxMY9MWJg4zS0w1+3fBzfXP9arHJCFA+sQC5t9znrpGCf3UWoCnOCMm26ZgerOil4AM9WBZWboV6qqvMfBrbE6AW4pyM5DlLjy4hGkPIT7gkKHrFI4RgF4= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772543466; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=v8aI2MFTQDgYL2F3AzjY5EZAlMdjTjeGrmFG9uE4hBc=; b=OOQDKp6a37kgPV303qC+D7paKfb2tCPaajorq5+OYnURqyOguWLuaR8AS7ar9kE5fusxUxPpIpowpeHZawRDU4Oz7dpJ7R7G4L8Rijoqh3p1Jg4y2HbZhTrbprmo22I5mKz3o+L/FwosIXTa+EEfJzipsoNaGrZb/UIwMBO4Gcw= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=epfl.ch); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772543466617927.5761282512569; Tue, 3 Mar 2026 05:11:06 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vxPUt-0007L5-SW; Tue, 03 Mar 2026 08:09:11 -0500 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 1vxPUd-0007H4-K0 for qemu-devel@nongnu.org; Tue, 03 Mar 2026 08:08:56 -0500 Received: from mail-switzerlandwestazlp170100001.outbound.protection.outlook.com ([2a01:111:f403:c214::1] helo=GVAP278CU002.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vxPUa-0000JX-FF for qemu-devel@nongnu.org; Tue, 03 Mar 2026 08:08:55 -0500 Received: from ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::2a0) by GV0P278MB1207.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:5e::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.22; Tue, 3 Mar 2026 13:08:48 +0000 Received: from ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM ([fe80::6830:19f2:4a5b:749e]) by ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM ([fe80::6830:19f2:4a5b:749e%2]) with mapi id 15.20.9654.022; Tue, 3 Mar 2026 13:08:47 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hKU7E0G3XQz4MHOT89k5ShDvtWCM1e2v4o2u5r3ads1eyR8b8lmSsehcLzUZjEAO2Z98PAK6vGJluzlFnUTKgsrVjYnuNxMkx+Sv10dmtyon+I00buAOJNM/gnERL77zpL4Frf35CzLufd1W/9We05tyK2ZC/EoIhyF/RWKQ6RsuKd1bhYH+I1fZ32uBL8JRc4AZ4z8efsUpyDZj0ZhqA+v7BpH2G9cz94K3Hm0WR6Fu3wLSWuu/1gEYIRnmIWMF5GW6nXT3UfG/eUJ0YwnqetiXIkdA+S82yhsmW02xtcoIJNsXcmaB5Mq7kSYf2NfFC5+2vkvY3SrnBkWuILvTrA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=v8aI2MFTQDgYL2F3AzjY5EZAlMdjTjeGrmFG9uE4hBc=; b=VQV+uSnY5h+hMvUSti8mnkosQ2tDBxlxIhbrKU5qCsSXmWpw0YG1WOZ64hDwou05/tZ6nJ7RfzUsxpgvHkH63t2ZfRdL83gS8mVjfUvOaN8pke/gRvr5V1kk1Lfg39guw33r7pkQPBjcIB1eIU6YaLNecOS1f8uPzq8OnvCUisS53YTIfcg/LWwi64NB9wS5OIyVV7HclIMSDgc20dLluU9T099AhCqjnx8FRXMQvW5ndvCJ+Iz8jRP9911LixBWwionSLwWpQB+D6QoI9DYebuaYx59RBEs3FqZeOSLX3eluTUdOe2+DgPwFpb4o3AJh57EjBGOIgovqG6ZG2dGGA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epfl.ch; dmarc=pass action=none header.from=epfl.ch; dkim=pass header.d=epfl.ch; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epfl.ch; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=v8aI2MFTQDgYL2F3AzjY5EZAlMdjTjeGrmFG9uE4hBc=; b=fGDYy7KqEN4PcdKFQu+hI1I4cvgnogeuH9O0bSevNVZS+Z4OXKnKXoKaCyuVFYCVIPupK6Ug/eNQLA94shxllnDUaoGEDLekimuqKm+Bw/ak0DaOA/Z8UwUqulH1TDKx3y+v5/rKxD6ojetIaIS6AEp7pp1w7juN4vjXbhluzts= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epfl.ch; From: Florian Hofhammer To: qemu-devel@nongnu.org Cc: Florian Hofhammer , =?utf-8?q?Alex_Benn=C3=A9e?= , Pierrick Bouvier , Laurent Vivier , berrange@redhat.com, richard.henderson@linaro.org, imp@bsdimp.com Subject: [PATCH v6 6/7] plugins: prohibit writing to read-only registers Date: Tue, 3 Mar 2026 14:07:32 +0100 Message-ID: <20260303-setpc-v5-v6-6-15c77cfe184e@epfl.ch> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260303-setpc-v5-v6-0-15c77cfe184e@epfl.ch> References: <20260303-setpc-v5-v6-0-15c77cfe184e@epfl.ch> Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2601; i=florian.hofhammer@epfl.ch; h=from:subject:message-id; bh=D+Zp3heOBNuaqnxs8ULmBdp32/BQih3GtGnFxKOJ+Uk=; b=owEBbQKS/ZANAwAKAZbrJ7oxX8d8AcsmYgBppr1nQ9L48iNfYpi619T4ZNuUN1+tBvEWG9CBo L1xqtQmZyuJAjMEAAEKAB0WIQSoIHw/Sr677ZtN+EmW6ye6MV/HfAUCaaa9ZwAKCRCW6ye6MV/H fH40EAC/HQIgXxpbcpCn3ZLo6BBIh2TtaIHurFAI5WUvAGIdJcLcwdHXjxV9EPp5swDTO/ib8g/ JQ8/W+JcYJ92ZeqCPqGk0o9fv/3bkmyGSXn0oUm9VzBEv6j+2ON6zd9LMDZNC2ySOhfVMQBMxej tKKAwKNPOwCdEhl/GRKkys96qaNVnMA07z8ztUsqa7YCeAcr+dJgONjGY1xTzWZXtNFkg28Gnkb LVMpjUEqyyyg66E1UBtGBZAKcY5EZlElt+6Qy3/8kGLtokFdngafZUPFloQnlo/K5T/qgieK/cR sBq+mkddSJNF1NMmxBmrjA0k7WB2OwAZPhjLMmZdyxkk1D+H7vqqYy3+EPPWpuEe1EpaDK+H5nz SMdsDiVJlkY/P4T4MGz/9uj+rYqqCrX2Yeh45nsCyWKddTir/EXJaNKu/Z3mty0lirqx2OCu7lb GYeyqYg09d7fAHKi8ovCjkNE8hQPjmlyitrsCjgWERXVWG/WZ2lA4SmdjWhnzWikHXmagHAUEQc WIu6b820NWcTKXdKZHIqeeHUzZaaKJ8gopbM2SoYWKBnH9tzIiXYX79ltV+/DfQykbnAdkaYsWs pVZtURklNNfiHBAra3yJsT+wwo/mxlZuCWULXcXVYgYvGQwSAXezPJby1KddyPIUq8o8rkV7ZTy 9n67Y+BTS7uUkvQ== X-Developer-Key: i=florian.hofhammer@epfl.ch; a=openpgp; fpr=A8207C3F4ABEBBED9B4DF84996EB27BA315FC77C Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: GVAP278CA0012.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:20::22) To ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::2a0) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: ZR1PPF9AC83A6B5:EE_|GV0P278MB1207:EE_ X-MS-Office365-Filtering-Correlation-Id: 60385c05-7d2d-4e4d-b023-08de792600c3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|19092799006|366016|376014|786006|1800799024; X-Microsoft-Antispam-Message-Info: A/0N/YYGrvgws3TP5hiYqV4u+4KmsdZnQmWdcll4/ot8KJq+YBtBlWxkUvxJhqrQP/2mArDYldvDcd9sOCe3SyKj1KEkiB7pZgeMsNx80CrzfG4DzuZSAIMW+CHqCaeOCtz8meWT9G7XUrn3TiVnIHRsDDHXeVrCTmm0ubSSJjbAJtQGYgb4dpbo/SWjUj2EIhZxKOtK3NL1YXBzqdOac8Dm8AfDGb/NwfVxusIrFNookeNjMkj4EdOFQyjWbIc8WHyeWU6exsRB/l8xmV3G8CZjG4khA7Sk1LtIDhX2b7wsJDEpxMjIJ1O+2V/p4OHAyuH/onfex44R1EwxCUNuNxTJGNmV14C8hdemvPccJTRnX1TNjtYVpDJQ9Q+CsxUVCC+XCJIBpg2kl1MdW3dI/2tvhaw5YZiUaoc0EAuVWenOkFGOpgnulnT9DVS4HnP193b4/lsGAK59+ASUau4Kl21EWCUApsP1I0+h/NZrHmZP8DrfDrlCiS7EqZzDkrtnTjzzhn+Z9A+vLB4HZ6kvRgKhf37gG25oyXPk9nDV8ZpGX3gCKhWC+/z9wi7On/G+i4FDEDhyn8WMlv2ie1dhofQhtc29N23/gO1YDzB7qUatAvT7J4oHPZ/sJENos7wqorcRYvWr2Tjzg4y5rQdrFluaBW7LfKtRvxQ6OY/kOI61qkgl71bTXr1HpxGfEDZ5i/ghc4PBZ56mFCUR1RJkjKFYFJkFiUBCRQPHhou3G4k= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(19092799006)(366016)(376014)(786006)(1800799024); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZktobUY4bWRKcFEyYUJGTWp6dUxyWjljbHVjZGVGTC9BYUpQUnBhcG0wc3R2?= =?utf-8?B?NEpxaWNDMHpoZFd4Z2xKNm5xRXVPRzhKS1NRYWZ5eHpqOGxvcHNrVS9YYnAv?= =?utf-8?B?QmZlMUJ1U21HMGRXZ2R6cTdlaFc2WHFxeXdRcWlmZDY2SFRoUVFiS2cyRkIr?= =?utf-8?B?T0FyT1BOdkFNbVFFOWk0Ymg0K3F3VU9qWjZZa2M3eXNoWHJ4RmtteDVHdXJy?= =?utf-8?B?TllNWG5SYnpFb0ZZR09oZEkrbEtrTkZIRHEwb0Y2eFU5Mjl5a0hlVEVUeEp3?= =?utf-8?B?cCtnT0t6SmEyLzNmVEt0UEx0UWZ1WkQ4ek5Fb0NJeG5ydlpUQUJvS3RTdUdi?= =?utf-8?B?dFRzTTk2UkV3a3JQT053OUhqaTM3aGRoeC9tSUtNZk1PMnFSSjgyRTl5eFdu?= =?utf-8?B?ckdMVHpPeVBPcWNDSmVYd2RFNEtkanI5bFV5YVppTGFXNUJHVUhHclVXMXBm?= =?utf-8?B?Yll6RzBFcmp1R0tOZlZHZmJXMjdvaitNUkhmUlQyMUc1SmZsWUh1QkRGNEtO?= =?utf-8?B?YkRmQ1ZtZFhkK3BRaHgwakxhRG40QnBmM0FFdElGeWhvRU52OHA4UmJjZHFo?= =?utf-8?B?VUx3UHBWUEJGM1FFbFVQNGp2SjBoL1U1L3NFS09qYzFXczhMeVgxQURaeWl2?= =?utf-8?B?bXZxOWtMdU8zRERybCtma1ZOMHlWaHRXY3VhS3BtY3RVV0JuYjdRZDc4Umtw?= =?utf-8?B?NnMxMitQR3FTM04wNEdGd2trOUZHdEhyNmNHc2lqcTh4VC9OZG4zTWEvelJs?= =?utf-8?B?RWdQRDdJcFUySW1ONW1GSFcxUU4yUE1CakZORExJM2N4Z0h2RS9DclJ0T3Ni?= =?utf-8?B?QU0wa3FkSHIrYXBoQjU5QkMwQm11MkFNQzBVNTBsOWpWVWR0K0J4Z3FldWdF?= =?utf-8?B?Q3dUbHNQRXQ0WC9rZlVEUmZoVDMrbkk4SmoxWTRZaldUT1hiTlhCT0tvVEM2?= =?utf-8?B?aDlRY2V1ZWJsWXFHM3dORzQ3Rk1zdHQ0TTNNa2UxS2lvcmRDajhpVGQ4VmNu?= =?utf-8?B?ak0zbFhUbFdaNDRuVktFbXJ6WWJtcTM5bDRKVGRJQWZVckhzK0xJM0dhWjQr?= =?utf-8?B?d2hERnE5a0U4ZzVqSHQ0eVBoRGZ2bWpPSnNScjRFeWFSS1RHZHZBSFlwdmt2?= =?utf-8?B?WHZhZ21vdElXQ1V0YmNzNC93eGlNMVZBYWkrdE5TWjBGZ0tLT0orcUp5R05X?= =?utf-8?B?SGtvQmRDTEJrYmR4NjRza1FCZXdNLzR2QS9Zbm1Sd2h1NW1oMFNzSjAwL0NV?= =?utf-8?B?dm1zWTJJbXM1c0hWMHV1Mzg2ZnhRTGlKRTdhbDBXTjJsMzlrZDhBNi95aFNh?= =?utf-8?B?MFRzNFljYjBEY2JqZE9LT282YkxSWkxtR0tYdll3aE1FWjZwMXlRR0UzZ1cw?= =?utf-8?B?cW45OW1IMmd4a2VheGZpdzJ4WnJQdEFSd2NhSlNKRHBZK0VPZmhCdU14TmJS?= =?utf-8?B?ckNGUFg3N3BBQkVjcGhNbzNPaVhsQWNEMUJtQ2I4Q0YyTjRwS2MzT3pEMG02?= =?utf-8?B?RWxmUmJXSkpJUmkxRGpRQi9zNVY3ZUh0bG8vc29FSVgyajVSMVl4Yll0WGJJ?= =?utf-8?B?bGpid09PSDhId1BuS3lDRFJnOHYrNEpMVi8wWCt2b1B6NGFtVUZCU3dSajRr?= =?utf-8?B?VEpWeExMYWpLaWQ5VjZtdnZSWmt6TERZRkQrUzJvVzlLVE01OTlycStQNlgz?= =?utf-8?B?ak03d2ZjWFBRT0h1bWtNY2UyMWRtZHdSeXd4SWd1OE1ncHBraUxkd21BeFVq?= =?utf-8?B?ZXYwd3FDckdjWGhPY3A1UnM3UVVVait1bjVobklQQWd5UU5nNy9Wb0FVa0hh?= =?utf-8?B?QitraE9udW84NFU5emxTWk10ZDBvSnIveFRlbDBJUmp3ZXF4aVhzdjlKb2xr?= =?utf-8?B?NUVGQWFNdEtBQVg1TDQ0NXpFTnRLWlJ0clJMQ25UMFpEYTdTVDBDUjVJMGdK?= =?utf-8?B?Y3BEd3J5MzhFZWlvc1hudDk1V09kSWpaS2NBUjRJNVdjSy9zeXhFQURQTFRO?= =?utf-8?B?bWdwUW5TbU1oUzk3ZzMyTncxeVVVWVEvNXhKS1RFTkZKQ0JoSlFLeXI0bVU1?= =?utf-8?B?UC9vL2JpTWxLQTJ6dnBCZ1hLaUR5Vm01aWQxZDFoOEdnakZLVmpSdUh0ZG9s?= =?utf-8?B?M21iUHp4MTZIcW9lR1Y1OU1xbnk1Q05ucVBHYlQ3NnUzeTVRQmZYelZrZkpC?= =?utf-8?B?YWJlV3EycW9OenBZSHArMU9lNENRaUZFS1g1V0lIQ3FxaEovNnl3bUIxcmx4?= =?utf-8?B?ZCtRbUVEakF4amhPWVdGOFZzWkVuNEMzN3JlSXR6b3VKbmthR3EzbFFZKzlW?= =?utf-8?B?ajIwM21wMG9EdXhCRVpMd2Y1ZDBOMkVoMEloNXoxTmtRU0g4a05nZz09?= X-OriginatorOrg: epfl.ch X-MS-Exchange-CrossTenant-Network-Message-Id: 60385c05-7d2d-4e4d-b023-08de792600c3 X-MS-Exchange-CrossTenant-AuthSource: ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2026 13:08:46.2921 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f6c2556a-c4fb-4ab1-a2c7-9e220df11c43 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 36HGpBj6cCg6hYTy6SOQcg67IShv64XORj2ww7C6oUeo3j7P8qYY0mJcL9tlyyM9jELoRIjL4eEteIdHaxhB+GRmfmh2NK5nsIrtcfiuUOI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV0P278MB1207 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=2a01:111:f403:c214::1; envelope-from=florian.hofhammer@epfl.ch; helo=GVAP278CU002.outbound.protection.outlook.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 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @epfl.ch) X-ZM-MESSAGEID: 1772544239717158500 The opaque register handle encodes whether a register is read-only in the lowest bit and prevents writing to the register via the plugin API in this case. Signed-off-by: Florian Hofhammer Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Pierrick Bouvier --- plugins/api.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/plugins/api.c b/plugins/api.c index 85b34949cb..0c348a789b 100644 --- a/plugins/api.c +++ b/plugins/api.c @@ -424,6 +424,7 @@ static GArray *create_register_handles(GArray *gdbstub_= regs) for (int i =3D 0; i < gdbstub_regs->len; i++) { GDBRegDesc *grd =3D &g_array_index(gdbstub_regs, GDBRegDesc, i); qemu_plugin_reg_descriptor desc; + gint plugin_ro_bit =3D 0; =20 /* skip "un-named" regs */ if (!grd->name) { @@ -431,7 +432,6 @@ static GArray *create_register_handles(GArray *gdbstub_= regs) } =20 /* Create a record for the plugin */ - desc.handle =3D GINT_TO_POINTER(grd->gdb_reg + 1); desc.name =3D g_intern_string(grd->name); desc.is_readonly =3D false; if (g_strcmp0(desc.name, pc_str) =3D=3D 0 @@ -442,7 +442,9 @@ static GArray *create_register_handles(GArray *gdbstub_= regs) || g_strcmp0(desc.name, rpc_str) =3D=3D 0 ) { desc.is_readonly =3D true; + plugin_ro_bit =3D 1; } + desc.handle =3D GINT_TO_POINTER((grd->gdb_reg << 1) | plugin_ro_bi= t); desc.feature =3D g_intern_string(grd->feature_name); g_array_append_val(find_data, desc); } @@ -467,7 +469,7 @@ bool qemu_plugin_read_register(struct qemu_plugin_regis= ter *reg, return false; } =20 - return (gdb_read_register(current_cpu, buf, GPOINTER_TO_INT(reg) - 1) = > 0); + return (gdb_read_register(current_cpu, buf, GPOINTER_TO_INT(reg) >> 1)= > 0); } =20 bool qemu_plugin_write_register(struct qemu_plugin_register *reg, @@ -475,13 +477,16 @@ bool qemu_plugin_write_register(struct qemu_plugin_re= gister *reg, { g_assert(current_cpu); =20 + /* Read-only property is encoded in least significant bit */ + g_assert((GPOINTER_TO_INT(reg) & 1) =3D=3D 0); + if (buf->len =3D=3D 0 || (qemu_plugin_get_cb_flags() !=3D QEMU_PLUGIN_CB_RW_REGS && qemu_plugin_get_cb_flags() !=3D QEMU_PLUGIN_CB_RW_REGS_PC)) { return false; } =20 - return (gdb_write_register(current_cpu, buf->data, GPOINTER_TO_INT(reg= ) - 1) > 0); + return (gdb_write_register(current_cpu, buf->data, GPOINTER_TO_INT(reg= ) >> 1) > 0); } =20 void qemu_plugin_set_pc(uint64_t vaddr) --=20 2.53.0 From nobody Sat Apr 11 23:04:11 2026 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; arc=pass (i=1 dmarc=pass fromdomain=epfl.ch); dmarc=pass(p=quarantine dis=none) header.from=epfl.ch ARC-Seal: i=2; a=rsa-sha256; t=1772543373; cv=pass; d=zohomail.com; s=zohoarc; b=O8hqvG8OGx88eGgKQO6fuqd106Ma+2ez2VWEDtH8FrKzWr+5tNJO6sh09+ihRARZJg5SLDMLEgPYBa36+/WDHmcdhmvXsSYjrsJiAj/LQZV9T5lkp5BtmrNLoXlUZmH8qlB58bdhEnrbYQngJhjmDZ3JqcUXet3YqyN66/Dj+EM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772543373; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=3BNk8PyaB79Blk1ypOTqSAgE08K5OzzHMj2WKatisJ4=; b=kEp0R/TUiQUBqpd1F20xstOg5CXRI8ZucnV9rXajCqWLCXkSw0rHqNAMw5IbDRiEz2kvVhEcX5wpROI4MAS3DkYIUdYzoT76imXq6nfXpqwvlx+bzgAzgrpR+yqHpRHt2aguialWEhTR7EK2qaaMN/BRrr74X/jA8UevXC1tB8Y= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=epfl.ch); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772543372945989.9826879390755; Tue, 3 Mar 2026 05:09:32 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vxPUt-0007NE-V7; Tue, 03 Mar 2026 08:09:16 -0500 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 1vxPUf-0007HW-QD for qemu-devel@nongnu.org; Tue, 03 Mar 2026 08:08:58 -0500 Received: from mail-switzerlandwestazlp170100001.outbound.protection.outlook.com ([2a01:111:f403:c214::1] helo=GVAP278CU002.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vxPUd-0000JX-VH for qemu-devel@nongnu.org; Tue, 03 Mar 2026 08:08:57 -0500 Received: from ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::2a0) by GV0P278MB1207.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:5e::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.22; Tue, 3 Mar 2026 13:08:48 +0000 Received: from ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM ([fe80::6830:19f2:4a5b:749e]) by ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM ([fe80::6830:19f2:4a5b:749e%2]) with mapi id 15.20.9654.022; Tue, 3 Mar 2026 13:08:48 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=PIp2lDZJAGVrpc6KI4aazJWJiT6zupLeQ0Duz7Wt/btwWTCjSXI3yZ02MKtRZNIPud23CSW70bfvMxiWwaDeUay5g/HN/+HGj7kh210Lixq1KhMECiMDwZ1nx54K7sLGObcwqjdeD6QzCPMSr7UVVY112plnKY2OvsZ5y1yokeYUaKiMPdWXkPYJdIC71fTHD+SLmnHjDZ/QKKdU7nozTDwo5OHiluwlP+DeRjL397vweU8gsCmUVWRYI9jZyVWbyUtlNv6ZPZavWKLiWkVhvyWS8v9qFwEVQneoX9GSw+BgRWA01hqI/vxIXuuChR9E7kabrVh3iNJ+LHuw6CUESg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=3BNk8PyaB79Blk1ypOTqSAgE08K5OzzHMj2WKatisJ4=; b=fHpwEwKNzjIHfT8o44PJpF/574y1a26jLwRNm53SXijlSghWvtikHARhRci4qJFJx30NtxzCgyMPFu0W5NBYKyFA7SahqoRv0Kaz83yNjl0dFhN6ISNtZDlqSZKsNF9diZ91n2WDYSeEU0Is8Llm2cgsLAZCeMaHPj//Frbqptkh7NGQtpCWpjXk0NFkRhuzlgJ2tHJDwQWhz1mKVUjHvOowqFJLEEwB6N6Te3Zhd5p94zCpcybYYqIgKlbuX2QdOmcG8zJn1C/wYFaeZG+PAIn32vIsOza8tVQ2rwJIA9gKKslNQlaL6xrnwqOT4I1wFaMWHjqHOuR9M7ESW4Mw9Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epfl.ch; dmarc=pass action=none header.from=epfl.ch; dkim=pass header.d=epfl.ch; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epfl.ch; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3BNk8PyaB79Blk1ypOTqSAgE08K5OzzHMj2WKatisJ4=; b=GznWFnyO6h7SKix6IKa8fSP+ceJSi3WPTwUa8rjAKIRtX3j4Mo1BLt+YcbCRehU3jXtPSDiXArV0IWfG7XVlT/toXrN4uMXzm9HeeGGf9h/mE35mSFjpMLQECnhUBZJKfOx9NBChPZIwevkZPcJF01gnRla/1e4XZiS2ZVlJLT4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epfl.ch; From: Florian Hofhammer To: qemu-devel@nongnu.org Cc: Florian Hofhammer , =?utf-8?q?Alex_Benn=C3=A9e?= , Pierrick Bouvier , Laurent Vivier , berrange@redhat.com, richard.henderson@linaro.org, imp@bsdimp.com Subject: [PATCH v6 7/7] tests/tcg/plugins: test register accesses Date: Tue, 3 Mar 2026 14:07:33 +0100 Message-ID: <20260303-setpc-v5-v6-7-15c77cfe184e@epfl.ch> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260303-setpc-v5-v6-0-15c77cfe184e@epfl.ch> References: <20260303-setpc-v5-v6-0-15c77cfe184e@epfl.ch> Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3879; i=florian.hofhammer@epfl.ch; h=from:subject:message-id; bh=s0G2uvDq0xOwRq6URS+Oxjy2nqIvkslwbcc7SlvprKk=; b=owEBbQKS/ZANAwAKAZbrJ7oxX8d8AcsmYgBppr1oHmmof74z7TOKe0uQs8im8EBxWTRKimSKZ BShcxa8AgiJAjMEAAEKAB0WIQSoIHw/Sr677ZtN+EmW6ye6MV/HfAUCaaa9aAAKCRCW6ye6MV/H fAz+EAC/sO6adEHXqKQN99DJ8sxV6y68P2C8GSnUGG2Hkgrw1ga9xZ91pIGAiOULDsr9uATeho9 H+FUc5RgRItSWKBnIcpJfYxpEklo6B6U8fpmFUK4uQov8lYOWOCiqGr2zpKydSe7xGESXh91xNB YRYTSsBRIWXLK3UwTlzTaQCFWBqdZeY5r1g235H42ASaUKQUJBVGbJNejF4vuAflnVZeXKRMghp erzRx0oVZVmCT08+nQzbpEw85DgPoiXvkzErNQUVxWD3Z/fnaR/LQ+9DivW8/Lv67zEUx62p2jd dfU6xU8xw6p8NdX3MOD/nN3w18yqjlfxcp9X0DxYFNQc8yeoWLAqr3jhm45cN8VHOqh1iOyr74Z x8CKO0eikPRME4ho0SfpP888UICuAa/NpKzkVgSrZ60Q0J4q+0jPBqIw9lqN/0OUI9vmDbaN0QV xMHRTeUYwWHc6Uq6WtP/lB0UHhZpDZkfGoMG0xxj1ockFCLuBn5LFVNt1Mi12NTf6BPNg3ahsSs XfBVeOimNCsHWrLjLxxEbC35J0lY+QeoGTfW6uPag/T0GCPwC+aPjdk3WRYIz/irl5bbU/79r71 ma3m4U01W8ulpWdmAWbx92dw6UMoooUP+LKKU/338hYyHR1nKDI5lrYneIPNOBNahiTN4IJuyNQ 4CicZ0BZeK7hEVw== X-Developer-Key: i=florian.hofhammer@epfl.ch; a=openpgp; fpr=A8207C3F4ABEBBED9B4DF84996EB27BA315FC77C Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: GVAP278CA0012.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:20::22) To ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::2a0) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: ZR1PPF9AC83A6B5:EE_|GV0P278MB1207:EE_ X-MS-Office365-Filtering-Correlation-Id: c3713539-9af2-4fa8-9bde-08de79260108 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|19092799006|366016|376014|786006|1800799024; X-Microsoft-Antispam-Message-Info: cj5X9Nt/q2AFoFHp+K4lE0GA18A3xFSdrtkF9LKyo7RlHZODZAn9tusbhc8H1xoXpFCol99izWy2Yjvgl46a/bua2ZTClhi3dgPxt0wJ0TyXPnWncDUVQgA9DD9UqbHNS3ojHbSRksZxnoavglFOZYrF2z+vUoXL/kWoACEbF6Wge8lA2LFQH7s4UFc1fVYVUpp0gMW2bPkL5f3hynCaf+3E5A7sJeLLO5EnYGnQDtSAGb2LqZ9FlZukXkGSJdbZjC2p+R7VP53INPjJ87pLF3WXspNOL0qexilbU0tAyT+bUQjKReH1wCfiG3HrZD4cQYf5iOV7kHaEOqVMrRE/ASNyRZMyyvt2X6KwKqD0VqnFIGgh+652yv86goYLTxeF1vKW8kOoeFr9BtZiBtav9iT5x2jTnv+WuXM0jS/xUD8KzxZC0Dw+ah+33YCuR4Iw8UmsUPm6agSAfDNX+dTCGboSIe80CBl05Ts1zWZmseWQFO6WUmbtB0/bCCFRqSeXedYIj6SRhQGMQmBp7pj3KvcCVZytcjwp4gs46jlIy0J9uAwqPvfcgiGhYdB6DmqSIexnbgjph7KprDw4urr9vH1oozdBBp2EwxTM0jyBz3ckWtKsIsNV+eF5lnPEvNJodnQZUfqZ6JLQ9SguXfPxP/V7tEk7t2e9u7Y+dxe8blebI2nIdt4C3KA1yauR/uPSZj9uMQWarjXdnDcYz72ZLnelxi8z9mqPfJmzLdLvJ34= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(19092799006)(366016)(376014)(786006)(1800799024); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YjZac1VXeWl3OHBuMlBYeE5JTFE1bWQyRHUxWVI1bnEyWkdka3NjbDZuWjMx?= =?utf-8?B?R0cwalVlazZCOTU5N081TzdjSEVzVERnZnRObUFoV3IyZFlaenJTM2JDaTla?= =?utf-8?B?UUIrZE9XYTJXYUFacXhNZjhFMitJWGpRenZ0QVVpYUQ2T2hCVkJwM3MxZStm?= =?utf-8?B?ZWhQR1dGRkRmMHhRUGZxYWlvWUVkV0FhaitxaDhsUUJ4ZXZTTmJKUU5IUy9i?= =?utf-8?B?R05xRU1ZNXBTTUNLbzlHR3FqVGN4ZU9oOVRtYWYvSndiQXE0S1k1WEpONG9F?= =?utf-8?B?K3pBSW8zZHdFaTFieEJ4UEU5L05IQ21wZ2c5MlkxbWJPTytBdmpkQ1EzdzV5?= =?utf-8?B?d2E1WGcwTWN2RHIrMFRoRThyTFRxTVM4WFZnd3VuNWtXRFZvNDFSRHpjemtE?= =?utf-8?B?QTZxQUN5dnFkaE02V0dFc1VwSnhEbFY5SWFuYndxVXg4SVFPeThQOHQ1aC9i?= =?utf-8?B?ZlFmTkcrTVl3d0dwdThzVnFubWNGZkZ1Q1F5TVlVWFNTWmpHcGNrKzc0Vklp?= =?utf-8?B?T2ZtdmYrNGNFdlZxUXZWSFFVc25uM1Jha092dVF5S09Pc2JaTVZTZXBxOG8y?= =?utf-8?B?Vmx3YWxiQlBRVUxUQ3E0SHR1clBmcWpaZDRZeTAzRytsRkdMbVQwVlN0TWNy?= =?utf-8?B?NXc3NUpkZ1lBY09sU29YN3JZbk1HY0hsQzR5V3EzTmZXTWk0aE5BTUtiV294?= =?utf-8?B?YXh4OStuaFlkWGx5NjFTdDdqY3FHb1FlMW9CV2xMd1VzNDhHYVh2RDJKYTBD?= =?utf-8?B?aXkxZ3VER25sWlpzQWFUdThqRmp1L2tiL3FBdUxqdzJPYzBURDN1VGdUYWVE?= =?utf-8?B?NGNXOXBMQ3NmN2FpNFJUa0xxN1A5cW1nTGlpaFJSMGIvcnlIQUUrRW1DK2Rw?= =?utf-8?B?RDZiVW9Nby9xTThLUXMxZnhmWnlvUDJlVUxUQ0tsL25RWEczdW8wZFN1Y2lD?= =?utf-8?B?czYwZTdPVm9vUGpPYjVtWGFXRzlZMW5jb3lQdFQ3NGpQZmdPZGdKbDZGMVZp?= =?utf-8?B?TWtzQ2hKcW01R1gyNmdyOERFbTlQV2s1Y3hvQ2JYY3pHYllhWGV0WXBLWEhE?= =?utf-8?B?SFdha2tnK0VvUk9XK2VtQXZmL01mcHJBVzNJbW13SEtieGViOU9WUHlyck9T?= =?utf-8?B?akZhelRZbHpuZk9UNG9Ga3o0dG5MNGxNak04U0RMenJ5RnRJTUl4Wi9SelM3?= =?utf-8?B?NS80RUFTd2kzaEs2UkF4aVhPazBkMEdIbWZzWk52R0RURUc3Q3FCVEE4MW0w?= =?utf-8?B?R3FCdmlXNDBkRUk5c21JTktoTnFEN1cvcFFtdk5rZmxFVHJHa0dDMG5LR3E5?= =?utf-8?B?S0pzYU5LbUsyMHZpMThncHg1U0o1YmdNaHQ3WGhmVko2T0liemd5bjBmeENU?= =?utf-8?B?TTNWVmZhMjJWMTUzS09iUW5aUllCbDdrZU1nT3NyV2EzUjN0NzljVEdxdWVi?= =?utf-8?B?Slp4MkFRTVJndGRsQllHVnByVG5qVXovNjg2R1hpSnRlYWFRQjh1d2FzOXFK?= =?utf-8?B?emxwdUdrQzZTaW9UVlYyNFAvb0tJVDRaeVB1S01uT3g2NXFZbjFWeXlhQ1Zk?= =?utf-8?B?MTdhR2I3UWZNTDJhYzJMalBBbnM1akFqenRjalJQMENDWVhpSlBBWi80SlNU?= =?utf-8?B?SDVLcWx4Z0dFZ1F5TmxBdHp2UiszS3FPdUplbU1maHFmTXBoYUdQOEJ3WDdj?= =?utf-8?B?Lzg4T0pMS0E3WlVwN0x6cWZZNGpFQmc1czhRQktqUVdXVXFhTlJRYjR4ckVx?= =?utf-8?B?OE9xd3dmNHZyRkVaZkdQaXY2MDNYTVVFYkFxTFRqditabi9WZ1luVnNyTk5L?= =?utf-8?B?QVp4OUQyQXNWTU5FMm5lc0drTXpzbUlZbjZ0eGgyeTZ2VmJ5bjAzTXdGb0ly?= =?utf-8?B?dEhTZ1N5NUw3aWtCRm5jMHlhbjNubGtSK1dIcjJkVHJKR2pyTllkbjQxNWlq?= =?utf-8?B?REJzMjVtbWNPSDB6SkJmdG00aExlOHkwbDdJaFpVNHo3R0NCang4Nk0wd1I1?= =?utf-8?B?MzBkSTBOTTk1M25aMFJaREt5ZldtdUpFbUJJdTl1a2tGVHYzZHA5cS9CZ01R?= =?utf-8?B?aURjRW1RTTZjbU9rR1Q3T1hPRlVJbUpicDI0allxTWhYSEphODhqRE1YZ1gw?= =?utf-8?B?M1UvNFRoaXZ6SVk0VlozU1VVZ1JTSGlHZDdJWG1XZVlBV1ZQYVFZdGZ2WjEz?= =?utf-8?B?ZFJ4Wk53WjkweHVvZER2M29ONHJsYThLbnZxNEJQcXhiSFRDTUtkSkprTXJi?= =?utf-8?B?ZGtHQUZjZWwvNFY3MC9HbzZQVkQxam93Y09vbnFTbGI3YVEyaU1TMEwzb2dk?= =?utf-8?B?N2dZN1FFbnQySmJHQWVOVzJXa1lxVjNBYVovZTlUdXJVaXpOeFFMQT09?= X-OriginatorOrg: epfl.ch X-MS-Exchange-CrossTenant-Network-Message-Id: c3713539-9af2-4fa8-9bde-08de79260108 X-MS-Exchange-CrossTenant-AuthSource: ZR1PPF9AC83A6B5.CHEP278.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2026 13:08:46.7349 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f6c2556a-c4fb-4ab1-a2c7-9e220df11c43 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: eWuxswZu1WGDJePBYuwt6WYmeiror2Xk9zQL3TAyQy4yNCxbxEhP5No6VSnO2PfUvN3ww/XyNiamSsKhk1LyhlRtZpzHyJD04K5Z3xaklT8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV0P278MB1207 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=2a01:111:f403:c214::1; envelope-from=florian.hofhammer@epfl.ch; helo=GVAP278CU002.outbound.protection.outlook.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 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @epfl.ch) X-ZM-MESSAGEID: 1772543962236158500 The additional plugin tests register accesses, specifically both for read-only and read-write registers. Writing to a read-only register is currently not tested, as this would trigger an assertion and fail the test. Signed-off-by: Florian Hofhammer Reviewed-by: Pierrick Bouvier --- tests/tcg/plugins/meson.build | 1 + tests/tcg/plugins/registers.c | 79 +++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 80 insertions(+) diff --git a/tests/tcg/plugins/meson.build b/tests/tcg/plugins/meson.build index b3e3a9a6d0..d7f8f0ae0a 100644 --- a/tests/tcg/plugins/meson.build +++ b/tests/tcg/plugins/meson.build @@ -6,6 +6,7 @@ test_plugins =3D [ 'insn.c', 'mem.c', 'patch.c', +'registers.c', 'reset.c', 'setpc.c', 'syscall.c', diff --git a/tests/tcg/plugins/registers.c b/tests/tcg/plugins/registers.c new file mode 100644 index 0000000000..6d627c7037 --- /dev/null +++ b/tests/tcg/plugins/registers.c @@ -0,0 +1,79 @@ +/* + * SPDX-License-Identifier: GPL-2.0-or-later + * + * Copyright (C) 2026, Florian Hofhammer + */ +#include "glib.h" +#include +#include +#include +#include +#include +#include + +#include + +QEMU_PLUGIN_EXPORT int qemu_plugin_version =3D QEMU_PLUGIN_VERSION; + +/* + * This plugin tests whether we can read and write registers via the plugin + * API. We try to just read/write a single register, as some architectures= have + * registers that cannot be written to, which would fail the test. + * See: https://lists.gnu.org/archive/html/qemu-devel/2026-02/msg07025.html + */ +static void vcpu_init_cb(qemu_plugin_id_t id, unsigned int vcpu_index) +{ + g_autoptr(GArray) regs =3D qemu_plugin_get_registers(); + g_assert(regs !=3D NULL); + g_autoptr(GByteArray) buf =3D g_byte_array_sized_new(0); + qemu_plugin_reg_descriptor *reg_desc =3D NULL; + bool success =3D false; + + /* Make sure we can read and write a register not marked as readonly */ + for (size_t i =3D 0; i < regs->len; i++) { + reg_desc =3D &g_array_index(regs, qemu_plugin_reg_descriptor, i); + if (!reg_desc->is_readonly) { + g_byte_array_set_size(buf, 0); + success =3D qemu_plugin_read_register(reg_desc->handle, buf); + g_assert(success); + g_assert(buf->len > 0); + success =3D qemu_plugin_write_register(reg_desc->handle, buf); + g_assert(success); + break; + } else { + reg_desc =3D NULL; + } + } + g_assert(regs->len =3D=3D 0 || reg_desc !=3D NULL); + + /* + * Check whether we can still read a read-only register. On each + * architecture, at least the PC should be read-only because it's only + * supposed to be modified via the qemu_plugin_set_pc() function. + */ + for (size_t i =3D 0; i < regs->len; i++) { + reg_desc =3D &g_array_index(regs, qemu_plugin_reg_descriptor, i); + if (reg_desc->is_readonly) { + g_byte_array_set_size(buf, 0); + success =3D qemu_plugin_read_register(reg_desc->handle, buf); + g_assert(success); + g_assert(buf->len > 0); + break; + } else { + reg_desc =3D NULL; + } + } + g_assert(regs->len =3D=3D 0 || reg_desc !=3D NULL); + /* + * Note: we currently do not test whether the read-only register can be + * written to, because doing so would throw an assert in the plugin AP= I. + */ +} + +QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id, + const qemu_info_t *info, + int argc, char **argv) +{ + qemu_plugin_register_vcpu_init_cb(id, vcpu_init_cb); + return 0; +} --=20 2.53.0