From nobody Mon Feb 9 04:31:06 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=1768922908; cv=pass; d=zohomail.com; s=zohoarc; b=HZ/nZ9iRh1gOFp1DIcMtXJhX+xl5iWByQGeWjxXz+9wtgKbA6VRT6IOze0zCBS5W+DJYTW0mP2nGF54o3/4keLqCMdayCstUdwt8Izo+wylM/t4RVnuAT9bEns0aQ3P65NaIXxyQEAxc22E4deRKzOuc8/4S8kTJRUAaC+u7+bA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768922908; 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=PIdXQ61j5EHog4aUau3dMhnx7bm3MLoh6l6Tx/mMp90=; b=f+sycx/DxcxJZp0UqST4Nzo9BZTGC1gc/uME2UavFinx2NtNMe+ZEs+H/Afns6oSX22Hf2YVuCsEuiSHAkkdgnlPC8zR1x/rwcuYS09hFMgtutCcOMQ3gA+JZFnp83uyXqepUuBd7wNjFM98SwKhPtlMEsXq+c/qdHiu/9xiYwA= 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 1768922908187722.663956042796; Tue, 20 Jan 2026 07:28:28 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1viDdz-0001VK-In; Tue, 20 Jan 2026 10:27:47 -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 1viDdj-0001R8-3P for qemu-devel@nongnu.org; Tue, 20 Jan 2026 10:27:32 -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 1viDdf-0006ub-Qc for qemu-devel@nongnu.org; Tue, 20 Jan 2026 10:27:30 -0500 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) by ZR1PPFBC9E76CBE.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::2a7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.12; Tue, 20 Jan 2026 15:27:09 +0000 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::ccdc:4b69:a4c:e1c1]) by ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::ccdc:4b69:a4c:e1c1%2]) with mapi id 15.20.9520.011; Tue, 20 Jan 2026 15:27:08 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=sVeRN2+UYlEVTTDp9qlgb4HgYgcRIELw4y7ArqUkp1n7J6spFZz+Vl7wSE5xx6LPVkg/jeQ39mUYbDsY3de0sLGgtYKgy2Rs9rT65wJxIdd67tAu5ga+8lunToFiub8ySJnRzC0U6Fw5xb5aiVMfgnBA0al9bNOZVc6g+ET/BcRZB4eeprpYmrFwjiSxjj6rTcbDaoHDIntwgot4vja0J1D2BHFiu05FPaF7Gqy/LIbt+8CVN0r00SSR9AshQoKBzqKCqFh1I+Bb40JNpIP3YC/NYCbEp3VHhp387D7b8OieHUX6xxboO0pks3ZcE0bSYWqy0jRSo7cwpsGCfjbfHg== 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=PIdXQ61j5EHog4aUau3dMhnx7bm3MLoh6l6Tx/mMp90=; b=SlWLqAd9BA9qxhnfOoEKaYIVC/bmLG1Do8ey5w3AHg4n5v9b1IB/l0DlmOS0OEvOYzgmfVVLOYbP27Fsk1tJTiZe2ppmafI2+ZfheDmJSNcJGcg0T4F5QHI0t8PssvyOXbDQJWrLnhIOhIUmNqpi49el9SwY1qr4XYw5GUAEXpqyEQYuXiHWKm9P5VQ3lX9KTVqS1ddhuwFVGkwb5Nhp0Y8Y91T56I8b33lmx5h3pM2LjBNVfWix3B6Ckyxc3ayiDgbyStZDW4kuhFTrUia9vgu1tANAPKtnDf9Tb9zIoe2TF2H9EJWBFbwnT8KBJuOH+3iKkbyAcs0QO/Iiy/lmLA== 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=PIdXQ61j5EHog4aUau3dMhnx7bm3MLoh6l6Tx/mMp90=; b=NG6+6a8bSPRuvq3ryYjy7mDVYQNnsISh/cV86cKYG/5E23DeWXhsCxwBYK5N8yH56z0vgyx+JJRMB1wt8k8UraZJwX1egAGjDoBTJXDbmYJMX4LOA33fMB+b3NGibblZJ6oT9Jd7bCvFrLnT8X8Uqvf6f3fUZPX45dtmHF1OMv4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epfl.ch; Message-ID: <019586c9-94a0-4bcb-8a8b-4605c32754ed@epfl.ch> Date: Tue, 20 Jan 2026 16:22:00 +0100 User-Agent: Mozilla Thunderbird Subject: [PATCH v3 1/5] plugins: add PC diversion API function From: Florian Hofhammer To: qemu-devel@nongnu.org Cc: alex.bennee@linaro.org, pierrick.bouvier@linaro.org, richard.henderson@linaro.org, laurent@vivier.eu, imp@bsdimp.com, berrange@redhat.com References: Content-Language: en-US Autocrypt: addr=florian.hofhammer@epfl.ch; keydata= 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 5hMMZIzTI4AtIcgA3xe4Ew== In-Reply-To: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: GV0P278CA0017.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:26::27) To ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: ZRH2PFAD84B9AF9:EE_|ZR1PPFBC9E76CBE:EE_ X-MS-Office365-Filtering-Correlation-Id: 31afd30a-6c7f-4b23-5d4d-08de58385fab X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|19092799006|376014|366016|1800799024|786006|13003099007; X-Microsoft-Antispam-Message-Info: =?utf-8?B?cEFrbTNRRmFmZS9mWHo4VXVUc3c3Y3hEcG1vcnVMakdraFNGR3dJUkxySnVN?= =?utf-8?B?Nm1qRHBnV1gyTitDU0ZBazVuM1Y1VTEyck1CZGE4QjRkK3QzOGI4MFgwNDh3?= =?utf-8?B?cGZZdG5ZMVIzdjhSNEQzMEUyczBBVzVuY1ZnQVNTbm9lWXY5VXd4SFRiZ0NB?= =?utf-8?B?alZYcDI3Mk4yNGpsYkgwL3dobFI5SXk0cWxucFNscW1jN0U4VTYrYjlQazAr?= =?utf-8?B?WFNKS3E1UlEyY05ZTVdBVTRhdWF4czFDRlVYcE1nb0xJSHBNYmpRUEUxNHlP?= =?utf-8?B?TmhJWHJZSzR2VCticmV3OEZncXJoMHhyVmtEZkhLOEsxSTNac2psYjlOa2J4?= =?utf-8?B?K29Fc1VHUm9WUUcwcFgwTjRZMm9RTWY2MktXd1JEL01WYlRMT2lOYWRzcmVn?= =?utf-8?B?S2orTS8zQys0NEh5MFd3dmhtWExXUm1Zb1ZmMnhrLzZoUGNNa3JWSUhPdUR3?= =?utf-8?B?d1pkdG1Vb3ZBcEhwWjhwODZjTzVCSVAvdzdGQVBIdXR1NEg5Zko0MTI2bXNm?= =?utf-8?B?Z1kvS2Z4OEJaODBWNjZHS0FkZjYrRHVxcDVRdUphZ0ZtSmJxaWF6ekcyamRn?= =?utf-8?B?Nm9JZy9WeHBHeVdDeWxzWWRoK040Vm44OTdNQmFndFpoZXNDeXJWOGkwSXJQ?= =?utf-8?B?OC9lemRnNCtuMTVua2tIbWtOc3ZmZ2RmM0ZqcC9ZcXV3TjA4ZnJOOE5xQTBD?= =?utf-8?B?c0ZveG9JbVpnbVFLNk0wZmM0cHlmcXFTNXVQVmxWNTNWZW5DT3FoTWg3bFFK?= =?utf-8?B?RlBpczRYaWRKdThaVEVFWmpYOHRrSTREcTVxYTFJWnZ0SWNjaGlaK296Y0Jp?= =?utf-8?B?bjVYOWdHWjNIcnk1NWNNMEtNNHExMS9Qa0F4YXhxVDJwcS9GRnJmbEZ3WEhr?= =?utf-8?B?SE8xc0Z0QlltYlNtc2Z2Rkc1NGxYWVhNZmJ2a3JKSTNabUhoQ3hDVFpKb1N2?= =?utf-8?B?dHhkSHRVeHFnd3RWZDNLTWRMRGpjREdFTDVSdHZub25OejhrWkFLdVRPbWlM?= =?utf-8?B?U2R0Q0FjZ1l1L09JUTVnSU5zSDI5clpDRFJyd0tkc2dXYXlqNUV3ZlI5VkJC?= =?utf-8?B?VGNSeStRT0xPTzVlVmNzaXNaZXpDMmpCbVJ0SVhweVl4azFuYU9CNHhZY2t2?= =?utf-8?B?MDdYZXBRNWFKUG55dzJtemhXYWFPQVYzSldadU03VnJad1UzdUtIK1RvazJN?= =?utf-8?B?Q2dnZGptckxaNFY1RHJLaVZOVWtiREFVK09uMVRienppRDRoS3BMd3h4WWtu?= =?utf-8?B?Vnp0L2RrUkNrbEI0ODdMZXF6QVIrZS9menlQVUZOZG1CSzdFcGZUanhobUR2?= =?utf-8?B?Z2FzWnNOQ0RjS3hCajFXSVN6aXU2eVd1azFzblIwYVI1N3Q3MkZnd011Zktx?= =?utf-8?B?VmxyaTFPbU9aZERmeUFWOUw0OVd2S2dpbjRtb1hpYlBiSk1Qall2R2lnRWJW?= =?utf-8?B?SmsxVENQZGUrcGljajBZMWJFREFPMFZMbUtIWm5GZ1VXSUhrVUQ0SGZXQXVt?= =?utf-8?B?WDN3Y0N6RXkraVRaODRkTTI4NitOY2FBam4zN2pKcnA0RmQrc2VCOXE0NFZ6?= =?utf-8?B?REJsczVFSG5zR0haeEtpNkFLeVFPK3lGSnBMemRrcDVlR05mM0Jvc3VvUGc1?= =?utf-8?B?eTczakNOKzExM1MydDExRlhrUEYvV0JQb3VHbjA1cHhaMUJiblFVbkZLSG9q?= =?utf-8?B?azdkZmpBQklVN1BEZ21JOEIyY2Q3UStaa1FxdDdvUHVuSk9BazVjb2JCZlJI?= =?utf-8?B?R1NOOEhBN3U2YlZuOWpFR0N6cStXZ1lLSk5tWEtYaDRiekFIaDJuYW8rMVND?= =?utf-8?B?MklGeWZVRHRhamR1cVpxaC9LUkhKL2tuTnVvSGU4S09yVnhYRXMwRzJJeU9r?= =?utf-8?B?RHdScVA0TmZRTkN2R3FDV20rSlgwVSs3TkVZRTlURVFwc2UyTkVtYU81c01S?= =?utf-8?B?b0JVZmJyUXB3dEc2cGVXdVQwemc4djdxT2lIOGtSNlhoSitRZ0p6d3ZYbmlI?= =?utf-8?B?RXhib25uRlFrYkt0YmdtOXN0MWJXS2VXQVVINUE3S1NwQU52blZBbzNtMXhw?= =?utf-8?B?VWpRVmhmQ2wwYnpvMm56L0YxZkJ3eU1oSlpwamN5NTZSenIvUFRPNWNMU3dh?= =?utf-8?Q?ELL0=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(19092799006)(376014)(366016)(1800799024)(786006)(13003099007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RjhWbVVhVlRJR1VsR3h5WFFrdi8rMEwrK1R4T01HL2hRSEt4WXJjK0EzQXJO?= =?utf-8?B?QkdYUDBYL3hncDdxOTc1c2l6anJzZElnUW96T2MwNjFrK29UL3MwUFJYdHh0?= =?utf-8?B?ODJwTTNzaGI3blhCa0UwdzE2ZnE2TTZ4d1liUisvRHlCNHAzWDdhYnhNdGhK?= =?utf-8?B?NGR3VlltQ3dqTm1zUm1FTkRsNitTWEFxWXFEMG1oVE9PUnpUL0NBOFhtQnhW?= =?utf-8?B?NTJDUWRhTVpxN09VUlFpSG16N3BUbkc3QTV2YS9lVWFOME9HSUtmS0NtV3Nu?= =?utf-8?B?Z0RwL2lzcHZhbC8zY3dkYTRFN2VCNmhsT3pjdmcxS3VWZkNKcytBejZ0UFhT?= =?utf-8?B?MzdzRUJUZ2FFNm9oTU9UaHdwSWhIWFlWY25lUHlXVVRsSzJlWkF2UWR6cG8z?= =?utf-8?B?YzVFU3dDRGtNaUErTUJXc2ZlWGhLL0ViYkVRQUlZSUk3MDRpd3VDRlhoTkJ3?= =?utf-8?B?S3k3TXUrUGNSUnBna09lWnBVNDdLTjV6dUdTRGRlQnN5Ynp2VmlPNlc3ZWY0?= =?utf-8?B?cjhRN05ZUDliODlubzhLNDNueWJ4NmhiUkViWDd4VGdjeVFieDdUUU5EYXZm?= =?utf-8?B?RnYwWEtRelF6Qm5Id3VValEyRTdvcmE5MzErSjE3Y2pGTGlsNTMxM25lWEZz?= =?utf-8?B?WHVZYWpUU01QSDFGdmQxR0tUMG1OQUI4UnRXazBTdWoxMkZUQnFsMHFldE1h?= =?utf-8?B?cDM3Q08rZW9MWlJoT0FkKzBYRHJ5RC84Y1RBeVhobXJKdFRSaEVRMTBiVnFH?= =?utf-8?B?ZDNtaWcrVE9JajVjL01EQXBWcU9vNDh3V29BR2ZYK0tKTFVPeE9WRFRWSGFh?= =?utf-8?B?NStwN3VFOEErZXlNREhTNnBkenlOY3VsY0g5bm5ncEdLMER2aXVLT2JKNk9V?= =?utf-8?B?YkhFMnJSTU5QZEhXQi9vYTkrNUtiWDErZ29VUW9HTTdPMFFvRGF0Z0xqMWJy?= =?utf-8?B?ZkkxZDU4dEJNMzJtWEU4alNGRjhBQXZsU2hiWmVKUkk3R0tnZUY3RFhXNzd5?= =?utf-8?B?bkRSbC9YTFYxS1d4eXR6R09iUlNySjRORFJUZlMxaVUwbnJpUk5NV1Y2VVNl?= =?utf-8?B?dElieGNTYStBbERlSW53TnlJWXZzU0FVVXZoM2VRd1lLL29qU1p6UkNQZkxM?= =?utf-8?B?YnlteE1xQmp2Z3R6VGdIekUrcVN2Mm90S2tpbzJuUHFjNnZyNWhWbDRpaGFE?= =?utf-8?B?QlJWWkpmY0Y1YnljSVdTSnBGaXZOTGVrQ1hzOFplMEJsRUUyT1Nyc3d5M3E0?= =?utf-8?B?bHpTaHIxYSttZ3l5THhLeVpSc2YzQ3NNSHRGQ2ZiczZlUUJnNjJBYkE0TU5v?= =?utf-8?B?djFlVkU3eUNGREg0VWNRdThHbyt0aTZESGtILzlVcWxpZ1EvMm9UVVY2OVFF?= =?utf-8?B?K09FNGRWaDBzQUphRGdINHoxcFZFb1JFVW82NVRsT0dGZlNZR3c4d1k4UnRB?= =?utf-8?B?QVYzN2ppc29Galp4dXkzNTZXZU1PbHJFTUJjVTZDZVJhRG1ubG1FNCtiSVoy?= =?utf-8?B?NEk5b0NMR05hOWFjWmgzeDhNQ2pRb3R2dS9vVUdpeXFJdk9tdXBYeWpKVlhv?= =?utf-8?B?bXJFeThNTDd2b0drdVFSbUo0R2g1c1BUb0t5bmdaL3JqcFJEWWpSbFhxR1ZJ?= =?utf-8?B?NHUxQXM5LzJEMExVcFUvM2xlUThKYzMyQUUwc21hYnRHMjNma3NjTDgrUXVZ?= =?utf-8?B?SUZ1NDNJbnZuUWdWUHoyV1U2STl6eG9YMk5SdDhUUHE3aEIzMjJhSjRidVhK?= =?utf-8?B?NnEyVGdhLzd0NHpUcWZUdUp4KzdNUWxaYzVOMFJlVVpRbjBkWDBoYzl2RG5q?= =?utf-8?B?TkNLb2lrNVJwZDhnNlFTUGJIbXIwTlV1OTJOT1VwQkJlTjRPKzlHYTBMQVhx?= =?utf-8?B?djhqYlE2eEVBUk5BdXhJZTlnUDhkSkdYYmFqVGhQQkZOVldUKzZ6NnlwLy90?= =?utf-8?B?UEVUbFY3dXQzLy9OWEdybVlFYnBvb284cVRrVm92T2VmWlpZM1lJUEFPaHBZ?= =?utf-8?B?c0k1L1BxeDJmUTI4b0trU1V1N0szNUFHTW5LcTdNZy84RC9rUmlucTF2bnB2?= =?utf-8?B?bElxeWhpZk5kRm1pUHJpK2FyT3BSYXZKeEg2dU4zTXA4Y2dpRVZxTnpTR2dv?= =?utf-8?B?cUxLVCtPbkFpSUlhSC81S04yKzBiMFNWTmtPanRmM2N0K2RkWjdEL2hYSW5R?= =?utf-8?B?SDFOczZ3ZDlERlJycFMyZlhjbnRQcXZaYkxRKytnT3VscTF5QllvVnVJMVFO?= =?utf-8?B?ckU2enJaYVFGeFYxc2lYVHloQXVFY002UWJTVW1Vb1ZJUXRSVVFESkFlUWtP?= =?utf-8?B?cGtQTGRZS2VxSldUUmJGMVBIbWVxZk5DeUx5K2c4cXB6UU9qNmZwc21NV0dF?= =?utf-8?Q?kyTypvs+DJCnli+I=3D?= X-OriginatorOrg: epfl.ch X-MS-Exchange-CrossTenant-Network-Message-Id: 31afd30a-6c7f-4b23-5d4d-08de58385fab X-MS-Exchange-CrossTenant-AuthSource: ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jan 2026 15:27:08.1193 (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: wAt8U5lmsEVVhBkfYqfxO64G1IUHp8JorktbzaU1vvODYf+tiHaG11Ov99P50yZKp6E5tbvDCX4R1FWm1QXDeFwzonByBscXbJ5nJsPKdQE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZR1PPFBC9E76CBE 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 (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: 1768922910282154100 Content-Type: text/plain; charset="utf-8" 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. Redirecting control flow via cpu_loop_exit() works fine in callbacks that are triggered during code execution due to cpu_exec_setjmp() still being part of the call stack. If we want to use the new API in syscall callbacks, cpu_exec_setjmp() already returned and the longjmp() triggered by cpu_loop_exit() is undefined behavior. For this reason, we introduce a new return constant QEMU_ESETPC and do another setjmp() before executing syscall plugin callbacks and potentially the syscall itself. Link: https://lists.nongnu.org/archive/html/qemu-devel/2025-08/msg00656.html Signed-off-by: Florian Hofhammer --- include/qemu/qemu-plugin.h | 15 +++++++++++++++ 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 | 4 ++++ 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 | 5 +++-- linux-user/openrisc/cpu_loop.c | 2 +- linux-user/ppc/cpu_loop.c | 6 ++++-- 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 | 8 ++++++++ linux-user/xtensa/cpu_loop.c | 3 +++ plugins/api.c | 17 ++++++++++++++++- plugins/core.c | 25 ++++++++++++++----------- 22 files changed, 96 insertions(+), 32 deletions(-) diff --git a/include/qemu/qemu-plugin.h b/include/qemu/qemu-plugin.h index 60de4fdd3f..f976b62030 100644 --- a/include/qemu/qemu-plugin.h +++ b/include/qemu/qemu-plugin.h @@ -321,11 +321,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 { @@ -1003,6 +1006,18 @@ QEMU_PLUGIN_API int 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 only returns in case of + * errors. + */ +QEMU_PLUGIN_API +void qemu_plugin_set_pc(uint64_t vaddr); + /** * qemu_plugin_read_memory_vaddr() - read from memory using a virtual addr= ess * 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 1941f4c9c1..9adb3ec4c6 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..bd3b67059b 100644 --- a/linux-user/hppa/cpu_loop.c +++ b/linux-user/hppa/cpu_loop.c @@ -17,6 +17,7 @@ * along with this program; if not, see . */ =20 +#include "qemu/compiler.h" #include "qemu/osdep.h" #include "qemu.h" #include "user-internals.h" @@ -123,7 +124,10 @@ void cpu_loop(CPUHPPAState *env) env->iaoq_b =3D env->iaoq_f + 4; break; case -QEMU_ERESTARTSYS: + QEMU_FALLTHROUGH; case -QEMU_ESIGRETURN: + QEMU_FALLTHROUGH; + 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..af98138eb2 100644 --- a/linux-user/mips/cpu_loop.c +++ b/linux-user/mips/cpu_loop.c @@ -140,8 +140,9 @@ done_syscall: env->active_tc.PC -=3D 4; break; } - if (ret =3D=3D -QEMU_ESIGRETURN) { - /* Returning from a successful sigreturn syscall. + 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; } diff --git a/linux-user/openrisc/cpu_loop.c b/linux-user/openrisc/cpu_loop.c index 2167d880d5..e7e9929e6f 100644 --- a/linux-user/openrisc/cpu_loop.c +++ b/linux-user/openrisc/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..1f8aae14bb 100644 --- a/linux-user/ppc/cpu_loop.c +++ b/linux-user/ppc/cpu_loop.c @@ -340,8 +340,10 @@ void cpu_loop(CPUPPCState *env) env->nip -=3D 4; break; } - if (ret =3D=3D (target_ulong)(-QEMU_ESIGRETURN)) { - /* Returning from a successful sigreturn syscall. + 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; } 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..f054316dce 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 3601715769..b48ea6debd 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -584,6 +585,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 via qemu_plugin_set_p= c"; + } =20 return strerror(target_to_host_errno(err)); } @@ -14200,6 +14204,10 @@ abi_long do_syscall(CPUArchState *cpu_env, int num= , abi_long arg1, return -QEMU_ESIGRETURN; } =20 + 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..7680e243bb 100644 --- a/linux-user/xtensa/cpu_loop.c +++ b/linux-user/xtensa/cpu_loop.c @@ -17,6 +17,7 @@ * along with this program; if not, see . */ =20 +#include "qemu/compiler.h" #include "qemu/osdep.h" #include "qemu.h" #include "user-internals.h" @@ -185,6 +186,8 @@ void cpu_loop(CPUXtensaState *env) env->pc -=3D 3; break; =20 + case -QEMU_ESETPC: + QEMU_FALLTHROUGH; case -QEMU_ESIGRETURN: break; } diff --git a/plugins/api.c b/plugins/api.c index eac04cc1f6..fc19bdb40b 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" @@ -450,13 +451,27 @@ int qemu_plugin_write_register(struct qemu_plugin_reg= ister *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 -1; } =20 return gdb_write_register(current_cpu, buf->data, GPOINTER_TO_INT(reg)= - 1); } =20 +void qemu_plugin_set_pc(uint64_t vaddr) +{ + g_assert(current_cpu); + + if (qemu_plugin_get_cb_flags() !=3D QEMU_PLUGIN_CB_RW_REGS_PC) { + return; + } + + 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); diff --git a/plugins/core.c b/plugins/core.c index b4b783008f..9e9a066669 100644 --- a/plugins/core.c +++ b/plugins/core.c @@ -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); } @@ -568,7 +571,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); } @@ -577,7 +580,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); } @@ -848,6 +851,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.52.0 From nobody Mon Feb 9 04:31:06 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=1768922886; cv=pass; d=zohomail.com; s=zohoarc; b=e6kXfGIfxyR/ArsrYQgxi0P2kXPKdHAnjAmoakOOMvfEerBrKBlqYEwg7ZOKV80qrxOVG1ygq/inkHVGEDyuto7kBeqmECH+BmyoFjS5+w/7P+y0DkykMbJKcXUaOuiJx/MaH7wuB2m6HXh7zic1ViXBJSikWm1MYmNGPeWxISQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768922886; 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=tLJhPUhtV8JpYp5/9Pa84WQhIp6fn072yrF/HSNkUxA=; b=MpchQBUJUm10fGSAlYNhDOGJ51E+ZOUzc/WBykb2rCNyt+GM0oqW8hZ98bVbHFEoKkp1YzmXKWAdNZwimdrLMnYOCHfJuqO3QXWGxtyrucJkQmVIJ7mKsK/UZ4Vr0Co6zGyk15BK0+kysunWCpSLHvdlrSqgBC2xu+4avLuQ2Vg= 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 1768922886934905.8448017429827; Tue, 20 Jan 2026 07:28:06 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1viDdW-0001KV-Kl; Tue, 20 Jan 2026 10:27:18 -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 1viDdV-0001Jo-0l for qemu-devel@nongnu.org; Tue, 20 Jan 2026 10:27:17 -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 1viDdS-0006ub-GD for qemu-devel@nongnu.org; Tue, 20 Jan 2026 10:27:16 -0500 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) by ZR1PPFBC9E76CBE.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::2a7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.12; Tue, 20 Jan 2026 15:27:11 +0000 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::ccdc:4b69:a4c:e1c1]) by ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::ccdc:4b69:a4c:e1c1%2]) with mapi id 15.20.9520.011; Tue, 20 Jan 2026 15:27:11 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hTV0Qq2l8DQtQm926DqPIhZ/admUnaNgZNwaDOMEUenAgxFuMaVjDOHJ4zez+c/dsx+WHGNvmcHFjcTE2uCGO7eKOV4vVjnBnrq55wX+ghDEtBW9dHm1xcXNzYWWr0DDkYkrG+bpv1sRRrW+QaEPOlGhN9fQl3qgM8+o7+zg1m6ygsre3663C6Oj6MjCf1GpQFlUs/jtU5PyPz5MYCqPQzzZ73Qr4OREuOzUZv+OFpGFZbCwNrm4ZJtk9twPcL3p+CgFH8ySzUQT2mrIXiouMnmo2mCeA2mPfz28wNwfxcbt7q0h8vqv8i1P1rNpeXMbvlsuWQGB6egmLWLMgTGDQA== 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=tLJhPUhtV8JpYp5/9Pa84WQhIp6fn072yrF/HSNkUxA=; b=kMOePK8CIMH7zK7dBlG2jQJ7R74JXkuve2zBs4XcVYdmERhLB1IRwL94TzV0OO0BSjf3hiENQ60KlVU50euGFkCWdjtth/VPkBI7e07LzAzLb9TLNtArC4jwJvuChZe+o2Cm8IimJD8m8HvsCvWLctQaS7LDbISN/IrSv0jeTqOX55tSJJUxe4tWCUH5XEza2LbRZZT0Le4sqZ0q+FqF6JuuVXSKF2Sev6SFYUXX5rsaausGK4OsKvpQyzfbuaRhrMpgWx+k2MI8jWavevIMWOsk5JrPEOgFlwLPBsT3BjgNZRDcPs6ssmckEhtwtqY0/LUBOnCDGkMM+di+EM+EAQ== 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=tLJhPUhtV8JpYp5/9Pa84WQhIp6fn072yrF/HSNkUxA=; b=OEEhO5rkHIihjMjROkuybZPe6dovNDam4fuMFFMFUD66QyrkHyC2yZUCneiitFJjzJ2n1l4SY0HQcaGeNnrSmjpwK5qPpg04mHsvidGMS6D0UHnrFBYAdCaCydUxWIGLiwesu29Vdd5JJ584clWpDFQGBV5L/Ebz1tH1lECnMHE= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epfl.ch; Message-ID: <8b36b6c1-83bd-462b-a346-f240dd17746d@epfl.ch> Date: Tue, 20 Jan 2026 16:23:00 +0100 User-Agent: Mozilla Thunderbird Subject: [PATCH v3 2/5] plugins: add read-only property for registers From: Florian Hofhammer To: qemu-devel@nongnu.org Cc: alex.bennee@linaro.org, pierrick.bouvier@linaro.org, richard.henderson@linaro.org, laurent@vivier.eu, imp@bsdimp.com, berrange@redhat.com References: Content-Language: en-US Autocrypt: addr=florian.hofhammer@epfl.ch; keydata= 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 5hMMZIzTI4AtIcgA3xe4Ew== In-Reply-To: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: GV0P278CA0017.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:26::27) To ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: ZRH2PFAD84B9AF9:EE_|ZR1PPFBC9E76CBE:EE_ X-MS-Office365-Filtering-Correlation-Id: 0c5d3c20-6311-4c06-aae1-08de58386056 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|19092799006|376014|366016|1800799024|786006; X-Microsoft-Antispam-Message-Info: =?utf-8?B?OUNBNzN3WGRxUnNPZUFRMDlob1l6NnZoN2F2RlJRa0dReHk5NEQydGsrN3hD?= =?utf-8?B?MklMWWxHdytYd1B4S1dxdUVzZVhrbWI1UFZ1ejFuY1hVUUszbUtPbmRFd0VJ?= =?utf-8?B?Vnh6TVYvUTRtbEFKbXdmTzFrQmJ6RHkvR1hEZ0dROE5ZM0dycGoyR1FVV2tE?= =?utf-8?B?VUZCWEZuYlNibDhSZTNPYit6MmJLTTRaMHIwbklYcGU3am1RSDk2NFlUeGpj?= =?utf-8?B?MXlpNUsyWG1BalVyRk9Kc0ZocnY0N3FuNUZ4bU0zNDR0YkpObTQ5YU01T2g3?= =?utf-8?B?dFpnOXJoY3lFMjFVN0NwSlEwV0Yxamo5QUtyVFV3VzVRQnk4UStUTmtRUndo?= =?utf-8?B?VnE3VWNBekVkbWNCNktENHJjbmtRNmNsbDZDV1NjNkNDRnJXdXZLcGp1dkEy?= =?utf-8?B?WklLODY1NXlhZHZIcko0QytnY215OWM5QXJJbHNERmlaTnpwNVNXNWxBVFRW?= =?utf-8?B?QjJBbHJHbnZsQld2aTZvVGJKZm92eHJiVWlSVTdiR1V4dzhoUk1iMjc5ZFVN?= =?utf-8?B?SEhhZlE2enZYQ0JDbXZPcHZNSnFkd0RPUnVJVUlCa2VBNmN4SWlZSzYrclU0?= =?utf-8?B?dFdtV2FOSG5WbUE5MHpuUW5QVjl5RnBmbHJWRFZZQW9mY1RyWjU3eTl3alZY?= =?utf-8?B?TVhucXk2d3VCanJQR0lkVzVYa1RIYlZhaEVCMHpPMGwwdytmZjlpbXBIa1Y0?= =?utf-8?B?K3NQZlpSNGRWb1Q4Y21BU0dFREdub3YwSEFOWGVzRTlqbUU5a254b2M5NWp6?= =?utf-8?B?cURyODNWWjhySnlUcEdVUlJYVFZhNmRDSDdhYWMvUmVRd1crZnpnRWJhdXBE?= =?utf-8?B?NkpQeU1uOGovdk9kTjRlRS9zLzlEYWFQeWVaQmVLYmp0emMrazZIK1F4VlFX?= =?utf-8?B?TVRjVUZHS1Rqbmp5WGRnRy9zdXREVlNtVy9ONUxGd3dJYndETmp5MHdqNDBm?= =?utf-8?B?R3hhU1ErN2h5clZhZEdqSjZHRUF6TTRDVkNVUmt1NXhJWGJKSnlzMVYyTWN6?= =?utf-8?B?OVhPSk05THI4KzNlSGQ2L0k3bnhLSkd4NitaWXRNbWMwSExlMElnTnFjRWs1?= =?utf-8?B?WmVJSUVrSDZ6T1d6dDhWd1ErUzNEWFRFMzZLbmlSZ3B0TVRzalhGNThGakpE?= =?utf-8?B?ZUhxT2NhVHB6aXEydHgrNzZBVjVNdmtNTjJIOGJXeTlYWkdYNjliYTVRUTZ0?= =?utf-8?B?bkpDVVJkMkVFQmQvTXJCdy9CNW5tMVJ0WjZDQTIxT21kZnB3NUpIK0JQWXNi?= =?utf-8?B?SzFkcUVBUEc3b09laTdqQmFRR1RRTHdZVmhhMmtqZ3YzM2ptQ0Zqamd0UTlx?= =?utf-8?B?Uk81UWxHNFJ2MGpsd1ZndlJHTTIwMkRzMi83NzhXd21ZbUsydWJ1ekErSlUy?= =?utf-8?B?alhiN3MzN0hjc3hTMUdrY2dxMm9xRnhLVWR2ZkM5a1ZQc3hZc2xXdTIwVlQy?= =?utf-8?B?Q2lEQmgxcGZJcWRrMThRMW9IY2V0OTF4RW0yUHViRXB0OVJVTU1VdmUvZGlP?= =?utf-8?B?SDBlZnBPZXRUSmV3YmpUVHpkQlJXblhnL2Zrc3ZMM000S0FyUk9nWndyNlNO?= =?utf-8?B?ZDNJMXNmUmNNdDFQZTZET3J1THNsZWd3cENsSnZrZmJoM2paTktiTUFUZFQ1?= =?utf-8?B?Uy9JaUlBYjg2c2tjTTlJNUNFVmhPWTliQWhrdXlhNXlVUkQzY0l5TEZ1bHVn?= =?utf-8?B?cWkwakw0YnNUQWtuKzM4NERmRTRJOWJlQW9IekpERnJrRWxqTDBDNkxEVGNG?= =?utf-8?B?SEdwdXFZSXBnQjJ3K0JQR2ZKRzE4WDRvM0NxOWc3R29YMmhpN2p4dkZhVTM0?= =?utf-8?B?TGZ4WGtrOHNWcldEeEFsdElnRFBYcUp5VTFxazRFNWgrRnFQTE5FY3ArUkV2?= =?utf-8?B?cm9LL2piR0kwWjl3YkpQNEQ4SU1UeS8vazNvVnVCWjBNcEtUbXJBVUxUUDli?= =?utf-8?B?dHlld01Bd0k0SnI4eCtacjVOekhuOWZNN0pBYWRFc2R0SlRMZDY4bjJTbVJN?= =?utf-8?B?bWJYcWVQWDNGOHZWcU05WHFFaEYwUXh6YzA5cXI2U0dTcG42cUg5MlZjMUl4?= =?utf-8?B?SUl1WWVkaEw1akl1bGhaK3NuRWo0VWErK2RjSlgySXZZdkF3SXlQUlA5SlFi?= =?utf-8?Q?2S8Y=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(19092799006)(376014)(366016)(1800799024)(786006); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dHlnMHcrN01aUHRWZDQyREU1RG85Nk9BWVgwb2N3OUZ1bWVFQThKbnBQUUtn?= =?utf-8?B?OWN3UDVoeDJ1bGJCcHZ4VTFSOXlyN1oyS1FBbEhwWXNYZDI5a09RYll0bC9O?= =?utf-8?B?Zk1uUUhONmlkalI4eUFPY3ZoMlgxeHlvMjZ5dHA4Ry9pZXh5c0pYU1NVTDI2?= =?utf-8?B?QXpQSzZlY0NSaXVnSVJ2dnZsY2NOekNJS3RUdFB1ZStRSUVRMFh4d3g3UlJW?= =?utf-8?B?ak40bUpDcldkSVBqQzlJMmxjd0JZNStXdzJxbmpvLzY0S0dtYW9WSEtOM0Zl?= =?utf-8?B?THZYMjVCWXB6SnRVeGFuejc1UEpuRDVxOFhPTlFXblZTWmR0K0hFN2FnTHlZ?= =?utf-8?B?UUJpSmx0eGMra0FOeFpBcE8zNkd3Mm9tVTZSWVk4QkRSdTBEQVNOdWl3Ujhv?= =?utf-8?B?bTB5YzJsaE9xUTA5V0xTOUx2TVZoR05wSGVoMUlGZ1B2S085V0tXOHhaNk90?= =?utf-8?B?NEtoRnZEVmhhSmowMjc1c0luR2M0ek93bDZzNkxVakx2OG5uak9YQzBySTF5?= =?utf-8?B?NS9QSTRkSDFkNDZOZmJtYkhzbDJLWlY1blJobEQvM3hCbGtoOVVaUFpiTUtv?= =?utf-8?B?Sm56QjRRcGxJZGJtTmdBR2FxQTVUUGVaUDVlMGlySWMrY2tKOVpVU2V3ZnBa?= =?utf-8?B?ZEtnM1dzUWFuN1hKZGZhWGhySnhBTDZzUjZna3NTZ2p2SWlrVHptRmxWTkQr?= =?utf-8?B?Rlo0Y2NhSHRkRFpDL210c3drQkE4Lys3eDZQQ09WMXJ4NGFsM0tpZ0JEaWlW?= =?utf-8?B?SElQTUVrVkp6VkpQdTYxMzVIaFRVVytYVDVoY2tpUWx5S0dVZzV3ZEhtWXAz?= =?utf-8?B?VUpBeXlXZkYwSmV6SzZwKzdsV1NvNTVybGsyNjFIWTZlU1lQUmsvK2JRSzFQ?= =?utf-8?B?V1JCQzRKRGdpUlJ1amhjYlFmL0M1eVpTLy8wMGlZa2NuaTMreHFYa2VSS0wr?= =?utf-8?B?ZmhmNWh2U21PMTBFNnJqaWFFZlNlMW04Q0dnUW80V3VXcjJaZ2dWenJQOXVj?= =?utf-8?B?Q0hEdm50ZTdSeFpVYTkzQWd3R3hFM0d1YWhHc25wTzdldWpUU3ZaTzJBRzB4?= =?utf-8?B?SmtvSGFBVnhJWXc5eERYMnlRUG5CcXJBVXJHb2FJbDBKVlN6Z2dleUxDb25F?= =?utf-8?B?cXdnR1NFQUZHcWFIMjgvYXREbDg5bXlYNzM2TTJmMkMrNFdlUGNEckNNaFpO?= =?utf-8?B?M0NuMjZWL2F0VXMwbkc2WWNEeGFVcFE5enYzWGpiRWErQXBOdHpNeEtTcVdu?= =?utf-8?B?VEx2RkJjbFp6K1hjT3YyTFZVdXlZZnUxeVU0S0FScjNrK0tjTVBvUG5VNk1z?= =?utf-8?B?S2VDdW10bkJFOFdXekVwdktqTlZ2bGxST2pKUUZMRFVvMFpZRnBxQTNXb3pI?= =?utf-8?B?WVhRYkdxRnFBZ0llNFE4MHRuMFNnekRzL2tBVjJ4K1dDMGIzSVpES29wOXJD?= =?utf-8?B?QkNueEJmVEhCdks0QmNqcitoS0VhYXJEOFVBbFZ5TGh3bW9tOUZlUmxOUXRQ?= =?utf-8?B?WDhXejQvSVhiZnFvNGNhV1RML0JqaUt2djhaODVGeGRKaXVrZ0tMdlJWN1Vz?= =?utf-8?B?cnhLdmdXcFp0SVowWXErRTlsYzQ4cVlrbzFNK0dBRmc3MTJoZTl0Y0lWd21F?= =?utf-8?B?OG9kSmt6aG01U2RPcXhuZUIxQW83VXUxS0FHWk1pQm52MklVTG1vS0MxbGpQ?= =?utf-8?B?UFFiNUZIUWxhK1JPVXdNRTZMdHgzNVBXQ2RNZlJuTmNZOEVWbkhBVG92enBQ?= =?utf-8?B?czBsVDFXRXIycE40NFNGZFlWSHJQUXFvK2lNbkxCNGdWbWd6bThNNFRNYVZ4?= =?utf-8?B?L2ErdjdoMVlucS9DWXU1U3pFQ29QRnk3MnJmVGN5RDNVVUp2MU5TUkNZYUVS?= =?utf-8?B?cHlkTzMzSVVvQkI0VjJpWkdUaCtRcFdNM1krL1R6REU0L2I2a0NQaHpXbDhU?= =?utf-8?B?UFZQQlM1QlJXakdVTmdtRytxT2hFRE1zaUloaStDQnhhMVh3RjArNEJSTEpH?= =?utf-8?B?ZTNMcVorTUNVUDNvUTJJYkl1cUw3VFFsMGlHY045S2orckdkU0lQZW00bm9n?= =?utf-8?B?TEhGTDd3ZjAwQmtUWmxxOGhZWk9PcFRNNEhzNGxKSWwxc2tGRlRHdzJiNTZm?= =?utf-8?B?dy9idVk3cjJEVERlNnNKWFg1VHl1bzNKUmRXUllRWjB0TTBzM0xqK0psckhZ?= =?utf-8?B?Nmh1bGllN2w3Ry9ITHhubXd1Wk4yeVlNekFSWTh0c29BTUtnQU5FZ0Q2aXBV?= =?utf-8?B?eEdYNnRBbEZydjQvbXZKNU1pRHY0dFhCelNBUHpKRmY4aHFuVzJLMFM2RVR6?= =?utf-8?B?cGV5Z0RvOGdGUXNYTTFHbWpjcVJ2aVBaeGdMOHhDd1J0SDMyTE1zVW9KRlR4?= =?utf-8?Q?tgtavLY4RKO9akWY=3D?= X-OriginatorOrg: epfl.ch X-MS-Exchange-CrossTenant-Network-Message-Id: 0c5d3c20-6311-4c06-aae1-08de58386056 X-MS-Exchange-CrossTenant-AuthSource: ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jan 2026 15:27:09.2068 (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: iQ2D2n3GDD6fKGxliAAy4VY3VUf2KrA1iEL9ibVI0Uay3x9qiiZzGg2CTKAJt+3wuUtfLGqTlCAt6pkn7eTLd+2pqgFsWEYspQeBzj0Pqns= X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZR1PPFBC9E76CBE 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 (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: 1768922890598154100 Content-Type: text/plain; charset="utf-8" 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. Signed-off-by: Florian Hofhammer Reviewed-by: Alex Benn=C3=A9e --- include/qemu/qemu-plugin.h | 2 ++ plugins/api.c | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/include/qemu/qemu-plugin.h b/include/qemu/qemu-plugin.h index f976b62030..1f25fb2b40 100644 --- a/include/qemu/qemu-plugin.h +++ b/include/qemu/qemu-plugin.h @@ -942,11 +942,13 @@ 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_wr= ite_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 fc19bdb40b..de8c32db50 100644 --- a/plugins/api.c +++ b/plugins/api.c @@ -403,6 +403,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 program co= unter +static const char rip_str[] =3D "rip"; // x86_64 specific name for program= counter +static const char pswa_str[] =3D "pswa"; // s390x specific name for progra= m counter +static const char iaoq_str[] =3D "iaoq"; // HP/PA specific name for progra= m counter +static const char rpc_str[] =3D "rpc"; // microblaze specific name for pro= gram counter static GArray *create_register_handles(GArray *gdbstub_regs) { GArray *find_data =3D g_array_new(true, true, @@ -417,9 +423,20 @@ static GArray *create_register_handles(GArray *gdbstub= _regs) continue; } =20 + gint plugin_ro_bit =3D 0; /* Create a record for the plugin */ desc.handle =3D GINT_TO_POINTER(grd->gdb_reg + 1); desc.name =3D g_intern_string(grd->name); + if (!strcmp(desc.name, pc_str) + || !strcmp(desc.name, eip_str) + || !strcmp(desc.name, rip_str) + || !strcmp(desc.name, pswa_str) + || !strcmp(desc.name, iaoq_str) + || !strcmp(desc.name, rpc_str) + ) { + plugin_ro_bit =3D 1; + } + desc.is_readonly =3D plugin_ro_bit =3D=3D 1 ? true : false; desc.feature =3D g_intern_string(grd->feature_name); g_array_append_val(find_data, desc); } --=20 2.52.0 From nobody Mon Feb 9 04:31:06 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=1768922886; cv=pass; d=zohomail.com; s=zohoarc; b=NVA2dSML4w82TEKh6FtG/in/n4GTqDheSqL6sgcUKNWhl2rae9ggvyb5kAUuGUGKNlUzn8l7LwMyeoLGwmHAAxX5UuHgRmm8TdkVO5n9bYl4RP8FcAw6dXiPl4DgUsIK3EFzaSfbXd0P9RCSqYoPXs1zEAtYKFqJhORLEjpWke8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768922886; 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=1b5QMl9gotuKaf/8Q8ZwrJquTPr0Ls10t6fCW8/BkuM=; b=KVhJJjy4W7Xb/CsZtps8hC3u292rMpkk/i0dQAb2Hw6K5bomakF8SXoXoEezP3bWtleqlwmGFf69bPkAuw4u3ji5Hp/xa1xlqYWF76qLzqOwDOxLiAGjpkPeQV677Jb6mdWMH+hOYqgtHet5tgAtNIh5n6Qxpj/AVbPy+mBdpJA= 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 1768922886325233.29446824908473; Tue, 20 Jan 2026 07:28:06 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1viDdd-0001On-D4; Tue, 20 Jan 2026 10:27:25 -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 1viDdY-0001Lp-KB for qemu-devel@nongnu.org; Tue, 20 Jan 2026 10:27:20 -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 1viDdW-0006ub-N5 for qemu-devel@nongnu.org; Tue, 20 Jan 2026 10:27:20 -0500 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) by ZR1PPFBC9E76CBE.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::2a7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.12; Tue, 20 Jan 2026 15:27:11 +0000 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::ccdc:4b69:a4c:e1c1]) by ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::ccdc:4b69:a4c:e1c1%2]) with mapi id 15.20.9520.011; Tue, 20 Jan 2026 15:27:11 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hd+2LUDLRhbKK1C+Ay5BMy2wCryCgSIsW4Slx00kzinfRL6bxPBzFWYrSbPV+GqfHSZUOg2ML39cZ+qXHQ1QE4VoYHXNJdV3xGZWlp+AGXpmY/gQnzgN7VZjSxW04fClGBOaBsArs97Adu4qzwKA08j24ZiPGezm54l0BCgQopMmmD26V7vVY9tPzfZ2BsSCeiA/7ZBVOHm+WvJQ3xdZPGS65jAIYdiRjkQ6vyC/55wJHwcUMQujqVlkepFzTnCTVq7Aj7kyizFCD/YrVcWg2TJXT2/M2VsyIdGDNxjfV+o6Yzh15e+7yAXAU0wmmMGxMn1gorFjlLruvwmP5QcEug== 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=1b5QMl9gotuKaf/8Q8ZwrJquTPr0Ls10t6fCW8/BkuM=; b=pSiIcugSn9MEfgsLLr9/ozv/zR/AZgl2vjbkxrPW9tB8Lai7kgvzK73jTxkJL1bGxMQ6HUXjrbA/Y2dkP1vAMqeemRuEi79bUA8rR4fcYuDWH9HRzcLYbEy+eXjUeDKLu4tSTNFFjQQ740eRQhXCVFy+zoHz+CTR7lWMKtn7ztYMtasGK0k0u9/VMVLJg4/4QIjOZyjkvJL86uJ42RxBxS8k0pptvFUP/TrMeFaQ8toCldGV8+g2z0RnIsmC6JgL7libgNj7XB+z/ybsL6eEFrmgX+iKYMq6fYjYWVgg8EeCUcWzWh7NpwB1P/ZxB/I0k1tykgmu1fm46SjdAswY/A== 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=1b5QMl9gotuKaf/8Q8ZwrJquTPr0Ls10t6fCW8/BkuM=; b=b02BZ6DZP8mk+r10ELdjLkvjsyTWcpMSwYVtidvFKzbwwSlQ7LtrCoOfhwTrDkso1YdZ73lzNwXZTvCSdPZwPvkapb0QbbiILG/q6SkpbDt4hWauGDOf2meikZrodrfyrK4+64bYyxNKcEeItxAWG3+Bd864PyWl8CSFXlfNt14= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epfl.ch; Message-ID: <413559ea-fdc1-4b0b-9d94-9876511d1899@epfl.ch> Date: Tue, 20 Jan 2026 16:23:48 +0100 User-Agent: Mozilla Thunderbird Subject: [PATCH v3 3/5] plugins: prohibit writing to read-only registers From: Florian Hofhammer To: qemu-devel@nongnu.org Cc: alex.bennee@linaro.org, pierrick.bouvier@linaro.org, richard.henderson@linaro.org, laurent@vivier.eu, imp@bsdimp.com, berrange@redhat.com References: Content-Language: en-US Autocrypt: addr=florian.hofhammer@epfl.ch; keydata= xsFNBFw7TEkBEADaJzHcW02rDYHgS2X2kjyXLs99tnNpww/r3MlWEkrKxgfgIRbtVQTJ2vNw mxIhJnAo/Ltu2VoEXU1WGwoMGv8wxquIuE1RBnYghnYPFd4SOMX8fXz5JylHpl+vPCWiP8U0 fFWfVL1vyldQG4aVtufaJ1VEOU8zsw6YeXzxWJJ7ppUag4teMKuFya69tEEN74KLkDMJRxGk pj7rHW8Y+xBdNW9hQ2vAXhWAtm64NtCtJcJYP8RNl/jqlqYTP1Voj7byXym9HUM7NGEbGtrw 4KKi9ws1yZv9BkW3ECBg5Q1w3WYmHfwqSa+8vrD2ahNieDYNu7veYP0oMaohumRgVhiaMscD IY8wqyt6K93RiwXDQjDAqwE44xrZDr4jjCUAm1D/7WYZWtzhsiDq80JasMbXd8SLKGr96zX5 6vJGxa6OvyavRO7Y7DGK/dNPWdZqAC4QlluibdRsbkFLtBg8d60sVxYW8A9o46rrQB8qzglc joPhDebr8/NsI0gnzjgpgmNbresqne4/JIylUuJEwYcOWZqKqDw9U03uTFk/Vp6AxmRquWpy XZJVBsMNbunclgSelZIt2nzCa2nXR5MYyV2Y8ays+gSAPeHFOc6a8JWNLhgVKUed12XVrMUQ bmMmTFWWqfrx89Up4a+jW7uGIzexOeXUXKeE1j0uGsRLk6CF7QARAQABzTRGbG9yaWFuIEhv ZmhhbW1lciAoRVBGTCkgPGZsb3JpYW4uaG9maGFtbWVyQGVwZmwuY2g+wsGUBBMBCAA+AhsD BQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEEqCB8P0q+u+2bTfhJlusnujFfx3wFAmfOq/AF CQ10kyEACgkQlusnujFfx3wl9Q//cNbHsBz6YvTzzi3fddVVYnEn7YBPMAw0r4vxtYpLCvpD sKOfMaGYYoV3AbVton2w53qTFcmTC/7J0/UxIi/cH1sWgVipZuVNrtESZFhkKAKpqJvHamPl uDD0kmINzztgNZOz44iUdGkSvqQW6ou5WpSEk9YEks4KPs/EH00l7hQ8YkfR/8oN63OxpYri W4+obeU45fBPPgOO1U1eMtWp/QBvo2qw+GiRQkq8kjKDTt9AYYPfcA+AdnhocgrQ2SdtcBuZ bb1BQnKEqWM2gVpvk/ujyZZktgBvqtoubAwaMpAGNgCoDju/zPf8wtbc/yo+AT+iiRQKuilm mQ7U0THfk3+DewN9CTZUiL1X6NdoUuLMqdSI4HCpo/d/N59wMkRKXHG2h/pKmTLbrHGFA4ZY a4zNN98yyPcq6OeAqurWbotXm7yxraXKkFD5dbBJcZYc5gJx+rZg2pIy+rYtQKqZWJTZhl2s ZrHNl1b8cEyS8vuiSZPjFnzgzVoBS1QE136ke/6P3rFPR4zPLyhZqKbCsGHR/BDfSCzeRwoE zJ3aV/8kmuyAfx1iTWVBLKJsPkiNS08jf+Nb+leo8Vab7AnolDTIr0o06bWas1AsIRG31/Zs wBRDlfjmKZ08f+B6a1SpkhdltGozljNt1PLEposY19aw5Ou3bqFQkYtooTfnZPnOwU0EXgiz 6wEQAM8iX+Y1mi1l3h876YmnuP8JSO1s6k0lABDO42pZaSp6Q9mFOabB7To80q1qEXCznlcR nExrN29WwXkfL2tcV4t/JFb0o4+6J9MmMUR3kdvRu55b/AGncNj0oggZDP8e5cLikv8v1ReV c//RPKSHVKnlmC9gtM0UHWpwHyyoplHi4sMJ8WyzGKfnN1eg7HlSx0xJAE7wKQP59mIMMj7n IXnk7bnGO7oaqy+i2vAxcdJPN6jvFgFCsKECL4NJCw6ifrY05paYRXza8JVwAcCzw0Sx4gZi JXC+gE4p80qNRrwR5AQuyLQNO9EfKLdnKg/85ag7xjB3ZWYMZNbj7HwCB+T16jOS+6lgGONf vctIp+hTFxXoCEnMx96FydDkqaBBjAU0JkbxhpMWFhzKzEILa60fxDxOSYHSs6h3bLk3D+gO i8j1SUPC4Olj9od7VIZDKGLd/nLw5qSt2c0H69cW1M/KS5zVARZQPb8Cqa9SAWdjmGw6MHvc WoYK4mT1arhwUlmrqUMcNqA+foGjDGPsxCQxqqIU2rB590n2wafu65UuyPUmzxOGdcb31I4E kkoBnM6G5nN4uZUCQPXl/DFlq/cfFI7LmIL2aZt6idehfvd+iOND4HDjRzrYDhz1FQn2Ihoi qHNMO4zSpWv35fl5kHfo1iYojwcd/aiyu4V8wo7TABEBAAHCwXwEGAEIACYCGwwWIQSoIHw/ Sr677ZtN+EmW6ye6MV/HfAUCZ86rzQUJC6crYgAKCRCW6ye6MV/HfK3jEACTixlDX+Xa53/f RS4AgdiLLcPnp63HYSe58cul/U8mGfcP8/wZXkPFzpsQZRONmj0vNHFAlTlQHpBnMmqxUvVx SosHPMrSwukjV/zDgTeYe8iZbqDjUEFIJvEU4mQd1O2/bfBCi0N0GuleN+oyu4cHhgJIN/Ym 3yJks/Aeprt4k3YwTZsGRCQ4fVyfmnHyYGLNKjtR/ubibG1I4hDVhf1IwrvsAcpHw1UKf/5+ ZA3O6ZANAwVG2iAidR2LhFPiBAFWtPmI0dX5i8+Hu5CmXlHkYK2TV8ys9zDuOEiWEcMR/9tA agcgw3orjj0lvFiSGYI9+w1NxO76T/by09nWsLXr8Mas+pFaKUP0Wk9vZjj+8TqPTkoKOMJS /+vsAGjFLM1ZfFyLRvVVJH4gaWs5zie533zYlArVA1db36+YGTBWzuHEawITPaLq/FngWb+e bxL9a5LkhEdTCnQVhBaC0yBbplRQcGwsc8IRK0sdWiRIGtlr6NMt1yw+3TwVsBPaYvLM/qfm pBZkz7hBNr2qTLcl1xeP4MMdMO2ubBUGTR5B+sOzaT1qIBe5XNFkhffLTR+YmkW1PXWz7tcO yQcudEYHvYhKegsw0Zjv8iQIQw3yeV0WbQAs+LGQAfwpVURhZgBk3DH9gQBFkZYi8YWX/zEc 5hMMZIzTI4AtIcgA3xe4Ew== In-Reply-To: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: GV0P278CA0017.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:26::27) To ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: ZRH2PFAD84B9AF9:EE_|ZR1PPFBC9E76CBE:EE_ X-MS-Office365-Filtering-Correlation-Id: 000c3a70-e123-440e-149e-08de583860f6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|19092799006|376014|366016|1800799024|786006; X-Microsoft-Antispam-Message-Info: =?utf-8?B?QUplbmRpTEdHNzdIMmRqR0FlRXVUOXRmZXFwZ3k5cjJrNmRXUUUwcytlQmQr?= =?utf-8?B?VjArTE5POERnczJQbkVYbm9LVExjZ0FGNHZZRWRuOStiRkxDZllNZ2tML1R6?= =?utf-8?B?WWdxSFk0QVdvVHg4b1pqOUxoZ2tDY0hYTk9JS2gvU2drYStKYnhXRnVyWG85?= =?utf-8?B?N2p2d2h1Z2diMkxGTDJBT3hxcHFzZDRHa05Ub2krOHJxcWZHMTRCZFRvMElR?= =?utf-8?B?U3d2aVRwRmJ1cVd3Zk44aExyWFhQaVRDck9SMnA3N2Y0MmV6M0lNYW1KMHgr?= =?utf-8?B?QzJNZmh0RnkwK3hTUlBoaFhDL1ZZWlhoTzRqeFNucXVtVFpDTlBMRVdyNTk0?= =?utf-8?B?N2FReUxra1k5c0lKSjlPYmxWZDN6NnFvQ3I3TGJyRnVuSHllUllGenhseGMy?= =?utf-8?B?Z1lsWDNnc2FDMkFnM1VtMTJpb2xqVTNCQ0kyOTRXTDI2WXhOTkxvVFdyVlBF?= =?utf-8?B?Z1Q4VHZjSzRIN0d0cDg2UktuUkZHYlRvazFOdTQ5MjBrcHBtL2QyNGljeWJn?= =?utf-8?B?MUpNTllOV1AxaFZIM0F6U0Fhamt1Mk9wWW1scUdtZEZJc3I4WkJWQXpDY3BQ?= =?utf-8?B?WHJISS9LM0hFQWpwWXJpY29tYzhrTkVvazdaZW1TaU91VjhPZndvcXA3T1Ux?= =?utf-8?B?T3RoTEJoZUpvTGY4VVZxRUVQaEhBYXlXemgycnlTYWNsVnVKN2szajlhYTlI?= =?utf-8?B?ckVNVFZHbVQ5V2tBbHRqeFRCcjVaYTU3U1Z4MGZuRitiNGU3QnlCeGlOMEQ4?= =?utf-8?B?NDlNSXNONEhMRGo5UThlR3RleGRObVU4VkRaeWtiVWM1MWtjbC9vRnFjTk1x?= =?utf-8?B?bWpEUWZDcVBTeTZpWDZTRGl3cHFTWjIyNkh5MVZkNURFZU11aFlnWm8rTjFm?= =?utf-8?B?aEZseCtOL0JGaTdldVZPMzlOc2s1LytsYXY2SWx3aHluamdPeFpiT0F2L24z?= =?utf-8?B?Nkp5MksxWHZOcDBkSnhCVnVSK3ZDVHE4enBqQVZKRVF5ejRCVFJYUTJJRS9K?= =?utf-8?B?aHJXcWdpeFBrQ1piQWVjMGNrV3V1YVlQS1pLMG0rNFZKREhoR3d4c2xsNThO?= =?utf-8?B?NkMvOTNRc1RmRFd5R0kxMGMwckxZR05kRzJFSGg0RUpCVFIwUFNrZDBjbW9E?= =?utf-8?B?eDBuYVQ2ZGlYdmN1aWlaaXJ6YkpSL3JzZzM4a0NOVFZ3RHdxYmN0dlNOWG9R?= =?utf-8?B?U2s0Z04zQjdkRHl3bXdjUzdueHNTcWcxVVRDbU5PWWhwSEdIMUw2b1F6eDhX?= =?utf-8?B?YmZTV0xzdkxCSnYweE9IcTNsbU96Tzkvd2RMR2M0eUlCVys4WjZvV01UWllD?= =?utf-8?B?dWtEVk53RC83OUJHT0h1VHY2Wkx0VnJrNXErV2NrZ0NXNGduKzRpMkc2cHRr?= =?utf-8?B?bktQemV6LzF5eXJheU5SNDZrTHNZRndzRmlHVWhyNzUyampwcFpvNmZvMDZT?= =?utf-8?B?dGZtNXptc3MxQVJXUUFJZUovdUd2dUV0dHhSbzE5NXJoZ05YanBXZVdTbDhk?= =?utf-8?B?TmFjREJZT0Yxc2FtSGY0bHBJbjdYRzlZZTlvdFltZGo1T1NEbVdQbHluSEpu?= =?utf-8?B?cjU1c1hkREZpQ3ZHK04wSXNXWGFCZm1JK3hvN1h1RFNpTksyQkFlNlVyVFhp?= =?utf-8?B?OXU2cWJPZ2FCbXpoUHFlMEEzaWlnRkxrendZSXkvSUpuMm5qNFZ2WXA1QzJJ?= =?utf-8?B?eGk2enBCSW00N2p2YWlFbHhZcUxFZTN2VlZWck5JNXdxdkZXOHgzMElMZEY4?= =?utf-8?B?a1RLbEx0NjVSd0VNNGVyUElUVDRVSGptN3pmNmcwdy92SzQzSGFydThTOWsx?= =?utf-8?B?WG80SkVuaXBlK1FTaHY1NnVRejBhUjY3VXM4MXdnSTJCTk0rUlVmZjI1Y0dC?= =?utf-8?B?VnRKNUtJQVNUdHlaUFRvckovVW1RbEtMMk4zS0FNbzU3ZHlzOVJxMnJYY3Fa?= =?utf-8?B?cEtIYVZsUHhsZjhJdUJPM054YmF0eHRGNUxiR0JWODhrWHpDR1RrVDFXbkZZ?= =?utf-8?B?bWpZc09uSXprUXkvTlR2RlY2R3pqc2JLaXdUZVUxU2lUc2N3dlFWalFJOCtC?= =?utf-8?B?cEZzK21YbmgzeDRTcmNYcXlNQ3l2WERRelJKNGxzNDVMUGlqWmluSk5MbEFN?= =?utf-8?Q?q7aA=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(19092799006)(376014)(366016)(1800799024)(786006); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RVY0c1Era2w1U1ptQkM4M3hmelZmbWlvUzJrQlhaVUlKU01PajlPeW0xb1RL?= =?utf-8?B?RUNaK0EvS3JFbVdlSjl5ay9xZWhjOUVQcnB1ZHRkQ1U5Yjc4ak11eVJMZkJF?= =?utf-8?B?enZSTno3N3dqWlFzd1ZEMWR2S0pNdTJPRnlRTHBJOVIxMytWajhBc2pINkY5?= =?utf-8?B?QUNjVkRlYnFzS1lHQVByT09ySktndXZQc3VhWXJhMnJyKzI0bkdaLy9EZERo?= =?utf-8?B?VUFFV1U0Qks5U1IrcHdLUTJ2YUFsaGI4eWVIQURpWDJQN0MySG54dlNmUUFs?= =?utf-8?B?YzIwaVJCVkw3djYrQ0xBZXVMUC92NlVRVHlVbm05V3dPNG10czNWSURscDl2?= =?utf-8?B?NDBFTUhjTEtsR1Nvck0wNFRqMjVQSjVmaVZ6WmhNNENUZnhmeFlrc292bkpk?= =?utf-8?B?RFpGcXFjNXEvbitZZ1lFUitnRjNVR1VPODkrUWhOYXpFOENiU280bnVnR2Fl?= =?utf-8?B?MlNSWXl0MUxOVWdDUXZOUmh3MGpwcnZiZUdTbGM0L2pMMndPOTZXaWZiNnNw?= =?utf-8?B?RHRnUjB6N2pYN25mbWY2aUpDSGQ5T29CK0xJbFdWNGVwK3ZKbDM1Vm9tRnIx?= =?utf-8?B?VkR4S3NXWDdYM1BYNWY4Y08vVEo3SnZYS3gzTUVhQ3Vja1hMcTVZWXFydzcx?= =?utf-8?B?MGw2VUxoRmhpamdqR3NVYTU3UXJnVG41N1IxOTgrOEVZZE80MERkTXBYc0ZQ?= =?utf-8?B?Qk9sM2dtUWNSVUNGVEorWENlODVWVjNEVDZlSFl6Q2xNTWVQbzhibUcrK0NW?= =?utf-8?B?QWYxMVJOcG9STXNlV0VjQzY0SmVmYzZIS2FOck1keUlUMEFkUTh1VFJRRENk?= =?utf-8?B?ZFBWSnVNdVN6Y1lieVlzT3NNM1ZwSG1COHJqc3UrWi8vZHZnZUNXMFdiUkcx?= =?utf-8?B?VGY5b0loeVhyQ3lwVjV2YW83cFJiR1NaRThTWUpxMVRqVk5UdFlPU3pOd252?= =?utf-8?B?YVdTcGx0MXJrK01KaFRkUURVcTloV0ZidkxJcjIxbHA2SDNvbER6b0VxNS9X?= =?utf-8?B?VkQ4dkZvMkMzdDVaT0ZMRjRvTythUTJwQUpyVjlDTFZCMVIxei9udVhvSnpG?= =?utf-8?B?YnZrbWJINW9zZk4vS3htM0Z5R0FHQ0hTeVEwMUhmcFYxRDMzeEMxYVlaNHhk?= =?utf-8?B?SG02WXhZclVwVlBPZ29sUjNhZGlvL05zVytnTDdZYzFQckhuZkJteTBVbXR6?= =?utf-8?B?OWZodEd3Y1dhS0hwUHl4R2t5bDVpeTZONzNTVmlab3psbWdvaUJaR0JTSmFR?= =?utf-8?B?TDh5NHMrVU5Qd2c4bXJaK1k3UVNsanZob1M1Vkt3WlZQTjdCNHBPRW92c0xP?= =?utf-8?B?bXhZQXlHMmRIUGNuSnhZV014R2tPRTNVUnZ5dlJBSGU3bjhIY3RBeEp6S2ZU?= =?utf-8?B?Zzd5NWdPSWpQT1RiK2xxeDRkV1FxQWl5VWc4RE1KYUpFU0F4d2RCSitSaXZI?= =?utf-8?B?NDhUUDM4RTA5aG54c0VhdXBnMkszYXVTaGtTR3V2aGNJc0lncnMyYVVxT2U3?= =?utf-8?B?N1RSZ3NtSU9FemI3c2ZxV2R4TnRzWGY4TFI2ZGVsbVQ5RG1WQ1JVUWppa0Vl?= =?utf-8?B?OXpYYXBqTnY5aDJRTmoyTGQvVk9IUFl1dGhNQ3VJdGtMdEFvLzM5T2wzZHoy?= =?utf-8?B?WklzSlNycXhkS1BFVXBKVVpnbmF2S0FlMVJQbmZFcExISmVzVzRuTlNOa3k1?= =?utf-8?B?Ym92R3RpaTZlN3p0RGhGYVZzVEpFR3Z6RGhSem40MTZKQU5od2FWT3FnUkdO?= =?utf-8?B?REJHVGpsd2hLTDAvQkhXbmVyNkRJZm5IS3hTZzlkcU12YzdtY2MxQk9nUGRC?= =?utf-8?B?MnQzbTJ4Q2RmZjFZOThKaUx6QVlyeEdPODB4S2JHM1hRa3RzaytEZFIzMXdo?= =?utf-8?B?ZUh4RDdPVlFUWDlTempMYzBSRTcwUmRGTlJSOGtlNVk3L1ZOVEdhajQvQnNH?= =?utf-8?B?dGtRMHNsTG41aTVZV3RMc0dTcWVVd3hmcjBrSGE1WnJac2tWRW1CdWQwTHdm?= =?utf-8?B?UEdYY09qS0VxTnZpbzg4ZzJtbjR6SmxRSXNnTWpKQlFjYTFCbjdmaHlUZ0tn?= =?utf-8?B?VEVHSFduV294Mm5WQXRERVd0eFM5WGpUanpHMFhnMXh5YzFVVVlOck10WDBG?= =?utf-8?B?dHZzbmdGajlMMEt0QmZOdkNQSW5yR2xvNkd3MExDR0JPY3FxM0Y5RWx4TWZW?= =?utf-8?B?QlhnQ2xNa0RxZGxoV3NJSE5PYjhFRjRqMFpkK1VKbHg0WkVFbXNJMUVNMTQy?= =?utf-8?B?cUdOaEZKSCtCZDBpRW9OOXZiM3RsNGVtTWk5cUZYWkpFelkrNUtPQ3MvWUow?= =?utf-8?B?N3RYWDQ2NG1sWFpiTkRNb1haeUhSeUNpVXdTM0tHdVAzVTdTQ2dTbWhGU2sy?= =?utf-8?Q?sYbjBJdOqp3oySIo=3D?= X-OriginatorOrg: epfl.ch X-MS-Exchange-CrossTenant-Network-Message-Id: 000c3a70-e123-440e-149e-08de583860f6 X-MS-Exchange-CrossTenant-AuthSource: ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jan 2026 15:27:10.2513 (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: cfmu+TCSx5CNsupaTFbMgOJ1QXtryU1ofHbORsQ97XH6HTUsJCjhV9N1xWeJJn5CG+QzNrikrpr2iry7YrkLWBB68dsNWgPgTttu8ajra/4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZR1PPFBC9E76CBE 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 (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: 1768922890782154100 Content-Type: text/plain; charset="utf-8" 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 --- plugins/api.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/plugins/api.c b/plugins/api.c index de8c32db50..4555f048a1 100644 --- a/plugins/api.c +++ b/plugins/api.c @@ -425,7 +425,6 @@ static GArray *create_register_handles(GArray *gdbstub_= regs) =20 gint plugin_ro_bit =3D 0; /* Create a record for the plugin */ - desc.handle =3D GINT_TO_POINTER(grd->gdb_reg + 1); desc.name =3D g_intern_string(grd->name); if (!strcmp(desc.name, pc_str) || !strcmp(desc.name, eip_str) @@ -436,6 +435,7 @@ static GArray *create_register_handles(GArray *gdbstub_= regs) ) { plugin_ro_bit =3D 1; } + desc.handle =3D GINT_TO_POINTER((grd->gdb_reg << 1) | plugin_ro_bi= t); desc.is_readonly =3D plugin_ro_bit =3D=3D 1 ? true : false; desc.feature =3D g_intern_string(grd->feature_name); g_array_append_val(find_data, desc); @@ -460,7 +460,7 @@ int qemu_plugin_read_register(struct qemu_plugin_regist= er *reg, GByteArray *buf) return -1; } =20 - return gdb_read_register(current_cpu, buf, GPOINTER_TO_INT(reg) - 1); + return gdb_read_register(current_cpu, buf, GPOINTER_TO_INT(reg) >> 1); } =20 int qemu_plugin_write_register(struct qemu_plugin_register *reg, @@ -470,11 +470,12 @@ int qemu_plugin_write_register(struct qemu_plugin_reg= ister *reg, =20 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)) { + && qemu_plugin_get_cb_flags() !=3D QEMU_PLUGIN_CB_RW_REGS_= PC) + || (GPOINTER_TO_INT(reg) & 1)) { return -1; } =20 - return gdb_write_register(current_cpu, buf->data, GPOINTER_TO_INT(reg)= - 1); + return gdb_write_register(current_cpu, buf->data, GPOINTER_TO_INT(reg)= >> 1); } =20 void qemu_plugin_set_pc(uint64_t vaddr) --=20 2.52.0 From nobody Mon Feb 9 04:31:06 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=1768922886; cv=pass; d=zohomail.com; s=zohoarc; b=QWS+UKisvrCf3ap4fIXq2e1gLxLsKenGpJAZZeCreIJ8NsRdCKfAIzzfNTgI81g+tljQNPyEYO9/YMoIQDz7R4yDFu3eK86vJDM/PEyqVvVeTcqCsU43Ya/ZWi7/OoZsZIoHzOyszSfAGEGo5tK2Y3m0Tmri++RCye1OP5uYbM4= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768922886; 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=G4ozX9lomEwJkrcrctKRBybQa/Z1DQ3HqgPmTisaxps=; b=nLBqZ8gB3j+yHS1jakRiP4L/GHH7nOWk3guRyvD9LhdN1BNkzk/h2G5W0J8PENaDjJxKVUZigr5Ps1osEtftn+4evIx7tiHGzoF73GCAlHfQO/zRAn4IIRmoA2kMFiDxPc+m1R/Y5j9ImNQ7KsFUrtofH22lIDkgc7YwfvTWtOA= 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 1768922886508679.8860254215472; Tue, 20 Jan 2026 07:28:06 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1viDdk-0001QG-E9; Tue, 20 Jan 2026 10:27:32 -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 1viDdc-0001Oy-H0 for qemu-devel@nongnu.org; Tue, 20 Jan 2026 10:27:24 -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 1viDdY-0006ub-Tb for qemu-devel@nongnu.org; Tue, 20 Jan 2026 10:27:24 -0500 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) by ZR1PPFBC9E76CBE.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::2a7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.12; Tue, 20 Jan 2026 15:27:12 +0000 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::ccdc:4b69:a4c:e1c1]) by ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::ccdc:4b69:a4c:e1c1%2]) with mapi id 15.20.9520.011; Tue, 20 Jan 2026 15:27:12 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UnAEZ7klIfCDi+8yK9vq6QZN8IESkfMIGg+yKX0BTg9aVsgUtNav3oJT9frU0C3C3+hE1q1FTG08Kvlrx2mPQzqVHjTvNIEl7VE/FhSpnmGY0pfparAR0jrmPAIK8KRHjfXFu9P+E1HRJXD9d5dWDNDYYGSIuGNKhP+35bEzrFHQG8zqg1m8wn/Xssu3nAocwv6zDXpzPkSJkSRxINC1kPxUMNyrh44PvRT7csWJCsUeoNd9ZHp1BY/+dNv4U9fnQa6hM2y9IiBpT0nOx7cHwesE0CeQs/3uB5x6zj2G+rZGj9XSJRCWiGeCbfalZEf56NxuQ4/V8ivKf/TwyvLgUQ== 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=G4ozX9lomEwJkrcrctKRBybQa/Z1DQ3HqgPmTisaxps=; b=xcpHC0cZPaFfd2EzEJI0fm0S4QcyXRpb7BjIfWoimNKwhOQi7TUDJ3rH8RHwn8/Y2nF0Ojsy3/pGUAlBueFMcEbviTGHTrN8DwQek3njhbhc2Azi+8oNMRAcVEnDfrMfFetM+GnCaDg69aZ+TfAOOFzAjlVj1RoNh1e5TTcytGgDvEqHiXrjQQ54pdbKIXCvYi3nUu7xn5npzu0zTxuNM7JtRMC8UFL71UNDDP5dQFFoicZF/PSFsdu55tfkzYn6kuc1m4RbjOt9r6zQV2ltyl5sfcCpxTE0OyGWI7h7bxrqqkNVrPWHap48CNe0TWXVv5KmIO+kRIBPbB6gCXs7+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=G4ozX9lomEwJkrcrctKRBybQa/Z1DQ3HqgPmTisaxps=; b=OyBaTuRer9XLHvQYySyDujNRhO3EbX5zpnBYrSArYGq8OdcHw3jOy7c3Iq8QiRhFx1X2v/gNUlK250WaLLjA4pcJockqIYz+Jg69ikAK1cja2/qJ6AsWn2brhbfGfYKEWHe7DIA3thCH4AseRelH6QXyAtJJ/uoDXvcwFemvKJ4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epfl.ch; Message-ID: <5bcbd1dd-b9b4-4822-8b35-6edd21b72383@epfl.ch> Date: Tue, 20 Jan 2026 16:24:45 +0100 User-Agent: Mozilla Thunderbird Subject: [PATCH v3 4/5] tests/tcg: add test for qemu_plugin_set_pc API From: Florian Hofhammer To: qemu-devel@nongnu.org Cc: alex.bennee@linaro.org, pierrick.bouvier@linaro.org, richard.henderson@linaro.org, laurent@vivier.eu, imp@bsdimp.com, berrange@redhat.com References: Content-Language: en-US Autocrypt: addr=florian.hofhammer@epfl.ch; keydata= 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 5hMMZIzTI4AtIcgA3xe4Ew== In-Reply-To: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: GV0P278CA0017.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:26::27) To ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: ZRH2PFAD84B9AF9:EE_|ZR1PPFBC9E76CBE:EE_ X-MS-Office365-Filtering-Correlation-Id: 652d9ac1-c067-4519-1964-08de58386188 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|19092799006|376014|366016|1800799024|786006; X-Microsoft-Antispam-Message-Info: =?utf-8?B?N2YxUTV5NWNvUHNicGNuOXZDWTFYdjA3TGZHMnlmM21nWktIVXBXYVIzSk9X?= =?utf-8?B?UHNkSTRQZlBLUUpOR0NrRVVFUkpvK1lCSXBSeHNRVCtJeEFFNVlSS0FEL0ht?= =?utf-8?B?c0pUUStOQzAzWkRudEh2RGdUaC9CY2l2OGNoSjNyZFI0d2ZjSWY4V3dyOEhT?= =?utf-8?B?eTcwcGw3WDRUbzlsNHA0Z1puNlppRFhIVTlCN05SUXF6VjFmV0hUaFZzTkVz?= =?utf-8?B?Rmp0eTg4c1A4citsMVBxZlBhL0NubndmRFVKT1FmN0doTndkMzRBTVoxb09k?= =?utf-8?B?ZWNYNThSRTVtcmZpcVVLek5URnZHYkQrbHFqYUltZmM1T0JEM2FQeUdTQllU?= =?utf-8?B?ZUYrNTRRaUJsUDJGL2VOUWovL0RxSzE2eW0vSW1NRkc4V1RuM2w2a0tBR3ZG?= =?utf-8?B?bHNMajZwa3BQR1VLTE8vM2RRZXJ1TWNEMGEwTVg5TUdiRGo4UlZ4L0Eweklu?= =?utf-8?B?L2lwamNsdFJDcDh1ZGdlT2pwVjJwbHIyM0xGRExWUGhQaHg1RWpUUTI1NkNj?= =?utf-8?B?V0JNSkJWdlNJamxNTEdkUlhqR1N3N253SmxZYXVVSjlCQW5IS1oyb3ZRUFUr?= =?utf-8?B?UnRPdUVSNHhkcW9HZ0NMUWM5eUVSaklQQTJhTkVxbXlKM0FUcDU5NmFVeE5Z?= =?utf-8?B?M1BFQi9oMW5hd0dQS2lKekttazQwY2FNRkU2TG9zYlFkdUdQdGozSkEwa2V2?= =?utf-8?B?eXpMRm9mbGoya2xCclpzdWNJT1VaS0VhZ3FYenUzOG9PbUFZYXJyWWNET3lR?= =?utf-8?B?NzRHa00ycFRUT3ovQXQwT2x4WEk4V1JkQW9YNWdodGZ6aXo1QjJJd1E4WlBE?= =?utf-8?B?MGd5dUFvUWc5R0xTUFRRSkFzZGt4QWxCSStiSXhZUkp6MURmMDFPODE4OGNF?= =?utf-8?B?UDJkT3RuZXRzU2N3UVNGYUowaFV3cUlzbnV3ZHd2M2xGQk1iVkZCemlRbkhx?= =?utf-8?B?SEM0L2N1RnR4cElmV2h5VG1EcDNZU2ZCWFozNmcrSGR3NHlWaThCWlhlMVBI?= =?utf-8?B?a0N1TklqcjZwSm4zRmpYakgwMWdQU2lNY21pL2NNQ0VyN05RQ1ZoV1VnTUxJ?= =?utf-8?B?aDJmNnJMR1Ird2hLZDhRTHZhVmFWOGFYZnQvdDVJcUtXU0xKS3FmRU1MOU5j?= =?utf-8?B?OWJQSHo3UlM5M2I4cDc1WFdFdWlPRVhISzJIb0tQMGhHRTd0TnArUHZNUXV2?= =?utf-8?B?RUZ5bUxtSndGbFo2N1FuT2lKSk05U2NYbi9lMDR0eHdWMUtmVzFRTExtTVpV?= =?utf-8?B?RGcwb3BOVk44RFMwdFMwbXltckp4MEFvQ2ROSkhIOTlWeDZOcXcwOEJWRFM0?= =?utf-8?B?Y05BdXYvUU0rUjZyaVVFa1NRdHRhVHFGaEkzZytPVHZzU2UvQnB2L2kyZ1VZ?= =?utf-8?B?M1NGRmFGc3o3cEZ5OG96YzBCc1FRVG9IeEVtc3JES2k3Sm9KUkYzTXBRYzdm?= =?utf-8?B?TDNxMUtnWkpXUy9WMVFSdXZxRU5qRlliMVdxdDFGblp6SWRoMkYwUDhyZlpH?= =?utf-8?B?Uktpd2dzd1AzVXVmeWRUSGRKSUpOdzJTdjJTUmpoczI3ZHQ2dFpYOGVKV01m?= =?utf-8?B?TTExYTNuS3VPR2EwRmtQK3JlNHZBUXJsa0k3UGhsQUhyUDNGTVc4ckh3QjRZ?= =?utf-8?B?MmJYdDhPejlNTVJXMEY1cHFFMERsMFN4azVQR2dRM040ZENBbjFkd0RKWEts?= =?utf-8?B?Mi92VlZjN29RSElnSlpBK1hGSWZYTTVCZm1oU0M2TkR0eHBNSEZjbXBaL3Z5?= =?utf-8?B?U1BBRVJrNzc2dFNEbitqNUFZSTdHd1kvTTBGRjhwelZONExFR0RUbWlvV2Fs?= =?utf-8?B?TEgzZ3JrcndnaWJ6bnBGMkk3djZxOU5hZGdBMmRFaFNCcGNFRzVlMWdQUmlO?= =?utf-8?B?cGNqaVNMNkVBUzJiLyttVEJ3U3JTWWppVldrek92QTAvVnNsNVZJZk1pTm04?= =?utf-8?B?RmV4VkNQOG5vTUd0aXlFMTArdStValRoSGxJSkJuTjhMT1NtK2pxTkIwUW42?= =?utf-8?B?MnFybHBqTU5hcHZ1RzNMTG84NmpnakhCT09sU2pFalNkNks4a3M0VE9wM0xJ?= =?utf-8?B?N1ZlZ2ZMUjdIM04wR3lkMDdQV3hXaVRaeXJBcUJLU0FuMDVBL0R2QndXREF5?= =?utf-8?Q?4P10=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(19092799006)(376014)(366016)(1800799024)(786006); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dkJCL2pRdDhxRFBaSDhjSm1iWUpsM2RZZnh5VTBReW13WGtzbnptcytGcUVF?= =?utf-8?B?TzNCRi9kLzRETTJ2MitKSzJMVG5ZNExKZG1BcXhRM3dmODdUdDdIQjVqbWJk?= =?utf-8?B?N3hQdkRHQ2ZoVXVpMkdLcXhudFRpemkzWFpheGZBSk16emxCVlhnQ1NmZ0tT?= =?utf-8?B?YXNYYk9PNEhTbEVlNTJkUnFaYXY4WXRwb2YvRHYwdUdBeUoxUzkyMEkraUM2?= =?utf-8?B?RXByZ01yUWlKU1F3MmxUTjZQUVhNMWVJMGE5NFVIK0NUZlhJOVNSMFRSejcw?= =?utf-8?B?cHZ6Z09aSDhGdGJuS01MM0FxQkFwRXNpWWUyeVlDekhDYjNzK1RoMUQvbGFC?= =?utf-8?B?dVAvdm5LTzFqRGNoMjFIUVhaUmtJTUpyMWF3ZkpBbWtnS1BFZ3FQQnRsMW00?= =?utf-8?B?WXpyYU1oTWlTZEdVL3AwUk9RVG5yc0NwTExtM1d2bGxnOWFKbjQ1aXNCb2lT?= =?utf-8?B?UndUaTBQYXlKM3ZHNmErVUwrRU82RDlRZTE5VzFueVZITkxVRG9mamtGQmFQ?= =?utf-8?B?RHBBenZhdUxrRWVkWlVuY0Zsb0FCMDNlOEZBZ2FOTGZBczg4Q3VTOXM4ZWR6?= =?utf-8?B?Z0hyU2xmTmQ0ajdJTUZBdjJ6NDU2ajZOMGgyQ2dDRlc4bkNaTklQZUR6NjlQ?= =?utf-8?B?Z2xsWUQrM2E0dkx2NWFIZlNZcDRqNW0vVDRMVFNuQmE5OUlaeS9UVWkzYjJ0?= =?utf-8?B?RlZyZDlacnB1QU9vdG13RGlhOUMrZ3J3RnBwd0FRUHNuV2xpS0Z5YWRBMFFp?= =?utf-8?B?M2hWMkxmK0VwZ1FROEROaXc3SEZGUHFZTVl3d1VpRDJockZ0NjZzN0RYb0Ja?= =?utf-8?B?TUFMSTUwLy9KbVlEaWFkK1cwdHRrSkZNTTJHRExubkZuVmFCcUloN1ZNeWoy?= =?utf-8?B?TmhxU2RIMGpFRWZMSDA5S2NpQWlvS1dTNkRVd2VqVkIvejBYR3RXcUdDTE80?= =?utf-8?B?cDArOWM5Q3Y2VjJXNm1XY1ZIRVpEeHNQNjZGcUNkRE5KY0RxdyttRC8rdDg2?= =?utf-8?B?bWxSRXVaWGhFTWFFRkRIZTNONC8vNXFkSDZPc256OVlMeUFFZjdKeGRKTEdO?= =?utf-8?B?N0lodXBtNCtpTkRvRk9oVG9lVzl2TFNubTVDZVIxV0ZRNFNiYS91OE1VbHE3?= =?utf-8?B?S1J2NXpENFdJN29xTC9UWUtnZmt3Tml2MXNIZnVGYUJNZFRueGJwVEVPbHha?= =?utf-8?B?amlHeCtRTllDdENDbW1GT2FPNkpoZlhxMHpWSk5kY2dHYjFreTFIN3dmeXlJ?= =?utf-8?B?UEwrajRFVlovRmlkUlJFNEoyY0xDOU9CbCtXR3BNZW5GQzNDWGQ2ZUNJTk1L?= =?utf-8?B?MTNwSG82Z3NUZXNDWUhkcVlhVlpZSTJwS0dHSUJpUWRVWGRTQ0o1ZUNiS2lt?= =?utf-8?B?NlR6cThWNlJ5d2kzY0RwdEZYQnpCemsvalBCbnIwSExRZExqK0dJTUxjMjEx?= =?utf-8?B?Z2hOdG02aHd6cFVhUzJMSXVkR2xObXBSNVZQM1RlRDIyclpqbGFyRlVvRU9V?= =?utf-8?B?QWpkNDBHKzdSSHdqQUVONGlEZXVSZTA5WGxZOUc5NFpLYjJMMXIxQ1o0UlJi?= =?utf-8?B?MlppdjJSY1BRT2haWVR3UTUrUmFpTEptL3VZKzRPM1VQdnN4dURPdlMwNVNh?= =?utf-8?B?bDR2bXhZUFFOMGEwd3pjOWRWVVlnOWNvaTZIQXJEK2FZRjZDLzhsYktSZXFC?= =?utf-8?B?MlFqVmQ0OFhWYnNwTUxUTUhlc2dkRndZOFRTZnRFYXZ5Vm5pR3kwRzFlQVc2?= =?utf-8?B?b3FpaDdlZXRHS1U4azhxamRjMy9abkp3VVNKd0dLUXhvYTRZRGNHR0xtdzhK?= =?utf-8?B?WGtSdGQ4MDQyc0dJdVFUdW5JZit1TEQzcVRUaW1KMy9VNkEzS3ZwNjFoV0lj?= =?utf-8?B?QjFHbm5NWVdtQWdKQjZhQjUrTjltaUJIb0xYTDFFYVBaLzBGTGVFQW1IV0ho?= =?utf-8?B?SmRWUHdSbks1S3BIMlA5aEszNklLWm9WUjRXZHNOWVppazZvK3k3aWRzRGcw?= =?utf-8?B?RzdoTUR0VTdmVVVPS2lybHpjZXlNYzVuUm9ZLzNjUlBuUWRoL1ZkbWFHM3pS?= =?utf-8?B?ZXpPZmFVeHQ5SWJzbjM3OEFpSkc1TkxrWERWV2gydDdsczBtTTVicGpkZHJH?= =?utf-8?B?L0hHamlNNTgwaVlzYXdXeE5uSWw5aTBTVjJzVTU2TS9nSXB6aGVhOUFqRmo1?= =?utf-8?B?VmZRNVYvMVhWVWc4UEVVM2l0U3Juc2NRWDhLVXpNLzJPMWJMenlNalNQblBN?= =?utf-8?B?bW5NOVVXVmhoNWRGa2xoVEdUTUI5VktwNG4vT21RY2M1OTNTa1FmalF6YUJ1?= =?utf-8?B?ekNabHVaNldaNVZsb2JOYTZnYW1TMUNqandDOXhrTVA0Ry84Q014TFJ3dnhN?= =?utf-8?Q?EwRUqaOzWouj4nBg=3D?= X-OriginatorOrg: epfl.ch X-MS-Exchange-CrossTenant-Network-Message-Id: 652d9ac1-c067-4519-1964-08de58386188 X-MS-Exchange-CrossTenant-AuthSource: ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jan 2026 15:27:11.1868 (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: UG0tr6lJ6gC3bsujMWCLMv9XK/NVv4PnHnMGllfHDPNBPLLBG5VTKTJgWF7sMnN1SGuRkHq0axGm22a8zwkwohfdbYUnKbs14yiIi6f1Q6c= X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZR1PPFBC9E76CBE 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 (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: 1768922890546154100 Content-Type: text/plain; charset="utf-8" The test executes a non-existent syscall, which the syscall plugin intercepts and redirects to a clean exit. Due to architecture-specific quirks, the architecture-specific Makefiles require setting specific compiler and linker flags in some cases. Signed-off-by: Florian Hofhammer --- tests/tcg/arm/Makefile.target | 6 +++++ tests/tcg/hexagon/Makefile.target | 7 +++++ tests/tcg/mips/Makefile.target | 6 ++++- tests/tcg/mips64/Makefile.target | 15 +++++++++++ tests/tcg/mips64el/Makefile.target | 15 +++++++++++ tests/tcg/mipsel/Makefile.target | 15 +++++++++++ tests/tcg/multiarch/Makefile.target | 20 +++++++++++++- .../{ =3D> plugin}/check-plugin-output.sh | 0 .../{ =3D> plugin}/test-plugin-mem-access.c | 0 .../plugin/test-plugin-skip-syscalls.c | 26 +++++++++++++++++++ tests/tcg/plugins/syscall.c | 6 +++++ tests/tcg/sparc64/Makefile.target | 16 ++++++++++++ 12 files changed, 130 insertions(+), 2 deletions(-) create mode 100644 tests/tcg/mips64/Makefile.target create mode 100644 tests/tcg/mips64el/Makefile.target create mode 100644 tests/tcg/mipsel/Makefile.target rename tests/tcg/multiarch/{ =3D> plugin}/check-plugin-output.sh (100%) rename tests/tcg/multiarch/{ =3D> plugin}/test-plugin-mem-access.c (100%) create mode 100644 tests/tcg/multiarch/plugin/test-plugin-skip-syscalls.c create mode 100644 tests/tcg/sparc64/Makefile.target diff --git a/tests/tcg/arm/Makefile.target b/tests/tcg/arm/Makefile.target index 6189d7a0e2..0d8be9cd80 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-skip-syscalls: CFLAGS+=3D-marm +endif + TESTS +=3D $(ARM_TESTS) diff --git a/tests/tcg/hexagon/Makefile.target b/tests/tcg/hexagon/Makefile= .target index e5182c01d8..428b0112e0 100644 --- a/tests/tcg/hexagon/Makefile.target +++ b/tests/tcg/hexagon/Makefile.target @@ -130,3 +130,10 @@ v73_scalar: CFLAGS +=3D -Wno-unused-function =20 hvx_histogram: hvx_histogram.c hvx_histogram_row.S $(CC) $(CFLAGS) $(CROSS_CC_GUEST_CFLAGS) $^ -o $@ $(LDFLAGS) + +ifeq ($(CONFIG_PLUGIN),y) +# hexagon uses clang/lld which does not support -Ttext-segment but GNU ld = does +# not generally support --image-base. Therefore, the multiarch Makefile us= es +# the GNU ld flag and we special-case here for hexagon. +override LDFLAG_TEXT_BASE =3D -Wl,--image-base=3D0x40000 +endif diff --git a/tests/tcg/mips/Makefile.target b/tests/tcg/mips/Makefile.target index 5d17c1706e..d08138f17b 100644 --- a/tests/tcg/mips/Makefile.target +++ b/tests/tcg/mips/Makefile.target @@ -9,11 +9,15 @@ MIPS_SRC=3D$(SRC_PATH)/tests/tcg/mips VPATH +=3D $(MIPS_SRC) =20 # hello-mips is 32 bit only -ifeq ($(findstring 64,$(TARGET_NAME)),) MIPS_TESTS=3Dhello-mips =20 TESTS +=3D $(MIPS_TESTS) =20 hello-mips: CFLAGS+=3D-mno-abicalls -fno-PIC -fno-stack-protector -mabi=3D= 32 hello-mips: LDFLAGS+=3D-nostdlib + +ifeq ($(CONFIG_PLUGIN),y) +# qemu-mips(el) returns ENOSYS without triggering syscall plugin callbacks +run-plugin-test-plugin-skip-syscalls-with-libsyscall.so: + $(call skip-test, $<, "qemu-mips does not execute invalid syscalls") endif diff --git a/tests/tcg/mips64/Makefile.target b/tests/tcg/mips64/Makefile.t= arget new file mode 100644 index 0000000000..5386855efc --- /dev/null +++ b/tests/tcg/mips64/Makefile.target @@ -0,0 +1,15 @@ +# -*- Mode: makefile -*- +# +# MIPS64 - included from tests/tcg/Makefile.target +# + +MIPS64_SRC=3D$(SRC_PATH)/tests/tcg/mips64 + +# Set search path for all sources +VPATH +=3D $(MIPS64_SRC) + +ifeq ($(CONFIG_PLUGIN),y) +# Require no ABI calls to avoid $t9-relative .got address calculation on M= IPS64 +test-plugin-skip-syscalls: CFLAGS+=3D-mno-abicalls -fno-pie +test-plugin-skip-syscalls: LDFLAGS+=3D-no-pie +endif diff --git a/tests/tcg/mips64el/Makefile.target b/tests/tcg/mips64el/Makefi= le.target new file mode 100644 index 0000000000..77ac8815fe --- /dev/null +++ b/tests/tcg/mips64el/Makefile.target @@ -0,0 +1,15 @@ +# -*- Mode: makefile -*- +# +# MIPS64EL - included from tests/tcg/Makefile.target +# + +MIPS64EL_SRC=3D$(SRC_PATH)/tests/tcg/mips64el + +# Set search path for all sources +VPATH +=3D $(MIPS64EL_SRC) + +ifeq ($(CONFIG_PLUGIN),y) +# Require no ABI calls to avoid $t9-relative .got address calculation on M= IPS64 +test-plugin-skip-syscalls: CFLAGS+=3D-mno-abicalls -fno-pie +test-plugin-skip-syscalls: LDFLAGS+=3D-no-pie +endif diff --git a/tests/tcg/mipsel/Makefile.target b/tests/tcg/mipsel/Makefile.t= arget new file mode 100644 index 0000000000..bf1bdb56b3 --- /dev/null +++ b/tests/tcg/mipsel/Makefile.target @@ -0,0 +1,15 @@ +# -*- Mode: makefile -*- +# +# MIPSEL - included from tests/tcg/Makefile.target +# + +MIPSEL_SRC=3D$(SRC_PATH)/tests/tcg/mipsel + +# Set search path for all sources +VPATH +=3D $(MIPSEL_SRC) + +ifeq ($(CONFIG_PLUGIN),y) +# qemu-mips(el) returns ENOSYS without triggering syscall plugin callbacks +run-plugin-test-plugin-skip-syscalls-with-libsyscall.so: + $(call skip-test, $<, "qemu-mipsel does not execute invalid syscalls") +endif diff --git a/tests/tcg/multiarch/Makefile.target b/tests/tcg/multiarch/Make= file.target index f5b4d2b813..25df6e7211 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,10 +204,24 @@ 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) $< =20 EXTRA_RUNS_WITH_PLUGIN +=3D run-plugin-test-plugin-mem-access-with-libmem.= so + +# Test plugin control flow redirection by skipping system calls +LDFLAG_TEXT_BASE =3D -Wl,-Ttext-segment=3D0x40000 +test-plugin-skip-syscalls: LDFLAGS +=3D $(LDFLAG_TEXT_BASE) +test-plugin-skip-syscalls: LDFLAGS +=3D -Wl,--section-start,.redirect=3D0x= 20000 +run-plugin-test-plugin-skip-syscalls-with-libsyscall.so: + +EXTRA_RUNS_WITH_PLUGIN +=3D run-plugin-test-plugin-skip-syscalls-with-libs= yscall.so + +else # CONFIG_PLUGIN=3Dn +# Do not build the syscall skipping test if it's not tested with a plugin +# because it will simply return an error and fail the test. +MULTIARCH_TESTS :=3D $(filter-out test-plugin-skip-syscalls, $(MULTIARCH_T= ESTS)) + endif =20 # Update TESTS 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-skip-syscalls.c b/tests= /tcg/multiarch/plugin/test-plugin-skip-syscalls.c new file mode 100644 index 0000000000..1f5cbc3851 --- /dev/null +++ b/tests/tcg/multiarch/plugin/test-plugin-skip-syscalls.c @@ -0,0 +1,26 @@ +/* + * SPDX-License-Identifier: GPL-2.0-or-later + * + * This test attempts to execute an invalid syscall. The syscall test plug= in + * should intercept this. + */ +#include +#include +#include +#include + +void exit_success(void) __attribute__((section(".redirect"), noinline, + noreturn, used)); + +void exit_success(void) { + _exit(EXIT_SUCCESS); +} + +int main(int argc, char *argv[]) { + long ret =3D syscall(0xc0deUL); + if (ret !=3D 0L) { + perror(""); + } + /* We should never get here */ + return EXIT_FAILURE; +} diff --git a/tests/tcg/plugins/syscall.c b/tests/tcg/plugins/syscall.c index 42801f5c86..c5bac2d928 100644 --- a/tests/tcg/plugins/syscall.c +++ b/tests/tcg/plugins/syscall.c @@ -148,6 +148,12 @@ static void vcpu_syscall(qemu_plugin_id_t id, unsigned= int vcpu_index, fprintf(stderr, "Error reading memory from vaddr %"PRIu64"\n",= a2); } } + + if (num =3D=3D 0xc0deUL) { + /* Special syscall to test the control flow redirection functional= ity. */ + qemu_plugin_outs("Marker syscall detected, jump to clean exit\n"); + qemu_plugin_set_pc(0x20000); + } } =20 static void vcpu_syscall_ret(qemu_plugin_id_t id, unsigned int vcpu_idx, diff --git a/tests/tcg/sparc64/Makefile.target b/tests/tcg/sparc64/Makefile= .target new file mode 100644 index 0000000000..516927a3fc --- /dev/null +++ b/tests/tcg/sparc64/Makefile.target @@ -0,0 +1,16 @@ +# -*- Mode: makefile -*- +# +# Sparc64 - included from tests/tcg/Makefile.target +# + +SPARC64_SRC=3D$(SRC_PATH)/tests/tcg/sparc64 + +# Set search path for all sources +VPATH +=3D $(SPARC64_SRC) + +ifeq ($(CONFIG_PLUGIN),y) +# The defined addresses for the binary are not aligned correctly for sparc= 64 +# but adjusting them breaks other architectures, so just skip it on sparc6= 4. +run-plugin-test-plugin-skip-syscalls-with-libsyscall.so: + $(call skip-test, $<, "qemu-sparc64 does not allow mapping at our given f= ixed address") +endif --=20 2.52.0 From nobody Mon Feb 9 04:31:06 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=1768922886; cv=pass; d=zohomail.com; s=zohoarc; b=ERyNUfAKzXJbYnfpsFhvc5kjrKSYHmIELa7vw2TBP339dILXErhwb7gahFhH/xQIGA23Rdrb4xm4w4leVNFPRTvATbE2ua2pZOSGvIFfzEDu9jlnOp1H+EgulxUyHyzGZZQLNfEUxwgVO9sH4YXmvNDb5QjHX/UV4+VMxm2uaqA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768922886; 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=D0edcBvGjZ+YS6r3pWZcdliWp9pw3jOXoL89HS5uk+0=; b=Pi+GxzjnbHMjeKmfbLTQ1gp34lU4S5R4/d/LWFNxAVc3I/L75ZRID7Ab11htFxe75gJNg09cjv8wSH642J26XHZPeOXLHYdneqQhnlod6TkygORGDq1mnVnr/EgAkt3kSUx+mTp68WZI1joavKB5LamSq31FJwUbBNHDlUHQtAc= 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 1768922886192124.8888079525982; Tue, 20 Jan 2026 07:28:06 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1viDdz-0001VJ-CG; Tue, 20 Jan 2026 10:27:47 -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 1viDdf-0001Ps-6d for qemu-devel@nongnu.org; Tue, 20 Jan 2026 10:27:29 -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 1viDdc-0006ub-WD for qemu-devel@nongnu.org; Tue, 20 Jan 2026 10:27:26 -0500 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) by ZR1PPFBC9E76CBE.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::2a7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.12; Tue, 20 Jan 2026 15:27:12 +0000 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::ccdc:4b69:a4c:e1c1]) by ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::ccdc:4b69:a4c:e1c1%2]) with mapi id 15.20.9520.011; Tue, 20 Jan 2026 15:27:12 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jJG4h+Cv15g7a+u5I5CLV/DHd6OJlvbqdLH2rbh3O6SyIntOnOM0pOAPWygXhFQHzj6HMmPfSNmVkiAW8ii8FQ1I4S2sGeJ2wgk9n6QDyEOpxRwSrJWlZJIc0r/meJ9x36/Fc4g/sFWDWH3ElHtsMGnxB0AH1eQA2rWWv8K+wr0WIZcBglbGVHjDzLHRttDoI3+mgSa53iL4qCun5s7E6Aj0skSHN1h0rlN4+STmbUrQjDhM3kOpTlCefS/gbxh4y8iwtexxs4SpyLY1bQ6++1FlQij64dvNQg+/KVW7VCFdizZZ4zcx2GwcPWZV0OnoEvoRFMamh0QEpxN6uFG9Aw== 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=D0edcBvGjZ+YS6r3pWZcdliWp9pw3jOXoL89HS5uk+0=; b=qwv7zZ1kqNGd9SS+gdHlJ4C3PQ/vhFGydgC47dKzNGeRGNlR3rDT6pUyXXTx6X1xqhAIZHva14FOjCmMBRUhAjombFO3HgX70vuQkmPsfgcFhTic9PbY5G63E+FzmWAuikFP3F4yeOQ2SZ91rZiX22mQo2KxiDVCqWOUVGRk8P+CFVNejlxOQqjzEOgJ+5o0QAewrZvZB3orvM7ccF4NeoJO3f2Vi6SkPV3zt+W6s9MOmtBVF4WAlD3TAyNPhTZomYJyyqgnlP1g89577yP4ysyB7p4LQDZn1OnEcD5T7b63yQnrP+MYpX6qlfz+zwisiyQ2heEBTzIIP9uBkUdexg== 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=D0edcBvGjZ+YS6r3pWZcdliWp9pw3jOXoL89HS5uk+0=; b=YARdUZKX2KcIt35zVVJhJ9OlnxIj4Ts1K+/d4amYVNRDSJ8UU0KSujELIXcRX+QZlSOzjvpogtHE9g+gp9e78PzG7nT5/3AMtEOQdr5F39+zrGEnS4jDmpToInpGF0IiblY9VR/T8OwlAvOyNE7cWi/Go4DzIUI2THzkJdWsl80= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epfl.ch; Message-ID: <81cc0e63-3215-4e82-ae09-e6aa8195111b@epfl.ch> Date: Tue, 20 Jan 2026 16:26:12 +0100 User-Agent: Mozilla Thunderbird Subject: [PATCH v3 5/5] tests/tcg/plugins: test register readonly feature From: Florian Hofhammer To: qemu-devel@nongnu.org Cc: alex.bennee@linaro.org, pierrick.bouvier@linaro.org, richard.henderson@linaro.org, laurent@vivier.eu, imp@bsdimp.com, berrange@redhat.com References: Content-Language: en-US Autocrypt: addr=florian.hofhammer@epfl.ch; keydata= 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 5hMMZIzTI4AtIcgA3xe4Ew== In-Reply-To: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: GV0P278CA0017.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:26::27) To ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: ZRH2PFAD84B9AF9:EE_|ZR1PPFBC9E76CBE:EE_ X-MS-Office365-Filtering-Correlation-Id: 20785857-668e-48d7-2d15-08de58386222 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|19092799006|376014|366016|1800799024|786006; X-Microsoft-Antispam-Message-Info: =?utf-8?B?T0RRdk5JWWJsd3dKMUoyVWJVSnVQLzRVdm52NG1xQXIxK1NFZ2dxSmFkaFFV?= =?utf-8?B?MzFLWkc5cmFVemtQNmhZRlVBMDZGLzc3V1BWRDkvQXZRRE52cVZkejZtbTE1?= =?utf-8?B?aDIvUEg5R3pjUDZ6UXNISmZNMFVFcWU4U2hrMlJ0SCs0K3NzaDlyczRQUmdC?= =?utf-8?B?K2poRWxhMU1kTVkwTU5UWDh2ekZDNnBEQndYTVFQNmtUQ09jMzhwTnY2dmdj?= =?utf-8?B?MTA1cklzS25tUDhMU2NLcmFJNXRZcHhzYnpWU1JUbU5reUZZcXJINkdLSnUz?= =?utf-8?B?Wks5ZFlwcVFkUFkwWHBPMzB2TXhFWlJ3WjB2YmJGblNpVGQ5dUFzQk9saXpB?= =?utf-8?B?emlxWkFqOHRLUHVaZ1NJVzZNYUNYOEpiTExLOVpWSTZjNjdMWi9TdnlkdzNN?= =?utf-8?B?RU5qSXdRV3YwYVBVeXJkS3F4eEhTTExnUSt0NnAvdUI4OHNpdmtFVEE3Y0lI?= =?utf-8?B?NFlaNUJIYko0VERWd1RBd1dXT2lJOXIzMGNyY01iWjFGOHk3V3lRTUdCbjhl?= =?utf-8?B?TVFZVHg5ZXlHZ2htNWIwM3FBZis1WHFPYkYzNEtteit0Q2wwUWRDTXMzVWxU?= =?utf-8?B?OERnaE5xTjdWZUVTeWpUbVFOSENVM0w0VDNXTjhKNFJxZStlSUMxejhZTW5k?= =?utf-8?B?d2lKQlp2ZkgwYlpFMmZicDAxd2lsNkR5Q1pUWm9WUUpVSVF1eWYyU0lya081?= =?utf-8?B?SXdjd2QrTWhoNXNVMzFjWEdiWkxVclJ3UHpmTzNUSWo1NjN1M2J4NHlpNzF5?= =?utf-8?B?MHN5b0d3c3dNQTZQN2lVOTlWMEp6U0todHEyU3doOGdnNW9JM3BHSURYNlh2?= =?utf-8?B?b1g3WDBGMWI1bHY4dzlNZkhuSUdxdDlEMmtwbzhmcUxpNXQvOVZ5cHU1Smd5?= =?utf-8?B?OWdidXVRbVpIREFWTnVCVjQ0bDhMTCtmZU4xamY1NzNHMHpRUTdsQU1tS08w?= =?utf-8?B?SVpKaktUYkI2V2R2Z1J4YWRRRGJ1enVCdlpaRDUyNmtGUG9ZZlEyOFlBRmxJ?= =?utf-8?B?UmtSdkFCVHZPRG5TR1IyWEhFbitLbVBpL2dpSU12NjF2K3Qya0xhYkg3c0Uy?= =?utf-8?B?c0pVSHBqL3Q5WENNT0srYmxReGJFRjU0S0VJRC9WUEh2clEwL0IwU1ZMUmpN?= =?utf-8?B?NkY3SjlhdE52TEttN1daY213amtOcG8xRS9NdXpOTFY5RnB0c1RLYVBBUSs0?= =?utf-8?B?OTdhMHZrdzVBZjIxVEV3U2NneVJqVkpXeEU4NVlCb1BRakk1c2tZRTNTRXN3?= =?utf-8?B?cTRjcGVUSkRuUFhyYmR6SzBoZGxudndRSXB4MVdQZENzaElsbGgrRzl3Q21T?= =?utf-8?B?dHZsSUNRV3Y3eEhXOE1xY1FDbWZXd2syNGgvZjVSVDF6U1dYUm13M0hISEhW?= =?utf-8?B?a1hJdFl2MmN2OU1ER0pRY0dBVXMxbndrc0RwTG55TGZQNVpQUkZjR01NcFN3?= =?utf-8?B?MmlrUW8wbE1McnhYeUljRmlFYVJZT1EwVFQ5NnlmL3ZkNDl4MkpKbEtYdE1o?= =?utf-8?B?VDc3UnNLSVh6TUxLaWtVQnhPbmRna1VvN3dVcjN0Zk84ZEsrcGM2bGZVbDR6?= =?utf-8?B?OUNHbVB4SU1rQ0UrQzA1WlltUVdSUms4NVpHMitVNm81UDd5aHIyMnFkUE5t?= =?utf-8?B?WVExM1ZDdHVmRHd3K1RsSnJ2Smh1MzNyYW5xRTUwYndWOUJMdlFTdmpkeU9j?= =?utf-8?B?RjZKVUl5NWRxV0NSM1ROaTZEZjl4U0R4UEk4SFF4OVJsa1d4b2NBMEp6MS84?= =?utf-8?B?R2FrWnpMVVI2dXpLWnprNHZtdUsvNXc2bDQrNzhueWpkRklBTzhmQ2hNSTlW?= =?utf-8?B?djVCc0wyVGJWWnhKaWVtUXFMcGNmMWNFZEVmajhNdlVxbnlHZlcydDgvWXhs?= =?utf-8?B?ais4K2NQOVI0MWhub3hxcVRWTkh2QkRhTk0rY2xaRUNQblBXK0pWSUZTZzdi?= =?utf-8?B?OXI2Sk9ZOGwvaTdKeFlQakFYNkJSZmxqVmZkb1FQUklGQkM0L1R4Wit1OTRB?= =?utf-8?B?WGphVitUNXk5K01KZ3QxQldFUVBkQ2ZsTzlGTE0vNitZYnVQeW5ubWhjeHEr?= =?utf-8?B?RmtpcUFaMkVpS2NVL1RMTytnRTJFa3lJd2swWDBHdXhEVVMwL1EvelFEWVdS?= =?utf-8?Q?rrhs=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(19092799006)(376014)(366016)(1800799024)(786006); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?WGdOWUIxS1dpcnNRQVFhMXlNSnhPTHIwUDhOa0hLSmdkdm10dXFlNWpUR3du?= =?utf-8?B?aGptZXJtRXUveCtxUENsM2RQQmZoUlF6OVlUdnZ0ZkpYaHNZUW55dDV6QlRC?= =?utf-8?B?RVpWTlZQTUtLbmVPZGM5aXNTZStMZUJZN0liTTZiNFJWeHl1T0tCYWxxMDM4?= =?utf-8?B?dUdVTExweFZZbng4N1NXcUFLZHJJeTdXbUxpek9wK2RWTWUwNTNwMVdQbm45?= =?utf-8?B?dkNPUHFRWkhIMjJaTzZZZFViYjBOTVhGUkoyZzFHMktXL3krdHpEM0g2elp0?= =?utf-8?B?aWEzdUErdSsyMXRVbCtycEY1eEYwZnFHK2xPTmx2a0Y0ejNnL0Q5UmVIdkRl?= =?utf-8?B?RnQyYTIxTk9oTmhRQW80L0RaclM4K2NxZGJWL3VBcFNqcVYzN0lrcldiblRj?= =?utf-8?B?T0Z0aW56VDdiQnlnaHBxSkFqaUNjWUR3cllyRFlTMWZpbkdLSDlLNUw5OTRT?= =?utf-8?B?dU9LVUpaVlFZcnR2cDFyTE40Nys0cHF3clpac29SU1JHa2o4d3lMcDlwbE9i?= =?utf-8?B?OVRQUGVudFZzMGcrdUJneFlPdHRkUDAyN0lCT0tmMFRncW5UL2ZTbEZwQ0wz?= =?utf-8?B?aFRER0FPVzY0OHRXRThoUmR2d2ZFL1N1OTBnUVpJQzZMcDlwVUcyQ1Z1SnJq?= =?utf-8?B?VVcxeVVXZHRKeE9oR095NEZPRmNsdUc4Tm1NcldaSC93L0VoTkZ5c2lKQ3o5?= =?utf-8?B?c0JFa3NEOHBuSlpEbHYxUzRXY21uaWVJWXZlc2JKek50UXB3NHE3SExyeDVs?= =?utf-8?B?a2Q2aWh0Z0tvYWpYMmdyalFHOUROZENBdWozQ0YreHhlZWtzWGdQTjQ5Uzh6?= =?utf-8?B?SGUvVXV2MDRGSEJZQWZsSll0d2FiazUzZk1RSUdhWUhVazEwUkNHcnRjNGFn?= =?utf-8?B?eUpBZVh0K2R0d1phVEVNZmZrOHg0VkNPTFFQeGdUdGtscTBseTZuajZTaUxC?= =?utf-8?B?L3pNT1ZlbXZTbnljMlRaQW9NNmVSOUtYdWdMK1krVm0rSjBDOGp6angza2Qx?= =?utf-8?B?aGZ6M08xTExIZWVmRWlRTEdkZURLVWlTUEdiTGg0WkwrTlcxRzl4dFI4VEgr?= =?utf-8?B?dmJZMG1BODU2ci9OdzR3UHhPeU41Y0d3MDIyY0lObXVTVllqMVBSWVdjd0wr?= =?utf-8?B?SXZSVHoxcktTNUd0ZEErVHFFQjlwSE8zUFdyMGRiQTJJNDA4VC85YmIybWd0?= =?utf-8?B?TkY3WjhiQ3VxQmFwanpJVWlzcjMzWU13VEdEWEdVbDlQWExuRmlyNzNxbFhM?= =?utf-8?B?RVBXQXdmWEQrRnZHd1pGVnkrMyt6MFh6WGJINGZ6SS9EY09PcW94VEZLWVVU?= =?utf-8?B?am94Y1ZFbENZayt2cC9aVC9hVGxNVlllOXhpVmZXQ1dwVkNnd0owdGgraFdu?= =?utf-8?B?a3pHQTJmZkh1dHQyTGJFc2tQYUZ4UzdxUUllTXQva3Q3SGNNekcxQlNnYWx3?= =?utf-8?B?clByNmFSdzh4RXVOODJvcHNOaFRFc3RRQnJJemtwdUdEWFFPejRDeTBFYzJL?= =?utf-8?B?VklPeitVOUxkSHJmNlBGbTRSRU9DNUJzcnZISVFQRHQ0czRlMEZlSzg1cXFr?= =?utf-8?B?bWtFYzc5VDNQeUdxYU4vcVFZL2NUN28yQkZJa0JYK0dqWHI3VzJxVXM5a0pq?= =?utf-8?B?K0FoTHhGZXdBK3BSZmF6bjFPUlQ5bHl2MlFxbG1IRjIzQ3d4dkhPKy9jUmpS?= =?utf-8?B?RWJrdDlYWUEyNGNqeDFtRmRzNlZHTW1IYTdRMjUxeGdDM0RoMDl3enN1aE05?= =?utf-8?B?Q2ZWejAyQU80ZlR1RzM2YnlQbFVzUHovcUdTVHJucUp6UkRJY0NyY1F0akpu?= =?utf-8?B?eUQ1TlJIVFJ6Q1JzVis5ZnhnYkh1eGVUM0tSM1o3MEFVNE9UTWpYNGp2MDcx?= =?utf-8?B?WGU0M2lXVFBrc1IzS2FEbmJvajZHOG1aWjJKaTVoeUZqOWF5a1RNQWVnajdl?= =?utf-8?B?Y0RZRWNSY0dRVnFwWXJ0eW42Umh4RXdSKzlDMXBuL1FNNlFWMldFRGVNUHd2?= =?utf-8?B?OUtNZnJDRGYzcS9nc0ZFTUFsSjFuNHA4OUdDT1JmcXo3SzFreUVpTDljaHpQ?= =?utf-8?B?WHB0U1ZWMWN0aDJSQ2ZMZEtXNDBQWWJlRkpuK0R3RUpieXNHbjc5NXFnWWkv?= =?utf-8?B?eWF1WFpLVURmd2M0eFdnYTI4R2p2RSs2aGZ0RmM1bkVlbUdURkNqQXRwNWZM?= =?utf-8?B?VTliOVVjaENPejVZMEhGTU8zVit1eHp3YWViVVZKZ2pJVkY1MWdsUVZ3RGZ4?= =?utf-8?B?clZyUG1GNGkyOW5zR0pmd1RZeTU0azZZdG51VndaNGJsR2gyUVUwTVh5WGt3?= =?utf-8?B?N1Rma0R6T08ydDB2ZHJ3dkxPTWx1WXVxdmZ1amRkQ2EvWVExcUprT0t5MkFL?= =?utf-8?Q?VKpy2iDkUrdxz+Dc=3D?= X-OriginatorOrg: epfl.ch X-MS-Exchange-CrossTenant-Network-Message-Id: 20785857-668e-48d7-2d15-08de58386222 X-MS-Exchange-CrossTenant-AuthSource: ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jan 2026 15:27:12.2290 (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: ubIHTS9NVS8vYwyPt3RQajNEOmqjrgUPlHnyoGSeCQb1E6GYqpnrT5YcbrAQuLaS7JPkQ62oVVPf+T6V6XDLZRbSdKEcYxp4jAGbUsAh85c= X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZR1PPFBC9E76CBE 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 (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: 1768922890612154100 Content-Type: text/plain; charset="utf-8" This commit tests the readonly feature for registers exposed via the plugin API introduced earlier in the patch series. Signed-off-by: Florian Hofhammer --- tests/tcg/plugins/meson.build | 2 +- tests/tcg/plugins/registers.c | 71 +++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 tests/tcg/plugins/registers.c diff --git a/tests/tcg/plugins/meson.build b/tests/tcg/plugins/meson.build index 561584159e..52831a75d4 100644 --- a/tests/tcg/plugins/meson.build +++ b/tests/tcg/plugins/meson.build @@ -1,6 +1,6 @@ t =3D [] if get_option('plugins') - foreach i : ['bb', 'discons', 'empty', 'inline', 'insn', 'mem', 'reset',= 'syscall', 'patch'] + foreach i : ['bb', 'discons', 'empty', 'inline', 'insn', 'mem', 'reset',= 'syscall', 'patch', 'registers'] if host_os =3D=3D 'windows' t +=3D shared_module(i, files(i + '.c') + '../../../contrib/plugins/= win32_linker.c', include_directories: '../../../include/qemu', diff --git a/tests/tcg/plugins/registers.c b/tests/tcg/plugins/registers.c new file mode 100644 index 0000000000..b738971551 --- /dev/null +++ b/tests/tcg/plugins/registers.c @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2026, Florian Hofhammer + * + * License: GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ +#include "glib.h" +#include +#include +#include +#include +#include +#include + +#include + +QEMU_PLUGIN_EXPORT int qemu_plugin_version =3D QEMU_PLUGIN_VERSION; + +/* + * This callback is called when a vCPU is initialized. It tests whether we + * successfully read from a register and write value back to it. It also t= ests + * that read-only registers cannot be written to, i.e., we can read a read= -only + * register but writing to it fails. + */ +static void vcpu_init_cb(qemu_plugin_id_t id, unsigned int vcpu_index) +{ + g_autoptr(GArray) regs =3D qemu_plugin_get_registers(); + g_autoptr(GByteArray) buf =3D g_byte_array_sized_new(0); + int sz =3D 0; + + /* Make sure we can read and write an arbitrary register */ + qemu_plugin_reg_descriptor *reg_desc =3D &g_array_index(regs, + qemu_plugin_reg_descriptor, 0); + g_assert(reg_desc->is_readonly =3D=3D false); + sz =3D qemu_plugin_read_register(reg_desc->handle, buf); + g_assert(sz > 0); + g_assert(sz =3D=3D buf->len); + sz =3D qemu_plugin_write_register(reg_desc->handle, buf); + g_assert(sz > 0); + g_assert(sz =3D=3D buf->len); + + /* + * Reset the buffer and find a read-only register. On each architectur= e, at + * least the PC should be read-only because it's only supposed to be + * modified via the qemu_plugin_set_pc() function. + */ + g_byte_array_set_size(buf, 0); + 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) { + sz =3D qemu_plugin_read_register(reg_desc->handle, buf); + g_assert(sz > 0); + g_assert(sz =3D=3D buf->len); + break; + } else { + reg_desc =3D NULL; + } + } + /* Make sure there is a read-only register and we cannot write to it */ + g_assert(reg_desc !=3D NULL); + sz =3D qemu_plugin_write_register(reg_desc->handle, buf); + g_assert(sz =3D=3D -1); +} + +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.52.0