From nobody Sun Apr 5 13:12:32 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=1772705241; cv=pass; d=zohomail.com; s=zohoarc; b=nGPVsZZp4jfY/nzgJL0l6FoW4k+txLWRmGmhvdXBV8OpxakJS84XxZsIOve6/1OT5ZBoEYfDe50i2HM2mu6yonUbJQmvWkabwmc3phJhWt0rzepJxl5mpqJhHBi7TjySEE2t6eTWyaG9YtJ1n2L2C/nRXvBBJFUtdxYJNdwxi+U= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772705241; 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=4Z/Lm0lXSmSM8Lyn6vk8UcCxEKVqA3qhgQe+ZedD6oA=; b=BpOu/JGV+yafZKkZ1OjK5y4Hozfx7OcfVB0dfRB4w5GtfBM+JRAWyHfEgYsTBdC6vRw2G9MKm7vgGhktRyZaAbQ4BwrNqWsmrIeUvtvvZ9MUrKAOkcK/s+/XCITa7ghG0QGv6oKew2NqeNGRT805GimpOfhP5ETMHp1KHArRmt0= 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 17727052416351.2863906247977184; Thu, 5 Mar 2026 02:07:21 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vy5bf-00045C-NG; Thu, 05 Mar 2026 05:06:59 -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 1vy5bd-00044R-Ry for qemu-devel@nongnu.org; Thu, 05 Mar 2026 05:06:58 -0500 Received: from mail-switzerlandnorthazlp170120005.outbound.protection.outlook.com ([2a01:111:f403:c213::5] helo=ZR1P278CU001.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 1vy5bb-0007ST-5Y for qemu-devel@nongnu.org; Thu, 05 Mar 2026 05:06:57 -0500 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) by GV0P278MB2042.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:70::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9678.18; Thu, 5 Mar 2026 10:06:43 +0000 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::80ea:3d03:40bf:998c]) by ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::80ea:3d03:40bf:998c%6]) with mapi id 15.20.9678.016; Thu, 5 Mar 2026 10:06:43 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=iVov+nEbBXXpeILjYfhFBgeWRquXMhmuQASIAjkEMzkd2GAaTwGhpJGE+wrwDJTU1WSkpCVaz6JncwlT0xRXexu5rsl/bYvzVmlf+abtsKkncklb73CYkVgW1DikRDFYbh/kQioF1HgvqNrMcmI4OHwiiymotx1aQ0Xv1/0H3EKSDbT83Mh53d2lAkaxqxH2csqa9kWJzr1fQlw/muVsdsaTEgzO73sITA6vae4Nwu0soqyKsL34lcyfE1fc37we2pwRYgC9zy2KwSyAfmJuY2J+4SgWNAT7JzMeCwmkT+34EdBuaQg2r4niRBIYDQj4uWALenZfWIoakvmq0URbVg== 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=4Z/Lm0lXSmSM8Lyn6vk8UcCxEKVqA3qhgQe+ZedD6oA=; b=wfIoLr/IdwX/FwcoI8c7T9A1Wb1QmzOADTgy9izwhVnCEsvj7RR+Xd8g7Z3OqdcqVE5jCrHPJznZuKX+FON5hAiUJ9LwiQu79/Ox9tQS2oMJGOXBK0hhoFRWK9idNRUnZ7WN1JbFcx63nou5PwO4tc8LiNIW+v66XVFumi/Uk3HkudOObxxAvZAkaPbnKP5NRztk4JtBSAFXZBNP6EHbcfoPR30gBlDauWRv8DNE78Ix1nvQqrKFihshOzKluSywnvvLNQB8WUAsScd9eCmUaDzVfuUfCEQ6uvRg2oTxQ4cHYn3YbWvtQ3N7hQ9E+BvNugk4t4ZW8I+yz91siTJAFA== 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=4Z/Lm0lXSmSM8Lyn6vk8UcCxEKVqA3qhgQe+ZedD6oA=; b=laohhRHJCyQcFrVGX+vspukCTfOyhJhIvikNhhbzLK572DabfnODg9PiAjhVpYehsAonshmVwWGtvPMV3GDy5qgFsgPUNS4q+4hP2nklqqbNUlvIOIwGX1ghAX2+ydikEm1zx0KFkrilCWOtWR6ooXsmOaVKsJwVO8SYiR83E1g= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epfl.ch; From: Florian Hofhammer To: qemu-devel@nongnu.org Cc: Florian Hofhammer , Pierrick Bouvier Subject: [PATCH v7 1/8] plugins/core: clamp syscall arguments if target is 32-bit Date: Thu, 5 Mar 2026 11:05:59 +0100 Message-ID: <20260305-setpc-v5-v7-1-4c3adba52403@epfl.ch> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260305-setpc-v5-v7-0-4c3adba52403@epfl.ch> References: <20260305-setpc-v5-v7-0-4c3adba52403@epfl.ch> Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2067; i=florian.hofhammer@epfl.ch; h=from:subject:message-id; bh=VjBcjTaSiR+5eQjRoownJVqdRgCW89gCG5AYIewcoAk=; b=owEBbQKS/ZANAwAKAZbrJ7oxX8d8AcsmYgBpqVTB9QqSpePdLdrCJQOf2ITVIDXWok8Sxgaro /6O6raGfdqJAjMEAAEKAB0WIQSoIHw/Sr677ZtN+EmW6ye6MV/HfAUCaalUwQAKCRCW6ye6MV/H fDBND/4l3wcStQdbOVHce9C7jk7+7ah7C8raWqfzTezN/F6SX3b8V6KeWxKEIjln8FONwEdp2V9 cnd5bIWC7dN+ZFIxx/i4qi7IVqvA+fyBghMFfUB2tGfuEJqFWcBZESPunKe3NbPrTEGWkT9YCdC zGIinOVXlNrPXW7g03nvrYcL7y8RtNTIXEgmSviHz3XqbNAZGsAcu0wWiQVLyn4pohgZKjEGTK0 kDrUYqkoqeCQLYqZLL5k2DY/do0NR9vtCfOq7TrSNh0OGfxEqApGfKoq/j9HqVSiTnuKH/83s+3 6KZFmNrlzwE7lqt5xLj1qrQeiG+JLmAau+XiJ2c2R71D/ThwTEyTphZ4HUNgNfIje3OSpkL+EUw 5YQCuNsq8NipY7bf3FRPa8hXm5uf/cIHDWyFuOeQYub6nDkzLY0n7RZQc9J+KyzOlX4AjeDOqvq zTen9C5iJNxCPkgf5moQ+vLPZUe3fM8tzeL4lN0Bp4onQDJDaJD5dzHYQs/HyRK+1z1N4DhkYvC g55QtWqQZkYPy2Bkpq33a9+mwJRZBGSUQmCQx7gOwPr1EynMbv6oOKsPDnhCXxDcYGNCz23VTG/ MdUC59ngEOKOus2rCnyd4yzCCgBpxGMJXe+aYjzQ70Z/21sRFdoJhXn6YFvJEhm6eqSKvKt9EhE KT/pZzulJYKwVzQ== X-Developer-Key: i=florian.hofhammer@epfl.ch; a=openpgp; fpr=A8207C3F4ABEBBED9B4DF84996EB27BA315FC77C Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: GV0P278CA0090.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:2b::23) To ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: ZRH2PFAD84B9AF9:EE_|GV0P278MB2042:EE_ X-MS-Office365-Filtering-Correlation-Id: 8e2b6f6b-505a-4f61-f683-08de7a9ee705 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|786006|376014|366016|19092799006|1800799024; X-Microsoft-Antispam-Message-Info: MZ7e2C2kl835j3RwaSjeHVtHeVprHe+CsUfKXDCGhYeooFAESiPL/GyCFCCjdQfdXJdu9DR1MURQLkp2cL2zs5UVMg1QN7sacG3Yo31DXOjHB+JI8N2U9uEmyWVPhEhuDS0VanTx+DFYZuC7RbzioUkDdboHZzAhk5IyXmFLvj01EAqMCo0XJ6kumyfS5VDkO7S5zsRYqcRwWIMKdNkQfdnpqB4Uti7QAzZfBc0JsSyk22TlADVpZ2y2ljlFNDfWpCgVyVlXn71o56DM4yjl+S8AICTYHeM+Dg8FgXpa4lObicbGzcyWtIpDP9LcX0d6Bqpal2w7kRw6wzNEJtgJoHQ1pYc80cdo8arkKzw9s7cEWqua499qcUQbso3oz9dH//4afPdk4Tf53wwYxMbDKtFjMLvJwmH1V1sgoLFrrSbU/Glh3CmpmwZQBzJ6DD8bSstHA9eNZmEklgmyY15t+Qubq98Fm37fkmzXCDScqAvAHjSA3zWdrC6rEFEBZPHm9GqyCAbjBObkRhRQoi1TmA+N1DHmhS57Os9JzcZ/e2LdcYuQh79yDX1dDY2SDPkaP97nR/xRZISG01IDOZ+KdTwG5IRsSust1fABePzHs+/N5530HM0Xuj9iUYMApSDvJI4coEUxhRUPZ/DtAdToaGwpUD7W5/OlMWu9nIyoazfJYEmRxcE2r0Gs3zZO+Oe1L2QkshKTEQA+lyyR96zL5Hws5MGz8/xRTsN7nMtJw2E= 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)(786006)(376014)(366016)(19092799006)(1800799024); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?eUdGNFBRVkhYREVycmhPckVaTVJRb3l2UlZGYWk5d2lIWTZQZk44Tnh2K09y?= =?utf-8?B?SWFhWmo1enpQaTR2TytUdXc4aXp1VEFGZERFMzBHOStiakdBaGluUFZ1bjJa?= =?utf-8?B?Q1IxOVQ3ek05L1BTc3d2ZlZld1RCQVVYekc3SDZ0UUlhQjZ4UG1yOENjaG9P?= =?utf-8?B?eDFQTkpGU2xCUnE3NFFIaHV0VTVkcCtZQllnZHBDSlF5Tk40UHI0djdWWm1J?= =?utf-8?B?MDc4TXdwNmY1cXlDVFlWcnR5OGMxcXkzRG9laHZ0ZEZjWTU1Z3ZHTzhQbTk2?= =?utf-8?B?SGlZbmVPcHFnM3p3cGlXUVo4Q1ZHVml3eG5VZFlQV3FveENtQWxWM0dJWmNW?= =?utf-8?B?cE1PR1dlSG1pOFB6Z1FTWjZMeGlBWnNZOVcvSW4zQStockdSZk45OTVRblAr?= =?utf-8?B?amMxcDZkU1B2T3VtTU56RjhwckphR0xtL2d4eGVlOUFHcDN0Q3M4QzFPT0Fj?= =?utf-8?B?dVFIRTdtSXFneUhBOFBXOFFIeUtTYjZiWEdFWHpMdmREQ2FucE5LRUJsdzNJ?= =?utf-8?B?MFh1ME5aVEN1c0k0U1RSL2sxMmlWNURzY2NTSTRnYXV2Wmw4TjdJdnhEeVFq?= =?utf-8?B?RndEZVB5TFRFSHltdndwdUNKanBvT0RZWi9hekQrOC8vR0V6MndKbmJadi9H?= =?utf-8?B?MUd3NUhoOGgwVkR3dFVjWXlPOFNqTDBLT3JrNS9vUGRlUThvN2xPaFIrZGk1?= =?utf-8?B?dWJ0cnMrR2FubjZSbEFPYzdlZFJRYjFwVVhPNG4yUG8ybUtFbzFoaGVyeHRu?= =?utf-8?B?anJ1NTdrejRrN0ZvamFpdWxSWG80UFU4T1ZLRHUrMmZvZVY1ZHlFSlZYY1V6?= =?utf-8?B?S1dqY28zM2kyOVpiYzl0dW9OMnJ2dm0wRnFvNUNYdnVlYkxWOXRxemhwNS9h?= =?utf-8?B?djduRXdmQ0VuSmFxZU1pQzduWkxEUGphRVZ1V2xBV3NnRjk3VUpFSTZiR1BT?= =?utf-8?B?UWJKWDdnNkkvdmFYSTEzVWY1ei9DZkcvVjYxZWkyMVdsL2F2STNGQnFzdlJS?= =?utf-8?B?bEEvVlJ2S3l4Q1A2dm9WQnFzNnFTK25WbmxYaWhiaEU0RHMwUVNOa2Nld290?= =?utf-8?B?VkRHVW5hZEVXb2NWeHJ2cVBrTzNrY3ZObVhXWi9nZUFOTWt0QUNYRmsrbU1L?= =?utf-8?B?OW1XSFAvTCszbkpjRVg0eGZ3R0l3OXl4S0RiVlV4Z3NDNFdHZ2FZVzdhN0pk?= =?utf-8?B?SU1MdVIyTG9XTTkyUkxFT3lXNzd4b3NaL0dVMmJrS1hTVi9OOUU0TWRYSW1P?= =?utf-8?B?anR6N0RJYms0WGxra3V4dlJlTGVHYmNPY3FIdXBGN0V0RlRsWi9lMEJGYldM?= =?utf-8?B?eVN0WThha3Q4QXFqS2ZrNTNFYTh2QUNyMVE1dzZnajhuYWZhZUJOYmVwWGlY?= =?utf-8?B?K1o4OHg1bFMxbFVudUdGSVE1VytlcEhWYll3UmlZTElDeHJCNGdoelovNHlY?= =?utf-8?B?VDFwcHdXazBhYms0Mmx6VWhiV3RCSjZsRmFUT1BINVhrcnFISElESE9PczRT?= =?utf-8?B?WDFwVUVGVGtIanU0UUwvSWJ6RjNvSDBiNnNKL0ZURDFPZ0VqNVhaWUg0MVVJ?= =?utf-8?B?QjJJZmNEK0pJUHo4SG5mWXZVSURSRkNTdXo5WkI4MmQ0c0t0bkEwTjB0dmxw?= =?utf-8?B?a1pONmNRV1ExcjArV2YzbWdJTVFORjYxQ25lcngwVlkyNVJEdFUxZU4vbTdt?= =?utf-8?B?MUIvaW1oUE5aejIwdzBuQVFjOVM0bGVyQXVOWmxoOGh5TDJLL2NrcGVFNGlK?= =?utf-8?B?ZUo3aGhmaTRxQlc4TlJRbWYwQjNqbGh6eXJmbXl4dmxRZUlhdlR3VXkvQzgv?= =?utf-8?B?OUhSY2ZhOXFTUFdNZjdXaFZtS2k4Q2gvZjRTWGk3bmlwZmxieU9OeHZnYnFt?= =?utf-8?B?VTRheG90cUpZYVYzaWpOcC9qRHhESmthTlZuNkE3Y05qa0tpNEtmMXQwSkN1?= =?utf-8?B?Z1FzdU9COHAxZlBEZE4wZUdJYWFqemJUbC9OMGRHcFpxdVBFMTQzZkJ3Zkdx?= =?utf-8?B?OW5yV2Z5NnV2cHlQeEJjdG5jeXN2VzQ3bmlxaHBCb2lrNHZOUXhMamZsUGFj?= =?utf-8?B?aTNoRU5qM0I5dVNWMkNQV20vek1VWnRCdGdheVRtZzVlbUJCOUltcTVkajJy?= =?utf-8?B?MEpYM2JXOU50cGFwcXFoYmMvNHpsMWJidzBVZHBYbk5zakNRYU5tTzV0Z2Mr?= =?utf-8?B?bmxqQStlc2ZDMVBESGJPbG1IVVdrU3hpSjlYeXk1TXExQ2tnOXEvcGhydzVQ?= =?utf-8?B?RVI0b0dTK2hwSll6cE1udlJLWStTNU5VZGhxRmkydmZheDZVanRoYStVcm9P?= =?utf-8?B?UU9GQVVINDlOaXhCMHhxZ1NFWmFSY0d2RXBFZXErV1JTaUptODQyWlMvMldH?= =?utf-8?Q?4ThC/18hVsIIL7EM=3D?= X-OriginatorOrg: epfl.ch X-MS-Exchange-CrossTenant-Network-Message-Id: 8e2b6f6b-505a-4f61-f683-08de7a9ee705 X-MS-Exchange-CrossTenant-AuthSource: ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Mar 2026 10:06:43.3749 (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: ZTpJs5Usj28D8cEM1h15dIja3WWEWFCLp5Su4R3AHF2mdDn4hA8+ryUA+XBVAHJMiStXhCxVolItJDMHrpe/Z7E+aaeiHYcWQq28TVihE3c= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV0P278MB2042 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:c213::5; envelope-from=florian.hofhammer@epfl.ch; helo=ZR1P278CU001.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @epfl.ch) X-ZM-MESSAGEID: 1772705244641154100 From: Pierrick Bouvier Syscall arguments are abi_long in user code, and plugin syscall interface works with uint64_t only. According to C integer promotion rules, the value is sign extended before becoming unsigned, thus setting high bits when only 32-bit lower ones should have a significant value. As a result, we need to clamp values we receive from user-code accordingly. Signed-off-by: Pierrick Bouvier Reviewed-by: Alex Benn=C3=A9e --- plugins/core.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/plugins/core.c b/plugins/core.c index 42fd986593..d6173422e9 100644 --- a/plugins/core.c +++ b/plugins/core.c @@ -513,6 +513,23 @@ void qemu_plugin_tb_trans_cb(CPUState *cpu, struct qem= u_plugin_tb *tb) } } =20 +static void clamp_syscall_arguments(uint64_t *a1, uint64_t *a2, uint64_t *= a3, + uint64_t *a4, uint64_t *a5, uint64_t *= a6, + uint64_t *a7, uint64_t *a8) +{ + if (target_long_bits() =3D=3D 32) { + const uint64_t mask =3D UINT32_MAX; + *a1 &=3D mask; + *a2 &=3D mask; + *a3 &=3D mask; + *a4 &=3D mask; + *a5 &=3D mask; + *a6 &=3D mask; + *a7 &=3D mask; + *a8 &=3D mask; + } +} + /* * Disable CFI checks. * The callback function has been loaded from an external library so we do= not @@ -531,6 +548,8 @@ qemu_plugin_vcpu_syscall(CPUState *cpu, int64_t num, ui= nt64_t a1, uint64_t a2, return; } =20 + clamp_syscall_arguments(&a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8); + QLIST_FOREACH_SAFE_RCU(cb, &plugin.cb_lists[ev], entry, next) { qemu_plugin_vcpu_syscall_cb_t func =3D cb->f.vcpu_syscall; =20 @@ -584,6 +603,8 @@ qemu_plugin_vcpu_syscall_filter(CPUState *cpu, int64_t = num, uint64_t a1, return false; } =20 + clamp_syscall_arguments(&a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8); + qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_RW_REGS); =20 QLIST_FOREACH_SAFE_RCU(cb, &plugin.cb_lists[ev], entry, next) { --=20 2.53.0 From nobody Sun Apr 5 13:12:32 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=1772705293; cv=pass; d=zohomail.com; s=zohoarc; b=aTmCp2T+L4F5BCHDaFp9u6CWspyLGbjBtWHdnaZaIwZ4o4+AqRDoPWVVIszxMKGPfFz4PyEk7kSYoKHOfSF3N2KUXkycQKZRPIabCjDQQpN2Xb7YE+Ci6lv4SVMjJ1xtgbB3pDcxUzPHiUrd/cD717hM0laJdg2OizCJYC96SMs= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772705293; 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=3rgF02aPcOgFgWyEtNUEf+OGAwc25BqNpTWy5ZMPlc4=; b=OMzM8JyyDe4SmfS7SyMn3RIZ6mqgz86s79PZ8KEOHwhS3NzXzRS3a1q8N46L0tn6Vk4gvxB4DnLfK0ZaVB+HPrBUrmsDlSUpHWrQn08Yr+dl5Lpg48nEzXbQz4SusL8baR8p9sY+5VdV2hY8/o6fWgG+HsHn2NXenAVPcxVHPZs= 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 1772705293730478.99674683842454; Thu, 5 Mar 2026 02:08:13 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vy5bj-00046U-PZ; Thu, 05 Mar 2026 05:07:03 -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 1vy5bg-00045T-CY for qemu-devel@nongnu.org; Thu, 05 Mar 2026 05:07:00 -0500 Received: from mail-switzerlandnorthazlp170120005.outbound.protection.outlook.com ([2a01:111:f403:c213::5] helo=ZR1P278CU001.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 1vy5be-0007ST-B5 for qemu-devel@nongnu.org; Thu, 05 Mar 2026 05:07:00 -0500 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) by GV0P278MB2042.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:70::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9678.18; Thu, 5 Mar 2026 10:06:44 +0000 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::80ea:3d03:40bf:998c]) by ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::80ea:3d03:40bf:998c%6]) with mapi id 15.20.9678.016; Thu, 5 Mar 2026 10:06:44 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fAqxaXNDFG2ZJTOH6U4JZ8iwh6/1vpF64c150gQIJ/3tjU9R7orQX4UTy4HKeuhE8IacE4jmWEpuirdKTZRT1taQ/OtE4zLWGNleciMMhN+hwOxCI6ovqmTCC35SsdSQDmqLZvogdd3BuIr1uQ8lmJ5cW/e242O8r7ReSlcYkcNgJ3zi/ko9aJ1hgj1QjZ/eVTvqnKu4gn/KSQIJ6vphVbpVG0gTfunDCQGu2rNIczXILXAYkVisODqYEzyHr03F0r86c2hxL9JZJvzPcXQnvBV2A9AkJ1xyj1ZzdNZaVBdnqBRs33CToKyPQu0IQ62+chUks14VEQERDZidyVGyPg== 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=3rgF02aPcOgFgWyEtNUEf+OGAwc25BqNpTWy5ZMPlc4=; b=hFe6CLRZCPWg7eBVZhAkOL8pYF2BSUIA2m1xeH+IH9Odeb9jT02QjH/JEX6suDA+WFalFnKWgVLK67fwF9WnifAXJ9T+MHx5pTouwkjNmPC9rOGig97k1F8DXQ/RBueG4VMbR2MFy2VzQJHA/Eh//a+2FZ9l6HrmSLn/MgogPI+/mruiNTeWx04xvWzFtQEKtt5A9KrsE/6W59THsl2+af02Y7nfmtHiXKXuDtB2qHUfPW1JuQHTkL+Vh6Vq7gS83NkPtQqJt5MtFzzBQvGe33BH2koHq1titQ885vkXAZs8616P71BpZDAAe2Djwsx0VdRkZHA5rAXhab3dHaV0kg== 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=3rgF02aPcOgFgWyEtNUEf+OGAwc25BqNpTWy5ZMPlc4=; b=AetyohnNXgct1WI9Bi1RF91Qv4hUBY7AwDyweY7dxH4dkYhgyaMOKfal9gY+oxFmFZTI9O23vVXLml0tEQqZK0s2z17B6bnh82u4S936tJrv5AMsfM2jfB6S9tN8Ma8VmjeT54aS2o+v05EvOuKDMCLmKuBpXHAjvEpLatQefPw= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epfl.ch; From: Florian Hofhammer To: qemu-devel@nongnu.org Cc: Florian Hofhammer , =?utf-8?q?Alex_Benn=C3=A9e?= , Pierrick Bouvier Subject: [PATCH v7 2/8] plugins: add flag to specify whether PC is rw Date: Thu, 5 Mar 2026 11:06:00 +0100 Message-ID: <20260305-setpc-v5-v7-2-4c3adba52403@epfl.ch> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260305-setpc-v5-v7-0-4c3adba52403@epfl.ch> References: <20260305-setpc-v5-v7-0-4c3adba52403@epfl.ch> Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=7845; i=florian.hofhammer@epfl.ch; h=from:subject:message-id; bh=gR1nD4fZa4Q1U6q61h6IyFuviAbSW5Sj0Xj6vOf4uJg=; b=owEBbQKS/ZANAwAKAZbrJ7oxX8d8AcsmYgBpqVTC6tGDooxBSlLohabe/8n9Nw3pd7QjyvVEn eoQxHvU3OOJAjMEAAEKAB0WIQSoIHw/Sr677ZtN+EmW6ye6MV/HfAUCaalUwgAKCRCW6ye6MV/H fIhkD/9TfcyIxb4cdI4KICDvcDx2J07Z5l7mtsxRg8YNxKOx4lYfCZ/VVUThUut6AMtHL1NuDCp U5iHB3A4eojtt8+2eJCUTVwnLnYXrqVfWLLa08VUiyMNdulhWArThTd01GJU9DR3j6sZIQc5Lvb QMpGQW4NL5dpj2R1JA6gbDryCzvjxSfzwBfrvXxKBH/UCbt7OdbOnNoSbDgoUMv1fIEYzBHSBXn EmFJ2S1hJT/qQiofvq57LBLJjZbLyxs17q0eeNfwMOCFLw6GPisLGGH8NomaQh/+7XLA6oZjqR9 gQnA304Iw+x/SwMjlZvc9LJEYW5tz3wHYlw6UZIm1XSdsoCYxYXNR2wrWUNMwErnmZAtUU399ok uv9PNKK/IXlfaICHPo47QmMLGrPsxsdxcgHHOK0czrnxavu0LN8HiAhNiKvT62hcYmR/p0HLrfV Dcx0dlnKt4AkQGpCiRk8c42oZI6+pqdnmPx7EUdaSzeQQUWNw6RJrQ/0tgADsVli3bll6cE2ysM FPtRitofaQrKRhuVc/rkdoHNSXSOH7VUaT56xe7ed0jHBliLHDNsWMJmlAGYmrl7+zSrG52h/7P BaAxtmhE2tUsvettzSyRMzg4zQVlWgihwYvfrZpEOIz2pMCZM88qXMYY7zQ5GT6dTyLXUwARUJN hQ5DniI7ZlRd79A== X-Developer-Key: i=florian.hofhammer@epfl.ch; a=openpgp; fpr=A8207C3F4ABEBBED9B4DF84996EB27BA315FC77C Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: GV0P278CA0090.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:2b::23) To ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: ZRH2PFAD84B9AF9:EE_|GV0P278MB2042:EE_ X-MS-Office365-Filtering-Correlation-Id: 4f35548f-9d90-4f3f-a02b-08de7a9ee733 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|786006|376014|366016|19092799006|1800799024; X-Microsoft-Antispam-Message-Info: H5mKHhwMoi7x2a2NmDin8UEJWI6ly8A68hzPgyz8ht4lCSXRcbanL0edcwc0QnJKnP7yuShnWtk0eBgnPM3fmRIg4qV7KYjdGDw0H0YFKCBZKGIxv1AAuQdbmq5npbU7J8TkwDtiu1D6eTARr0Kz4CwarLBq1WPYQHBS/vRInDUTqE9eKj8g+m3T3NLhCJ11RMSKE9N6Ro/Cw6XymqxNKPBXMQSfx0y9sZjodQXkC5QVxIHX0fdFt7Gb5Kn5GqhffshPLT6TjsFn6JhCPG3vysfLD8EePwAoUh0QEc6e+RU+fGTGo23PT5Yw+fP3hJufZ+1BqqhXMQ7PUEWfEFUHkjrlruju1eNiSKPfqbCXgKEY51S53eZJNe/Dy0k2eDLdukM9E9LQIQacmofZ2cP0DRrtJ2WGpMUvnGexMj+wSslV8pBPmDpJMnBBz61hyaWobleUSEY1DOmNPpg8om0UKbImSytcjdTSVqw9z7IMvqmTBVrD1Zk5fcjCcA2vToRmcRfv0TIEht/oOngvWK4EKIU/+T+SMzSTEC5inQge2wkV7vCk1w+HWU1Vv9osuZYOPEXnncpn0b8TgmsNbq2gSvr1nKXmtXTgCJhQsaP/raLtzm9AAknZnu1eElquxu7AtVtopyrNLXWm6w7QE2lzlStAv5LKk+/vttYmnVr1DpvEM6b06p6U9kXXmzmSkcWuflp1BEl8kdPgB+G+ZTSNNlhKh9rtZW2ZPq0aghsNw44= 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)(786006)(376014)(366016)(19092799006)(1800799024); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?a3ZHVEptY0hGVzJITDdMc1dZVEF1N1RuWVpaMCt5MWhXU1I2Q3h5UDlIWkpG?= =?utf-8?B?a084N0ZhNHhZczJ6ckluTWtFTVlDTURORXhWRkQvRlVBMzlQa1NraEJqTnlC?= =?utf-8?B?bmI1NVZoT0dwM1E1QVNRRzhSdWtrd2F2VGdsdzg3bEJnR1dxTXNGSG8zMHZS?= =?utf-8?B?eHcwNERCRjM0aElQTU9BbzBjS0ZzejZxRXRvOWNxTDRyYmF5Q2ZwdTRISjlG?= =?utf-8?B?enltZ3Z0ZmFxbXZobGV2VnVCM3o4MkR2UWlRWlEwZmNkU0NFYlFBMTg4UkM0?= =?utf-8?B?d0cwZ2tEdjRGdjhWOC9VR2tWREg0cExmY1YxOVplOGhoN1JnaDlLcDVhWEdS?= =?utf-8?B?U1ArRDFjZ3Q4R3I0K0tSUTRCS1JSdXQwMVRHUXhlRTJWTjFjNWhVRkY2Wk9t?= =?utf-8?B?UFdZUC9IOGxQU3l1OXR3eER0bmlQTGxHbmM3OVFSVEdCTmxNOEpoN25tWTRq?= =?utf-8?B?V0JOTUcyRXRvTnZrU1F0WStBeEVZcUxJVUsxRWcwMytGUGFZS1lqQmNxd0tx?= =?utf-8?B?MmhXanFTbEt3Qi9oTzdvSU9yZmtPSW1iSWd5WUNrTzN1Tm5QWlJDZzNHVFhp?= =?utf-8?B?K3dyQ1EyaUR1WmlaVUFzeWswSmlQakhpQklveTdWUVpWWUx6RjRTR25IaVBs?= =?utf-8?B?ZUdPQjNEUnl5THplK0ZSWGIwdWlmSnhIdFRnb3RSM0U0NG9CbGxSQVZjN0NO?= =?utf-8?B?Y05lN1FsdXJvTTFyakxIa2ZOZE93OXE2amxhSXZyNkhQUjYwYmdKTEgzUXpV?= =?utf-8?B?cTl4VTRKb1dvSm1Ma2o1cTJ0Y3ZsdFdmZG5pRC92QkFYby93NVc0OUNaWWZ5?= =?utf-8?B?U21HN1VKL2pmR2treklaL1N2Slh6YkVNU3c1THZaV1VMY2VCZHZLK1JYM3Bv?= =?utf-8?B?cjh4NDhjaXAzc2txSVlzZUZ0ajFJTGpTUGpDejFmQVVVaUJDdVZmUXMxZUZC?= =?utf-8?B?V3Y0ZXZGTUI3UHl3TnZpOStMNCsyQm5sWmZpdFFRdUZ0bHJNSDJ3M3FMSWtp?= =?utf-8?B?NXdRZkczWFl4S0xqMjVZeHM2RmVVTEdoMHg2TE8xUTA2dmVvcmdPa1dGRnUx?= =?utf-8?B?ajJPNHk4MUxiTjVBNnYrSnVRYnN6TlhWY0tTUWF1bXduVCtpN0IvcHJtcXpT?= =?utf-8?B?TFNHQVFDN1liN3NyN2hJNjZCMlBPMHF1Tmw1eVFkeEFwUDFYUnNucW1zY2gx?= =?utf-8?B?bXZ4aVl2U3VhYTI2cDFXVmU3QUVISzlSRFJGZTBaS3Y4QlF3ek85TXkvbm92?= =?utf-8?B?T1VCcmNlQTlGK2NEaUdMbkVic3VBbit0bFNoWDA5N0d6cGNTQk9OdGNsTm8x?= =?utf-8?B?T0lzSmk5S2dWMWNFWTIwK2lXTHA5UngxVitRWEtXR2ZpZStOZ3F4SnFkTjBu?= =?utf-8?B?OUpmVmRBQ1V1MzJXS0V2ZFh4STNwZXRJQjYwajBKQnRZZGxRRnlSMG9VbTB6?= =?utf-8?B?YVZxbFFIRU1JNE12MTcwOUVLT3NrT3lXenRLR2lVZ2s3TWRSUWEvT2RKK0g4?= =?utf-8?B?R0N1bW5MclZKQThuNVVkWU5CVTgzRDArSytBUXphRERFeFNzbWczbkI0RGdP?= =?utf-8?B?SzVjcHM0QURlWndPM1BHTTlqSVhyZkJPVDBwL1hmakxSZ0ZoYS80bnVYaFoy?= =?utf-8?B?cjNKbFU2eEg3aWpSRHZpNnRnWkM2aFF1VE9tLzRwWFp3SGd4MzhXUk1MZmRO?= =?utf-8?B?ZjJ2WTRZMFlIUlZGR1lwQlZZTjE1UDhwYUZveDJQUHFCK1ZzYTVjNG8rUE5w?= =?utf-8?B?bjhXN1JYYWY3L212MC9vcUUxRGhrTTN2K1JGU0dGaDdsQmFhTWw2OXhQZVhZ?= =?utf-8?B?TGZWTUNEL292UFErZDViQUpOZE16NE5YcGd5NHFEbEk0RW54VWhDVnU3Q25B?= =?utf-8?B?dkxER0E4ZkM3YytuODdqNzFJL3FFWGlvUklCQ0RYQ2hwR1VVbk54ZytBV1Y3?= =?utf-8?B?WWFWTmh4eWtPcFp3d2YySzhIWW56bm4wYnR0ZlRJb0hteHlYcnZiaXpIZVZQ?= =?utf-8?B?QnF0Q2FiK2RoOFlLQWVOUUVPWTFSTzNxcVpNOFdiQlEwYUtUZnpMbU9MSzZJ?= =?utf-8?B?V2t1ZU5MYzR5SjRDb2RESTFRSmlvNHdwL09BY3Iya29FYWE1QTE3eStKM1Bh?= =?utf-8?B?UGtsTVJBTzZTcWdxNDRMeVlwY3p2RU8ySllGdnhXUFY3N0xQVWJyNVV0NkZt?= =?utf-8?B?RStMUEZEcENrbldlbU1PazFPMFQ5R2RrNXlwSkFEV0JEMHZnM3plTjJPNmR6?= =?utf-8?B?L3Q4cmdma2FGWCsreDhTQ2NxSzVndHpuMVEwREt5UE85MnUrcmpCTWRKTm9s?= =?utf-8?B?NHFpWFVrdDRxUE9qb0hJd2RLMmxWcnBWY0cwb3ZMSEZWbC9TT0UxcEJqQ0w4?= =?utf-8?Q?N/WYxAtxW6OvqpEc=3D?= X-OriginatorOrg: epfl.ch X-MS-Exchange-CrossTenant-Network-Message-Id: 4f35548f-9d90-4f3f-a02b-08de7a9ee733 X-MS-Exchange-CrossTenant-AuthSource: ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Mar 2026 10:06:43.6824 (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: RrVneQpJH9+qdjOG5jVF9ajATV7wJwCKelzDRHFQqy6MMarZGUcIBnhcHW+2y86FqiwT+OVHTIdRuaG8szY8vA37KwwvPcu7vH20Q2JXZ40= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV0P278MB2042 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:c213::5; envelope-from=florian.hofhammer@epfl.ch; helo=ZR1P278CU001.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @epfl.ch) X-ZM-MESSAGEID: 1772705295154154100 In addition to the flags specifying whether general-purpose registers are read-write (rw) during a plugin callback, we add an additional flag explicitly stating whether the PC is writable. This is in preparation of a patch that allows to explicitly set the PC to divert control flow from within a plugin callback, which is currently not possible. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Pierrick Bouvier Signed-off-by: Florian Hofhammer --- include/plugins/qemu-plugin.h | 3 +++ plugins/api.c | 4 +++- plugins/core.c | 29 ++++++++++++++++------------- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/include/plugins/qemu-plugin.h b/include/plugins/qemu-plugin.h index 17a834dca9..a6ec8e275d 100644 --- a/include/plugins/qemu-plugin.h +++ b/include/plugins/qemu-plugin.h @@ -325,11 +325,14 @@ typedef struct { * @QEMU_PLUGIN_CB_NO_REGS: callback does not access the CPU's regs * @QEMU_PLUGIN_CB_R_REGS: callback reads the CPU's regs * @QEMU_PLUGIN_CB_RW_REGS: callback reads and writes the CPU's regs + * @QEMU_PLUGIN_CB_RW_REGS_PC: callback reads and writes the CPU's + * regs and updates the PC */ enum qemu_plugin_cb_flags { QEMU_PLUGIN_CB_NO_REGS, QEMU_PLUGIN_CB_R_REGS, QEMU_PLUGIN_CB_RW_REGS, + QEMU_PLUGIN_CB_RW_REGS_PC, }; =20 enum qemu_plugin_mem_rw { diff --git a/plugins/api.c b/plugins/api.c index 04ca7da7f1..32eb086300 100644 --- a/plugins/api.c +++ b/plugins/api.c @@ -458,7 +458,9 @@ bool qemu_plugin_write_register(struct qemu_plugin_regi= ster *reg, { g_assert(current_cpu); =20 - if (buf->len =3D=3D 0 || qemu_plugin_get_cb_flags() !=3D QEMU_PLUGIN_C= B_RW_REGS) { + if (buf->len =3D=3D 0 || + (qemu_plugin_get_cb_flags() !=3D QEMU_PLUGIN_CB_RW_REGS && + qemu_plugin_get_cb_flags() !=3D QEMU_PLUGIN_CB_RW_REGS_PC)) { return false; } =20 diff --git a/plugins/core.c b/plugins/core.c index d6173422e9..2324bbffa3 100644 --- a/plugins/core.c +++ b/plugins/core.c @@ -119,7 +119,7 @@ static void plugin_vcpu_cb__discon(CPUState *cpu, struct qemu_plugin_cb *cb, *next; uint64_t to =3D cpu->cc->get_pc(cpu); =20 - qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_RW_REGS); + qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_RW_REGS_PC); if (cpu->cpu_index < plugin.num_vcpus) { /* iterate safely; plugins might uninstall themselves at any time = */ QLIST_FOREACH_SAFE_RCU(cb, &plugin.cb_lists[ev], entry, next) { @@ -395,15 +395,16 @@ void plugin_register_dyn_cb__udata(GArray **arr, enum qemu_plugin_cb_flags flags, void *udata) { - static TCGHelperInfo info[3] =3D { + static TCGHelperInfo info[4] =3D { [QEMU_PLUGIN_CB_NO_REGS].flags =3D TCG_CALL_NO_RWG, [QEMU_PLUGIN_CB_R_REGS].flags =3D TCG_CALL_NO_WG, [QEMU_PLUGIN_CB_RW_REGS].flags =3D 0, + [QEMU_PLUGIN_CB_RW_REGS_PC].flags =3D 0, /* * Match qemu_plugin_vcpu_udata_cb_t: * void (*)(uint32_t, void *) */ - [0 ... 2].typemask =3D (dh_typemask(void, 0) | + [0 ... 3].typemask =3D (dh_typemask(void, 0) | dh_typemask(i32, 1) | dh_typemask(ptr, 2)) }; @@ -425,15 +426,16 @@ void plugin_register_dyn_cond_cb__udata(GArray **arr, uint64_t imm, void *udata) { - static TCGHelperInfo info[3] =3D { + static TCGHelperInfo info[4] =3D { [QEMU_PLUGIN_CB_NO_REGS].flags =3D TCG_CALL_NO_RWG, [QEMU_PLUGIN_CB_R_REGS].flags =3D TCG_CALL_NO_WG, [QEMU_PLUGIN_CB_RW_REGS].flags =3D 0, + [QEMU_PLUGIN_CB_RW_REGS_PC].flags =3D 0, /* * Match qemu_plugin_vcpu_udata_cb_t: * void (*)(uint32_t, void *) */ - [0 ... 2].typemask =3D (dh_typemask(void, 0) | + [0 ... 3].typemask =3D (dh_typemask(void, 0) | dh_typemask(i32, 1) | dh_typemask(ptr, 2)) }; @@ -464,15 +466,16 @@ void plugin_register_vcpu_mem_cb(GArray **arr, !__builtin_types_compatible_p(qemu_plugin_meminfo_t, uint32_t) && !__builtin_types_compatible_p(qemu_plugin_meminfo_t, int32_t)); =20 - static TCGHelperInfo info[3] =3D { + static TCGHelperInfo info[4] =3D { [QEMU_PLUGIN_CB_NO_REGS].flags =3D TCG_CALL_NO_RWG, [QEMU_PLUGIN_CB_R_REGS].flags =3D TCG_CALL_NO_WG, [QEMU_PLUGIN_CB_RW_REGS].flags =3D 0, + [QEMU_PLUGIN_CB_RW_REGS_PC].flags =3D 0, /* * Match qemu_plugin_vcpu_mem_cb_t: * void (*)(uint32_t, qemu_plugin_meminfo_t, uint64_t, void *) */ - [0 ... 2].typemask =3D + [0 ... 3].typemask =3D (dh_typemask(void, 0) | dh_typemask(i32, 1) | (__builtin_types_compatible_p(qemu_plugin_meminfo_t, uint32_t) @@ -553,7 +556,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); } @@ -577,7 +580,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); } @@ -605,7 +608,7 @@ qemu_plugin_vcpu_syscall_filter(CPUState *cpu, int64_t = num, uint64_t a1, =20 clamp_syscall_arguments(&a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8); =20 - qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_RW_REGS); + qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_RW_REGS_PC); =20 QLIST_FOREACH_SAFE_RCU(cb, &plugin.cb_lists[ev], entry, next) { qemu_plugin_vcpu_syscall_filter_cb_t func =3D cb->f.vcpu_syscall_f= ilter; @@ -626,7 +629,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); } @@ -635,7 +638,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); } @@ -906,6 +909,6 @@ enum qemu_plugin_cb_flags tcg_call_to_qemu_plugin_cb_fl= ags(int flags) } else if (flags & TCG_CALL_NO_WG) { return QEMU_PLUGIN_CB_R_REGS; } else { - return QEMU_PLUGIN_CB_RW_REGS; + return QEMU_PLUGIN_CB_RW_REGS_PC; } } --=20 2.53.0 From nobody Sun Apr 5 13:12:32 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=1772705294; cv=pass; d=zohomail.com; s=zohoarc; b=GEJ8kpvdS9AFplepKj54NjtyMM+R3+/PFQMSQhbTOwQu5DRUG/ISUwC0Nluj2m+kc+OWpwG6emGcnRHichiwii3B3xxbqZhb2i2lhNNlNMcYR1iF/OTOyfCWkgw0MfOXhxzdj3y1EdzEUka6rZsHMM6NwsKBbeoi2ZA4HxBlYb8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772705294; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=k1vwXZ9hFVcJT0K9OL3rLvJFqkjHRaZcLn/tcHEc7oo=; b=CXsbLrETBce0BVj25N9gJfermKdf80qPrhu4WZq1k+59RfLkWYO2AB4Ki5NF76cd0SUtmvy3ER9Pj+VFDzDKVcuvmkM4p7Ucd9/O8xlmxKNyo4OqhqVfhNx6g8KNjwsW/MrSWm4Chrc6rC/eSWgFHRaoorPzbInD1SUChgNPlc4= 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 1772705294315954.1259974860303; Thu, 5 Mar 2026 02:08:14 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vy5bl-000470-7q; Thu, 05 Mar 2026 05:07:05 -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 1vy5bj-00046K-C5 for qemu-devel@nongnu.org; Thu, 05 Mar 2026 05:07:03 -0500 Received: from mail-switzerlandnorthazlp170120005.outbound.protection.outlook.com ([2a01:111:f403:c213::5] helo=ZR1P278CU001.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 1vy5bh-0007ST-9N for qemu-devel@nongnu.org; Thu, 05 Mar 2026 05:07:03 -0500 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) by GV0P278MB2042.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:70::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9678.18; Thu, 5 Mar 2026 10:06:44 +0000 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::80ea:3d03:40bf:998c]) by ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::80ea:3d03:40bf:998c%6]) with mapi id 15.20.9678.016; Thu, 5 Mar 2026 10:06:44 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=P2R3/03ZlJS+j9Sn7pP4d17egEEToMJlBxJ3o1YsQO6zmQku3wZpZZHzDYXOKG11GgiIDAYuFsjpmg34KVxtCUf3FFxoggYMjCx3V4xotWEcVZjBLxiI8tyrvwgAZOmiTJ3jA3KPSE8Ri5pHHxKE8id0l2j7Hv/FHVRY7ha2HcWL/UbnNJFyiJXk7Jd5XW5mg4z5q8Ok+vwMrcZSs1mnmDXu/W7LpsC5nU2Xwohz3W90JRWCJ5t0OvjnaLb9yJHzWgkb/wFw0PJUXbawn6f3zGRjgiMh9GB6GF7NcHk4eLTwDIHyLkqW/W6O0X9f2HZbjpBFHgcZaAxK75y7aHoHJw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=k1vwXZ9hFVcJT0K9OL3rLvJFqkjHRaZcLn/tcHEc7oo=; b=BORDbVwZAEiN21u3gkkt+dXp+XMgTyKub6WMtHanNLNk7K96un9KsdUfCCbAZ0IRZJeyTylIXAaB1griuS3UCVTkhpif7kDAO8TgZIWEbjYMd0RtApj4I2mDOYx3W75i1oHNt4Jj/qNoILRma/8BT/sNHb7K5Uu+CSXpq8JyYGENQuCIF0ikFda2NC6iXtxCmg6ZWY9t1JpZEB8I6cgGEFx3f4JFx/72ycAvX/jg7poz1wQ6L4sa/OlagOA1jX2PPu4SgOkbzhh2jxMQ6gqsyR7EqXkrjfUdT5gy1DDoygD9M7+YuRO04nliXGPHPeM6dRB40HAPDZVq/QLp03IdCA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epfl.ch; dmarc=pass action=none header.from=epfl.ch; dkim=pass header.d=epfl.ch; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epfl.ch; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=k1vwXZ9hFVcJT0K9OL3rLvJFqkjHRaZcLn/tcHEc7oo=; b=nuyeBGh29ZQYqKaxGO1U9TOjw20vAAVLmOJcRgUfgha4AVYlv/ltTmrNqR24HIjdMbCDmqUxZRjEd7GfwAB5U0pkHtzimxjuesRDdxxyWweDq6xplM/wGcwjrmYCPInfCMVREYCJNuT4kn/Dp1+lqAbToWSlqSZOCTiKFcmaDV8= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epfl.ch; From: Florian Hofhammer To: qemu-devel@nongnu.org Cc: Florian Hofhammer , Warner Losh , Pierrick Bouvier , =?utf-8?q?Alex_Benn=C3=A9e?= Subject: [PATCH v7 3/8] linux-user: make syscall emulation interruptible Date: Thu, 5 Mar 2026 11:06:01 +0100 Message-ID: <20260305-setpc-v5-v7-3-4c3adba52403@epfl.ch> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260305-setpc-v5-v7-0-4c3adba52403@epfl.ch> References: <20260305-setpc-v5-v7-0-4c3adba52403@epfl.ch> Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=14808; i=florian.hofhammer@epfl.ch; h=from:subject:message-id; bh=0zN94RKNMfqTrsNhvTmcSTkaX36dEL1iEvxYUsSMkRg=; b=owEBbQKS/ZANAwAKAZbrJ7oxX8d8AcsmYgBpqVTESNU1ZzzjGYE/NB3daILXVma9/nDSvs/dT IzihnphD8uJAjMEAAEKAB0WIQSoIHw/Sr677ZtN+EmW6ye6MV/HfAUCaalUxAAKCRCW6ye6MV/H fCYaD/sHrkbA+fTCVKhDLEs/SMgL5BNiGWGSi+0BxsL820MFHc3plnPnShlzXVIdkYesksb8wkz bVmtJH9kwopdgoycFJYjo47ynyO2/ozL0XLGXwXAWYvoevf3HHuVzeL8QD0pvi3+jp2P4dNHrmB sCdo4+Y755K1C97iK+8KJDpHFdr8S8j3EgQaa4mwaHizWWz/QYGzuQHYXMmw1p0bKlfm5eiE0vM VB0gZZYemWxBo3nQEGXS92Z7NVlieepkC8ZdgOlhXvqcTiFzFa3hHo/scZVWDBzORoNfbh46uEd bmTBljHd40LtcvT+VIbY1ZDa+W9V8TtuCwbf3PJNPTqTv6qcZuWI0m7ZGgzNOdVQXvJhP6BeOhQ xJY4NZOhca8r8LkrqieAi1MNYq1fZmkvrynauxk6XGpCyePEQEQ+TIPg+DNFifbJLGPA6xLMsEx 3QQMQWL3e/ifAqZ0WZO3xmZmwkYEEHtl1otZ2vMMMHyh2pHFbsJEt3UxYKLu375pcfZu6ehLmdP lggyuGz7rQ+thyqQYy9LvOOFRr8dBKBY4AfIhFbJLNdHY3OVDolgQEw3zUusc61ml5DOwQoqxB6 8brr+afRCBI8fXEclil8Cfl6yoolUpmSBP63+qoq1SLXmiCXHmZDus6ljdrElU0V8srz0um2Rw1 2Ohq21R+ickG56A== X-Developer-Key: i=florian.hofhammer@epfl.ch; a=openpgp; fpr=A8207C3F4ABEBBED9B4DF84996EB27BA315FC77C Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: GV0P278CA0090.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:2b::23) To ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: ZRH2PFAD84B9AF9:EE_|GV0P278MB2042:EE_ X-MS-Office365-Filtering-Correlation-Id: 5aadbf98-1847-4557-3b31-08de7a9ee763 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|786006|376014|366016|19092799006|1800799024; X-Microsoft-Antispam-Message-Info: MiX7nzx2pNXoLBsS6FHvJmpuqU8wQwoSgtjNXRPNXhk5U7UOrpje6fcBbGONQYoOwtk3jAljgHYzPp01/JqzHZN37ablKI4fNyTOrEL/dcIMgIJltvwiUQF4P1rw7L6jbf8wnfnv1DdD7DrXwQ313Wus1MO3xiVhbj/2uDRu905UMgFyhlZLpnNAizIt4mT9LR95QI4P0z8KM1FdDq1uQknCXD11Hxm7aowj0KyF/3zPf/DT20770LK1cOrXun/eUW6W122NTdQAbBOCeh1Ys9AIDAnmAAckKTRDR8QjQeHzABQBiYnhzdf4ZGACsfzxpH6D+DnHrT4h36geuhFCoXV0TgWKf0mxNdJazPabPPNf1wHZ7r7FzT5Q3nE53U8Mq5uNuqicvjrdESYPmgcUJYVf5ftsmTOFgc8z7MoCVICLTtqdXzBVtLjIKEzEU7BpaZ6Xnarlt4jYl9RhVKE3sEwglZhm2rmMd3ch0T6AP6kUr4zbf6Apw+6BxqZtwi5geYq87BZZC3c1kbx6SJOKcxrmMGzyZfmXWvd1EGcm7ByCYLsHQdHEneyLZduODLx3XNiJSIb+qagp5Oo+l0o3OHAom+ZxVu7FCes6HiQLN0FEjSdJ33IPyP1ylO9iaBEsuS0SFVP9pd1E9Tt0fxBhiPXG6+1EC0W58Hmq5DzhqZF7sFnjNBbwwRSnuzUFIaO6+CxnHxDvR89xBw483iCTnkmHGD8ErCwbHWPovQvlXPs= 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)(786006)(376014)(366016)(19092799006)(1800799024); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZFUzY2haK0o2SVdyTlF2Zm1MZlIzbkYxNHl0aFRhMHRuQ0J1SHdLYmljaU9r?= =?utf-8?B?Vko5dElBOHMvU2JXSTZMS2cyT1VxS0RBZ0dZU1lacE9TcWRhdUFOdms4UCtB?= =?utf-8?B?ZVVOWHhyOVdGMk9McS9neVFJRzVQaWJ1ckxJTllNYkg5cW84eGsvem9UWWdz?= =?utf-8?B?bHBGckh2OVprcm01T0M5ZTVBQ0pRZy9ma3RrQ1lBL0ZqK0tWVTltZDVvc0RT?= =?utf-8?B?bkVEbGZ3d2V3cXJiZTUvaGQrQjZoNm1VVHF1L28xbGRYeTdRck9nK2cwMHBp?= =?utf-8?B?bmhDZXhydFgwOFVMdGtNMHY3Ym94cVppSXk1emxCUGFKK0xnNlZHTEJmSUtC?= =?utf-8?B?NUdSdlhKR2t2RkdJYzB6N1laSG1mOG1uUVlWU052bDlvRk94TE9lMDQxLzRB?= =?utf-8?B?QzlWSmtxZ1lCdGFrN242Q2RONVp4WDZPU3dJUFQ0cnFHQjEyRitkYnUvVjV2?= =?utf-8?B?VHBlNmpTYUhQRjJjMlRpNGpKSTgzc3JaNTFZZ0ljbWMwZlFkSzFaNmNtU2dM?= =?utf-8?B?Y1VwWjBNOGpFOGhnbWhDRU5uLzFhMjFIUmMyV0h6RDd1Q0lBYWdrTFBuV2pj?= =?utf-8?B?aStPdHRjVE9TRC9IbDhiMDJPVERzTnJkMnU3TURjYitzekhhdGZZbEpSQWdS?= =?utf-8?B?SE9YNWdXdUhJTWZudURzdUk1S0VudmNIYjZseUx0SVBlY0dZY3owcjI2aisz?= =?utf-8?B?TUZqRXBTbE1HTmRNNUhnZ3h5Uk9QWGwwMnlGK3dVaUNEYlJnc1h3UkU3SEVY?= =?utf-8?B?b2FvVzNhTUFrTEVWV1FNSkNsVHJYYU9ucjUzQXN5dzhMd3JTcG9MeXM1eG5M?= =?utf-8?B?bHJpTTBCY2FBeTNLaERvZC9TdFZlcit1U0pTMFI1YUZZa09laUc3TFpLOTF5?= =?utf-8?B?enJ6SkdqaHNTUVhWTWN6dTFEbDNSQ2xKakllcXpYODU5WFBVaHB5RnR2c3Bi?= =?utf-8?B?U2dTd21GdXBheUFoTEFYWHhzOFJCMmQ2TTlXSjhvRTR6Zy96bDQzM0YwVisv?= =?utf-8?B?dGh2ZHl3YXVLbXFoNjVVVEplckJsaDFFMitkTjMxZFlFVjVNdTV0RXpCQnMw?= =?utf-8?B?dFJ4eVFEV2lmc1NCWW9aeTc3T25QZkNmUVRjRXRYVE5qYlZkVnZnNFJkS0tT?= =?utf-8?B?dXM3WHZYOVlkckR3dFFUMEJibWhKNkQ2bUx5LzByRFRUQUEvYXllQm5ST3pG?= =?utf-8?B?Q0hQWUpPNHNHZHI1VzlRazdmSjlBbWxDUWxmeFkxQy8rSWdTTWZkSGxZTWV1?= =?utf-8?B?UEdtSlRzZFo1NHZCRkIxVXpZM2hBb3p2OFJCTDcyS3h5ZzMrT2l0RHIyK0dO?= =?utf-8?B?aGE2VHB3UitWT3B0Nk82TGpkRjhZM3QyejRsR2loVEU3MkYwbGtLbDRHNzBr?= =?utf-8?B?QzBGcFY2aGkxL1FmbUpnYmJ5NDV2L0QwQTV4Z0NrTi9GcUxLQUFlY1pCU05T?= =?utf-8?B?N2Mwb25XQmZaTmhFM0lBdmN4cnVXZEVCVmVCQ0ZhaU9oa3g4a0wzZUYrYzNC?= =?utf-8?B?bzVCZDh5WW5WNUpGbHRNZ3htQ29yK09mYjRReERSbjhqU3U5ZndHdFBIcTZF?= =?utf-8?B?Z2c3SUZ2Q1ZnMlVKOFlXRUthK0NzemRjNjlkTDIvSjdlOVgyK1FzdmUyZklE?= =?utf-8?B?cGM2a2JyUWE1MEFLNG9sSERUakJad09sS1FJaFI2OS9xd2hubktITWMyMVNC?= =?utf-8?B?Wkk4Nm0yVDMxNk9lODlmdnArM1dxemlqSWpqcVo3aHgwejdRZmo1OUZlNURM?= =?utf-8?B?ekZMeVlDNzViRU5VTUhPeXJLTU1kTjBWN3NmNHgvcXBuOUpjUGt2Z2k4Zjhs?= =?utf-8?B?eFR1MHd3a2tKd1RVdXQ1b1g5Y3UrcnUwSTRaeHRNanlIUFJRZVNCV2ZIWGF0?= =?utf-8?B?Um1MM0x0UXJZRUcwZ1gzMkdGa09sYXBoTEZJZmxmbW9GeVdkSlA0NW51Z0lP?= =?utf-8?B?cEJldnl5VXBSL09uaXQzYnR0KzFGYlhYbXdMcEpTVk81YkRxTkdPQkt4bWpX?= =?utf-8?B?Q0lGM2RQUnZ0OWFpTlhzTGtRazZKTSswMUtnTThIMmhWdTBialpmbEpMU05X?= =?utf-8?B?blZHTnR2NmN5bHVWb0thTDVWM0lKNGxmRjVkTWRNb0poaFI1SlZtTkZUemxl?= =?utf-8?B?MkhNbTRWT1pySlBRT0NCWVVjZlZrcjdyaGZJMmxObWtJMko0NzJsNkllUndi?= =?utf-8?B?OUtLZ2ZjTGN2ZzF2WE1GR2NTRnFKdUNETnRPNWZJazhjcnVOMG5GbWN0ejRR?= =?utf-8?B?elNQQ09PVDZEQ0NMQ2JlOXlOYmFZOTM3ZnJDdUhmQ1VQTmtvVWt6TGZ4clFU?= =?utf-8?B?UDRmR0xOQm92UDVGQ1VkN1B2aWwzbnhyMTJFWDhPNXh6Q2gxMjhQMXl3QldJ?= =?utf-8?Q?AHoLT0xfaiNDNUsM=3D?= X-OriginatorOrg: epfl.ch X-MS-Exchange-CrossTenant-Network-Message-Id: 5aadbf98-1847-4557-3b31-08de7a9ee763 X-MS-Exchange-CrossTenant-AuthSource: ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Mar 2026 10:06:44.0565 (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: EVV19k1vLwY2NKUdhmwcceKjqdIIF6ZEkqfRuYoKu0HuRESDLrdxI8Baot7h104mbE6gkRFh37hN42JAK7HsT5ka6BUvSHR2LKFv8Ku/ujA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV0P278MB2042 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:c213::5; envelope-from=florian.hofhammer@epfl.ch; helo=ZR1P278CU001.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @epfl.ch) X-ZM-MESSAGEID: 1772705296597158500 The syscall emulation code previously wasn't interruptible via cpu_loop_exit(), as this construct relies on a longjmp target that is not live anymore in the syscall handling code. Consequently, longjmp() would operate on a (potentially overwritten) stale jump buffer. This patch adds a= n additional setjmp and the necessary handling around it to make longjmp() (and by proxy cpu_loop_exit() safe to call even within a syscall context. Reviewed-by: Warner Losh Reviewed-by: Pierrick Bouvier Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Florian Hofhammer --- linux-user/aarch64/cpu_loop.c | 2 +- linux-user/alpha/cpu_loop.c | 2 +- linux-user/arm/cpu_loop.c | 2 +- linux-user/hexagon/cpu_loop.c | 2 +- linux-user/hppa/cpu_loop.c | 1 + linux-user/i386/cpu_loop.c | 8 +++++--- linux-user/include/special-errno.h | 8 ++++++++ linux-user/loongarch64/cpu_loop.c | 5 +++-- linux-user/m68k/cpu_loop.c | 2 +- linux-user/microblaze/cpu_loop.c | 2 +- linux-user/mips/cpu_loop.c | 9 ++++++--- linux-user/or1k/cpu_loop.c | 2 +- linux-user/ppc/cpu_loop.c | 10 +++++++--- linux-user/riscv/cpu_loop.c | 2 +- linux-user/s390x/cpu_loop.c | 2 +- linux-user/sh4/cpu_loop.c | 2 +- linux-user/sparc/cpu_loop.c | 4 +++- linux-user/syscall.c | 16 ++++++++++++++++ linux-user/xtensa/cpu_loop.c | 1 + 19 files changed, 60 insertions(+), 22 deletions(-) diff --git a/linux-user/aarch64/cpu_loop.c b/linux-user/aarch64/cpu_loop.c index 7f66a879ea..e7f643d69d 100644 --- a/linux-user/aarch64/cpu_loop.c +++ b/linux-user/aarch64/cpu_loop.c @@ -181,7 +181,7 @@ void cpu_loop(CPUARMState *env) 0, 0); if (ret =3D=3D -QEMU_ERESTARTSYS) { env->pc -=3D 4; - } else if (ret !=3D -QEMU_ESIGRETURN) { + } else if (ret !=3D -QEMU_ESIGRETURN && ret !=3D -QEMU_ESETPC)= { env->xregs[0] =3D ret; } break; diff --git a/linux-user/alpha/cpu_loop.c b/linux-user/alpha/cpu_loop.c index f93597c400..bef196b1f5 100644 --- a/linux-user/alpha/cpu_loop.c +++ b/linux-user/alpha/cpu_loop.c @@ -82,7 +82,7 @@ void cpu_loop(CPUAlphaState *env) env->pc -=3D 4; break; } - if (sysret =3D=3D -QEMU_ESIGRETURN) { + if (sysret =3D=3D -QEMU_ESIGRETURN || sysret =3D=3D -QEMU_= ESETPC) { break; } /* Syscall writes 0 to V0 to bypass error check, similar diff --git a/linux-user/arm/cpu_loop.c b/linux-user/arm/cpu_loop.c index 40aefc4c1d..19874f4c72 100644 --- a/linux-user/arm/cpu_loop.c +++ b/linux-user/arm/cpu_loop.c @@ -399,7 +399,7 @@ void cpu_loop(CPUARMState *env) 0, 0); if (ret =3D=3D -QEMU_ERESTARTSYS) { env->regs[15] -=3D env->thumb ? 2 : 4; - } else if (ret !=3D -QEMU_ESIGRETURN) { + } else if (ret !=3D -QEMU_ESIGRETURN && ret !=3D -QEMU= _ESETPC) { env->regs[0] =3D ret; } } diff --git a/linux-user/hexagon/cpu_loop.c b/linux-user/hexagon/cpu_loop.c index 5711055aff..9464246e9e 100644 --- a/linux-user/hexagon/cpu_loop.c +++ b/linux-user/hexagon/cpu_loop.c @@ -56,7 +56,7 @@ void cpu_loop(CPUHexagonState *env) 0, 0); if (ret =3D=3D -QEMU_ERESTARTSYS) { env->gpr[HEX_REG_PC] -=3D 4; - } else if (ret !=3D -QEMU_ESIGRETURN) { + } else if (ret !=3D -QEMU_ESIGRETURN && ret !=3D -QEMU_ESETPC)= { env->gpr[0] =3D ret; } break; diff --git a/linux-user/hppa/cpu_loop.c b/linux-user/hppa/cpu_loop.c index 972e85c487..4b4b663052 100644 --- a/linux-user/hppa/cpu_loop.c +++ b/linux-user/hppa/cpu_loop.c @@ -124,6 +124,7 @@ void cpu_loop(CPUHPPAState *env) break; case -QEMU_ERESTARTSYS: case -QEMU_ESIGRETURN: + case -QEMU_ESETPC: break; } break; diff --git a/linux-user/i386/cpu_loop.c b/linux-user/i386/cpu_loop.c index f3f58576af..fe922fceb5 100644 --- a/linux-user/i386/cpu_loop.c +++ b/linux-user/i386/cpu_loop.c @@ -181,7 +181,9 @@ static void emulate_vsyscall(CPUX86State *env) if (ret =3D=3D -TARGET_EFAULT) { goto sigsegv; } - env->regs[R_EAX] =3D ret; + if (ret !=3D -QEMU_ESETPC) { + env->regs[R_EAX] =3D ret; + } =20 /* Emulate a ret instruction to leave the vsyscall page. */ env->eip =3D caller; @@ -234,7 +236,7 @@ void cpu_loop(CPUX86State *env) 0, 0); if (ret =3D=3D -QEMU_ERESTARTSYS) { env->eip -=3D 2; - } else if (ret !=3D -QEMU_ESIGRETURN) { + } else if (ret !=3D -QEMU_ESIGRETURN && ret !=3D -QEMU_ESETPC)= { env->regs[R_EAX] =3D ret; } break; @@ -253,7 +255,7 @@ void cpu_loop(CPUX86State *env) 0, 0); if (ret =3D=3D -QEMU_ERESTARTSYS) { env->eip -=3D 2; - } else if (ret !=3D -QEMU_ESIGRETURN) { + } else if (ret !=3D -QEMU_ESIGRETURN && ret !=3D -QEMU_ESETPC)= { env->regs[R_EAX] =3D ret; } break; diff --git a/linux-user/include/special-errno.h b/linux-user/include/specia= l-errno.h index 4120455baa..1db757241a 100644 --- a/linux-user/include/special-errno.h +++ b/linux-user/include/special-errno.h @@ -29,4 +29,12 @@ */ #define QEMU_ESIGRETURN 513 =20 +/* + * This is returned after a plugin has used the qemu_plugin_set_pc API, to + * indicate that the plugin deliberately changed the PC and potentially + * modified the register values. The main loop should not touch the guest + * registers for this reason. + */ +#define QEMU_ESETPC 514 + #endif /* SPECIAL_ERRNO_H */ diff --git a/linux-user/loongarch64/cpu_loop.c b/linux-user/loongarch64/cpu= _loop.c index 26a5ce3a93..603fcc39c7 100644 --- a/linux-user/loongarch64/cpu_loop.c +++ b/linux-user/loongarch64/cpu_loop.c @@ -44,9 +44,10 @@ void cpu_loop(CPULoongArchState *env) env->pc -=3D 4; break; } - if (ret =3D=3D -QEMU_ESIGRETURN) { + if (ret =3D=3D -QEMU_ESIGRETURN || ret =3D=3D -QEMU_ESETPC) { /* - * Returning from a successful sigreturn syscall. + * Returning from a successful sigreturn syscall or from + * control flow diversion in a plugin callback. * Avoid clobbering register state. */ break; diff --git a/linux-user/m68k/cpu_loop.c b/linux-user/m68k/cpu_loop.c index 2c9f628241..b98ca8ff7b 100644 --- a/linux-user/m68k/cpu_loop.c +++ b/linux-user/m68k/cpu_loop.c @@ -66,7 +66,7 @@ void cpu_loop(CPUM68KState *env) 0, 0); if (ret =3D=3D -QEMU_ERESTARTSYS) { env->pc -=3D 2; - } else if (ret !=3D -QEMU_ESIGRETURN) { + } else if (ret !=3D -QEMU_ESIGRETURN && ret !=3D -QEMU_ESE= TPC) { env->dregs[0] =3D ret; } } diff --git a/linux-user/microblaze/cpu_loop.c b/linux-user/microblaze/cpu_l= oop.c index 78506ab23d..06d92c0b90 100644 --- a/linux-user/microblaze/cpu_loop.c +++ b/linux-user/microblaze/cpu_loop.c @@ -54,7 +54,7 @@ void cpu_loop(CPUMBState *env) if (ret =3D=3D -QEMU_ERESTARTSYS) { /* Wind back to before the syscall. */ env->pc -=3D 4; - } else if (ret !=3D -QEMU_ESIGRETURN) { + } else if (ret !=3D -QEMU_ESIGRETURN && ret !=3D -QEMU_ESETPC)= { env->regs[3] =3D ret; } /* All syscall exits result in guest r14 being equal to the diff --git a/linux-user/mips/cpu_loop.c b/linux-user/mips/cpu_loop.c index 2365de1de1..fa264b27ec 100644 --- a/linux-user/mips/cpu_loop.c +++ b/linux-user/mips/cpu_loop.c @@ -140,9 +140,12 @@ done_syscall: env->active_tc.PC -=3D 4; break; } - if (ret =3D=3D -QEMU_ESIGRETURN) { - /* Returning from a successful sigreturn syscall. - Avoid clobbering register state. */ + if (ret =3D=3D -QEMU_ESIGRETURN || ret =3D=3D -QEMU_ESETPC) { + /* + * Returning from a successful sigreturn syscall or from + * control flow diversion in a plugin callback. + * Avoid clobbering register state. + */ break; } if ((abi_ulong)ret >=3D (abi_ulong)-1133) { diff --git a/linux-user/or1k/cpu_loop.c b/linux-user/or1k/cpu_loop.c index 2167d880d5..e7e9929e6f 100644 --- a/linux-user/or1k/cpu_loop.c +++ b/linux-user/or1k/cpu_loop.c @@ -48,7 +48,7 @@ void cpu_loop(CPUOpenRISCState *env) cpu_get_gpr(env, 8), 0, 0); if (ret =3D=3D -QEMU_ERESTARTSYS) { env->pc -=3D 4; - } else if (ret !=3D -QEMU_ESIGRETURN) { + } else if (ret !=3D -QEMU_ESIGRETURN && ret !=3D -QEMU_ESETPC)= { cpu_set_gpr(env, 11, ret); } break; diff --git a/linux-user/ppc/cpu_loop.c b/linux-user/ppc/cpu_loop.c index b0b0cb14b4..1f9ee20bd0 100644 --- a/linux-user/ppc/cpu_loop.c +++ b/linux-user/ppc/cpu_loop.c @@ -340,9 +340,13 @@ void cpu_loop(CPUPPCState *env) env->nip -=3D 4; break; } - if (ret =3D=3D (target_ulong)(-QEMU_ESIGRETURN)) { - /* Returning from a successful sigreturn syscall. - Avoid corrupting register state. */ + if (ret =3D=3D (target_ulong)(-QEMU_ESIGRETURN) || + ret =3D=3D (target_ulong)(-QEMU_ESETPC)) { + /* + * Returning from a successful sigreturn syscall or from + * control flow diversion in a plugin callback. + * Avoid corrupting register state. + */ break; } if (ret > (target_ulong)(-515)) { diff --git a/linux-user/riscv/cpu_loop.c b/linux-user/riscv/cpu_loop.c index ce542540c2..eecc8d1517 100644 --- a/linux-user/riscv/cpu_loop.c +++ b/linux-user/riscv/cpu_loop.c @@ -65,7 +65,7 @@ void cpu_loop(CPURISCVState *env) } if (ret =3D=3D -QEMU_ERESTARTSYS) { env->pc -=3D 4; - } else if (ret !=3D -QEMU_ESIGRETURN) { + } else if (ret !=3D -QEMU_ESIGRETURN && ret !=3D -QEMU_ESETPC)= { env->gpr[xA0] =3D ret; } if (cs->singlestep_enabled) { diff --git a/linux-user/s390x/cpu_loop.c b/linux-user/s390x/cpu_loop.c index 4929b32e1f..67d2a803fb 100644 --- a/linux-user/s390x/cpu_loop.c +++ b/linux-user/s390x/cpu_loop.c @@ -83,7 +83,7 @@ void cpu_loop(CPUS390XState *env) env->regs[6], env->regs[7], 0, 0); if (ret =3D=3D -QEMU_ERESTARTSYS) { env->psw.addr -=3D env->int_svc_ilen; - } else if (ret !=3D -QEMU_ESIGRETURN) { + } else if (ret !=3D -QEMU_ESIGRETURN && ret !=3D -QEMU_ESETPC)= { env->regs[2] =3D ret; } =20 diff --git a/linux-user/sh4/cpu_loop.c b/linux-user/sh4/cpu_loop.c index 0c9d7e9c46..ee2958d0d9 100644 --- a/linux-user/sh4/cpu_loop.c +++ b/linux-user/sh4/cpu_loop.c @@ -50,7 +50,7 @@ void cpu_loop(CPUSH4State *env) 0, 0); if (ret =3D=3D -QEMU_ERESTARTSYS) { env->pc -=3D 2; - } else if (ret !=3D -QEMU_ESIGRETURN) { + } else if (ret !=3D -QEMU_ESIGRETURN && ret !=3D -QEMU_ESETPC)= { env->gregs[0] =3D ret; } break; diff --git a/linux-user/sparc/cpu_loop.c b/linux-user/sparc/cpu_loop.c index 7391e2add8..ab633eeae3 100644 --- a/linux-user/sparc/cpu_loop.c +++ b/linux-user/sparc/cpu_loop.c @@ -229,7 +229,9 @@ void cpu_loop (CPUSPARCState *env) env->regwptr[2], env->regwptr[3], env->regwptr[4], env->regwptr[5], 0, 0); - if (ret =3D=3D -QEMU_ERESTARTSYS || ret =3D=3D -QEMU_ESIGRETUR= N) { + if (ret =3D=3D -QEMU_ERESTARTSYS || + ret =3D=3D -QEMU_ESIGRETURN || + ret =3D=3D -QEMU_ESETPC) { break; } if ((abi_ulong)ret >=3D (abi_ulong)(-515)) { diff --git a/linux-user/syscall.c b/linux-user/syscall.c index d466d0e32f..99e1ed97d9 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -600,6 +601,9 @@ const char *target_strerror(int err) if (err =3D=3D QEMU_ESIGRETURN) { return "Successful exit from sigreturn"; } + if (err =3D=3D QEMU_ESETPC) { + return "Successfully redirected control flow"; + } =20 return strerror(target_to_host_errno(err)); } @@ -14410,6 +14414,18 @@ abi_long do_syscall(CPUArchState *cpu_env, int num= , abi_long arg1, return -QEMU_ESIGRETURN; } =20 + /* + * Set up a longjmp target here so that we can call cpu_loop_exit to + * redirect control flow back to the main loop even from within + * syscall-related plugin callbacks. + * For other types of callbacks or longjmp call sites, the longjmp tar= get + * is set up in the cpu loop itself but in syscalls the target is not = live + * anymore. + */ + if (unlikely(sigsetjmp(cpu->jmp_env, 0) !=3D 0)) { + return -QEMU_ESETPC; + } + record_syscall_start(cpu, num, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); =20 diff --git a/linux-user/xtensa/cpu_loop.c b/linux-user/xtensa/cpu_loop.c index a0ff10eff8..d2b4ccdfad 100644 --- a/linux-user/xtensa/cpu_loop.c +++ b/linux-user/xtensa/cpu_loop.c @@ -186,6 +186,7 @@ void cpu_loop(CPUXtensaState *env) break; =20 case -QEMU_ESIGRETURN: + case -QEMU_ESETPC: break; } break; --=20 2.53.0 From nobody Sun Apr 5 13:12:32 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=1772705231; cv=pass; d=zohomail.com; s=zohoarc; b=jiy9hgBY/dwMYwZADHWAXljYOQCLvZ62QUwxDdNIH0Fqy1R807VfAb4vKn8mdsqMAcRdTsLRx3jlq2wrkQj3vVmB9RkU9yRnQDDGwFZjoijJzwVn8KEeDGmLEaV/2fgbLgsbYyX8iTqlSf4BFHFjHtDl4Zw/7tiL0vUhK7rBDb4= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772705231; 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=Psp0XI/VXzU5N+CSR50HW4z5F67TYfX8ok8Qs/oKzv4=; b=RMJ6tKxZDS7algTDr7109farYrgEpY5o77Q9ynjGWa+B2vfKzukEIHpmYpH3aWbipUulBYx31uTbVKLm7q6/QqU0hOjpp/lzOyfWx0a/4Xtx5Nmca7W94J8WK1RserpwRq7P/D36WMCm0DHBMJevRB74drBVA4HnHNKR4Z1AwfA= 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 1772705231693349.3120608377292; Thu, 5 Mar 2026 02:07:11 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vy5be-00044O-AA; Thu, 05 Mar 2026 05:06:58 -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 1vy5bY-00043z-4e for qemu-devel@nongnu.org; Thu, 05 Mar 2026 05:06:53 -0500 Received: from mail-switzerlandnorthazlp170120005.outbound.protection.outlook.com ([2a01:111:f403:c213::5] helo=ZR1P278CU001.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 1vy5bU-0007Sn-OJ for qemu-devel@nongnu.org; Thu, 05 Mar 2026 05:06:51 -0500 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) by GV0P278MB0807.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:52::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9678.18; Thu, 5 Mar 2026 10:06:45 +0000 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::80ea:3d03:40bf:998c]) by ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::80ea:3d03:40bf:998c%6]) with mapi id 15.20.9678.016; Thu, 5 Mar 2026 10:06:45 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=JZ0R3gcAj5I5ziLNZ7eeOcQBD1C7R8iGK6QGNr7+bImvdNa1qnXbnPKQnxJCX+hkbb6Up5PGKuLkkPZOelNCcO6RaZ8ju0qYMvw6dEdudSFs/jF8uShSTGae4MbEnAF7NEpGWOtddj1IM514a80Wfi2v87SEoVcwXBlDZPwy37ByxAp97t6TkCls4iPS06P+XWhqMOFjHk2/8WWbsqjpgIzqIagocfSnyBZUEVSG0TSnSlqECrJ7jYzmGaRBvU9mL5P6BPRpLL/n0wfgtF4VdcMNyyMX90Jf48IpbATkBad2H0zoYN5ygE1q8nZweE92nBjSNV7QOlbAgfXf9FfDAA== 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=Psp0XI/VXzU5N+CSR50HW4z5F67TYfX8ok8Qs/oKzv4=; b=GiQvDRlTEJ/9gieduoNlgE//+F3R0yAOjevyOy8+slbGg9V3ZFPERbWSbuSeKgZJrfcnSr+aw7U3IvH4kxXuESJLMqGnTBUx5RwzGOx5fFZ46Yx8c9DepY23BEWTOvHgrvxVweASy56bVAZWdl3CYU9nJZYeLINe384yYpcO0AKFFlH0hQUKc2e0ApqQKpsDgjeD53J9TtF6mrGWlndwZ+tmyoSuHWxLoAvGIyjHgJwdZhY4P9kGZWIOHhGV7cF0wAzjlJjpGtW6fSkg6GIK5uBZ1d9SOTZ6jmcObebXI5YI+xD53me8CJ6EIjkGUfVTWumbVKejR8Qo78y/QZH1BQ== 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=Psp0XI/VXzU5N+CSR50HW4z5F67TYfX8ok8Qs/oKzv4=; b=SINucwnM92vCBayZd8Z6mWblyqhmzkdKstuv2CHiWEGOZjX/ifGfPWFz9TzNYAHzda8ifJ771b+dqqPSwVaTqwSdL5aXuL+ewHlnHdLMZpk4U9fEw0Al42Zvg/Zh4MJPa0Ae8JZPY2ttpCAfaGW588GAz6vjcSRPWivvhsGMD3w= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epfl.ch; From: Florian Hofhammer To: qemu-devel@nongnu.org Cc: Florian Hofhammer , Pierrick Bouvier Subject: [PATCH v7 4/8] plugins: add PC diversion API function Date: Thu, 5 Mar 2026 11:06:02 +0100 Message-ID: <20260305-setpc-v5-v7-4-4c3adba52403@epfl.ch> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260305-setpc-v5-v7-0-4c3adba52403@epfl.ch> References: <20260305-setpc-v5-v7-0-4c3adba52403@epfl.ch> Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3704; i=florian.hofhammer@epfl.ch; h=from:subject:message-id; bh=UVKdS+oRqmqQ4s/cKw91vBecZs1GDBUW8gYjPJ87V0I=; b=owEBbQKS/ZANAwAKAZbrJ7oxX8d8AcsmYgBpqVTGS3MwFakoAyKjmckEUGPXUwFv6jcyf3Gby +ir5ryJr/OJAjMEAAEKAB0WIQSoIHw/Sr677ZtN+EmW6ye6MV/HfAUCaalUxgAKCRCW6ye6MV/H fB/ZD/0RceTAR09LpHGvXIOBrJ/rbI0DekbTCaFRRUjYPQE8IVnZ8315gRPnxlr528tZmootjZA 0scQ9qmoZb4tB6twF+7KQ9LORt7F7MFoQLSmE37cYASK7mvt8x80aE4oDq+kJvMcK7fD7lyKSK/ jXFPvaMd6rFhHIdJE8o60WlKKM38rlGayftZkaqmGhfSIxZWxnYE2pMAE4H8S5qLHlcMHjtLDvV 0GWtZSnGAL6tv6b+XMrBq25asUxgwIP7oSftUUOUT2D1vPh3mr2ZaP7g5DlBpUFdgmqGmC0mCHO eBb4ojUFm6jIeKdjEQ0l4kABtOgnKSr4Rcvhr0r70gWeuhIQy6JhKoRCy/OrdzUM9N20niOgVS0 q2XEntPQfnQTLaNk+2KCVGlMVeJbAx9cqqMBTTmTbOOYy2yXgD1I5Y8fu2kctFivEDRSk3N6hVz qwqLBsaQ/B5wHbYySeIbw+gQ/nvJAfFhZKQ/JeKbqxWnPjKlhdI2W5mIvUf5Pcugh0JXOcBbB4a d8Vc77mHRfbab4F27K44sPEAHeJPo0fDoO3RMMCZwTkTZxHdML1htHTLAjLOCnBQCtsAsnGPwt9 L5mcUvJMbyQkomieQB+DW32t6HzWLtULGtX/TZ7orNufH4UA7uKH5G/2PGxVVzghCvVTdhtS+EQ 5xu4zHvx7CrdOVQ== X-Developer-Key: i=florian.hofhammer@epfl.ch; a=openpgp; fpr=A8207C3F4ABEBBED9B4DF84996EB27BA315FC77C Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: GV0P278CA0090.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:2b::23) To ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: ZRH2PFAD84B9AF9:EE_|GV0P278MB0807:EE_ X-MS-Office365-Filtering-Correlation-Id: 4d340e9b-e46d-4382-7fa5-08de7a9ee799 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|1800799024|366016|786006|19092799006; X-Microsoft-Antispam-Message-Info: 88cLVkmyY1VrLpEMweotbTj+YSTp1ZP0PpLknStKr+VCYC7O5kuI+O3JXa6Zf/nbT8J8xKjlLB1eFkwHOaa1rFODMZ9Q+nw72QI/Hpeae7mEItjz+urxmj9vuRGrtefekKUXa04OlHU5Rci8yAK+vdT8LW/fyRnKmgSiGEesdLHImm6Srn155oXnMMNtwMEgZe77fnxeq5GMTVv0khayJVYi5O7lC+ZsoaTm3VxxZMxhrnR/dqFI3VqrCR/GBtNt4XEjXrFSLpFb8SBixis9xAFoEP32w5sHARNv3mIDghqGlO1sQEq2sj9wox8LVCEPs7v74pqjn1l9/Czz+dAtfle5SerIx+6yaS8IQLMglHtdRuL4VWIvgI5BsJvkuGYh2pozG3m1gkVTn2ZGT5dOCuJo5GNQCxw/a9LGcfgWUHL+VcErbWQHsQETgU/vj8eZGtW1MXOn1XuYtLguVzvTobBRy9Btb+/7KikIA5k/LCUQMREsOyOJvNKZImSs40KQr/FOyKl1d9je8VWQtk1grz4wVS1Jr+j9/83+iK1gBzAC9WyZrC6UHNSdv+3V0XTSj25+2ynYzew8V+lm2hmwYE2Dm1zQBk1FwAlM8TLF/v9caist4ftfY+fe05gZSWp90+1yTLXC/qjhtj/lQ/Mcj8+YqIHa9UpT5sDJrBy47bpHxz0ec5iuO6HYKDP1rlgziGYJk97QyNCdy9ULL3qy0fLJzkp9/xvhAH567wxNNcc= 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)(376014)(1800799024)(366016)(786006)(19092799006); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NTBnSGl2OFJ5bFZoZ0M4NmFIb2NtUTRoZzJPVDZEZGdwQzA1MGtKRUZJeUs5?= =?utf-8?B?N1k3T3VPNUtPK3RLV2JtMzRSSGlGcHBGN0JXR0s1YUJzdEdqeXBNejkvejhz?= =?utf-8?B?TVlrSExGUVI1a0pURjRIUkNvbnhqU3lPWFUxU0VrcjRPeHNlc2ZjQ3M5WTFy?= =?utf-8?B?V29MUE9BS2NQWHRVTHZJOEZNMW1IS2pBMXhmbGZEdGtxbG96Z3gwdmhpQlgz?= =?utf-8?B?UFdjUWNXRGtzMjI1R054OXlpaFZiMnRpNGRxaCtCcFFxUW84RVhVRjJ0cDZR?= =?utf-8?B?ZnMzbllCVStMTE9Sbkk1RU1UbDlzZCtTUlF3RTFXQUpjSXdoZVIrdVpnUGdy?= =?utf-8?B?YXRQUEtablFiclZBMTg5anhrbVpoc0RFdnA0NnBXU3FVUFcxMHhzbXpPZTdL?= =?utf-8?B?VVRkWmladzVsTG9XWFdoc0NiUXRicWw3eFFVdU1NZksxcmNORytMUWRzMkFW?= =?utf-8?B?VWhlUmFxallXdjMwZHFpQThNYk5vQzZKdGFwdWtIQ2JFTnEzTldKN01ZT1JD?= =?utf-8?B?c2tieVB3djh4TGFqVUphNE12QzNpRkhKN2xQOGFKTXk1Q1h4dkgxdnJMMGlL?= =?utf-8?B?aU9pZlRCSjVNY0RiUzBsTWl3NVpBV3FyTHpWOHZVa3lnZmcyUlB2TUdxTS9p?= =?utf-8?B?c3h5VDJpdWNzR0FQSUQ2TTVUb09XRDFBckhKc3Ayci9YT3M0QjVHNnR6UGRQ?= =?utf-8?B?K2xBWHdYV0tTdEdUK2wvN0VFTGhHblNaNHJCT1pnbFl4Q0UrcCt5UVo5cDVV?= =?utf-8?B?UG9pSmIrQllJbjAvR2FRZ2pmbkVEUkVhWXAvd1BobGZSNHRzOExxOWowUFNx?= =?utf-8?B?S1k0a0NGMkZnQUdHWlNuMDJhQ1ByamFmckZqeW1WRWVxMjAxd1ZYZGprOXBy?= =?utf-8?B?Sk1YeXJZdEZ3MEVtNXovOE5vbUxONkFCSDk1YjFsbXJxaURRUWJlL2YycWVl?= =?utf-8?B?RWdiRmdNQUo2dXBqZ1RtQXRVOHEvYWVyT1FmVTJhRC81TVNSZWY0cjJFR3BL?= =?utf-8?B?OE5xUllXRlJoVzhaUXIwZFc5ZHRTcHVGWkNJMTdScnNScmtqU1B0d1ZCVjV6?= =?utf-8?B?di96bjFBbUF1ZHhKRWxsekpUNUttZ2NzMXdoT3l4c0RYcE9ZcUJHbnpFbEFM?= =?utf-8?B?aExSRnFpOXI3bnlPb2lzQjNPdmNFRE5tTGlGRkc2YXp0NnpYOUlMemt5Vm9S?= =?utf-8?B?bWdYNnFpQTZ6WlhYOW92L0kxaGZlNlV3T2pob0ltemUrbllWOW1tNy9DdHpw?= =?utf-8?B?VmcrUWRnNnUyWXNETmF2M2loQitxNThEKzJaZWg5cEZhZUlrMng2eGdTWkdU?= =?utf-8?B?QjU5NjFWQ1VEVVZMN1ZNU1J2eXRqRHYvK0JXTWdPU3R4TmNpVS8xRlE4VzFJ?= =?utf-8?B?R1lBSUcwbWtWRW50K01lc1oxT2JBN3M4bEs3MnVqNUxPc2pFdHNDOWtmdEdr?= =?utf-8?B?dHJNRU5neGp5cnFaMFgzT0RGTDVCUXN0ZmVORHhqQ3VwZlNLdUZJMXpuY1hi?= =?utf-8?B?UE5vaUZjTzgxQ3EyN2J2MjdkQ2xhWG1DbklXZlZPZFZXaFBuQ0d1NHhrQ3hj?= =?utf-8?B?bVdrUmFkVTQ1cUtQcVVya0crd0pSMWhtVEJkZDE0VmVJRDFwNi9icS9Wa2lN?= =?utf-8?B?N0RNMjUrL3FTVTkvMzJOWVFXdmdCREFYOGV3SFYxT05sOGdydm44NFBqakdV?= =?utf-8?B?cGNNMnBMcDRlajFHL1ZWUmh5aGRXVm5rUGREUTFDZ1QxelBaMHJPSW1PWHhn?= =?utf-8?B?UEVldC9US2NoOFV1VGprWG83UnNleS9EYTBweU44N0JYbzhGOGxUZkdFTkpu?= =?utf-8?B?YU85dTlleC9TNVlXZjU5eDVDZXBveUQzcURseTVHVVdWc1JVVndqNUlvVkRX?= =?utf-8?B?eEllZWxpb2I2U3YzTFk1NVBYdzVVMExSbno3eHVKbVBLU2VzNWFQTVlucUxJ?= =?utf-8?B?bHhTc3dxVXRPUDlwYUY2TjhUS0xsWVpLR0thTTd6aGxXNXdNR09hbytwbFFx?= =?utf-8?B?YzY5b0laMXpKMy9JSnFxT3QwaFMxT3grMFI4U2Z5M0loQmRaYmJuN25lN1VG?= =?utf-8?B?NEpaMThWR3FJRTJoeEhvUUlYZlNEMGw3bElBbW4xalZRTGNEVmtPY055Vm9R?= =?utf-8?B?a3o2Zy96WFBiS2xqcHZmSU1rbnF3T0IzcVI2K2xBQk9aNG0yOGlhMTZKZlQ2?= =?utf-8?B?WDJZK084ei9tZmpsNXVXKzhXbnhiOHYrU1U4VzZkQk1MY0MwSElqNGRrVDdp?= =?utf-8?B?c2NxczRwdVdKNzNFc2RDREVrT203eWw0YnB0dE9CQnFtVThzWE51bUxNejVG?= =?utf-8?B?ZjZEZFNDYUFYM05LeGNoa0ZEcEFMTzAxUDIxQmxuZDBacHhHMENFd1ZlY2NG?= =?utf-8?Q?mNUBJ994hEoMvQKE=3D?= X-OriginatorOrg: epfl.ch X-MS-Exchange-CrossTenant-Network-Message-Id: 4d340e9b-e46d-4382-7fa5-08de7a9ee799 X-MS-Exchange-CrossTenant-AuthSource: ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Mar 2026 10:06:44.3505 (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: oSlYMZKweytrGMKdK9zUTcDpgspLfVM0lttFpjNLW3eMcYhSmx9eTqG3KWzJn1DYbqPWL23UzTL1O6jKR9TUOg2mg7RjZ/FFGW8pdoBbzkw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV0P278MB0807 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:c213::5; envelope-from=florian.hofhammer@epfl.ch; helo=ZR1P278CU001.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @epfl.ch) X-ZM-MESSAGEID: 1772705234716154100 This patch adds a plugin API function that allows diverting the program counter during execution. A potential use case for this functionality is to skip over parts of the code, e.g., by hooking into a specific instruction and setting the PC to the next instruction in the callback. Link: https://lists.nongnu.org/archive/html/qemu-devel/2025-08/msg00656.html Reviewed-by: Pierrick Bouvier Signed-off-by: Florian Hofhammer --- include/plugins/qemu-plugin.h | 13 +++++++++++++ plugins/api.c | 11 +++++++++++ scripts/qemu-plugin-symbols.py | 9 +++++++-- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/include/plugins/qemu-plugin.h b/include/plugins/qemu-plugin.h index a6ec8e275d..7b9cd6a971 100644 --- a/include/plugins/qemu-plugin.h +++ b/include/plugins/qemu-plugin.h @@ -76,6 +76,7 @@ typedef uint64_t qemu_plugin_id_t; * * version 6: * - changed return value of qemu_plugin_{read,write}_register from int to= bool + * - added qemu_plugin_set_pc */ =20 extern QEMU_PLUGIN_EXPORT int qemu_plugin_version; @@ -1042,6 +1043,18 @@ QEMU_PLUGIN_API bool qemu_plugin_write_register(struct qemu_plugin_register *handle, GByteArray *buf); =20 +/** + * qemu_plugin_set_pc() - set the program counter for the current vCPU + * + * @vaddr: the new virtual (guest) address for the program counter + * + * This function sets the program counter for the current vCPU to @vaddr a= nd + * resumes execution at that address. This function does not return. + */ +QEMU_PLUGIN_API +__attribute__((__noreturn__)) +void qemu_plugin_set_pc(uint64_t vaddr); + /** * qemu_plugin_read_memory_vaddr() - read from memory using a virtual addr= ess * diff --git a/plugins/api.c b/plugins/api.c index 32eb086300..23c291f644 100644 --- a/plugins/api.c +++ b/plugins/api.c @@ -41,6 +41,7 @@ #include "qemu/log.h" #include "system/memory.h" #include "tcg/tcg.h" +#include "exec/cpu-common.h" #include "exec/gdbstub.h" #include "exec/target_page.h" #include "exec/translation-block.h" @@ -467,6 +468,16 @@ bool qemu_plugin_write_register(struct qemu_plugin_reg= ister *reg, return (gdb_write_register(current_cpu, buf->data, GPOINTER_TO_INT(reg= ) - 1) > 0); } =20 +void qemu_plugin_set_pc(uint64_t vaddr) +{ + g_assert(current_cpu); + + g_assert(qemu_plugin_get_cb_flags() =3D=3D QEMU_PLUGIN_CB_RW_REGS_PC); + + cpu_set_pc(current_cpu, vaddr); + cpu_loop_exit(current_cpu); +} + bool qemu_plugin_read_memory_vaddr(uint64_t addr, GByteArray *data, size_t= len) { g_assert(current_cpu); diff --git a/scripts/qemu-plugin-symbols.py b/scripts/qemu-plugin-symbols.py index 69644979c1..ce99796ce2 100644 --- a/scripts/qemu-plugin-symbols.py +++ b/scripts/qemu-plugin-symbols.py @@ -20,9 +20,14 @@ def extract_symbols(plugin_header): # Remove QEMU_PLUGIN_API macro definition. content =3D content.replace('#define QEMU_PLUGIN_API', '') expected =3D content.count('QEMU_PLUGIN_API') - # Find last word between QEMU_PLUGIN_API and (, matching on several li= nes. + # Find last word between QEMU_PLUGIN_API and ( to get the function nam= e, + # matching on several lines. Discard attributes, if any. # We use *? non-greedy quantifier. - syms =3D re.findall(r'QEMU_PLUGIN_API.*?(\w+)\s*\(', content, re.DOTAL= L) + syms =3D re.findall( + r'QEMU_PLUGIN_API\s+(?:__attribute__\(\(\S+\)\))?.*?(\w+)\s*\(', + content, + re.DOTALL, + ) syms.sort() # Ensure we found as many symbols as API markers. assert len(syms) =3D=3D expected --=20 2.53.0 From nobody Sun Apr 5 13:12:32 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=1772705253; cv=pass; d=zohomail.com; s=zohoarc; b=HdHpGRajyd+Z7mQuDnB+ulR04DM2laqnYWf9dFY5XCdB7RFKlLa4CC1eEalNSptTWn43FoxPjTxFS846KrPr5m3rj7NgYpj5+tdLoAujWztUDP0Pn/9ROcHVSfxUZ05tXY0/YtSNubNF25hvIUsaVHH2dhnmGfAjxpnlnkuckBs= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772705253; 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=W487FoGgYqEbS+GNPutsS25vOvNzGckMdguewFXSo0M=; b=HuLvkA5j6fJwREqlaEZ7z1qg/ykn6yWP4GzRFq1BRBzjNgLJ//Kl3Vvc0yjX17zeHNVcBIaL9Wkaikh3I30Zdn074m0UzV2ZC/bhu1SGLK+GdzSawKvJNFPFFOHb2le942+fjFTTdrvpmuE08akjhpKOLDpQm77CNpYBXNnsqUo= 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 177270525347158.067540556506515; Thu, 5 Mar 2026 02:07:33 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vy5bh-000462-Qf; Thu, 05 Mar 2026 05:07:01 -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 1vy5bd-00044S-Rx for qemu-devel@nongnu.org; Thu, 05 Mar 2026 05:06:58 -0500 Received: from mail-switzerlandnorthazlp170120005.outbound.protection.outlook.com ([2a01:111:f403:c213::5] helo=ZR1P278CU001.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 1vy5bZ-0007Sn-6r for qemu-devel@nongnu.org; Thu, 05 Mar 2026 05:06:56 -0500 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) by GV0P278MB0807.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:52::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9678.18; Thu, 5 Mar 2026 10:06:45 +0000 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::80ea:3d03:40bf:998c]) by ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::80ea:3d03:40bf:998c%6]) with mapi id 15.20.9678.016; Thu, 5 Mar 2026 10:06:45 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=P5FgsdxjZIOZiBwmm9jd7JIUE/v7FZ/KoPZj9d//7jcvk8n/xCM3mDHTtbckqp0YOwjLsgxN0dsHeIVS234cxa+7vF29aXK90mFhCPa6/hVX4NEiHRo/qzgpQuwQEFTbS6E0TtUKhnxcXjlgto8h/0PI7yR5R1rb0I9JBsGiaGPqA61T7YHaI1cUzvcarHgHqeZyfiHvYnLt6JLjCthS+1X1amdYQMr2VlbGWHo29aecEYzEJBK/VhliD1ICPMzkIeR8unF0Lj27jiIVPX/ytXD9pGzYxBtxdEzkY3jm2QI/e6L3IPZz8Vr+76ZneGsbZu0jWYTDJkBKvPoJlkZUjQ== 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=W487FoGgYqEbS+GNPutsS25vOvNzGckMdguewFXSo0M=; b=QF8yFzDVijHOQStoqG3sw7Uf4VTjblJmEep+/+MiBykG4XftnMU1hthr0uKP8VyQtYME/f+yjs5jj2aE8tU5EXYhkUcnOLl47zJK+BFcnWYUASCBTVXWnJou/IGu1HwDufGc1nhq3RgNm/z78d03CV06lPfuv0SQTfzvvIHiXBYLryKsZe4Ioam4GCCAmLRXYszBH4WRo1o/IXlKUBUAVdzJG31+MwlxlyOOS5Y7kDXztudCRxreCquqKgMnOW+c/Jvz4lw6eC2ceB/HDJZgirb0LwlL2ctVqTLfuBq5I9oBRnPvaHjXic9y/7JmHwFv03jVrVzxFbAaXIhBL09dPw== 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=W487FoGgYqEbS+GNPutsS25vOvNzGckMdguewFXSo0M=; b=fgsEKSLelffX3vUonoz9pe7a7T7hrJfsdnqm5DoYc5J2mbzRc/2SlbQU2E/ZFNY9Vhx9Di09keZzFX8zKyuCJsfxtOYyr/TwOjajALC27xyK+NZz/sSH6jox5S/RpFNp+dZDrsBer5et2gtivzMt30wneYIRCoHM5ULW+DofHQQ= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epfl.ch; From: Florian Hofhammer To: qemu-devel@nongnu.org Cc: Florian Hofhammer , Pierrick Bouvier Subject: [PATCH v7 5/8] tests/tcg: add tests for qemu_plugin_set_pc API Date: Thu, 5 Mar 2026 11:06:03 +0100 Message-ID: <20260305-setpc-v5-v7-5-4c3adba52403@epfl.ch> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260305-setpc-v5-v7-0-4c3adba52403@epfl.ch> References: <20260305-setpc-v5-v7-0-4c3adba52403@epfl.ch> Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=14451; i=florian.hofhammer@epfl.ch; h=from:subject:message-id; bh=77OW7QQCKB8AFY1vrSaAaJ7v6kpLO/GnmrzijtgOVpk=; b=owEBbQKS/ZANAwAKAZbrJ7oxX8d8AcsmYgBpqVTHrWCudPa5gS/ThmuZOjrbbfTgcFC1potK1 smhCtixXCCJAjMEAAEKAB0WIQSoIHw/Sr677ZtN+EmW6ye6MV/HfAUCaalUxwAKCRCW6ye6MV/H fPvTD/91ZsVsNo8E/XgvPzetV+H1O0R/tEmIpKzjbHE0KquPVOQlgGwZohAlSE3BemPWUml4+KS JBV1ww1Hx44FxaTEa9UbW1/Z5PnwBFlM5dhIb/7FrTnnlMwuHycgoa4+qrI8V/2wZC1xwNGDuUB OXZ/oq2EqM5xlYGszZeP8Kc0x8JzpZixkD+NxuHWUWdN2V2iiDq64Ej66BD/Yi5k83ibzdJmYUe wAjyI781HJxpOCrEdaUz4+HNppl9pbJ5xAyqhkbrBHpjTAMmQEaUmxZktmSEcoqTWeCtBU45EZS NMMW7nyMj9s1m9v1C4K36/l0+FD1az4NoBPbTlFCwfg0vrSDOkImkp1GKuUxqgzKrf2tUTpHHFh 79Uhgn15CIBW9atRFO3eLW8sKsifZY04l00x5nv9k/691bUfgGNCv0I7rfAikqlozMDTA8PExu/ ThAvVuau6vDLPL4RH6lWhZEsjReBE6Txz2SR+xQcBKyDIx1L3zD+dXGiXQB4re9Lqtk5UMp/31r TeAY8c5rRkZprBjFRWmmyW68rHiDybPL3y8Y1fOJbyde8Wh6R40DAT5XxgtdMree5F490XIuZ5F mtTpZIMb6bmhofUd71Od0ktTlw4yLCNBEkKRSXjblY19j5HD695gimvDUvbP+sm88jf8aq85vaS moaCkyexqwFWjPA== X-Developer-Key: i=florian.hofhammer@epfl.ch; a=openpgp; fpr=A8207C3F4ABEBBED9B4DF84996EB27BA315FC77C Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: GV0P278CA0090.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:2b::23) To ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: ZRH2PFAD84B9AF9:EE_|GV0P278MB0807:EE_ X-MS-Office365-Filtering-Correlation-Id: b1850aa5-a1b6-4b7c-6d20-08de7a9ee7d5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|1800799024|366016|786006|19092799006; X-Microsoft-Antispam-Message-Info: fL806ha5/G0jvgAP9ZNDBqvqPbqTutmh8rJG2B7ELFU16zlZ3SupfmZmTmbibuEYuU9QDEqoi+WcFugzEUPcmryXrrpvU6KG122X5QCvCWRgeyDvsP7SuoGjmC1ZUlKg9WQkfrtGJpRNpsRN28E55lZ7K3LTu2ZM31TVoA82fnjhe9tDgHBCoKgeGPcigZLAf84uudCoYfwOmuUFjYX+5SYs7E37YN2/Kr8Swh6j2wAFEKa8rA+BJUH63wuU8CL0CJa8mQd5Ins0RwGKqqMl1YLcK2w/pOJ8RXOYrw4tJE1LjQXRpExNtgSDGuPwpeH2O3lxbOBclkZKUxe8YXPNmpFOLPdWXmYHQ5iSyeFDe3kLnQeTq4TUW1wnfoEqnTlyEDiZRmB8Tf/JndKDfXc0YUUSMPI3yyiKCS4/VYE2ZvPAG0eBQDPwi6JLQ4BuHUHJ4RetkyaOzOQicF64XPtfAT6gRERyhaDruWzQ2G8Ozx/arPHjuXRXcZotm2RKAoEa521dznKotwq5xS6DVkN8EQu94IZhpMPxIf/Z2eSv6rl9u3qMoKQnY+xgS5mjR06YBs9OGwwgnPmxtDa2fltqDbRif6EdFAsuCXVMdcb/3vTkXtFvZzmvoUdF+6m01+nCAx6qFZJQqzljgpdUnmMso94dhChT4fPOeEsNSK622e5MjLcTamH2T4SapxTRLEzS6E2+V+zZSFrn52sW14jUL6baI0Xzzxkn+k7P16qKE+4= 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)(376014)(1800799024)(366016)(786006)(19092799006); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TW50M3ZtakVnbmpaZ2w3em5Ud20wbFVuMHJRQlNsVkNmMUFvbTNRbjFFTCtx?= =?utf-8?B?cS9FTzkzQ2tVSGhraEIyVXd5RlN0bUo2MDd2eEhTWlZHTW5uR3dHajcvbmkr?= =?utf-8?B?VVBSOWRpdU05T0JZbENvYzZYZ3NWVlpBcnVZV0ZzMi9pS01zR0MvTTZCNDdO?= =?utf-8?B?WUJZemhqeTJ6RGhLSjl6WjFjT0NFd2Z5amtzQWF5SklaVCtUMzZlR3o4bkUw?= =?utf-8?B?YlpZZDdkczAwRUUrNUIyQ21nNndqK2xobXJocnNuZmVNTktrRDhVakJKZUtl?= =?utf-8?B?L3RDMFhoQUNiSWkva3BDa2NDRWlHdm9kcjVocm92OXlLTkh2bWl3QkdVQ1lB?= =?utf-8?B?SEUvQUVmT3ZsNlg1dkZ2b0o1K1VKZm14NXVCT1NLbWhhcXF1ajNvUExpdUMz?= =?utf-8?B?UHVoSDhHN1k5TUlXaXRrQlFUYWN0RGJFRmNMNHFZc0dyWDIzY1dDYjBLNzBW?= =?utf-8?B?TmNOR0JIYytnQnBNTDlFUnoxZzNQazZwd0sraGJNNzVSUGdBZ0RZcEtRT0Nk?= =?utf-8?B?WlNwcjYwR1UrUGpTcnR0RXY4Y2owbFNsRUx5cEp0MDVSUzNwd2ZHcUlORTVw?= =?utf-8?B?RGVsdUk2dVNjT3dvWVlHUGVnZWVxdTE3UFF5Z2p5Z0lZRmt0dWlnVU1jNGNY?= =?utf-8?B?Q2RMcVNHOC9qb29POSt5RXkxSjVaN2N1VHJmQ1lRVlFXdkhONk5lUHM4VlEv?= =?utf-8?B?WHNzekRXd2QybjNSWGNEN3p2Tk1tQW5KKzJoN25lY1NSbGJZNGdQeko5aW95?= =?utf-8?B?eTVLYml2RHVJakMxOFJYV3ExMk1ic3pNOFdyd2VKWGhjbHdrbW1IV2c3WUd4?= =?utf-8?B?WEJZVUdBamFKRkpVcGVjUXlXMVdGU29xZGRqWWNCc01sVnJCMkgyQ3Zsck9w?= =?utf-8?B?c3Y4VyszYS9zNC85WDRaNVVLeGdSeEhSVjU5VE5rbXo1OC9vMmdBZlNZQ0VM?= =?utf-8?B?M1h1aTdKZExJZk83MnlyRER3WVdkTHNUNjRVc1pkMTBlbS9GTkU1c0ExZjR5?= =?utf-8?B?V1ZMT01GQy9JTUNtNnpldzM4dGZScWdLblVOTm5aZ1pnOTZWTEFodHlqKzdE?= =?utf-8?B?RWdodzkyY1dtZnU5VUo5UWNhOWkzWkFjLzc1MWZHbGN4VHF1dktMa21uTDZJ?= =?utf-8?B?a2dHTE5ldmpaR0pZS01wbGlvRGpDQVI5ZmNVRmY4N1FWOVhiN3FJNWVOYldH?= =?utf-8?B?OW1wczdHWktzcGhFbXRUU2hqSmRLMVltaEFndTR4MHFHNC84TXhHU2djSUJh?= =?utf-8?B?OWQ4TENlWHk1MFlmdW9lVE12V0ZxU2NFL1d2aDhWajRTZXpJK054aEhidnFh?= =?utf-8?B?bUEvWjZDOGtFRUlxd0pwMEg4QmZubFp6a1ozclE3TGdLNDJrSlhINWNTb292?= =?utf-8?B?VWhET0NoTXNZOTkwZVlQTERLYWdsQlNFZXJYK0RxYllOSFhHamZueER4K1FK?= =?utf-8?B?bHVLZUFjd0RqSVNGTmdhcnJ1SW9RTlhURzN4ZUYyMjFCWkt6S3I5dEhpWkIz?= =?utf-8?B?RHIxV3FIWERvaUJVSG9zSkJtbGdrcGVheXpDVlAycUlIcHNNWWhpQXNibjRu?= =?utf-8?B?d2lVUlJXU3Y0Q3U0cXkydERsYUJZdTVERURKUy9NRldYdGd3aU9KQ0I4NUwz?= =?utf-8?B?S3ZIREhUa0pNTzBldzVIOUY4ZDhEUTlUaytGNFd3aVA2d3REaWtZUXd3L0FD?= =?utf-8?B?YjBZQXdDMzQvZVBLUzU2cng4cGF6Y2s5NGtOMzhONUVvb3lFcHB4aDlqRFMv?= =?utf-8?B?SGoreGFjNnJzUlBlL205RklVQkNiU0NuSks4dk5raHJZRTZJc2c3aHZ5eDZO?= =?utf-8?B?Z2hyYkkrS0dqSVY3ZDNwNE8yZzBlcnZ4dmJPd2F4eTR4ektrNFp6N0lXTGNJ?= =?utf-8?B?bXZJZm8zWFpLWDFUcFlWclMzbHJ6bmtzOWlJbk1GUDcxZVhMUDVBdTNWTXZR?= =?utf-8?B?QnBXaHFtbldzcTR0ZFEvVktENmtxNFFTSkFyMUtwN2lPYk9rY3VuTGx4K3Bz?= =?utf-8?B?ZkpQWnJLVTlWZk1iRkd1Y1VSL0FtWGxCUCswV1VHS0dPSWhmckJmczJITE5L?= =?utf-8?B?dWlCT2xOYkhJSzZPUUloUVREUVF6YnpwZVppSEFVWlNnTTA1OU5DczUySkVp?= =?utf-8?B?M25lUGxYM0RFa2doYkZlbzlXNm8vR3ByWWFkR2IxckNSTGVoOTdHR0l1akJF?= =?utf-8?B?Rjg3dENlV2FMQ3Y5b0hDOUV5MFIxbHduRk9YYXlPQmdqZFQvRWorb1VjajFu?= =?utf-8?B?UlpEMEN5b1NsWkNiYUkwWmRzeXZmQlRINXVuMGR2WE8zYzByWnozeVlUSHdt?= =?utf-8?B?ejZLK21Vbkc3M3dQUlJCK0xyYldUclB5ZkxRNHViZHpvdXc2VHFvWm91MGZx?= =?utf-8?Q?2Tz7YZUA7FdqVgbQ=3D?= X-OriginatorOrg: epfl.ch X-MS-Exchange-CrossTenant-Network-Message-Id: b1850aa5-a1b6-4b7c-6d20-08de7a9ee7d5 X-MS-Exchange-CrossTenant-AuthSource: ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Mar 2026 10:06:44.7787 (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: JtCqgnL4Jhv00b59nPqLcnYd2klJa6aWBJIJar8YSwnfMrg+apD8c1kWCdcCwMrv0gxPevePKzPltxYLnq6j5njWLAq/SQ71psXsXOf5YL4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV0P278MB0807 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:c213::5; envelope-from=florian.hofhammer@epfl.ch; helo=ZR1P278CU001.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @epfl.ch) X-ZM-MESSAGEID: 1772705256745154100 The test plugin intercepts execution in different contexts. Without the plugin, any of the implemented test functions would trigger an assert and fail. With the plugin, control flow is redirected to skip the assert and return cleanly via the qemu_plugin_set_pc() API. Signed-off-by: Pierrick Bouvier Signed-off-by: Florian Hofhammer Reviewed-by: Pierrick Bouvier --- MAINTAINERS | 1 + tests/tcg/arm/Makefile.target | 6 + tests/tcg/hexagon/Makefile.target | 8 ++ tests/tcg/multiarch/Makefile.target | 17 ++- .../multiarch/{ =3D> plugin}/check-plugin-output.sh | 0 .../{ =3D> plugin}/test-plugin-mem-access.c | 0 tests/tcg/multiarch/plugin/test-plugin-set-pc.c | 134 +++++++++++++++++= ++++ tests/tcg/plugins/meson.build | 1 + tests/tcg/plugins/setpc.c | 109 +++++++++++++++++ 9 files changed, 273 insertions(+), 3 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index 6698e5ff69..63c0af4d86 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -4104,6 +4104,7 @@ S: Maintained F: docs/devel/tcg-plugins.rst F: plugins/ F: tests/tcg/plugins/ +F: tests/tcg/multiarch/plugin/ F: tests/functional/aarch64/test_tcg_plugins.py F: contrib/plugins/ F: scripts/qemu-plugin-symbols.py diff --git a/tests/tcg/arm/Makefile.target b/tests/tcg/arm/Makefile.target index 6189d7a0e2..613bbf0939 100644 --- a/tests/tcg/arm/Makefile.target +++ b/tests/tcg/arm/Makefile.target @@ -78,4 +78,10 @@ sha512-vector: sha512.c =20 ARM_TESTS +=3D sha512-vector =20 +ifeq ($(CONFIG_PLUGIN),y) +# Require emitting arm32 instructions, otherwise the vCPU might accidental= ly +# try to execute Thumb instructions in arm32 mode after qemu_plugin_set_pc= () +test-plugin-set-pc: CFLAGS+=3D-marm +endif + TESTS +=3D $(ARM_TESTS) diff --git a/tests/tcg/hexagon/Makefile.target b/tests/tcg/hexagon/Makefile= .target index f86f02bb31..a70ef2f660 100644 --- a/tests/tcg/hexagon/Makefile.target +++ b/tests/tcg/hexagon/Makefile.target @@ -126,3 +126,11 @@ 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) +# LLVM is way too aggressive with inlining and dead code elimination even = at +# -O0, which interferes with the test. What looks like dead code in this t= est +# to the compiler isn't actually dead code, so we need to disable all pote= ntial +# LLVM optimization passes. +test-plugin-set-pc: CFLAGS +=3D -Xclang -disable-llvm-passes +endif diff --git a/tests/tcg/multiarch/Makefile.target b/tests/tcg/multiarch/Make= file.target index 07d0b27bdd..a347efbadf 100644 --- a/tests/tcg/multiarch/Makefile.target +++ b/tests/tcg/multiarch/Makefile.target @@ -14,6 +14,10 @@ ifeq ($(filter %-linux-user, $(TARGET)),$(TARGET)) VPATH +=3D $(MULTIARCH_SRC)/linux MULTIARCH_SRCS +=3D $(notdir $(wildcard $(MULTIARCH_SRC)/linux/*.c)) endif +ifeq ($(CONFIG_PLUGIN),y) +VPATH +=3D $(MULTIARCH_SRC)/plugin +MULTIARCH_SRCS +=3D $(notdir $(wildcard $(MULTIARCH_SRC)/plugin/*.c)) +endif MULTIARCH_TESTS =3D $(MULTIARCH_SRCS:.c=3D) =20 # @@ -200,13 +204,20 @@ run-plugin-test-plugin-mem-access-with-libmem.so: \ PLUGIN_ARGS=3D$(COMMA)print-accesses=3Dtrue run-plugin-test-plugin-mem-access-with-libmem.so: \ CHECK_PLUGIN_OUTPUT_COMMAND=3D \ - $(SRC_PATH)/tests/tcg/multiarch/check-plugin-output.sh \ + $(SRC_PATH)/tests/tcg/multiarch/plugin/check-plugin-output.sh \ $(QEMU) $< run-plugin-test-plugin-syscall-filter-with-libsyscall.so: +run-plugin-test-plugin-set-pc-with-libsetpc.so: =20 EXTRA_RUNS_WITH_PLUGIN +=3D run-plugin-test-plugin-mem-access-with-libmem.= so \ - run-plugin-test-plugin-syscall-filter-with-libsyscall.so -else + run-plugin-test-plugin-syscall-filter-with-libsyscall.so \ + run-plugin-test-plugin-set-pc-with-libsetpc.so + +else # CONFIG_PLUGIN=3Dn +# Do not build the syscall skipping test if it's not tested with the setpc +# plugin because it will simply fail the test. +MULTIARCH_TESTS :=3D $(filter-out test-plugin-set-pc, $(MULTIARCH_TESTS)) + # test-plugin-syscall-filter needs syscall plugin to succeed test-plugin-syscall-filter: CFLAGS+=3D-DSKIP endif diff --git a/tests/tcg/multiarch/check-plugin-output.sh b/tests/tcg/multiar= ch/plugin/check-plugin-output.sh similarity index 100% rename from tests/tcg/multiarch/check-plugin-output.sh rename to tests/tcg/multiarch/plugin/check-plugin-output.sh diff --git a/tests/tcg/multiarch/test-plugin-mem-access.c b/tests/tcg/multi= arch/plugin/test-plugin-mem-access.c similarity index 100% rename from tests/tcg/multiarch/test-plugin-mem-access.c rename to tests/tcg/multiarch/plugin/test-plugin-mem-access.c diff --git a/tests/tcg/multiarch/plugin/test-plugin-set-pc.c b/tests/tcg/mu= ltiarch/plugin/test-plugin-set-pc.c new file mode 100644 index 0000000000..f8343dfba8 --- /dev/null +++ b/tests/tcg/multiarch/plugin/test-plugin-set-pc.c @@ -0,0 +1,134 @@ +/* + * SPDX-License-Identifier: GPL-2.0-or-later + * + * Copyright (C) 2026, Florian Hofhammer + * + * This test set exercises the qemu_plugin_set_pc() function in four diffe= rent + * contexts: + * 1. in an instruction callback during normal execution, + * 2. in an instruction callback during signal handling, + * 3. in a memory access callback. + * 4. in a syscall callback, + */ +#include +#include +#include +#include +#include +#include + +/* If we issue this magic syscall, ... */ +#define MAGIC_SYSCALL 4096 +/* ... the plugin either jumps directly to the target address ... */ +#define SETPC 0 +/* ... or just updates the target address for future use in callbacks. */ +#define SETTARGET 1 + +static int signal_handled; + +void panic(const char *msg) +{ + fprintf(stderr, "Panic: %s\n", msg); + abort(); +} + +/* + * This test executes a magic syscall which communicates two addresses to = the + * plugin via the syscall arguments. Whenever we reach the "bad" instructi= on + * during normal execution, the plugin should redirect control flow to the + * "good" instruction instead. + */ +void test_insn(void) +{ + long ret =3D syscall(MAGIC_SYSCALL, SETTARGET, &&bad_insn, &&good_insn, + NULL); + assert(ret =3D=3D 0 && "Syscall filter did not return expected value"); +bad_insn: + panic("PC redirection in instruction callback failed"); +good_insn: + puts("PC redirection in instruction callback succeeded"); +} + +/* + * This signal handler communicates a "bad" and a "good" address to the pl= ugin + * similar to the previous test, and skips to the "good" address when the = "bad" + * one is reached. This serves to test whether PC redirection via + * qemu_plugin_set_pc() also works properly in a signal handler context. + */ +void usr1_handler(int signum) +{ + long ret =3D syscall(MAGIC_SYSCALL, SETTARGET, &&bad_signal, &&good_si= gnal, + NULL); + assert(ret =3D=3D 0 && "Syscall filter did not return expected value"); +bad_signal: + panic("PC redirection in instruction callback failed"); +good_signal: + signal_handled =3D 1; + puts("PC redirection in instruction callback succeeded"); +} + +/* + * This test sends a signal to the process, which should trigger the above + * signal handler. The signal handler should then exercise the PC redirect= ion + * functionality in the context of a signal handler, which behaves a bit + * differently from normal execution. + */ +void test_sighandler(void) +{ + struct sigaction sa =3D {0}; + sa.sa_handler =3D usr1_handler; + sigaction(SIGUSR1, &sa, NULL); + pid_t pid =3D getpid(); + kill(pid, SIGUSR1); + assert(signal_handled =3D=3D 1 && "Signal handler was not executed pro= perly"); +} + +/* + * This test communicates a "good" address and the address of a local vari= able + * to the plugin. Upon accessing the local variable, the plugin should then + * redirect control flow to the "good" address via qemu_plugin_set_pc(). + */ +void test_mem(void) +{ + static uint32_t test =3D 1; + long ret =3D syscall(MAGIC_SYSCALL, SETTARGET, NULL, &&good_mem, &test= ); + assert(ret =3D=3D 0 && "Syscall filter did not return expected value"); + /* Ensure read access to the variable to trigger the plugin callback */ + assert(test =3D=3D 1); + panic("PC redirection in memory access callback failed"); +good_mem: + puts("PC redirection in memory access callback succeeded"); +} + +/* + * This test executes a magic syscall which is intercepted and its actual + * execution skipped via the qemu_plugin_set_pc() API. In a proper plugin, + * syscall skipping would rather be implemented via the syscall filtering + * callback, but we want to make sure qemu_plugin_set_pc() works in differ= ent + * contexts. + */ +__attribute__((noreturn)) +void test_syscall(void) +{ + syscall(MAGIC_SYSCALL, SETPC, &&good_syscall); + panic("PC redirection in syscall callback failed"); +good_syscall: + /* + * Note: we execute this test last and exit straight from here because= when + * the plugin redirects control flow upon syscall, the stack frame for= the + * syscall function (and potential other functions in the call chain in + * libc) is still live and the stack is not unwound properly. Thus, + * returning from here is risky and breaks on some architectures, so we + * just exit directly from this test. + */ + _exit(EXIT_SUCCESS); +} + + +int main(int argc, char *argv[]) +{ + test_insn(); + test_sighandler(); + test_mem(); + test_syscall(); +} diff --git a/tests/tcg/plugins/meson.build b/tests/tcg/plugins/meson.build index c5e49753fd..b3e3a9a6d0 100644 --- a/tests/tcg/plugins/meson.build +++ b/tests/tcg/plugins/meson.build @@ -7,6 +7,7 @@ test_plugins =3D [ 'mem.c', 'patch.c', 'reset.c', +'setpc.c', 'syscall.c', ] =20 diff --git a/tests/tcg/plugins/setpc.c b/tests/tcg/plugins/setpc.c new file mode 100644 index 0000000000..8e66026d2c --- /dev/null +++ b/tests/tcg/plugins/setpc.c @@ -0,0 +1,109 @@ +/* + * SPDX-License-Identifier: GPL-2.0-or-later + * + * Copyright (C) 2026, Florian Hofhammer + */ +#include +#include +#include +#include + +#include + +/* If we detect this magic syscall, ... */ +#define MAGIC_SYSCALL 4096 +/* ... the plugin either jumps directly to the target address ... */ +#define SETPC 0 +/* ... or just updates the target address for future use in callbacks. */ +#define SETTARGET 1 + +QEMU_PLUGIN_EXPORT int qemu_plugin_version =3D QEMU_PLUGIN_VERSION; + +static uint64_t source_pc; +static uint64_t target_pc; +static uint64_t target_vaddr; + +static bool vcpu_syscall_filter(qemu_plugin_id_t id, unsigned int vcpu_ind= ex, + int64_t num, uint64_t a1, uint64_t a2, + uint64_t a3, uint64_t a4, uint64_t a5, + uint64_t a6, uint64_t a7, uint64_t a8, + uint64_t *sysret) +{ + if (num =3D=3D MAGIC_SYSCALL) { + if (a1 =3D=3D SETPC) { + qemu_plugin_outs("Magic syscall detected, jump to clean exit\n= "); + qemu_plugin_set_pc(a2); + } else if (a1 =3D=3D SETTARGET) { + qemu_plugin_outs("Magic syscall detected, set target_pc / " + "target_vaddr\n"); + source_pc =3D a2; + target_pc =3D a3; + target_vaddr =3D a4; + *sysret =3D 0; + return true; + } else { + qemu_plugin_outs("Unknown magic syscall argument, ignoring\n"); + } + } + return false; +} + +static void vcpu_insn_exec(unsigned int vcpu_index, void *userdata) +{ + uint64_t vaddr =3D (uint64_t)userdata; + if (vaddr =3D=3D source_pc) { + g_assert(target_pc !=3D 0); + g_assert(target_vaddr =3D=3D 0); + + qemu_plugin_outs("Marker insn detected, jump to clean return\n"); + qemu_plugin_set_pc(target_pc); + } +} + +static void vcpu_mem_access(unsigned int vcpu_index, + qemu_plugin_meminfo_t info, + uint64_t vaddr, void *userdata) +{ + if (vaddr !=3D 0 && vaddr =3D=3D target_vaddr) { + g_assert(source_pc =3D=3D 0); + g_assert(target_pc !=3D 0); + qemu_plugin_mem_value val =3D qemu_plugin_mem_get_value(info); + /* target_vaddr points to our volatile guard =3D=3D> should always= be 1 */ + g_assert(val.type =3D=3D QEMU_PLUGIN_MEM_VALUE_U32); + g_assert(val.data.u32 =3D=3D 1); + + qemu_plugin_outs("Marker mem access detected, jump to clean return= \n"); + qemu_plugin_set_pc(target_pc); + } +} + +static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb) +{ + size_t insns =3D qemu_plugin_tb_n_insns(tb); + for (size_t i =3D 0; i < insns; i++) { + struct qemu_plugin_insn *insn =3D qemu_plugin_tb_get_insn(tb, i); + uint64_t insn_vaddr =3D qemu_plugin_insn_vaddr(insn); + /* + * Note: we cannot only register the callbacks if the instruction = is + * in one of the functions of interest, because symbol lookup for + * filtering does not work for all architectures (e.g., ppc64). + */ + qemu_plugin_register_vcpu_insn_exec_cb(insn, vcpu_insn_exec, + QEMU_PLUGIN_CB_RW_REGS_PC, + (void *)insn_vaddr); + qemu_plugin_register_vcpu_mem_cb(insn, vcpu_mem_access, + QEMU_PLUGIN_CB_RW_REGS_PC, + QEMU_PLUGIN_MEM_R, NULL); + } +} + + +QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id, + const qemu_info_t *info, + int argc, char **argv) +{ + + qemu_plugin_register_vcpu_syscall_filter_cb(id, vcpu_syscall_filter); + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans); + return 0; +} --=20 2.53.0 From nobody Sun Apr 5 13:12:32 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=1772705327; cv=pass; d=zohomail.com; s=zohoarc; b=iwKPG27iwG/SJMi/24JONpsF8ZrChXZ8Fyp+8yoau1/xL2cHq1sksH8Ga/0KeTmJO7neYT92OhmG/Us2iq+d0s9iGDF/XqMFO90Rz0JP0QumkprqedHBUpnH7n0J5tzNZkZlw7jPdoDWiAdYB3f/wrKx8QKOz3kx2D1IYBJH6KA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772705327; 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=PSIaB9ZoraDUaNGsdLVl6Nc9clm8nzVzgacjmHcZEdQ=; b=ftUnl60Gc29FFedVvpLgjZU3gMH865TQnmyjNy+Ytq8O7hQTNVuoFg+1dkQP0UxQcA9ws114DcAbpZiZyLifW7+C3bwy1qz+aHBbh0yOrGFlOdmRC3jLc3JavNw5jGH91dS+AgOK+dkUUcyHmLCUz7jg5vaJu16sbm1ClTYdnIs= 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 1772705326910511.04147840447627; Thu, 5 Mar 2026 02:08:46 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vy5bm-00047C-7z; Thu, 05 Mar 2026 05:07:06 -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 1vy5bj-00046V-NS for qemu-devel@nongnu.org; Thu, 05 Mar 2026 05:07:03 -0500 Received: from mail-switzerlandnorthazlp170120005.outbound.protection.outlook.com ([2a01:111:f403:c213::5] helo=ZR1P278CU001.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 1vy5bi-0007Sn-6Z for qemu-devel@nongnu.org; Thu, 05 Mar 2026 05:07:03 -0500 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) by GV0P278MB0807.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:52::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9678.18; Thu, 5 Mar 2026 10:06:46 +0000 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::80ea:3d03:40bf:998c]) by ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::80ea:3d03:40bf:998c%6]) with mapi id 15.20.9678.016; Thu, 5 Mar 2026 10:06:46 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CY4NxYRvBGFwaiY78coeZ1b7nUuhQoEKc4j3gwxJFFzDIJi+PEOhIEECMdAvASjen5E5HWUf5VFzZs4pQ7ZK112AfskaEWYfj5pKHxKsQrQwVx+aMf2qj23/R0XRdf1tho3Gqg4ZzWdkKG5CCxCPW3C2la6sDpashd0jh5D2D9K+CiQ2otSo+tM545VDIlQG//6ur+VRXl3GV4oI7UQonAXenmSVcGvJ5SBm4jceL4BkNaFznvgS2y3Dl0eKzRC6tCMB77hpKGBM7U3utjaPVvmi8Q1/FOkR7hp+0/cxEBsZ4Vhe4kNOrYgblQAyigf/i3A9GGJf5sChQqMI59LZGg== 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=PSIaB9ZoraDUaNGsdLVl6Nc9clm8nzVzgacjmHcZEdQ=; b=S0CJMOVTDVvl9TzuKaHkZPPRqOIZe8/GYJd1x0Z0aMgz1U0K+MVCThDrIEUAxnklXbSsNOiQc98dF+Ofzik4+NhP6QJ0oir+yz/r4WSFFC+VENd6vuiDbgHc3xnF3tGWgy0sj+06Dkvjf4Z0nwIo7GZl7yiAiRi/VXPgELiJHck/MqmGkCbSV1iD8hPVcJBRLzxD5pzg0is14rV9XIVNx76svGBBBwODKxyKUqBelur0OrBWjfGut5ioWdJ/EuHUmwS5tIkbf4Fmx23eSBFJZACR66O5HAoLXK89koTqrILKs2mJQciB0zMEVhdpfBRmkKR/cDJjliMjoL6a8gSbwQ== 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=PSIaB9ZoraDUaNGsdLVl6Nc9clm8nzVzgacjmHcZEdQ=; b=YbC2W5ufpPXjODkWyCMSvLEA7IjSrGiL+yyy7+FdFNVuLrQ/oUoEJo0zdxMHcJRJUNX/NZ1RS/c/jk0YYTnEC+xFRyk7FQo05W0rI8HlVgX0lhxYFXY9Yt5qRPdqtdI7algbnIgz0dl4amoBxlQZZSjgIkqO5aExNQcbZ1JZtRU= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epfl.ch; From: Florian Hofhammer To: qemu-devel@nongnu.org Cc: Florian Hofhammer , =?utf-8?q?Alex_Benn=C3=A9e?= , Pierrick Bouvier Subject: [PATCH v7 6/8] plugins: add read-only property for registers Date: Thu, 5 Mar 2026 11:06:04 +0100 Message-ID: <20260305-setpc-v5-v7-6-4c3adba52403@epfl.ch> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260305-setpc-v5-v7-0-4c3adba52403@epfl.ch> References: <20260305-setpc-v5-v7-0-4c3adba52403@epfl.ch> Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2849; i=florian.hofhammer@epfl.ch; h=from:subject:message-id; bh=APUsCVP8/DfH/jhU0oaiJ9Yv7iw6vdesPLxp4XQ1Mxk=; b=owEBbQKS/ZANAwAKAZbrJ7oxX8d8AcsmYgBpqVTJvlFcSeM4luuI2twPw3GsLScy1dDsO8EWo E8O3h6Me46JAjMEAAEKAB0WIQSoIHw/Sr677ZtN+EmW6ye6MV/HfAUCaalUyQAKCRCW6ye6MV/H fMOJEADZrInR4ArqIiQkHj2fJNJ/th7zNQndg3CK8uimcyixArsQyMU60AYFU1X++z2sGyGQZi4 L7KIdVI0v1cPraFek2DLGkawO4WK8CXf6SUhzUeAOp8EueUWU1jZE98pOloOEejApjCE7anDwaB ZC1GlS9wf+pIuh6v+y7fl1KRWvnUiffG0KyzgjpdBLX+7THw/FxB3qJv0OPJK69XOdy44lQXiKu +lyEi1/OsBL9KjJzr81YBdnPzlIhJ2smNRWkyDvZ8OhpSeXL5gUm0R74xW3BVssmsyhKVbqykXq aEhtYJsGI9gsJhKqQ0NaNzeI4jHR9cYUOQvOSa03YQwZ0blCvHJrGOHgMYoFG6mGE9A2aDxnoNB BWTS9xFXPLqQ5wqX45a1bSWpBREd9YQI49kRyXvrqnnzixqjb55uMOojpED1C8NWHg8h/d7IozB 6VMaJzKcBUh4cWB1MBWMuxl+AaOVfGamudgzZdDk6NGA/6ZkgdznYV5qAIWmx+y/ihM5JKdfX9N mQpLQSmCsfh7se3h6ZGIbbZB2TfjAVcpbIT6jJA0qRN9lE66yD35noFj20VDkZQvxGFqurDlNnC XIwv8IvBOjlKrFY9Fh8Xym5EyrVwJekptGRxEdx2oW8rMpBn0JcnsZZtkXuqnWTecXvQFranNo9 qS2a1n1+s1vxTFQ== X-Developer-Key: i=florian.hofhammer@epfl.ch; a=openpgp; fpr=A8207C3F4ABEBBED9B4DF84996EB27BA315FC77C Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: GV0P278CA0090.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:2b::23) To ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: ZRH2PFAD84B9AF9:EE_|GV0P278MB0807:EE_ X-MS-Office365-Filtering-Correlation-Id: 0198614e-22b5-4109-28a9-08de7a9ee80b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|1800799024|366016|786006|19092799006; X-Microsoft-Antispam-Message-Info: 44WxXNAexfE9XGaZPOwmaaF4O46n27A/bwB5NsaiNbFiJjSsO1AFsJxwpbmaRkaY5kbhZ78zPUBVqMPTEqNYK7Au3TaPy5cA9mAnq7Anz/7KyFHfmG3LKprMYzs6bGkjwXKwDa3UCJparozqkl+HDbaP+AujrePQB5d1W0zAXGbMsl36mtjmfJA164WwkeER/aLzt5NbzFdbKiOGqZRZjx3/fmDMIKYrxZkm+BIDHJ3DMxACZDcmwJje+i3xHzLb4zULGyJCzlWidggVFTNC+01alWy1MH1zvrbRBRg1F9zEizJKZPUwiPCIoZPE3beYc+oofmZ9Cg5T2BK4P7T3k+DAal+Ul8sFrGVIBWm56+bEHvCtNkqwdiRYWtPRicvfwMI84jooOzD+Cqc+T5tVEbjvAG2IPvWPo7tTpJ6m7XJsYC130pUZaPPcNzB8SAqq5+XKDgyxIiWB91W+68xTci9GTKTNUI1OyjoCS/SnXp4QarL9UfNutNKjqBPuIAkwJW3p29Xd7al/ECjuaCgJ+uHjos5hCgReuRhhzNiPeItkFlNtgerUyjpjrxV0SPLUkYwm9Y2BgiAmw7BbaKMfHZQZ7O1BBHmTCXdu245Ol/Jw5eduXm5NPyTlUtpH5PCNzTpDI23fANyDduNKFwvd1Z3PTBNc3xyRmkzBc5WMnjqP9NcJblYZOxauYeEfGlpSuP4GgmwjmpTMsPQwVPOqYQBhweHtLiii+gnT6Za5EOw= 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)(376014)(1800799024)(366016)(786006)(19092799006); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TTBJdi9ZZExHaXJZaVN0UE9aejlmdXM5OTRmcnlZaUpuVlZUaHNObmlIVyt6?= =?utf-8?B?cWVmUDFyeGZvMllJU0dTejRJWkxJU016R0NsTWJXUkhYRFdYbWRjRng3YWd4?= =?utf-8?B?Wng0YnNjZFI3T3VZeSs4a1NhTG5NdGhpRHQ0VnQxdXVpcDF2TWUrZE1Hb0sv?= =?utf-8?B?TzZ4YXhqc09JL01YU0x0TlQ3SUdHRm1NWmhpcjQvZVRSZEV1d0lnL0UybFFp?= =?utf-8?B?eWpqQkxaLzd5V1B6Y1FVV2NTZGVyNmVBVGsyVmdvZ1ZxZVJob1lYbEdMMEpa?= =?utf-8?B?NWVvUFpEQnEwN0gwUjRzeXF6dmFlWnVBZ082R0s0aUVkRlB2eWxIaDgrcExX?= =?utf-8?B?OHFoNmQraFEvOEdkL3ZJTndHNHJkZWRlcWdqRGJOVTBsMXhLT3BBSmQ4RmV5?= =?utf-8?B?YUZUbm1Bdjg0VzZNYXJQbEwrTjJvUEc5ZnF4emtRTDc3SU10clpHMlpCOWMw?= =?utf-8?B?OCtFdXNjN1BjTElsVmVWaDlXdC9XYmdjdjhqYnp2VVZuRjRSajJYVXVaaUty?= =?utf-8?B?OFdwNThydjhGdEYxVDR0UmpLdlB3VGtpMnZUbFJoajdJMnZsU2lwTXE1MlBK?= =?utf-8?B?QlNKZ1pSRHpnS3F1bGRMY0JGeE8wNlRCMnV5YUtsTkptWCt1S1dvZkI2UkNx?= =?utf-8?B?VmhFNkdISCtIL1JJeUxmM0lqbTloVUI3cms1VEcvZXI2Q3M3bVk2VHpoUGZL?= =?utf-8?B?cTFCOXZnaWJpakloVDV1d1hGSTVxS0t2aGgveVFJNSs5TzNBblh0QnM5c1N1?= =?utf-8?B?TWtJMDJCNlNXRHNWMW9SK21pait5UFI4cit1L0w2WXBrcUU2bldpRE4xa25R?= =?utf-8?B?L3M3MEFQOFkrQmlZTW93ZzN3enI2blhtSWF4TkUzVEVMMy84aGU5TXlhclh3?= =?utf-8?B?K0JEQUFxOTF0SWVXSE1yaWtML2J0anhoTG4yNWV6ZVJVYXhTRXE4bVdHNVJ6?= =?utf-8?B?OVgrZlliaEc0ald1dDZ0S3hvQmM3L216STVlbVhnY3g5Wkk5T2Q5aHZVVFdp?= =?utf-8?B?S0szalhidVVqbnZXN2YzdzRXVlJuQk9IQjZqaFozK09ZRmoxQ1pVWkFKeEV0?= =?utf-8?B?b0dsb0U1VUQzN3I5a2FreWVhQVFZdVpDNzh4R3AzL005aTE2VldFVCtEbnli?= =?utf-8?B?cGZablRYRjdGTDk3NnovSWtyeUF0ckY0RHVsaEVuaHdxVUptYjlqUWtXMFpx?= =?utf-8?B?NmhZL1NUdjBMM0JNRWFFdnhXL255UnhXWUVFOTFENGJtTzAvcnQrR1Rmc1c0?= =?utf-8?B?eW03TWJZVkh2OXpIMXVNRUcvdTVSNDdHdFBCdy9MYjFKN2VjeHhtMDJHejNQ?= =?utf-8?B?TkpicFZkM3lZUDFSZGZnTUp3RjBQVFE3QzE2TytYMnllNldGTHJtSlZOSk14?= =?utf-8?B?UW1wRjE4ZDgwTkhNM2ttSkNVYzZTVXhySnd6WUFxOGRsVlo2cFljOUZnTE5L?= =?utf-8?B?RDNaZEZrb2ZqMmVZbVNWUm9SUEhYbzZuTmwzZWIzOWNMWFYyaWZoQVE0RkQ4?= =?utf-8?B?UUJjNkV1YU9nRE9TZzgzcE5RcDBvSHlvbFM4WGxjZXNBZ2h6ZzZwdXplMkFw?= =?utf-8?B?M2NjNlh2Z01xNCs0UEYvRkZMK1Ixd3pxKzhLR0FVTUtTKzJSSTRKL2tBRndm?= =?utf-8?B?OG5odmZPZzluRHBjQXhTOUJ0SnRxWjIzU0dnQ1lSa2dzdTY2T0cwRDJyUGhh?= =?utf-8?B?d3IzaU9zK09mZnFWYjB1bzZkQytIQzdhdWhMM0lwS1Bpc1lhQk5yTi8rcnB3?= =?utf-8?B?V1hjUTVnRlVYMVFBTWs2YUpPS0U2cEFtYmVqR2VNZ1ErVkF2bEg1N0tsbWRT?= =?utf-8?B?K2Q5YVFYSDZrT3hvZmZhTlhLZEVQQWwvOVZJOW05Z29OMjQ1ejl1U0lmdWNq?= =?utf-8?B?MDg5eHh2bHJpNXJ6djg1OHdOK0xtR0dodzJxL2p6L0F2RzY0Z0JBOFR3WWFk?= =?utf-8?B?anNrclBNdXlqWnFjTlRnSGhJeHduU3pNVHpWU2NXRElneklzSytPMDFDdmNB?= =?utf-8?B?d0lNUmZQdmhzd0dWODkvay9CMHl3WHBuOTdqYUdRc21WMUtaZHYxRjZObkNC?= =?utf-8?B?KzdYajh6dUtFVFJCMVFvcjFwL0dMeG03bWFOcnlscjFKbHEwbTliTGhRYnpp?= =?utf-8?B?UEZ6dVpBNmlhczNrblJKM1R6RWRaRSs0RlpwWDZZSnU3SVlNUENtZWlNRWhn?= =?utf-8?B?SHdZUlUyb0ZybS9Md2hLNUpocVFKM1JHR0huVWhHQUlaR05XVjl3QWRQeHFH?= =?utf-8?B?MHIyYlJiTkljTVhiNDlxMGE3SVNjV1ZpNWQ1NFE0U2JjcWQzeHJ2MXg4bHVC?= =?utf-8?B?MW5qWmRzamd1TksyeWNSTjJQZFZpQU5OZk54RWdNbXoveXZCMHJ4VENlWWZI?= =?utf-8?Q?MJyuwYpqBCMHW5aQ=3D?= X-OriginatorOrg: epfl.ch X-MS-Exchange-CrossTenant-Network-Message-Id: 0198614e-22b5-4109-28a9-08de7a9ee80b X-MS-Exchange-CrossTenant-AuthSource: ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Mar 2026 10:06:45.1411 (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: 7yltQ1CW0cmPRhp88g9UPr850ZgTmiFBShtFxJ63No88jzdIO/UAJWLxdDkeD9HH4e9NmHterr9VkhdJK+O+GmhTXhKeURlLaUlrcBZhwdk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV0P278MB0807 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:c213::5; envelope-from=florian.hofhammer@epfl.ch; helo=ZR1P278CU001.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @epfl.ch) X-ZM-MESSAGEID: 1772705328777158500 Some registers should be marked as read-only from a plugin API perspective, as writing to them via qemu_plugin_write_register has no effect. This includes the program counter, and we expose this fact to the plugins with this patch. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Pierrick Bouvier Signed-off-by: Florian Hofhammer --- include/plugins/qemu-plugin.h | 3 +++ plugins/api.c | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/include/plugins/qemu-plugin.h b/include/plugins/qemu-plugin.h index 7b9cd6a971..fceb8194eb 100644 --- a/include/plugins/qemu-plugin.h +++ b/include/plugins/qemu-plugin.h @@ -979,11 +979,14 @@ struct qemu_plugin_register; * writing value with qemu_plugin_write_register * @name: register name * @feature: optional feature descriptor, can be NULL + * @is_readonly: true if the register cannot be written via + * qemu_plugin_write_register */ typedef struct { struct qemu_plugin_register *handle; const char *name; const char *feature; + bool is_readonly; } qemu_plugin_reg_descriptor; =20 /** diff --git a/plugins/api.c b/plugins/api.c index 23c291f644..85b34949cb 100644 --- a/plugins/api.c +++ b/plugins/api.c @@ -410,6 +410,12 @@ bool qemu_plugin_bool_parse(const char *name, const ch= ar *value, bool *ret) * ancillary data the plugin might find useful. */ =20 +static const char pc_str[] =3D "pc"; /* generic name for program counter */ +static const char eip_str[] =3D "eip"; /* x86-specific name for PC */ +static const char rip_str[] =3D "rip"; /* x86_64-specific name for PC */ +static const char pswa_str[] =3D "pswa"; /* s390x-specific name for PC */ +static const char iaoq_str[] =3D "iaoq"; /* HP/PA-specific name for PC */ +static const char rpc_str[] =3D "rpc"; /* microblaze-specific name for PC = */ static GArray *create_register_handles(GArray *gdbstub_regs) { GArray *find_data =3D g_array_new(true, true, @@ -427,6 +433,16 @@ static GArray *create_register_handles(GArray *gdbstub= _regs) /* Create a record for the plugin */ desc.handle =3D GINT_TO_POINTER(grd->gdb_reg + 1); desc.name =3D g_intern_string(grd->name); + desc.is_readonly =3D false; + if (g_strcmp0(desc.name, pc_str) =3D=3D 0 + || g_strcmp0(desc.name, eip_str) =3D=3D 0 + || g_strcmp0(desc.name, rip_str) =3D=3D 0 + || g_strcmp0(desc.name, pswa_str) =3D=3D 0 + || g_strcmp0(desc.name, iaoq_str) =3D=3D 0 + || g_strcmp0(desc.name, rpc_str) =3D=3D 0 + ) { + desc.is_readonly =3D true; + } desc.feature =3D g_intern_string(grd->feature_name); g_array_append_val(find_data, desc); } --=20 2.53.0 From nobody Sun Apr 5 13:12:32 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=1772705270; cv=pass; d=zohomail.com; s=zohoarc; b=D62mEmRDxElcilznll3Av9ze14Da1JP6VEKIwRBSKpGAGkL4NIrJ19w4xJN4Jq7LEKLurALimN4eEelKaUYix2OjgDwYrG8pk5QVwKSrz4FgUo0ecSk5NDguhBPB+UWm3VTiIF5H5ASzzObizLKGZHpZmprNzkcIDR4Sb4/IoHM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772705270; 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=gPc1PG8nvtwucTJfPZ+JcVu5QG/IEeSqlVzgN3AskeY=; b=hao+7NE0a9ZK6IFa0gXHX9kMtsLqPw7os/uxEr/z1Ajr1QmIdtDEF3RSe6VTTWF9jnKSoa+UXmt4IK6ZyCGOW/BzKkaKmDUI2M7IjknGsM7tqhcJ9HP9WD0Q5mTDIvIyIeCgc8IyrLNSooUfdiJ7hifpXFV7qqeXwW29TEHZebE= 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 1772705270130728.9698968587076; Thu, 5 Mar 2026 02:07:50 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vy5bn-00047b-B2; Thu, 05 Mar 2026 05:07:07 -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 1vy5bl-000473-QF for qemu-devel@nongnu.org; Thu, 05 Mar 2026 05:07:05 -0500 Received: from mail-switzerlandnorthazlp170120005.outbound.protection.outlook.com ([2a01:111:f403:c213::5] helo=ZR1P278CU001.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 1vy5bk-0007Sn-7T for qemu-devel@nongnu.org; Thu, 05 Mar 2026 05:07:05 -0500 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) by GV0P278MB0807.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:52::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9678.18; Thu, 5 Mar 2026 10:06:46 +0000 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::80ea:3d03:40bf:998c]) by ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::80ea:3d03:40bf:998c%6]) with mapi id 15.20.9678.016; Thu, 5 Mar 2026 10:06:46 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mHdY15oztaf8nQVkr9Ydg5aAK4RGFB8SUvrObWNGCilBs4mPzVITkALPk6G4p1fblA91w29mq64qJX14AY0vg7/AXCcpIWC7TebSyFzkhoOLUF81hc184Os4w8jfUJbGX+W1M03RdLPXfEDBw71ptxDalwAgC/e6NiqtBsDREYQxjdOB+a//rhyazXIxXA11kr+ncz+IuYjCQ3oTLcHfI6h/R+971WuTRP+98PwfZJSL6c5fLwKlX1a3Eq7vL3Wx98GRdIDpQNjGM/3CB2XK/+PIPUIw+wdPnLx/b5gg0Vd4mp6WTdYspVmO7Q5u6PgrIAd8Oqg+vs+Ka8NgutsW1Q== 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=gPc1PG8nvtwucTJfPZ+JcVu5QG/IEeSqlVzgN3AskeY=; b=d9u9Ix5x5Za081xdUP05oWgNDFvonrJrMncWzYLGhQmnD4u1fRd/W4y9ncubRlFlfMhObAgYzefJwfz4QncWgr1fEMAVfaJSXOpoy6J4U9ytCjOQ5WP7KX+xFF07GrDrZ52cCjgEgOAj0OvzKGvyKaPgdWRAj6Yf4BGm+9rDf96YqTQ2RNZgbQDJf/pWfPX+aVBW9YPGsO/G0nMK48fz5r5r4PXIyyPUUmBE3GZnABs/KPYJyulD43W5qJ1KrnubQ/r+V2+eJLyBsMjxOz/HIt5ON7jRsDo+bm30tj5bcQ+zne8z35v3qTiVMtARafsx2RogtLWYYiN9nwusNe6wiQ== 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=gPc1PG8nvtwucTJfPZ+JcVu5QG/IEeSqlVzgN3AskeY=; b=SvtT9RP4jcEAUflQ4LOgHYu0HOhhCG3cqHN8YFe9DhSC8/DmuaJC8C0QV+L9k30SOch3NFpdBBMN3UEm2kiQGHBDBCNk28puXOnIFQO1bFZ3Qrt9eX2Xg1jEEHLWlMAcFrNpeZbhkbpvOwkC+zcyBSqS9jP0thnwgzow2g6l0Fs= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epfl.ch; From: Florian Hofhammer To: qemu-devel@nongnu.org Cc: Florian Hofhammer , =?utf-8?q?Alex_Benn=C3=A9e?= , Pierrick Bouvier Subject: [PATCH v7 7/8] plugins: prohibit writing to read-only registers Date: Thu, 5 Mar 2026 11:06:05 +0100 Message-ID: <20260305-setpc-v5-v7-7-4c3adba52403@epfl.ch> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260305-setpc-v5-v7-0-4c3adba52403@epfl.ch> References: <20260305-setpc-v5-v7-0-4c3adba52403@epfl.ch> Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2714; i=florian.hofhammer@epfl.ch; h=from:subject:message-id; bh=kb+aqe8OeuQXJQsSuzJ9lhwP83ysgONNf+G2tBbMxc8=; b=owEBbQKS/ZANAwAKAZbrJ7oxX8d8AcsmYgBpqVTKDv34jxHb4oLwkoHG37jZ9utXUpLuJzo4E Wa+AgOxrGWJAjMEAAEKAB0WIQSoIHw/Sr677ZtN+EmW6ye6MV/HfAUCaalUygAKCRCW6ye6MV/H fCz8EACrfooxoNCcGY4eCp3ExblX/VCmMQb7PWI/BHczn3yjrjdFOrNV0jcvSOuaUVBt4zN+IeR FXjqxy8IDwV8ibijSiachGPP5TeQMKs0znVqwRI7+cLtJl0w+n9rKuPlRSjicb2MkhYYR53eps6 4b6Qq58uWeaAxfMSE9EGVwBLCviJ1iiJNkUrdglDCn3PIOa1ost6HKoUhyCLGXFv0WRCoTbB6YY /EUQcHXLoAVgvJHxCxB/tL3/mOnX0xxyExSlG78p+PNnYseZ1qxf4SuI0rof+Fk6WOKb7uiJ+NK WJWwdzomrcHC+BtrrC1E+DXxX15p3D4fsv4kllHz+Pfh566M0UyWuxoz8S3odgvz6rA48Nu0Fzo /W6Q0HySmphB6Fc4tPSN3Uh/p+UAmi+4YhOupA6qtq/QztlG2HOgI8Vc+MtZdLhEI45dN6E3jYR TfixgAlOIXdYASkJkX/oQ4VRG1+yjPb8tYal3Lqrqa+Pt08KG9FIWS1xgJXgO+GgrP6gI1YxnDO AfyhQKJ58wGf3btx7fzfwOVxLUX6nnjmfCfyEBLx+umfMGws1DRd3kIhbp1L0AbNNNHhe2Icznh emGIgfuxJ7PkKS+zut/5jhyHPPTdN3MFa9C4u4nFXRBlQn5GpluKJ2IXtP/TMWhXGSExKSx1y1z 4MuC6uTpbKtEBrA== X-Developer-Key: i=florian.hofhammer@epfl.ch; a=openpgp; fpr=A8207C3F4ABEBBED9B4DF84996EB27BA315FC77C Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: GV0P278CA0090.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:2b::23) To ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: ZRH2PFAD84B9AF9:EE_|GV0P278MB0807:EE_ X-MS-Office365-Filtering-Correlation-Id: 2d3a89a2-9bad-40ab-1614-08de7a9ee847 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|1800799024|366016|786006|19092799006; X-Microsoft-Antispam-Message-Info: Xe0oDprhRthN59H0idVs8S6Ofw2LPNy6pdWIZvrNMVajyFoIHhNrho6q0Y98tSvPqTWaSl3kzOcYytWxRSkg6936UCxV5/JZzODIoCgzAp1DgR0Z83ZnRbY7Lg1WR9VPp5TXxDJYrDgg/70TXYNE/3KpFOLtkOXI7iDO764R66bbwwizjBRnS314G9t6GzxfSmvlIx84dG3v+TzGF+dILkEu0jVpieILZFPBDy3sIc9e3MNlMnBOs0BIZnttt48U4Z19pOUbnuyUmjIc3uQEa9t0zL7fG3Ipp2kU6QSedR9V9vsQm7CQF78OQsrU7Z7LK/+AEEQooamCJUW+KjWXIxDYfZWcWbzYb2AO+tASpkgP7+nFVsWMb9WNrgup8FpW2LzNVx74ma36jd0MvrQX2/YSCSdeb7LljLNG3tr+d7RuHIap8/7FWEHfoFZKzKnTsroe9GpJXKTKEUcZ8DdW0EMVYEB4vIMOqTYz/CBnqdu8ksvZFKj/gxZh0u+d80sL6iQwVv3dhWNX3WvWqDQRn3ka/jEVzGY4ZcwlfV2Z3PSoKPC95NfEKJJgdOxLr9tv0alx2Kn9UdGsMoWvtKhFygsnsHjtxV2nDf7sY4V+K8GVobjiy2sUVjbGT2AddqRM0XnBnET8dfhRtjmhUwdlgEhg0KzLBxp/EGCPRxEGXJMZ796Fpo6mEMQRE5j+tl5j1Zc7vISHIKjAnlMD63HCKDb60R/g2sXvi11GF6CuMLc= 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)(376014)(1800799024)(366016)(786006)(19092799006); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Z2p1YlY3dWRqN01SRFhmdDJQZVdiTS9MT0FPbGRJQ3FmTkhFYk1XTWoyTmUw?= =?utf-8?B?MEs0UGpWWW00Z2xFcENkUjJOYXI2d29uajN0RTE2VVBsZHR2Mk1aVUIwakxu?= =?utf-8?B?NUc0RWsrdmplQ0pYOUdueis1MjlzczduZ3lwaTJMTDc4VHhBZ2tJdys0WHdz?= =?utf-8?B?bFdJTnZ5UDlmNjhLSE1SOGNMSzV0V2lrTnJlc2FZMFFFTFc4OU03R3FoN3A3?= =?utf-8?B?d1Z2NGNQUmJtZ3J4cUg3RzBxRnF5RGpMYi9tUnpkWXprdExDRXRRc05rWGx1?= =?utf-8?B?elhXM1l1SW1oZXl0Vzl5cEdHemV3K0ZPKzNXVmxYVXNhei9PeDkvTUtNNlpU?= =?utf-8?B?dStKRm9ZZExVRnhFd2t6em44TlR2VVgvQ1lhZXJFbDQ3T0pPQzNDNlNqTkl3?= =?utf-8?B?VGh1Wk1Gajk4UGhDOTlFOTYrOHBraCtCN0E5R0NrejROYnlneWI1WXJLejZE?= =?utf-8?B?Uk5mLzZKWDQ3UkFSOVFsZXdUNjVuOVZtS1ZRbEFHV01BMFVHQ3ZwbHhjNE41?= =?utf-8?B?WTBNSGRRdndZcjByQ2RqMVoxZXlJcy9Lc3J6YVBRMmhoaXBaR2VHRms2TXQz?= =?utf-8?B?WVdxZ0p0M0JIM04yTWdrMTNaZE0rVThkeGNId2lhTlNOS2JGT0Q0bDQyTUVj?= =?utf-8?B?NHk1ak9UTFZqWkRWS242L2piSk44OXo0cENpeXB5TU92QzJDQXh6WTRSVWVu?= =?utf-8?B?UkVEc0N6WmVUZ0c2WE1ZNnM4bjlmU1J4OGVvMmZsUVI5dktiVmpIVVVwQkxu?= =?utf-8?B?Z2V2TThncFBsUllxeXRQeXZoak9qK1RIRzBJODl5NGF0ZWdwNml4L2x0RXlo?= =?utf-8?B?NEJoakRmd3lDQjhRcWhobU02U244YUVWNWdXU3VORHFVc0VnbzdsL0hRR1Fs?= =?utf-8?B?YXZTS2ZqVi9SUWhWN3huRHBSL0JMQkRKTFIrWENWRUhWVElhbHJDUFIyeDRF?= =?utf-8?B?RitCbDVjWWN3aG01cjk4SVZJdWJLQ3VKZ3BxYzhDUmp6MkdjczZzOFBwdVpy?= =?utf-8?B?KzFWblMvR0Ruc3ZROHUrRFhQamJOc1NQemw5cmhMMC9EUHNwcldEaUJsM3hG?= =?utf-8?B?d3pOVDlRWVZkOXdQN24yYnN2ckh0T042Tm51em9EQUVtcmp2MHV5YU1CTGUx?= =?utf-8?B?WEVtcGI2SEVkQklmcGlSQldEZUV2MGl4OTVsck9ZQnNVUktFUEdadGVXUk9k?= =?utf-8?B?eHpRUUZZRk9kbmVrcmpOdkYzQ1Z3SFl5eXM1ckRTeldQdGx1REwzeG01aU04?= =?utf-8?B?bWh6U1hrUS9KUnlHV2xUSlJ6TEh6NVJFS29ncXlKUzE1MWQ0MlNEalBmNXpx?= =?utf-8?B?S3FPQ0FwZi8xUEFobVNzdkFEZHA3dzV5S2tIQWFndXNGMU5xM25Oa1ZhUTg3?= =?utf-8?B?RG1kTWtucDgwOVFlU0taVW5nem80OUlHRExWS2p3RjI0RklTSXlLT3FYcll3?= =?utf-8?B?YlZITmJudVVzWDhCU3ZsMGdRZUZ2YlYrL21JS2xES3dBVmdKckZxaEF2R0s2?= =?utf-8?B?SnNRL1JQd3RDZXhucXNYL0pQSlAzb3hURFZnTFVwdXA4WElOUjZxV3VMdW5w?= =?utf-8?B?QVVHSnFUMTJwMVZwQmxQQUZYQnFSRUh6TU1ZQ252M25vVWtjOHZBVS84TDNt?= =?utf-8?B?OFNxZ2VtMFFQMnRCdWduRmM4QU9pM1Q4RGlXd05OMEsycGp4N2Vtd1FmcVFG?= =?utf-8?B?MjZBaHB5dWsrTVZIcWxlU0dBUnUvKzJKQk9RRFFVYWRUaFhaWVpmdER1Z3BF?= =?utf-8?B?TmhIbkJRU1ZlVlZVT2R4eUxjSnBGbkd4T1E4Ui9jTUUveHZiNCtzeGlPVFYv?= =?utf-8?B?bmE2eDdlYUZNQTNXbFROMXBqMHFlUkIwSVovcVdEMTZIQ2VNaW95UXY3ZWN6?= =?utf-8?B?WkRYQ3Urd1V4MnI0RUx5WDUrMjhGM0lIZ0VlMXJIWXpuRkl6bDVNd3ZKMVJY?= =?utf-8?B?dXBlRnJuWGNZWW5TR0pham5uNUhpajM2Njk3WTVyaTM3MnVqRGJrSUQ5eXpl?= =?utf-8?B?bFpaM0FtWkNKWFVHVTMzUVRlN2kyMk5VWXlJN0R5TkllNDRySmI3YTBZUjFF?= =?utf-8?B?RUJqVmN4cXF6VnpEK09DM2RiN2VPOFowczJqVmhMazluQ24wQU1Md1BQK1JQ?= =?utf-8?B?K1pzZnE1Y3NlM08rcDVPTjM5eU5GTWJJKzBZMEtITVF5TVhKaG8rdnlhZ0RZ?= =?utf-8?B?d1UxQUhuU3lXWGpaMDgyTG1FS21pajBBcFZqbldLTzFYSzdsamc5UzJqY1Ba?= =?utf-8?B?clFRY084SkdpNzFUZkUyYzZVYXBoeGVPQzJNVmNjYmh3cm8vbGNGODJCVzEr?= =?utf-8?B?RHVnMk9Rc3FvMlFRYmJ4T3F1V0hzaHA4UllUZTkvZC9oKzN0ZlRSc28xaXpN?= =?utf-8?Q?hsNH8VuWdTUI5OP4=3D?= X-OriginatorOrg: epfl.ch X-MS-Exchange-CrossTenant-Network-Message-Id: 2d3a89a2-9bad-40ab-1614-08de7a9ee847 X-MS-Exchange-CrossTenant-AuthSource: ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Mar 2026 10:06:45.5368 (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: 8FfH/Oh42/zsNqmnMFVmvfrrX5t0TjpRJs5mYoMOEx/L0GwgJtK6eFcRcZbDpgj6WJEagf/GZu+dCg/N/VJBQiqDryKMz25GLAmUF8FBC5A= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV0P278MB0807 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:c213::5; envelope-from=florian.hofhammer@epfl.ch; helo=ZR1P278CU001.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @epfl.ch) X-ZM-MESSAGEID: 1772705270386158500 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. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Pierrick Bouvier Signed-off-by: Florian Hofhammer --- plugins/api.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/plugins/api.c b/plugins/api.c index 85b34949cb..0c348a789b 100644 --- a/plugins/api.c +++ b/plugins/api.c @@ -424,6 +424,7 @@ static GArray *create_register_handles(GArray *gdbstub_= regs) for (int i =3D 0; i < gdbstub_regs->len; i++) { GDBRegDesc *grd =3D &g_array_index(gdbstub_regs, GDBRegDesc, i); qemu_plugin_reg_descriptor desc; + gint plugin_ro_bit =3D 0; =20 /* skip "un-named" regs */ if (!grd->name) { @@ -431,7 +432,6 @@ static GArray *create_register_handles(GArray *gdbstub_= regs) } =20 /* Create a record for the plugin */ - desc.handle =3D GINT_TO_POINTER(grd->gdb_reg + 1); desc.name =3D g_intern_string(grd->name); desc.is_readonly =3D false; if (g_strcmp0(desc.name, pc_str) =3D=3D 0 @@ -442,7 +442,9 @@ static GArray *create_register_handles(GArray *gdbstub_= regs) || g_strcmp0(desc.name, rpc_str) =3D=3D 0 ) { desc.is_readonly =3D true; + plugin_ro_bit =3D 1; } + desc.handle =3D GINT_TO_POINTER((grd->gdb_reg << 1) | plugin_ro_bi= t); desc.feature =3D g_intern_string(grd->feature_name); g_array_append_val(find_data, desc); } @@ -467,7 +469,7 @@ bool qemu_plugin_read_register(struct qemu_plugin_regis= ter *reg, return false; } =20 - return (gdb_read_register(current_cpu, buf, GPOINTER_TO_INT(reg) - 1) = > 0); + return (gdb_read_register(current_cpu, buf, GPOINTER_TO_INT(reg) >> 1)= > 0); } =20 bool qemu_plugin_write_register(struct qemu_plugin_register *reg, @@ -475,13 +477,16 @@ bool qemu_plugin_write_register(struct qemu_plugin_re= gister *reg, { g_assert(current_cpu); =20 + /* Read-only property is encoded in least significant bit */ + g_assert((GPOINTER_TO_INT(reg) & 1) =3D=3D 0); + if (buf->len =3D=3D 0 || (qemu_plugin_get_cb_flags() !=3D QEMU_PLUGIN_CB_RW_REGS && qemu_plugin_get_cb_flags() !=3D QEMU_PLUGIN_CB_RW_REGS_PC)) { return false; } =20 - return (gdb_write_register(current_cpu, buf->data, GPOINTER_TO_INT(reg= ) - 1) > 0); + return (gdb_write_register(current_cpu, buf->data, GPOINTER_TO_INT(reg= ) >> 1) > 0); } =20 void qemu_plugin_set_pc(uint64_t vaddr) --=20 2.53.0 From nobody Sun Apr 5 13:12:32 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=1772705266; cv=pass; d=zohomail.com; s=zohoarc; b=fvChLv927rPocZC125ojDOXxY/AUPT09QbGeQ1bB1oi6DHfXJ9HodgypugrNlydHQwLcaaMQmh5reHj8X3AmWA3kT/pUTUmPXsLX27QdEBp6EFrpXXAiQJSl79i+QAqmZ301tPbpNiB99NDCu5+3osjSpBk3+fwslcYR8rwu9w0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772705266; 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=kOjK6YhwJ94VZK4T+jVI26G7yyZoxBwuS9BkoveV5L8=; b=IZ+E0k5pvl+U0Fum4oEW21UK4qZXPx3xpwYG1ZrndwKm32FnmSWB/K4Uy2nz6dCjsR/8k5sss59hpTkokgOjD18awvQQ/qbwmHVxjzUF82DwgHID40AxD7FVSpUraqbUP2E0RCx8/XoYg6ON8z/Oudtw225aSobL5JekU9WX+dE= 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 1772705266537616.5299677788074; Thu, 5 Mar 2026 02:07:46 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vy5bp-00048P-P8; Thu, 05 Mar 2026 05:07:09 -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 1vy5bn-000487-US for qemu-devel@nongnu.org; Thu, 05 Mar 2026 05:07:07 -0500 Received: from mail-switzerlandnorthazlp170120005.outbound.protection.outlook.com ([2a01:111:f403:c213::5] helo=ZR1P278CU001.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 1vy5bm-0007Sn-9B for qemu-devel@nongnu.org; Thu, 05 Mar 2026 05:07:07 -0500 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) by GV0P278MB0807.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:52::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9678.18; Thu, 5 Mar 2026 10:06:46 +0000 Received: from ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::80ea:3d03:40bf:998c]) by ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM ([fe80::80ea:3d03:40bf:998c%6]) with mapi id 15.20.9678.016; Thu, 5 Mar 2026 10:06:46 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AHTzQdrqrpHXGXJTWEPGcN2uhwPJRrllVPC3hB7CyGpyXLOPLL4Cb1Tpondg8AtTBv0Y1Y6BNLVb760mgrnE0SvwwLiVGe3SRvraQI7meK3YU8qbL89tEiPU/BAXQA8iSlTKJvhCYetIHbKMtaP6OdYufiiTSkL2lbDRrYPjoA7SUhnkM1TSkbNKZQ8ElZmFoVVBqNAyv7cx9D7LuVSPkeUaXoBFkA0tyWA90uwVAvOP8SMtDHX9ovNUIYKM03qxFM8370AoPyxjYsKXVTRkUQf9Ll5rA4tOcyZNN6ThWxDlTphb6ju7zYqSZzvlIs8YcAsMlps/Mx6FoHO01HH65Q== 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=kOjK6YhwJ94VZK4T+jVI26G7yyZoxBwuS9BkoveV5L8=; b=IspHW/RGwmPH4c+9aTI059jBg6g7Akzkt4vz/pPfSQoxA47XZ8vvS4GN6ht+yVsYeYkGeMIIPLSePQ9Iq7t7MH5yR47QKksJ17K3sCn+agrxxM9UEgh8gW5Z0MLwjkIFEw0+bLmFTxbaOSHppluUX4tzM8cfmXAht0DFAnwr3xVeczrFy90jOLsUyUkPhoqdxjZRjxwV98JDZhhKueL23SzaZosfHT+iKAYLt+aGluovw8VHhLbl1/j+zYyQ2ZjjAns/mdf46kgMvxSJTVSBAbkFL2SDDm3ESoSwmmD+j3cUGaHsdusDdLSDX2NgzhEdrgjKPsIsLdzFseHIbcX3iQ== 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=kOjK6YhwJ94VZK4T+jVI26G7yyZoxBwuS9BkoveV5L8=; b=fhOc8tUB8bEcqtgizDzuS3d9gVyGsoAFTuXJIWC0YRiflnKuA1FrG+xBBSDaFhJIiUqMuQOHalI10BQD27SjFiS+sT4uOeMytYdD31r/NoFVDVNt1QkhvX180Dfhmfa97/KpurbLexVXQZJWsWc3733SX5bjf4DEEG6WMUKxblM= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epfl.ch; From: Florian Hofhammer To: qemu-devel@nongnu.org Cc: Florian Hofhammer , Pierrick Bouvier Subject: [PATCH v7 8/8] tests/tcg/plugins: test register accesses Date: Thu, 5 Mar 2026 11:06:06 +0100 Message-ID: <20260305-setpc-v5-v7-8-4c3adba52403@epfl.ch> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260305-setpc-v5-v7-0-4c3adba52403@epfl.ch> References: <20260305-setpc-v5-v7-0-4c3adba52403@epfl.ch> Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3940; i=florian.hofhammer@epfl.ch; h=from:subject:message-id; bh=DsPVfVyCgkD6lMdW7JqG+hheJEMS9k5/3gWt+eljOH4=; b=owEBbQKS/ZANAwAKAZbrJ7oxX8d8AcsmYgBpqVTLv+U9hsgM23AqzV7Jw6tw8E8GE5Wvnh8NH XiOSoWtJ0iJAjMEAAEKAB0WIQSoIHw/Sr677ZtN+EmW6ye6MV/HfAUCaalUywAKCRCW6ye6MV/H fIfbEADYX1KKS4gg4HCfRW/b6ETLG3iYa7V5OPAOjD+87A3FB+6QCJqMV39keltyttury0+iq++ 8Ua7ESdOlaAMZfyPBWFwE9VGSv93YUZ2Vl3GJaf4e4Qv0G1S8TwasVPTmb9KU1MgB3LE+I6pHK1 yQQeV+SsUI6+IzUpYPrEqj12FM4X07cK87JC+rqBmGY7dEm+RalGfDE3dNJ8D94TSQoQR0zqzxD 8CPZ6WBjz28OOpGDGae6upcbXhawErQbpmERDCE2SXzNQdrC52t1ExXkM5QHub1Y1KlWgzvmHVV thv2aP+uyna0Eky7/r4UwcAVqw76T3Zsvhm1rLlDQN2S66wxcsS7XVGvfCGTwtozur8VSdK+CjM puRjbfXflZ6EG8FtlrliLpfUHw19OAM9hT0PCwfeoS6tRBluHp2O5JL5JzW+gFetHb3yS+gb04q uziZ0CIZA3SY+FXaFBTJ2NnVZJ+/jfL/JoZ+objqhUhrt6X4GVUcK5auE+D/zHfc0vYzDZEm4dR 4B7kkyTTcsDf3KO7hgYKtjp/DeKy9ED+axHHyxTFsK4/z3/HzFELeD6sFbwoU/QnJ3jP1b6EFTY yV4W9CkZMHs1jW/JOziNeV6ajnUUT2wcNvj/sh45vSndbHAqc4rcxA4tkiB1cmSIEYIjVp4flZ3 8ULsVSVn9dco73w== X-Developer-Key: i=florian.hofhammer@epfl.ch; a=openpgp; fpr=A8207C3F4ABEBBED9B4DF84996EB27BA315FC77C Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: GV0P278CA0090.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:2b::23) To ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM (2603:10a6:918::220) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: ZRH2PFAD84B9AF9:EE_|GV0P278MB0807:EE_ X-MS-Office365-Filtering-Correlation-Id: f18d8647-20ee-46fd-4939-08de7a9ee88d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|1800799024|366016|786006|19092799006; X-Microsoft-Antispam-Message-Info: WHwGmB4e4G0IMPadM3ltjhpEL4bG4Ss2H1Rec+4zeoOlyYchwytIJ5VrITqHjXM0vPfi4RRiHUH2WfGwbJS7108nMV6CDo9bNLXd1kQYkpSktw7SMhVA5ocZuTk6lk0O4cUaMAwSynlZ71k0kaMVSYvGv7oVm+ef/uHFyyiQ86jeY/n7QOcjrBXS73X2rYWtiTe6h3o1AXC3kSIY0TNZ6f7GC1ghG5KOnVB/p8b9MpXpJt4GMD1xTbQ+QvE29HGvc+VsOJFgpudwBBAD3mIu1LjU+S0Qi++7RayKSzoFPTPBLJ8vAl+cu8+PhcadimUS+xxsGr5YpBKwnfLDp+A/VHaBkb3BoURtZaUpLn6YrS0Ot9Vx/9dUp57gq6ozAINGgau7VT0uLxX6fCwSXQI2BeC2P0cD6Ae6n3dWDjSwqYRi0ZSpXoymMhzY3wHU/+8Ugb/sojxk80p2/R1o8nwxYWjI0nRDt/0O1HOkf8qW3/J6hIIuO7oiXh1GbAsctpWueXSssAnlX+F2UchSSZmppm2a3Hi79K4PW0JOnt8KUik3cLjXLSplCgPdvyRDUOPG2quRbBlGsM/ru1rHYvuIrSbLKNC0qF6YfkI8mvwDygPy0VC284nThGcoznledfq9A3m9mRIlJNswHov5yFTw6h5lUyltD1x2Pc2O+Q9eg+vWNb0VTBteVdXVdZ0nGzJV8U+hDcyzCZWeIEIUgOlOODIo1KubtQf9nypJE0sV3GI= 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)(376014)(1800799024)(366016)(786006)(19092799006); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VW4xWGoyYnc0RVNRY3J2ZHhGSFQ5aEVBRjA4RlpucEkrbXI2aXU2eTRaVk1x?= =?utf-8?B?MFRZNmZYckFPVGdoS2lBOU4yd2hBeThQSThuTTdtTTBISVJ4WjhLNmh3NGVh?= =?utf-8?B?VitNL0lXZ1NybzRCdVd0dU04eGZPbGVoZUNoSW9tSnFQWXdNdlVIdytKM0pS?= =?utf-8?B?bXhsK0lLejQva1pPTk9lZGROamYxako2TG43cTBQWU1NdkErakNLdUtXMUVE?= =?utf-8?B?NUoxNDNZR3RrbTRvQ1FqcUVPdWVwS1JHME51cmZpeU1HUERnWi9mZXRhWWFL?= =?utf-8?B?eDVqelRZSHVPS1FXZndYbDJtTktWZTh6OC80QklEUEpZR0JCZWNwZjJHeUxa?= =?utf-8?B?a2V3aGZLY2FsTHlXRzhKZlZENlRmMzEzQks2VUtORzdFbzhvVUZIYyt1SitR?= =?utf-8?B?RlVUWWxpZGhaVTJUeWl3NWY5dHI1RVlIN0xMT0JWUkI3MlRYWGljdE5YVk15?= =?utf-8?B?WHhZV0doSzkzV0g1QUNKK2VhcTUzRmlvSVFVK05GQ3plMzMrTWQxQkRMakdQ?= =?utf-8?B?TmhjWHFMQ0xhVHZXZmRwVnFiV1FJQnI0QkJLNElxam5VV1RReFRaalliUWt1?= =?utf-8?B?RG03SEJhYUJHQUZ1Vm5tUkhFb3NxRXBLU3RDajBtVUJwUzhza1M2NWowb2V4?= =?utf-8?B?RDVwN1Zna3ZZeCtSRGYzRUROdVVKTWVibFc5c0JCNVNhUFZxcE5leTFlZFhS?= =?utf-8?B?UllTVzVCTTZ4VDZuRDNQMkJyZHdkSzBoWFN4U1gxOERHSjNQQVNKVitmWnEw?= =?utf-8?B?MjlRMjBrd0tZWWJBTHF0akJJZFNqVmdsMmFrNHlaYmtNZkFucHAwWkxvc1h4?= =?utf-8?B?VitvYURObmhSM0U3TEhZdElRUklGZEIza2RlRHFnK0FCdW96bWhZUVFQQUpx?= =?utf-8?B?aXNOdFRyYVpzSnYvYXBNMi91LzdKM0lmZTVnZmtBWlJIN2s1U2JXVUYybXI0?= =?utf-8?B?NUNiQVg0a1F1Wit4MlJua1c3dFRpMmw3NWZ0S1IwRE9MMmFlTkVpNENKZEt4?= =?utf-8?B?bkQvNXo0U3VxNCttYmR6QlhNTlNRMDlBM1ZPRWVlN0pQK0tuclV6Y0Q2Z0hO?= =?utf-8?B?VnFsWFRJVVFqZWFESmk1UUluU1NFZDF2M2Jxbi9jTXFSSDlZNWZZM2s5blVm?= =?utf-8?B?czZCdTVDQWhhNHRRNGhkMHRhYmNNVnIydzc5MVVlODBKMzFPRzFuYkVHTzhy?= =?utf-8?B?WEQ0d25iUU5sZTlPQjQzeWQ2cHJEbkdZbVJMdUx1YkJBejArQk9pNFA5MjhD?= =?utf-8?B?K09ROWpaRHcrWHI0bmhydVQxZXBwRjNhNFZLOHF2ME51YlZ4Nko4K3gzRkNF?= =?utf-8?B?T1FsRm9qSVY0UVlNczhBUjRIT2pWYm9DTzRWaFM3WHFUZlRMQWVRTng3Ykt1?= =?utf-8?B?Q2RSWkVJcXpjcU5IWW9rbmRXRTRtaEJpQVVlSGdXVUQ3clFNaWc2YkUyWFJv?= =?utf-8?B?ckJaWHFkY3ZyVjlOWmx1K1hSUENpVXgwTXAzb3QwdnJsOE1VdDB5aG5XcUdI?= =?utf-8?B?ZEJQdXp6WG1PUEUxR1VCL2lraUN4YkMzREV0VUQyYmtKMmx6WlYzUkpma1pp?= =?utf-8?B?eG9ieE1ZVmFNSXNXdWczbmkzSTFBUGJMSW1BSW1XN3dtVnBwM1lYRUh0aUp0?= =?utf-8?B?dXhsK2paZFE2UE1rbVNWWWlhbmpKL0hUajN5TjU2MEUxdmtlRG9oRVNyZ1J5?= =?utf-8?B?NzdFV3VmN3pJS2tHY0k5OWt2eDFVMmJFRzh2ZHJxeW40WnVqQngzTTI1R1hk?= =?utf-8?B?Ni9PL0tzSUljdHR4dktpNkcrY2MrVlFpRm1iWkhQMjhHVzFUTkVzT2hrQTgz?= =?utf-8?B?RFB3dWRMNkhWTWlsVnhTOFh0NVB6aURPZ1ZpeEd5VE5qdEZZbXRmSUZTRnIv?= =?utf-8?B?QW10dE9wc3dDa3JzZE5YZFFpcnljK0RLRGVnZ1ovRmtKSGNFZG1vaVVPdkcz?= =?utf-8?B?Zk5WZnlEM0JZRDFqK1RvYjd4djgyN0hCaEs1a25GdzRXTnNqN0ZhVXBOVXgy?= =?utf-8?B?NmMwTE1ybUhxMlBvT2hYYTY3Q0daTDRpaEN0dElKMEJYUW93NnRtZ21WQ0xj?= =?utf-8?B?cGJNdFJ2QXZIdzdQTVB4dVBUcXQ1bWhkbjhzRDdLbUZlTDhLVlVKUUVJVXVK?= =?utf-8?B?TVNCT0NMa0JkUmpyRlZ6b0F2alkvN1pwcDBRTTBPODEzYUpaa2gvbnpHekhN?= =?utf-8?B?MmJSRnBLT2hmTFFyajBRa0ZnclpzdVc0b1dxNUNZMVY3SVBqMDdHdmZNMjdV?= =?utf-8?B?M1MwWVFvK2QyN2E1OFhrYndhaWtmazlPQ2NzWE9MVGxOYllPV05Yd2hGQXBO?= =?utf-8?B?Y2NMY1ozK1RoVHJTZkVDQm5Bb1BZTUpHR1ZqQzZ4NGRyYnRoZ1lJNy84Y0N3?= =?utf-8?Q?qy9xxXdd75uHPdsw=3D?= X-OriginatorOrg: epfl.ch X-MS-Exchange-CrossTenant-Network-Message-Id: f18d8647-20ee-46fd-4939-08de7a9ee88d X-MS-Exchange-CrossTenant-AuthSource: ZRH2PFAD84B9AF9.CHEP278.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Mar 2026 10:06:45.9558 (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: Mmcp4qq4rTwY4mIOYWI3qNNrlFUMRNM3ohrl0cOyZX2vVlrOblwKY/zTSIwNtCVN4vnfAa6AwMlmToyeROhlHNuXjaHehs8jscc/iUYxA5A= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV0P278MB0807 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:c213::5; envelope-from=florian.hofhammer@epfl.ch; helo=ZR1P278CU001.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @epfl.ch) X-ZM-MESSAGEID: 1772705268754158500 The additional plugin tests register accesses, specifically both for read-only and read-write registers. Writing to a read-only register is currently not tested, as this would trigger an assertion and fail the test. Reviewed-by: Pierrick Bouvier Signed-off-by: Florian Hofhammer --- tests/tcg/plugins/meson.build | 1 + tests/tcg/plugins/registers.c | 79 +++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 80 insertions(+) diff --git a/tests/tcg/plugins/meson.build b/tests/tcg/plugins/meson.build index b3e3a9a6d0..d7f8f0ae0a 100644 --- a/tests/tcg/plugins/meson.build +++ b/tests/tcg/plugins/meson.build @@ -6,6 +6,7 @@ test_plugins =3D [ 'insn.c', 'mem.c', 'patch.c', +'registers.c', 'reset.c', 'setpc.c', 'syscall.c', diff --git a/tests/tcg/plugins/registers.c b/tests/tcg/plugins/registers.c new file mode 100644 index 0000000000..6d627c7037 --- /dev/null +++ b/tests/tcg/plugins/registers.c @@ -0,0 +1,79 @@ +/* + * SPDX-License-Identifier: GPL-2.0-or-later + * + * Copyright (C) 2026, Florian Hofhammer + */ +#include "glib.h" +#include +#include +#include +#include +#include +#include + +#include + +QEMU_PLUGIN_EXPORT int qemu_plugin_version =3D QEMU_PLUGIN_VERSION; + +/* + * This plugin tests whether we can read and write registers via the plugin + * API. We try to just read/write a single register, as some architectures= have + * registers that cannot be written to, which would fail the test. + * See: https://lists.gnu.org/archive/html/qemu-devel/2026-02/msg07025.html + */ +static void vcpu_init_cb(qemu_plugin_id_t id, unsigned int vcpu_index) +{ + g_autoptr(GArray) regs =3D qemu_plugin_get_registers(); + g_assert(regs !=3D NULL); + g_autoptr(GByteArray) buf =3D g_byte_array_sized_new(0); + qemu_plugin_reg_descriptor *reg_desc =3D NULL; + bool success =3D false; + + /* Make sure we can read and write a register not marked as readonly */ + for (size_t i =3D 0; i < regs->len; i++) { + reg_desc =3D &g_array_index(regs, qemu_plugin_reg_descriptor, i); + if (!reg_desc->is_readonly) { + g_byte_array_set_size(buf, 0); + success =3D qemu_plugin_read_register(reg_desc->handle, buf); + g_assert(success); + g_assert(buf->len > 0); + success =3D qemu_plugin_write_register(reg_desc->handle, buf); + g_assert(success); + break; + } else { + reg_desc =3D NULL; + } + } + g_assert(regs->len =3D=3D 0 || reg_desc !=3D NULL); + + /* + * Check whether we can still read a read-only register. On each + * architecture, at least the PC should be read-only because it's only + * supposed to be modified via the qemu_plugin_set_pc() function. + */ + for (size_t i =3D 0; i < regs->len; i++) { + reg_desc =3D &g_array_index(regs, qemu_plugin_reg_descriptor, i); + if (reg_desc->is_readonly) { + g_byte_array_set_size(buf, 0); + success =3D qemu_plugin_read_register(reg_desc->handle, buf); + g_assert(success); + g_assert(buf->len > 0); + break; + } else { + reg_desc =3D NULL; + } + } + g_assert(regs->len =3D=3D 0 || reg_desc !=3D NULL); + /* + * Note: we currently do not test whether the read-only register can be + * written to, because doing so would throw an assert in the plugin AP= I. + */ +} + +QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id, + const qemu_info_t *info, + int argc, char **argv) +{ + qemu_plugin_register_vcpu_init_cb(id, vcpu_init_cb); + return 0; +} --=20 2.53.0