From nobody Fri Dec 19 04:16:58 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1746436029; cv=none; d=zohomail.com; s=zohoarc; b=Ly5GNTQ/gICMhHGrB4RwmXwWsoAeAivARM9aNY8Wdo+uLVUC7NeoyYHDGvhHRcb0/s4FPx2TK8eIShimUi75g0K26LdyBskAn36+KoooZwTiOF1B5jNP6m/OuewDlzwUlFWfe/B0WV0yP5CrNYiPsyKubO//SnjtshvMgozH/Es= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1746436029; h=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=Mw4zjX331whPZydElb6cuU4EVi3NIpMKv0u+/LVyEAw=; b=AEtezAy2jqfslZxNvPqCUJ2fAcTmspgF+u/tuHM+R74tYun7tTTxTDwGEr5v3i2YmjF6yFJJJzV5NmXwVsK0k2LGQQZ+soUQIzg25LBISJFjXa4P9d2q5vIUGbJgzkF2p54wvkwf0yfbGm/DjjShBKj4ap7gmeFa3JSZ2JwW0oA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1746436029992546.6011273575899; Mon, 5 May 2025 02:07:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uBrlQ-0003qS-Km; Mon, 05 May 2025 05:05:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uBrkq-0003Vy-Me for qemu-devel@nongnu.org; Mon, 05 May 2025 05:04:53 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uBrkk-0005j8-Ii for qemu-devel@nongnu.org; Mon, 05 May 2025 05:04:49 -0400 Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-520--I69-UzWNmmT1_bwcVRxdw-1; Mon, 05 May 2025 05:04:44 -0400 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-3912fe32b08so1757502f8f.3 for ; Mon, 05 May 2025 02:04:44 -0700 (PDT) Received: from [192.168.10.48] ([151.95.54.106]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a099ae0bc0sm9614734f8f.20.2025.05.05.02.04.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 May 2025 02:04:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1746435885; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Mw4zjX331whPZydElb6cuU4EVi3NIpMKv0u+/LVyEAw=; b=NNDoAIFzJYC+V1XWq1RIr6mJ9TRioKdrbQ44RdkjuRxfUWS/GbdcCBis+1C1zFbNJrVDsv yDKz6GadDzKdMK0UHUWS6kANijz1r9pjh+ASjY02haQqAyKG/3evRcQuy/ndE2mYd65lm7 phaxTj6Gcm9OplxuY15AlQT6uqo/ElE= X-MC-Unique: -I69-UzWNmmT1_bwcVRxdw-1 X-Mimecast-MFC-AGG-ID: -I69-UzWNmmT1_bwcVRxdw_1746435883 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746435882; x=1747040682; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Mw4zjX331whPZydElb6cuU4EVi3NIpMKv0u+/LVyEAw=; b=lJRJAHvgY2xdwZH6A+63nK8z+s9l8d6vg2j7X1gvfN/eM7Ou5STqsx1zFN4fwPUwsN O0SF9qUlG+E1KYR8siH09evkQd8utqs3Bh87tQ5woENBZ2gkXTIRUdfagiVhyzCBDjAP IjmYjpdhC3d0/1OL2aMUEl8YoMS6C5pefKYrKuHQIwEhZVXo9+yLeoy07aSGUCQnzCLM NMu20jll+yuCXQfserK1TgHugycoMUZ/Gsn0zmnOTCd7C9w36HH+R9ADgCVg5dNiV3B0 s1fGNIH3Krq4XMCs8zIRne3d+BpKUdchf1BYfH3Sjg1h7/iy6bFO2+McBcHKQ39msCU+ z0Ig== X-Gm-Message-State: AOJu0Yw2huiTJ/2OjSakLmwtuj+UJ9YX43BDkRk9FnmWLhP2+UiP0z3g xi2DE30J1iILqdB5wRbAwmPjJkM4+mEGtzhO4Lv8KyEfvmtYSCU0TKywziFFIiUt0hmrv8FILVi 459Ma7DduEKVZpBMXB2F0jGI3fIkMnm0rTdKOAN2ZQsL3+mOz2VfZ8vdyUcXHgfrb8201JuIJzY hQwR+1C+X+YRHL/6TIf3T8KxGTgbD+EL0MxNKd X-Gm-Gg: ASbGncst9LY/zWMlzNs6cLwM9fFOBR+2o3NpffXT4EEOkXlweKdrZt/JY4KXtu55StF iA+iWtQB7IzFv0cHDJVyhEYHuJVzaWV+0ejLxwKTXP1fRBUjy3xOuKyoImtqP435zJ0azTi+fqE 9sUHPPUWK6aZ12fUzgJ8kQpctc8t9+om7AonDWrCkY8rkKj9g9CvA/gpcAJgmh6eTPVcRpzlF0n ihZOBbALMttmqdOxMMNuL1B+5Umu75gZFYz3er1STMmRPvrWZ72P3FpAfTqGgPoSbZhDB92XmQL LHMt0ZKq30jb0C0= X-Received: by 2002:a05:6000:2503:b0:3a0:6c62:8169 with SMTP id ffacd0b85a97d-3a09ceb8cb3mr5636886f8f.25.1746435882526; Mon, 05 May 2025 02:04:42 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEd/eVO2/BC8UeW5ZbWiCh3HKSqvPohpKpqLahcQsUiWJTOVr7kWLStVgUomPKNyCU6cTaiHg== X-Received: by 2002:a05:6000:2503:b0:3a0:6c62:8169 with SMTP id ffacd0b85a97d-3a09ceb8cb3mr5636831f8f.25.1746435882032; Mon, 05 May 2025 02:04:42 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: manos.pitsidianakis@linaro.org, qemu-rust@nongnu.org Subject: [PATCH 01/11] lcitool: use newer Rust for Debian and Ubuntu Date: Mon, 5 May 2025 11:04:26 +0200 Message-ID: <20250505090438.24992-2-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250505090438.24992-1-pbonzini@redhat.com> References: <20250505090438.24992-1-pbonzini@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -44 X-Spam_score: -4.5 X-Spam_bar: ---- X-Spam_report: (-4.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.411, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1746436030978019000 Content-Type: text/plain; charset="utf-8" On Debian, the rustc-web package provides a newer Rust compiler (1.78) for all architectures except mips64el. On Ubuntu, Rust versions up to 1.80 (?) are available as of this writing for both Jammy (22.04) and Noble (24.04). However, the path to rustc and rustdoc must be provided by hand to the configure script using either command line arguments or environment variables. Signed-off-by: Paolo Bonzini --- docs/about/build-platforms.rst | 11 ++++++++--- scripts/ci/setup/ubuntu/ubuntu-2204-aarch64.yaml | 2 +- scripts/ci/setup/ubuntu/ubuntu-2204-s390x.yaml | 2 +- tests/docker/dockerfiles/debian-amd64-cross.docker | 2 +- tests/docker/dockerfiles/debian-arm64-cross.docker | 2 +- tests/docker/dockerfiles/debian-armhf-cross.docker | 2 +- tests/docker/dockerfiles/debian-i686-cross.docker | 2 +- tests/docker/dockerfiles/debian-mips64el-cross.docker | 2 +- tests/docker/dockerfiles/debian-mipsel-cross.docker | 2 +- tests/docker/dockerfiles/debian-ppc64el-cross.docker | 2 +- tests/docker/dockerfiles/debian-s390x-cross.docker | 2 +- tests/docker/dockerfiles/debian.docker | 2 +- tests/docker/dockerfiles/ubuntu2204.docker | 3 ++- tests/lcitool/mappings.yml | 5 +++++ tests/lcitool/refresh | 5 +++-- 15 files changed, 29 insertions(+), 17 deletions(-) diff --git a/docs/about/build-platforms.rst b/docs/about/build-platforms.rst index 52521552c8a..29f36f8eb42 100644 --- a/docs/about/build-platforms.rst +++ b/docs/about/build-platforms.rst @@ -118,9 +118,14 @@ Rust build dependencies include bindgen or have an older version, it is recommended to install a newer version using ``cargo install bindgen-cli``. =20 - Developers may want to use Cargo-based tools in the QEMU source tree; - this requires Cargo 1.74.0. Note that Cargo is not required in order - to build QEMU. + QEMU requires Rust 1.77.0. This is available on all supported platforms + with one exception, namely the ``mips64el`` architecture on Debian bookw= orm. + For all other architectures, Debian bookworm provides a new-enough Rust + compiler in the ``rustc-web`` package. + + Also, on Ubuntu 22.04 or 24.04 this requires the ``rustc-1.77`` + (or newer) package. The path to ``rustc`` and ``rustdoc`` must be + provided manually to the configure script. =20 Optional build dependencies Build components whose absence does not affect the ability to build QEMU diff --git a/scripts/ci/setup/ubuntu/ubuntu-2204-aarch64.yaml b/scripts/ci/= setup/ubuntu/ubuntu-2204-aarch64.yaml index dbcd2e076de..f11e9808267 100644 --- a/scripts/ci/setup/ubuntu/ubuntu-2204-aarch64.yaml +++ b/scripts/ci/setup/ubuntu/ubuntu-2204-aarch64.yaml @@ -114,7 +114,7 @@ packages: - python3-venv - python3-yaml - rpm2cpio - - rustc + - rustc-1.77 - sed - socat - sparse diff --git a/scripts/ci/setup/ubuntu/ubuntu-2204-s390x.yaml b/scripts/ci/se= tup/ubuntu/ubuntu-2204-s390x.yaml index 4b8ee3d885d..6559cb29343 100644 --- a/scripts/ci/setup/ubuntu/ubuntu-2204-s390x.yaml +++ b/scripts/ci/setup/ubuntu/ubuntu-2204-s390x.yaml @@ -112,7 +112,7 @@ packages: - python3-venv - python3-yaml - rpm2cpio - - rustc + - rustc-1.77 - sed - socat - sparse diff --git a/tests/docker/dockerfiles/debian-amd64-cross.docker b/tests/doc= ker/dockerfiles/debian-amd64-cross.docker index 05355854285..081f3e00f7b 100644 --- a/tests/docker/dockerfiles/debian-amd64-cross.docker +++ b/tests/docker/dockerfiles/debian-amd64-cross.docker @@ -50,7 +50,7 @@ RUN export DEBIAN_FRONTEND=3Dnoninteractive && \ python3-venv \ python3-yaml \ rpm2cpio \ - rustc \ + rustc-web \ sed \ socat \ sparse \ diff --git a/tests/docker/dockerfiles/debian-arm64-cross.docker b/tests/doc= ker/dockerfiles/debian-arm64-cross.docker index 6b1e4fc8279..91c555a36e9 100644 --- a/tests/docker/dockerfiles/debian-arm64-cross.docker +++ b/tests/docker/dockerfiles/debian-arm64-cross.docker @@ -50,7 +50,7 @@ RUN export DEBIAN_FRONTEND=3Dnoninteractive && \ python3-venv \ python3-yaml \ rpm2cpio \ - rustc \ + rustc-web \ sed \ socat \ sparse \ diff --git a/tests/docker/dockerfiles/debian-armhf-cross.docker b/tests/doc= ker/dockerfiles/debian-armhf-cross.docker index cf0fe63af91..f0e2efcda09 100644 --- a/tests/docker/dockerfiles/debian-armhf-cross.docker +++ b/tests/docker/dockerfiles/debian-armhf-cross.docker @@ -50,7 +50,7 @@ RUN export DEBIAN_FRONTEND=3Dnoninteractive && \ python3-venv \ python3-yaml \ rpm2cpio \ - rustc \ + rustc-web \ sed \ socat \ sparse \ diff --git a/tests/docker/dockerfiles/debian-i686-cross.docker b/tests/dock= er/dockerfiles/debian-i686-cross.docker index 1c84dfb9456..025beb1ce25 100644 --- a/tests/docker/dockerfiles/debian-i686-cross.docker +++ b/tests/docker/dockerfiles/debian-i686-cross.docker @@ -50,7 +50,7 @@ RUN export DEBIAN_FRONTEND=3Dnoninteractive && \ python3-venv \ python3-yaml \ rpm2cpio \ - rustc \ + rustc-web \ sed \ socat \ sparse \ diff --git a/tests/docker/dockerfiles/debian-mips64el-cross.docker b/tests/= docker/dockerfiles/debian-mips64el-cross.docker index 257204eae48..4a941dd870e 100644 --- a/tests/docker/dockerfiles/debian-mips64el-cross.docker +++ b/tests/docker/dockerfiles/debian-mips64el-cross.docker @@ -50,7 +50,7 @@ RUN export DEBIAN_FRONTEND=3Dnoninteractive && \ python3-venv \ python3-yaml \ rpm2cpio \ - rustc \ + rustc-web \ sed \ socat \ sparse \ diff --git a/tests/docker/dockerfiles/debian-mipsel-cross.docker b/tests/do= cker/dockerfiles/debian-mipsel-cross.docker index 395c84d65bc..4d3e5d711bd 100644 --- a/tests/docker/dockerfiles/debian-mipsel-cross.docker +++ b/tests/docker/dockerfiles/debian-mipsel-cross.docker @@ -50,7 +50,7 @@ RUN export DEBIAN_FRONTEND=3Dnoninteractive && \ python3-venv \ python3-yaml \ rpm2cpio \ - rustc \ + rustc-web \ sed \ socat \ sparse \ diff --git a/tests/docker/dockerfiles/debian-ppc64el-cross.docker b/tests/d= ocker/dockerfiles/debian-ppc64el-cross.docker index 1ae227ccded..22b4457ba99 100644 --- a/tests/docker/dockerfiles/debian-ppc64el-cross.docker +++ b/tests/docker/dockerfiles/debian-ppc64el-cross.docker @@ -50,7 +50,7 @@ RUN export DEBIAN_FRONTEND=3Dnoninteractive && \ python3-venv \ python3-yaml \ rpm2cpio \ - rustc \ + rustc-web \ sed \ socat \ sparse \ diff --git a/tests/docker/dockerfiles/debian-s390x-cross.docker b/tests/doc= ker/dockerfiles/debian-s390x-cross.docker index afa81a57ba8..13ec52c8ad0 100644 --- a/tests/docker/dockerfiles/debian-s390x-cross.docker +++ b/tests/docker/dockerfiles/debian-s390x-cross.docker @@ -50,7 +50,7 @@ RUN export DEBIAN_FRONTEND=3Dnoninteractive && \ python3-venv \ python3-yaml \ rpm2cpio \ - rustc \ + rustc-web \ sed \ socat \ sparse \ diff --git a/tests/docker/dockerfiles/debian.docker b/tests/docker/dockerfi= les/debian.docker index 5b3bac43ccb..0a57c1a1d37 100644 --- a/tests/docker/dockerfiles/debian.docker +++ b/tests/docker/dockerfiles/debian.docker @@ -122,7 +122,7 @@ RUN export DEBIAN_FRONTEND=3Dnoninteractive && \ python3-venv \ python3-yaml \ rpm2cpio \ - rustc \ + rustc-web \ sed \ socat \ sparse \ diff --git a/tests/docker/dockerfiles/ubuntu2204.docker b/tests/docker/dock= erfiles/ubuntu2204.docker index 88ce4ef9a9d..4a1cf2bdff3 100644 --- a/tests/docker/dockerfiles/ubuntu2204.docker +++ b/tests/docker/dockerfiles/ubuntu2204.docker @@ -121,7 +121,7 @@ RUN export DEBIAN_FRONTEND=3Dnoninteractive && \ python3-venv \ python3-yaml \ rpm2cpio \ - rustc \ + rustc-1.77 \ sed \ socat \ sparse \ @@ -150,6 +150,7 @@ ENV LANG "en_US.UTF-8" ENV MAKE "/usr/bin/make" ENV NINJA "/usr/bin/ninja" ENV PYTHON "/usr/bin/python3" +ENV RUSTC=3D/usr/bin/rustc-1.77 ENV CARGO_HOME=3D/usr/local/cargo ENV PATH=3D$CARGO_HOME/bin:$PATH RUN DEBIAN_FRONTEND=3Dnoninteractive eatmydata \ diff --git a/tests/lcitool/mappings.yml b/tests/lcitool/mappings.yml index 74eb13d62b6..673baf39367 100644 --- a/tests/lcitool/mappings.yml +++ b/tests/lcitool/mappings.yml @@ -64,6 +64,11 @@ mappings: python3-wheel: OpenSUSELeap15: python311-pip =20 + rust: + Debian12: rustc-web + Ubuntu2204: rustc-1.77 + Ubuntu2404: rustc-1.77 + pypi_mappings: # Request more recent version meson: diff --git a/tests/lcitool/refresh b/tests/lcitool/refresh index aa551aca9be..8474ea822f4 100755 --- a/tests/lcitool/refresh +++ b/tests/lcitool/refresh @@ -141,7 +141,8 @@ fedora_rustup_nightly_extras =3D [ 'RUN $CARGO --list\n', ] =20 -ubuntu2204_bindgen_extras =3D [ +ubuntu2204_rust_extras =3D [ + "ENV RUSTC=3D/usr/bin/rustc-1.77\n", "ENV CARGO_HOME=3D/usr/local/cargo\n", 'ENV PATH=3D$CARGO_HOME/bin:$PATH\n', "RUN DEBIAN_FRONTEND=3Dnoninteractive eatmydata \\\n", @@ -170,7 +171,7 @@ try: generate_dockerfile("fedora", "fedora-40") generate_dockerfile("opensuse-leap", "opensuse-leap-15") generate_dockerfile("ubuntu2204", "ubuntu-2204", - trailer=3D"".join(ubuntu2204_bindgen_extras)) + trailer=3D"".join(ubuntu2204_rust_extras)) =20 # # Non-fatal Rust-enabled build --=20 2.49.0 From nobody Fri Dec 19 04:16:58 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1746435914; cv=none; d=zohomail.com; s=zohoarc; b=UWjRLmbge6rptC140Y171oaZYZViA9fUUQsrePZYJPHKhqni/dTro7bpd3EhIs2+/7++IPqI7wErxYRK9KbGYOjCy/KJAbQuQ/nRtnTROKrYoSGyUW1eNZBrww+NpCuWzPUb+gN0qi4cH1Dv5ztXPF7osuvHEhwbmuMaDjjtKRM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1746435914; h=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=kN1TGoVTaoRIcNAwQlBZk66AaqMf/VcTftHIBmCIyig=; b=fucwxbfylVYqSJYoGXrCfXbMbZWjKY4UkCezPsM9CeYvk5XUVO6jdi4MHrjqzx/EwOC8gXxUwtqsTisQCFTd2/dq95j2IOBcfGRP0R2xTQ30YNGzRKn36fTEian0KKKSCwO5LvO5R0WsfL6MzTKSjQsqxXM2Y5re067KK83Y0Jg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1746435914829821.4397838218003; Mon, 5 May 2025 02:05:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uBrl0-0003Ys-Me; Mon, 05 May 2025 05:05:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uBrkq-0003Vx-MC for qemu-devel@nongnu.org; Mon, 05 May 2025 05:04:52 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uBrkm-0005jJ-LW for qemu-devel@nongnu.org; Mon, 05 May 2025 05:04:50 -0400 Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-588-6IFsoXO7MDOYzayrxMxBgg-1; Mon, 05 May 2025 05:04:46 -0400 Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-43cfda30a3cso19982955e9.3 for ; Mon, 05 May 2025 02:04:46 -0700 (PDT) Received: from [192.168.10.48] ([151.95.54.106]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-441b8992b4csm129623495e9.0.2025.05.05.02.04.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 May 2025 02:04:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1746435887; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=kN1TGoVTaoRIcNAwQlBZk66AaqMf/VcTftHIBmCIyig=; b=AAdi2mb0ns4gC/VBzQ06Im2vxbye7kY9vs5+F6WUjxnTgAjO41h3RDsceru9vTcgPonpkS 7BdmLdwtPR2V1DvDTpktyUuG0g36VNIyCFbD2V3wq5NXKRNsE/VnZ48mWeRqrOYQ7eb9vK n23By//c/S6HlT9cnQLl+h6H3KnUcJE= X-MC-Unique: 6IFsoXO7MDOYzayrxMxBgg-1 X-Mimecast-MFC-AGG-ID: 6IFsoXO7MDOYzayrxMxBgg_1746435885 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746435885; x=1747040685; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kN1TGoVTaoRIcNAwQlBZk66AaqMf/VcTftHIBmCIyig=; b=jbaGQ7CHaw4uFtOkuuKiWDKkBhnnflxsVn16zvKMNDhId7iCEGJ35/tExmjQvBs4/Q YC7CQxrO3TJfJv1H1cwxVv5jPhIp3RZqbfdh6NUzF+6vHiR1u3uz+vnbyJTQOxWegBOF DV3VqGOv8qIfXrwxhrKdcJw0OtOJeQW0efPNxCwdbQwBmNUpPhilIW7Be9UvxB8yh0y7 LKml4BNxA3rRQVknC98SmTOerrYTmgT0xB27HZgcCV/tyiEo2HZIQ4BRshhGrHUI6amm ieFW//tWyj6AKLGSP8fcWz+l/F7w8IbxgA5LhEX4IoJbDrinCcUfAbeYTN9opljt1XuL a78w== X-Gm-Message-State: AOJu0YxNA9jV+ljw0WL37qaMakjHlup/fhr+KnJI+ENqilRajS7TDPwt fCpSQo8awEbuzOEsTPb4V2vJ/PxFtAFDggoKaQgZdB/uA0fHIRXcCx3+JYjkTavc4yq4txc0Mmf iJA23WppqKvgGbdHeIIewcgkSidO/4Ai29Jb9loMv/ZFwQSwpUtXOZhVaexVJftVE7EjR262JKz X4I2gc1M0eYfw3xMfbRcxiLyfmn+W8sDK20Tfi X-Gm-Gg: ASbGncs/wK4GE9SVfSbFcXBv6aLtSWuXhRiI9dzfxc4exJMW9w552ufdNgSNyP1PCIY 3BUHZNDrj/6lw/V3tjl4XKaS7zUovlosoHt9yeMyhSnjftWsJuvrg/RvHYEIOPdXBrIQSN0GIYu wHnZINdcw7ZTEf/e2iaLc/wrEVm9+unw959n4QszyJeOJQkb1XZGr+R0ksHIXAi8LpszMS24zxo uLIMTKmMmTIUxPwDH71IXpaXsMpPYN9C+LhbtiS0VjwHWbBJttOZrAug/nVSwfxLIYSZTY47OCm S5Tn+WWMd6vLz88= X-Received: by 2002:a05:600c:8288:b0:43c:f689:dd with SMTP id 5b1f17b1804b1-441c48dbf43mr51099225e9.19.1746435884765; Mon, 05 May 2025 02:04:44 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHl38gFWyU13dgPDDOfB4VMq78dJaWZuKUcTbTyCJHJ8bVfnfjoJE3CXXKsmQwiye5TRTKrBw== X-Received: by 2002:a05:600c:8288:b0:43c:f689:dd with SMTP id 5b1f17b1804b1-441c48dbf43mr51098815e9.19.1746435884217; Mon, 05 May 2025 02:04:44 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: manos.pitsidianakis@linaro.org, qemu-rust@nongnu.org Subject: [PATCH 02/11] meson, cargo: require Rust 1.77.0 Date: Mon, 5 May 2025 11:04:27 +0200 Message-ID: <20250505090438.24992-3-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250505090438.24992-1-pbonzini@redhat.com> References: <20250505090438.24992-1-pbonzini@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -44 X-Spam_score: -4.5 X-Spam_bar: ---- X-Spam_report: (-4.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.411, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1746435915552116600 Content-Type: text/plain; charset="utf-8" Signed-off-by: Paolo Bonzini Reviewed-by: Manos Pitsidianakis Reviewed-by: Zhao Liu --- meson.build | 6 +++--- rust/Cargo.toml | 2 +- rust/clippy.toml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/meson.build b/meson.build index 8ae70dbe45a..e77da3f9b75 100644 --- a/meson.build +++ b/meson.build @@ -94,12 +94,12 @@ have_rust =3D have_rust and add_languages('rust', nativ= e: true, required: get_option('rust').disable_auto_if(not have_system)) if have_rust rustc =3D meson.get_compiler('rust') - if rustc.version().version_compare('<1.63.0') + if rustc.version().version_compare('<1.77.0') if get_option('rust').enabled() - error('rustc version ' + rustc.version() + ' is unsupported. Please = upgrade to at least 1.63.0') + error('rustc version ' + rustc.version() + ' is unsupported. Please = upgrade to at least 1.77.0') else warning('rustc version ' + rustc.version() + ' is unsupported, disab= ling Rust compilation.') - message('Please upgrade to at least 1.63.0 to use Rust.') + message('Please upgrade to at least 1.77.0 to use Rust.') have_rust =3D false endif endif diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 5ace47c69be..eda7980b31a 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -12,7 +12,7 @@ edition =3D "2021" homepage =3D "https://www.qemu.org" license =3D "GPL-2.0-or-later" repository =3D "https://gitlab.com/qemu-project/qemu/" -rust-version =3D "1.63.0" +rust-version =3D "1.77.0" =20 [workspace.lints.rust] unexpected_cfgs =3D { level =3D "deny", check-cfg =3D [ diff --git a/rust/clippy.toml b/rust/clippy.toml index 5d190f91dec..933e46a2ffb 100644 --- a/rust/clippy.toml +++ b/rust/clippy.toml @@ -1,2 +1,2 @@ doc-valid-idents =3D ["PrimeCell", ".."] -msrv =3D "1.63.0" +msrv =3D "1.77.0" --=20 2.49.0 From nobody Fri Dec 19 04:16:58 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1746435989; cv=none; d=zohomail.com; s=zohoarc; b=RPS+VsiA4KmcVuA/IK2cgGXc0wGstF61zm+ACFUXr9mzo9QeH6JfcwxOyzrgZ+AG6Iq4fazGx/4ZAdaLS+BG4zJB3pfomb3ZWFE/MuF5pQAP+foxuFbe5z1nQ4IaDs8zCAtVO38+2vMS/FdX6aYgyAlSNW9Hn9Vw4NFVY8JfEUY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1746435989; h=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=eJwgErAmU4ckPuc9++qP9v1e1akMhw0OVt15JuOFrhQ=; b=X2VxOOxiqcGg3oVwoqSaAgHE1Q/CgvKvTRbTs81bYtte/LA5FKmi2ws8eary9aS4z9ukYLqV4V+HDQWMLOtCfIXe8zLrRUZ9+rAton0+rCmhV00AWwizZR3FqliykDaL4QwD5FXROY+PuFf8d07v8FEBxhioRepCQtUPF4YJGfw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 174643598943765.95454910525677; Mon, 5 May 2025 02:06:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uBrlz-0004Ou-Ie; Mon, 05 May 2025 05:06:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uBrku-0003X7-9z for qemu-devel@nongnu.org; Mon, 05 May 2025 05:04:56 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uBrkp-0005jq-C2 for qemu-devel@nongnu.org; Mon, 05 May 2025 05:04:54 -0400 Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-678-pn3snHaZPeqGX5B6JPcq0A-1; Mon, 05 May 2025 05:04:48 -0400 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-39123912ff0so952582f8f.2 for ; Mon, 05 May 2025 02:04:48 -0700 (PDT) Received: from [192.168.10.48] ([151.95.54.106]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a099b16f9dsm9909520f8f.93.2025.05.05.02.04.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 May 2025 02:04:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1746435889; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=eJwgErAmU4ckPuc9++qP9v1e1akMhw0OVt15JuOFrhQ=; b=Fffrgq5gYfkT9+Q81vCF8q76VPEH5VskSVlQIxyx+QIYklg6YhggTjws8Q9eIb8Gg6wgQ5 CacUO3nZA7vBUrlZCouNfpAqeb+J7EsCjv3kskCFNY4w/nff0cay9p45p27yDAscBsnCG0 KoXjiLwvdTczaWZcXqC/QcLyJA1yxbE= X-MC-Unique: pn3snHaZPeqGX5B6JPcq0A-1 X-Mimecast-MFC-AGG-ID: pn3snHaZPeqGX5B6JPcq0A_1746435887 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746435887; x=1747040687; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eJwgErAmU4ckPuc9++qP9v1e1akMhw0OVt15JuOFrhQ=; b=nE3EBICn1XEnuOinbH8mit1ZSslj10dmfLyW7qBmKCPL4sGHIcFjO1L2K/saDOX7l0 M9Fi7Y27p+pGUmYroJGOgJkk2brAY240DZK80g1W1MU32oLbKIm+0vWDxa3ZmtxBJ3B+ CYA0bXupgKPkFJ29bPH3IDdx8+gIc1bJ+AOP5MGh/00C5df26879Cu48kPOH0qsqVzcR I3u4DLSDdqYMDAPH/xi6gIL6W0Zj5wJZiO6CxsAjgvHQUmC9GezFGao4NKqaRDM1ZFzQ jJ8CO63hESdJrghfbLoCCXOD03YCionP34bAY/HdHCChn9OB0CtsrByd9nJcjaBi3sS5 x3RA== X-Gm-Message-State: AOJu0YxtgJAbQAMc62zOnBPRR9YAc8yWNXNZErA+V/qKP0bPP7okd3sg N1Z9768xxk++bWKbaVNdV8tsViCNfNJf0H3IFIV4tu3rEmVfeXGhjCK3+WzQEvMgkKxNInryWpa Iax/EPl+s7jkUN59KZ4L0ZLufvzgCGaVOtGwl7DrpPZEOM1lvtvtFNRZnm9fyWd4l3+dzfEvP/g uEmBau0hhiS0flZa20TOSJPnPWg4HmMiaiLmkl X-Gm-Gg: ASbGncsp5HuIXE2QcsziTYlDYbTbaQdwkxSAOvVBW7GIG/UhP5Lxa9BLyTY9/VsLTvp p/BOOME4gusfmPyFt7dEL16WYCZzwqQYI8N7SDV0Wrj1pzNi2L5dZXo8Gc7Qy7debX3lAs1A9lu mrWKpgthARgFocqof7bLWUZbzeFDmbYRghz4MZS01jjfs7e3D9Zsup6DFoRtBaWFXducoUfIiVM G7jCer1/TnbqJmQoayKsyriaENYdW5yHzD68spXORJPmTAqPvEU2RrS8scaFGXBubfkpw5QM4zy 7LyeZXMTTa5Ys18= X-Received: by 2002:adf:a1c6:0:b0:3a0:a19f:2f47 with SMTP id ffacd0b85a97d-3a0a19f2f70mr2518221f8f.42.1746435886795; Mon, 05 May 2025 02:04:46 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHVsD4q3UAKkWSSg6doa0lAIb5qdD0GX3AiRrVmSOI8zmOfmTtQFX90jdzC+B8Bswws+5dlzQ== X-Received: by 2002:adf:a1c6:0:b0:3a0:a19f:2f47 with SMTP id ffacd0b85a97d-3a0a19f2f70mr2518198f8f.42.1746435886368; Mon, 05 May 2025 02:04:46 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: manos.pitsidianakis@linaro.org, qemu-rust@nongnu.org Subject: [PATCH 03/11] rust: use std::ffi instead of std::os::raw Date: Mon, 5 May 2025 11:04:28 +0200 Message-ID: <20250505090438.24992-4-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250505090438.24992-1-pbonzini@redhat.com> References: <20250505090438.24992-1-pbonzini@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -44 X-Spam_score: -4.5 X-Spam_bar: ---- X-Spam_report: (-4.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.411, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1746435990265116600 Content-Type: text/plain; charset="utf-8" This is allowed since Rust 1.64.0. Reviewed-by: Manos Pitsidianakis Signed-off-by: Paolo Bonzini Reviewed-by: Zhao Liu --- docs/devel/rust.rst | 2 -- rust/hw/char/pl011/src/device_class.rs | 2 +- rust/hw/timer/hpet/src/hpet.rs | 3 +-- rust/qemu-api/src/chardev.rs | 3 +-- rust/qemu-api/src/irq.rs | 6 +++++- rust/qemu-api/src/lib.rs | 2 +- rust/qemu-api/src/memory.rs | 3 +-- rust/qemu-api/src/qdev.rs | 3 +-- rust/qemu-api/src/qom.rs | 3 +-- rust/qemu-api/src/timer.rs | 2 +- rust/qemu-api/src/vmstate.rs | 2 +- rust/qemu-api/tests/vmstate_tests.rs | 7 ++++++- 12 files changed, 20 insertions(+), 18 deletions(-) diff --git a/docs/devel/rust.rst b/docs/devel/rust.rst index 3cc2841d4d1..c7dfba98de1 100644 --- a/docs/devel/rust.rst +++ b/docs/devel/rust.rst @@ -74,8 +74,6 @@ Supported tools QEMU supports rustc version 1.63.0 and newer. Notably, the following feat= ures are missing: =20 -* ``core::ffi`` (1.64.0). Use ``std::os::raw`` and ``std::ffi`` instead. - * ``cast_mut()``/``cast_const()`` (1.65.0). Use ``as`` instead. =20 * "let ... else" (1.65.0). Use ``if let`` instead. This is currently pat= ched diff --git a/rust/hw/char/pl011/src/device_class.rs b/rust/hw/char/pl011/sr= c/device_class.rs index b4d4a7eb432..cd2dc33c207 100644 --- a/rust/hw/char/pl011/src/device_class.rs +++ b/rust/hw/char/pl011/src/device_class.rs @@ -3,7 +3,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later =20 use std::{ - os::raw::{c_int, c_void}, + ffi::{c_int, c_void}, ptr::NonNull, }; =20 diff --git a/rust/hw/timer/hpet/src/hpet.rs b/rust/hw/timer/hpet/src/hpet.rs index 12de2ba59a1..d4364f2f2f7 100644 --- a/rust/hw/timer/hpet/src/hpet.rs +++ b/rust/hw/timer/hpet/src/hpet.rs @@ -3,8 +3,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later =20 use std::{ - ffi::CStr, - os::raw::{c_int, c_void}, + ffi::{c_int, c_void, CStr}, pin::Pin, ptr::{addr_of_mut, null_mut, NonNull}, slice::from_ref, diff --git a/rust/qemu-api/src/chardev.rs b/rust/qemu-api/src/chardev.rs index 11e6c45afaf..146a4852da3 100644 --- a/rust/qemu-api/src/chardev.rs +++ b/rust/qemu-api/src/chardev.rs @@ -10,11 +10,10 @@ //! called. =20 use std::{ - ffi::CStr, + ffi::{c_int, c_void, CStr}, fmt::{self, Debug}, io::{self, ErrorKind, Write}, marker::PhantomPinned, - os::raw::{c_int, c_void}, ptr::addr_of_mut, slice, }; diff --git a/rust/qemu-api/src/irq.rs b/rust/qemu-api/src/irq.rs index 1222d4fde30..1526e6f63a1 100644 --- a/rust/qemu-api/src/irq.rs +++ b/rust/qemu-api/src/irq.rs @@ -4,7 +4,11 @@ =20 //! Bindings for interrupt sources =20 -use std::{ffi::CStr, marker::PhantomData, os::raw::c_int, ptr}; +use std::{ + ffi::{c_int, CStr}, + marker::PhantomData, + ptr, +}; =20 use crate::{ bindings::{self, qemu_set_irq}, diff --git a/rust/qemu-api/src/lib.rs b/rust/qemu-api/src/lib.rs index 05f38b51d30..c3641e893b7 100644 --- a/rust/qemu-api/src/lib.rs +++ b/rust/qemu-api/src/lib.rs @@ -33,7 +33,7 @@ =20 use std::{ alloc::{GlobalAlloc, Layout}, - os::raw::c_void, + ffi::c_void, }; =20 #[cfg(HAVE_GLIB_WITH_ALIGNED_ALLOC)] diff --git a/rust/qemu-api/src/memory.rs b/rust/qemu-api/src/memory.rs index fdb1ea11fcf..9ef2694bd62 100644 --- a/rust/qemu-api/src/memory.rs +++ b/rust/qemu-api/src/memory.rs @@ -5,9 +5,8 @@ //! Bindings for `MemoryRegion`, `MemoryRegionOps` and `MemTxAttrs` =20 use std::{ - ffi::{CStr, CString}, + ffi::{c_uint, c_void, CStr, CString}, marker::PhantomData, - os::raw::{c_uint, c_void}, }; =20 pub use bindings::{hwaddr, MemTxAttrs}; diff --git a/rust/qemu-api/src/qdev.rs b/rust/qemu-api/src/qdev.rs index 18b4a9ba687..17c7fecabeb 100644 --- a/rust/qemu-api/src/qdev.rs +++ b/rust/qemu-api/src/qdev.rs @@ -5,8 +5,7 @@ //! Bindings to create devices and access device functionality from Rust. =20 use std::{ - ffi::{CStr, CString}, - os::raw::{c_int, c_void}, + ffi::{c_int, c_void, CStr, CString}, ptr::NonNull, }; =20 diff --git a/rust/qemu-api/src/qom.rs b/rust/qemu-api/src/qom.rs index f1b4022157b..6929e4d33ae 100644 --- a/rust/qemu-api/src/qom.rs +++ b/rust/qemu-api/src/qom.rs @@ -93,11 +93,10 @@ //! without incurring into violations of orphan rules for traits. =20 use std::{ - ffi::CStr, + ffi::{c_void, CStr}, fmt, mem::ManuallyDrop, ops::{Deref, DerefMut}, - os::raw::c_void, ptr::NonNull, }; =20 diff --git a/rust/qemu-api/src/timer.rs b/rust/qemu-api/src/timer.rs index e769f8bc910..d697fd742bc 100644 --- a/rust/qemu-api/src/timer.rs +++ b/rust/qemu-api/src/timer.rs @@ -3,7 +3,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later =20 use std::{ - os::raw::{c_int, c_void}, + ffi::{c_int, c_void}, pin::Pin, }; =20 diff --git a/rust/qemu-api/src/vmstate.rs b/rust/qemu-api/src/vmstate.rs index 9ae97c389c1..c0f29f74188 100644 --- a/rust/qemu-api/src/vmstate.rs +++ b/rust/qemu-api/src/vmstate.rs @@ -25,7 +25,7 @@ //! functionality that is missing from `vmstate_of!`. =20 use core::{marker::PhantomData, mem, ptr::NonNull}; -use std::os::raw::{c_int, c_void}; +use std::ffi::{c_int, c_void}; =20 pub use crate::bindings::{VMStateDescription, VMStateField}; use crate::{ diff --git a/rust/qemu-api/tests/vmstate_tests.rs b/rust/qemu-api/tests/vms= tate_tests.rs index f7a93117e1a..9a56ffd2385 100644 --- a/rust/qemu-api/tests/vmstate_tests.rs +++ b/rust/qemu-api/tests/vmstate_tests.rs @@ -2,7 +2,12 @@ // Author(s): Zhao Liu // SPDX-License-Identifier: GPL-2.0-or-later =20 -use std::{ffi::CStr, mem::size_of, os::raw::c_void, ptr::NonNull, slice}; +use std::{ + ffi::{c_void, CStr}, + mem::size_of, + ptr::NonNull, + slice, +}; =20 use qemu_api::{ bindings::{ --=20 2.49.0 From nobody Fri Dec 19 04:16:58 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1746435921; cv=none; d=zohomail.com; s=zohoarc; b=Jx9sWrdPeoT1fhIMfrBJDesebsJstzS97T4s+0lYY8tZpWhOXodf6sVsDSqVd/3uygHeA7AtX5xTFGWTJ+TbnUMElyJSN8i9bdda0K4HKZfEeWO1xK+CVtSBJxM03HjbLL/lZGaGKz23Rhb6LDpLWhVnLEsZJm7IhZ/QN4bhhww= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1746435921; h=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=cIxpaB6/ZhVVZ3Mu10nisbWNoNkSNb8M6k4MEeUMH1w=; b=Nerd/sMjH8mY40Suqild7r4jklb/b//Y22cgAX5N2wT1FLYrdZPi7XGuMWbaxsUtjYJoMKEDCZs7Sj1qQm7yRojUhzm2cuaQJjjxZH8TDwN8TCh76SeesUTdElRJwQ0DxwDlGCkGkOtaXWh3KB8g5LupSefeX8krzjp6S0sssus= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1746435921382573.7443218191918; Mon, 5 May 2025 02:05:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uBrl0-0003Yr-Lg; Mon, 05 May 2025 05:05:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uBrkw-0003Xm-47 for qemu-devel@nongnu.org; Mon, 05 May 2025 05:04:58 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uBrks-0005kR-0q for qemu-devel@nongnu.org; Mon, 05 May 2025 05:04:57 -0400 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-106-c7T1JwD8MM2wo-Uf0u9fpw-1; Mon, 05 May 2025 05:04:51 -0400 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-43eed325461so22468045e9.3 for ; Mon, 05 May 2025 02:04:51 -0700 (PDT) Received: from [192.168.10.48] ([151.95.54.106]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-441b89d150fsm125521165e9.15.2025.05.05.02.04.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 May 2025 02:04:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1746435892; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=cIxpaB6/ZhVVZ3Mu10nisbWNoNkSNb8M6k4MEeUMH1w=; b=Xbp/6Pwdrc5NuCdHfCWCGebFaUh/FqFSUsVP6YX2VnQbnsJjYWNIX59AGKLA3UBc9SVAvL Vz7DCOHSXmkI+XuTs2r/OqhebPRQulCh0BVcDU8Obc4q1hw6ZJx6fAcESc1GdzNhrYPz+p xFIEVb/LathzdeA00qiuyqpW2EjL01I= X-MC-Unique: c7T1JwD8MM2wo-Uf0u9fpw-1 X-Mimecast-MFC-AGG-ID: c7T1JwD8MM2wo-Uf0u9fpw_1746435890 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746435890; x=1747040690; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cIxpaB6/ZhVVZ3Mu10nisbWNoNkSNb8M6k4MEeUMH1w=; b=a8ZPkMX5i8Rw/3LwaTdzYur1GnXnxR6jthIhOYd0O+Hj3f1KQtk7V2mc+NwJEC8frw s8P4zy1GmyVgRR8F9qHiTYv34F+4p4wEkE6418oVkR0oA5tHHPDFYFvDNLpFiWVbiL8w AOiSWBhAGyxB7J0s1+8k1Rs+jq0z36zKjsu+tZQD3ksEoGtrNTvNkMq2W8FBFWSKIN1l B1MWi3RgXN4nvOWFM31LDThili995wG7uckynCHAQYsbUcFttvoNYUCnzY7nOFYbamiG QH/NfXhoFFQ+RPbkB+NVQCJOqBOeDRda9yO+xdUaKcbG3PeNmznpJB+MSgoBvjG9TjkA Z0jg== X-Gm-Message-State: AOJu0YyDewUKvWjAe7PTRJ8s+08Ef0UCooKmYtOWZWm3KDo6KE/DR3xq ZZEt9zF9bicEt1drf63eW7CsZCv1Eoq7Qbn8E2y1wimsLlEiPg1HLt2Kadfs1XW4dtgcpiotqPY pLG0XW7f1seUfxScbzlfprQjdKW2g/mJ4qzQmDUbO91EPQmAQh2NkkPMWUOjai2eiqAgi6d4JTF 8G4rZwA8qJtkahiVtaYq3HCONsncfG9LB2HdQe X-Gm-Gg: ASbGncs7TMgVENgsn7FuWsbQggQFWcrGco5c5izABXItckqIF2thWWhX7Vw6M8KOsUH hiQ4i2ZU7yCmZs71MnIt0rQtRezm9SrqEVn2RF7/B32RpZWQ8YE30T+3KSj7Tfo403l+F8vdUiJ QePg1s93kWI71sgVCggxvB0XgAzxn/qa1QKTLwtGQpoFuZvuW7XCn8Gm/6iwyeOS9Gmp2XPF7Qo X9aZdgIUxYoClNko7oYSt13EGRS71DAB2qM2E1OPlI8R1kLCyMpwTRPQqOaPSmZRR0WgkdV3+sm j3CNrLToepZ0MyA= X-Received: by 2002:a05:600c:1e8d:b0:43c:f8fc:f69a with SMTP id 5b1f17b1804b1-441c48b05edmr59869775e9.4.1746435889681; Mon, 05 May 2025 02:04:49 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFU3HBgeE9+NVL2gCkYNhERdLc3dP6tTfX8jB6xXHmxVF0BUOEr8pd7nLrYMZCQfoTuKan9zQ== X-Received: by 2002:a05:600c:1e8d:b0:43c:f8fc:f69a with SMTP id 5b1f17b1804b1-441c48b05edmr59869455e9.4.1746435889298; Mon, 05 May 2025 02:04:49 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: manos.pitsidianakis@linaro.org, qemu-rust@nongnu.org Subject: [PATCH 04/11] rust: let bilge use "let ... else" Date: Mon, 5 May 2025 11:04:29 +0200 Message-ID: <20250505090438.24992-5-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250505090438.24992-1-pbonzini@redhat.com> References: <20250505090438.24992-1-pbonzini@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -44 X-Spam_score: -4.5 X-Spam_bar: ---- X-Spam_report: (-4.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.411, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1746435923559116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Manos Pitsidianakis Signed-off-by: Paolo Bonzini Reviewed-by: Zhao Liu --- docs/devel/rust.rst | 3 -- subprojects/bilge-impl-0.2-rs.wrap | 1 - .../packagefiles/bilge-impl-1.63.0.patch | 45 ------------------- 3 files changed, 49 deletions(-) delete mode 100644 subprojects/packagefiles/bilge-impl-1.63.0.patch diff --git a/docs/devel/rust.rst b/docs/devel/rust.rst index c7dfba98de1..8167ff49aa9 100644 --- a/docs/devel/rust.rst +++ b/docs/devel/rust.rst @@ -76,9 +76,6 @@ are missing: =20 * ``cast_mut()``/``cast_const()`` (1.65.0). Use ``as`` instead. =20 -* "let ... else" (1.65.0). Use ``if let`` instead. This is currently pat= ched - in QEMU's vendored copy of the bilge crate. - * Generic Associated Types (1.65.0) =20 * ``CStr::from_bytes_with_nul()`` as a ``const`` function (1.72.0). diff --git a/subprojects/bilge-impl-0.2-rs.wrap b/subprojects/bilge-impl-0.= 2-rs.wrap index d14c3dc769b..4f84eca1ccd 100644 --- a/subprojects/bilge-impl-0.2-rs.wrap +++ b/subprojects/bilge-impl-0.2-rs.wrap @@ -5,7 +5,6 @@ source_filename =3D bilge-impl-0.2.0.tar.gz source_hash =3D feb11e002038ad243af39c2068c8a72bcf147acf05025dcdb916fcc000= adb2d8 #method =3D cargo patch_directory =3D bilge-impl-0.2-rs -diff_files =3D bilge-impl-1.63.0.patch =20 # bump this version number on every change to meson.build or the patches: # v2 diff --git a/subprojects/packagefiles/bilge-impl-1.63.0.patch b/subprojects= /packagefiles/bilge-impl-1.63.0.patch deleted file mode 100644 index 987428a6d65..00000000000 --- a/subprojects/packagefiles/bilge-impl-1.63.0.patch +++ /dev/null @@ -1,45 +0,0 @@ ---- a/src/shared/discriminant_assigner.rs -+++ b/src/shared/discriminant_assigner.rs -@@ -26,20 +26,20 @@ - let discriminant_expr =3D &discriminant.1; - let variant_name =3D &variant.ident; -=20 -- let Expr::Lit(ExprLit { lit: Lit::Int(int), .. }) =3D discriminan= t_expr else { -+ if let Expr::Lit(ExprLit { lit: Lit::Int(int), .. }) =3D discrimi= nant_expr { -+ let discriminant_value: u128 =3D int.base10_parse().unwrap_or= _else(unreachable); -+ if discriminant_value > self.max_value() { -+ abort!(variant, "Value of variant exceeds the given numbe= r of bits") -+ } -+ -+ Some(discriminant_value) -+ } else { - abort!( - discriminant_expr, - "variant `{}` is not a number", variant_name; - help =3D "only literal integers currently supported" - ) -- }; -- -- let discriminant_value: u128 =3D int.base10_parse().unwrap_or_els= e(unreachable); -- if discriminant_value > self.max_value() { -- abort!(variant, "Value of variant exceeds the given number of= bits") - } -- -- Some(discriminant_value) - } -=20 - fn assign(&mut self, variant: &Variant) -> u128 { ---- a/src/shared/fallback.rs -+++ b/src/shared/fallback.rs -@@ -22,8 +22,9 @@ - } - Unnamed(fields) =3D> { - let variant_fields =3D fields.unnamed.iter(); -- let Ok(fallback_value) =3D variant_fields.exactly_one() e= lse { -- abort!(variant, "fallback variant must have exactly o= ne field"; help =3D "use only one field or change to a unit variant") -+ let fallback_value =3D match variant_fields.exactly_one()= { -+ Ok(ok) =3D> ok, -+ _ =3D> abort!(variant, "fallback variant must have ex= actly one field"; help =3D "use only one field or change to a unit variant") - }; -=20 - if !is_last_variant { --=20 2.49.0 From nobody Fri Dec 19 04:16:58 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1746435947; cv=none; d=zohomail.com; s=zohoarc; b=kRtwAZiGLWgLom/zAW6abHwkA82sJfw6uAYpjLfFH41oTYxFfX57utqdU3BOoO5M7UkNnau/DP6ksMZYyJ05luX2dG2vBUf3yDO3L87VjTrBh05D/+GqknPH3lPPk9prEhK+8g9DCRnSxWJvOK145w0Kyf+Xwc73JxsNg5FprzA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1746435947; h=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=Ya2k66L69MguUJ7e/92cimrey+KKi+WpqMAX7zuo+gA=; b=I6SvSPhlhU7fzn9n3SGl9hI51JYdk1jHOyHb1Iyj3hJZ4Bso1OGFOO85hq4YDHbKcynLFfevHDpGPCxxve0xuHWwYYIqei2yMoIsznTF1I4+Wd/aNKEZxsAVqSDxd/OPipbTSZtiUfjCrU59Fc2v7AeXVfUgn+Ois8rSYcCE1WE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1746435947261467.3530534355449; Mon, 5 May 2025 02:05:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uBrlZ-00042U-Rj; Mon, 05 May 2025 05:05:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uBrky-0003Yv-RV for qemu-devel@nongnu.org; Mon, 05 May 2025 05:05:01 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uBrku-0005kw-7X for qemu-devel@nongnu.org; Mon, 05 May 2025 05:04:58 -0400 Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-176-0Tybdb6UNLaW_vztsMHiPA-1; Mon, 05 May 2025 05:04:54 -0400 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-43e9b0fd00cso17492485e9.0 for ; Mon, 05 May 2025 02:04:54 -0700 (PDT) Received: from [192.168.10.48] ([151.95.54.106]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-441b89d150fsm125522215e9.15.2025.05.05.02.04.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 May 2025 02:04:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1746435895; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Ya2k66L69MguUJ7e/92cimrey+KKi+WpqMAX7zuo+gA=; b=N07bl3Kz97+4g8lbVbV+tWTrVOOEFKFxX74zHmXdiJ9ojRmAPV1p2mCbjzsEWb9iS3xtdE 7dIq94IMpPpx2+/X5UPARS1TakIelO6P9bQc6Iu8/sPKgrMmVhq5GAFvRWfLXiqw6c5DbQ nXUVm4STwlK9mxV7D1gFkuDvwQ1AO/4= X-MC-Unique: 0Tybdb6UNLaW_vztsMHiPA-1 X-Mimecast-MFC-AGG-ID: 0Tybdb6UNLaW_vztsMHiPA_1746435893 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746435892; x=1747040692; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Ya2k66L69MguUJ7e/92cimrey+KKi+WpqMAX7zuo+gA=; b=vHZiQZzVrpcWiKFUIA8G00Degy3xSxOBxGE31ZRrUF6wyT2Kd4RI2wS2xE+x0ytuow JNRQc8ekS0RCk0qiBJAVQEICwOP63HKaRYUlEK7O4/6SJjSFFz8/2fOwTDRblc/4I1Uj UyY/HzGJxdvwiMWL8AWrrqxERuM2ZLJKn5JgtSTOaHGZPZdYe6QZLepFGizKomiXjUN0 VAYDCa2uAAd4Tg7Xmj/YEQBQuMNo164yqQsjBNeArp3WBvXzqLCaskM55ccTkkTCHCu1 C/4CW3g2HlP4juB9mTd71s9T6rl0AkqX7KVowHsl83lALMN6oUEXCfgPetdpidRV/UtZ Hx8g== X-Gm-Message-State: AOJu0YzDbDLuYMy/7ZqBK0HzPoomseykqBRZdoKPbZI3pXWY+E2IG3gC o4K5KdT5xbIPhncZmKvApH8xGwqAV7kHki7PZ+nDHVA1lYc7AQqXIWpZc/dKihJy/D+ikM7+9Eq 66mfK1gM4SdJc7TKB8p1ONQrSnFYqNTfiqkQtBIJQT/T1qLh0rdQJQDnpAYuCick2YAHUu4bsta +1EeElRnbfg80+f/upCgbJu6//OwN/WTswVqb0 X-Gm-Gg: ASbGncv8/A7qcVG336nUkrfG72pb2Z8u96cH3TQoUXTqm+4Zsxte1ICIrcGZI25K8VP Z9ABa+bG4wOr+hPUno7PAIQEwHot0liq5Bfnuii9/lxoSlLEcXxw3nFDS6VSjnoRxTlnre75f3c sIIE549d2BpjJtcllACiKmBxkMKjf8yjTSohITLl+VE1uq0Eo14hhhqWr65/Rzvr96XsO8Bq7Ii E/K9r5F2MJ6IsgGW3FWepNedIXnwZTvuYo3OhBhSuiUqntZYK7+gIERVLvnL/mh490Us1YV16a4 lUiJbPTFpYYSPDQ= X-Received: by 2002:a05:600c:3acd:b0:43b:c6a7:ac60 with SMTP id 5b1f17b1804b1-441bb88c9f1mr92244435e9.10.1746435892018; Mon, 05 May 2025 02:04:52 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFVe8c/SXPKpUkmPyijE1jDB1zNxdbJ/AaUB37n6Rffwj3hvKuLJVKKEiaOAleaEtbv4n76JQ== X-Received: by 2002:a05:600c:3acd:b0:43b:c6a7:ac60 with SMTP id 5b1f17b1804b1-441bb88c9f1mr92244075e9.10.1746435891520; Mon, 05 May 2025 02:04:51 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: manos.pitsidianakis@linaro.org, qemu-rust@nongnu.org Subject: [PATCH 05/11] rust: qemu_api_macros: make pattern matching more readable and efficient Date: Mon, 5 May 2025 11:04:30 +0200 Message-ID: <20250505090438.24992-6-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250505090438.24992-1-pbonzini@redhat.com> References: <20250505090438.24992-1-pbonzini@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -44 X-Spam_score: -4.5 X-Spam_bar: ---- X-Spam_report: (-4.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.411, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1746435948649019000 Content-Type: text/plain; charset="utf-8" "let ... else" is useful when visiting syntax trees; it avoids multiple levels of indentation and places the error close to the pattern. While at it, use "ref" to avoid moving the syntax tree objects. Signed-off-by: Paolo Bonzini Reviewed-by: Zhao Liu --- rust/qemu-api-macros/src/lib.rs | 84 +++++++++++++++------------------ 1 file changed, 37 insertions(+), 47 deletions(-) diff --git a/rust/qemu-api-macros/src/lib.rs b/rust/qemu-api-macros/src/lib= .rs index eda0d46d122..0bffd2691b4 100644 --- a/rust/qemu-api-macros/src/lib.rs +++ b/rust/qemu-api-macros/src/lib.rs @@ -16,50 +16,41 @@ fn get_fields<'a>( input: &'a DeriveInput, msg: &str, ) -> Result<&'a Punctuated, MacroError> { - if let Data::Struct(s) =3D &input.data { - if let Fields::Named(fs) =3D &s.fields { - Ok(&fs.named) - } else { - Err(MacroError::Message( - format!("Named fields required for {}", msg), - input.ident.span(), - )) - } - } else { - Err(MacroError::Message( + let Data::Struct(ref s) =3D &input.data else { + return Err(MacroError::Message( format!("Struct required for {}", msg), input.ident.span(), - )) - } + )); + }; + let Fields::Named(ref fs) =3D &s.fields else { + return Err(MacroError::Message( + format!("Named fields required for {}", msg), + input.ident.span(), + )); + }; + Ok(&fs.named) } =20 fn get_unnamed_field<'a>(input: &'a DeriveInput, msg: &str) -> Result<&'a = Field, MacroError> { - if let Data::Struct(s) =3D &input.data { - let unnamed =3D match &s.fields { - Fields::Unnamed(FieldsUnnamed { - unnamed: ref fields, - .. - }) =3D> fields, - _ =3D> { - return Err(MacroError::Message( - format!("Tuple struct required for {}", msg), - s.fields.span(), - )) - } - }; - if unnamed.len() !=3D 1 { - return Err(MacroError::Message( - format!("A single field is required for {}", msg), - s.fields.span(), - )); - } - Ok(&unnamed[0]) - } else { - Err(MacroError::Message( + let Data::Struct(ref s) =3D &input.data else { + return Err(MacroError::Message( format!("Struct required for {}", msg), input.ident.span(), - )) + )); + }; + let Fields::Unnamed(FieldsUnnamed { ref unnamed, .. }) =3D &s.fields e= lse { + return Err(MacroError::Message( + format!("Tuple struct required for {}", msg), + s.fields.span(), + )); + }; + if unnamed.len() !=3D 1 { + return Err(MacroError::Message( + format!("A single field is required for {}", msg), + s.fields.span(), + )); } + Ok(&unnamed[0]) } =20 fn is_c_repr(input: &DeriveInput, msg: &str) -> Result<(), MacroError> { @@ -210,20 +201,19 @@ fn get_repr_uN(input: &DeriveInput, msg: &str) -> Res= ult { } =20 fn get_variants(input: &DeriveInput) -> Result<&Punctuated= , MacroError> { - if let Data::Enum(e) =3D &input.data { - if let Some(v) =3D e.variants.iter().find(|v| v.fields !=3D Fields= ::Unit) { - return Err(MacroError::Message( - "Cannot derive TryInto for enum with non-unit variants.".t= o_string(), - v.fields.span(), - )); - } - Ok(&e.variants) - } else { - Err(MacroError::Message( + let Data::Enum(ref e) =3D &input.data else { + return Err(MacroError::Message( "Cannot derive TryInto for union or struct.".to_string(), input.ident.span(), - )) + )); + }; + if let Some(v) =3D e.variants.iter().find(|v| v.fields !=3D Fields::Un= it) { + return Err(MacroError::Message( + "Cannot derive TryInto for enum with non-unit variants.".to_st= ring(), + v.fields.span(), + )); } + Ok(&e.variants) } =20 #[rustfmt::skip::macros(quote)] --=20 2.49.0 From nobody Fri Dec 19 04:16:58 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1746435989; cv=none; d=zohomail.com; s=zohoarc; b=I3aq+m1OuW3zrbXNV5aSEoDurjMxuXTGxiOznIVl+KpIAla1gdKVnxyCqg7XXYd2J6viziG0hojsNyyPLZi0NIBg+ZWjrG4WgLZxi0uZyMS7Mjm3KCH1zBIUfhZdJ2GLDD1hFv+qcR19KluMPBcONlKRkGzTmNMVAlNC4EOLAXg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1746435989; h=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=9uG+eMff4v/DO/91eYXSXdK5N45eASxvptJIXXsF3tI=; b=dKAGVA/bg5JapTSw5+Ee5iyUCoan+Mfu9fQTONl6wzyjL8l1mzkHffMkaOM2z90KO6M5rFg8ruhsujwnScwZXKaIq0terF7Wcb76qL3/z7/BlK6qZTTEYPXwzcRJJeJkC6Gg8sktBGl07+rzqJ52r7+ZA0N0pW9jht3p4lmC2lU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1746435989025110.10493186229382; Mon, 5 May 2025 02:06:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uBrmC-0004rD-Ap; Mon, 05 May 2025 05:06:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uBrl0-0003Zc-OT for qemu-devel@nongnu.org; Mon, 05 May 2025 05:05:04 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uBrkw-0005lW-Rf for qemu-devel@nongnu.org; Mon, 05 May 2025 05:05:01 -0400 Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-657-XB73IaDLOyKKfNF8UU3NHg-1; Mon, 05 May 2025 05:04:56 -0400 Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-43d734da1a3so18263405e9.0 for ; Mon, 05 May 2025 02:04:56 -0700 (PDT) Received: from [192.168.10.48] ([151.95.54.106]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-441b8a315c8sm125948095e9.35.2025.05.05.02.04.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 May 2025 02:04:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1746435897; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=9uG+eMff4v/DO/91eYXSXdK5N45eASxvptJIXXsF3tI=; b=LaihZVYh0sp27qBBquXJ7hW7yEHcUih8DS4JF2yRX54Tq7Wn+N5K1gCJ250hwIsaNgWCPf xdQRqQ4PKWAbZaZVyTnYNCLxvtwMMnEJlOsURJHw+IeE+VHV1aqc0zMEO88hSbr6ApDQcF wudg9RCApaBu5lnI9xT0oS3lSzHHiyQ= X-MC-Unique: XB73IaDLOyKKfNF8UU3NHg-1 X-Mimecast-MFC-AGG-ID: XB73IaDLOyKKfNF8UU3NHg_1746435895 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746435894; x=1747040694; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9uG+eMff4v/DO/91eYXSXdK5N45eASxvptJIXXsF3tI=; b=Fpnusz7ZwH5rrDqSkHg4HFbVgPO//ncjKjtYO1ueCUQOJqkUWw/+CroWI15DsiATWW 6hMP6DqFL3Zgj5OXCjgANK1lKrF7adZvJ37X+Q+yCPWCESwFpX/xzJutItnc6AtmmmXq kz7UP9Zeo7DGWP03DqKkFB4Dpc1XfN24jvL4vQVe9lD5Hkcdvt+/647q7Q30gyKNHAiq V02PFzjoLVV/ewwbbK/0olcvdguFDq651PhMkBCO+y18e+vo3/pmwPEEOKiM73zm2dKY y/3QhthP4lPxB3AYFnFoaHqdgpwamBZc5gD5Lo1bFVaIhMXRg2j9Ri6aKbBS1fo6woeQ 13IA== X-Gm-Message-State: AOJu0YzBn7aNMc6m4Hp85mt6N5xh0IC4fmDrqyKrDGfkPQoptbAgjJql +b+PKH/DAy6SiVTDgoO/om3L2kUsYrC36zHgSSa6YuKkzqQrQNxgJq7z0ByJaYviiTYMbn9cqxe ZZcv6+w9j5gkFsh9xr81RknhjLkz2WEtB0WpZw1S66w1ZyFLfs1GVOMW1mOpPwPjvh47G/kobAc YxR7aSKSGmCy7Z2dQSsqTVvw3MWcT+DQrq9mCG X-Gm-Gg: ASbGncsre1NhDIHo9iNXd3juamyOAC6ImbC/5n0y35sTM8Glyw9s+vUPy3LITvbNL4i luLZqPPBrq2+dR60AloSO1X8HLIPsrtEDCyvfZsZMjtJXuxA15KUhiDwrd+CtNdePQa7QRFiq0J BfCtgAXrht4KVjyVjFbt9Nj6/hBNepIfPI8N6DLasSvF3g5d8kSrjOKiTsPb7EUTfuncFwmnzXx iIaUGRxI/1gffb32J80SVW+Z+HAX6EfClc7DTw2ValYvVxmTwbZkpPTL1q3j70sAsWQVUtVT2UB Srtf9o+otNfvr20= X-Received: by 2002:a05:600c:4e13:b0:440:54ef:dfdc with SMTP id 5b1f17b1804b1-441c48bdf70mr52568775e9.8.1746435894383; Mon, 05 May 2025 02:04:54 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHmmV4LvsQ2cKHtXkGBI0WXsvIvJNS1zQFrMpCWRXBfVKswm8fM86s/Mj7lnZfoCC8EqHzlBw== X-Received: by 2002:a05:600c:4e13:b0:440:54ef:dfdc with SMTP id 5b1f17b1804b1-441c48bdf70mr52568405e9.8.1746435893850; Mon, 05 May 2025 02:04:53 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: manos.pitsidianakis@linaro.org, qemu-rust@nongnu.org Subject: [PATCH 06/11] rust: use MaybeUninit::zeroed() in const context Date: Mon, 5 May 2025 11:04:31 +0200 Message-ID: <20250505090438.24992-7-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250505090438.24992-1-pbonzini@redhat.com> References: <20250505090438.24992-1-pbonzini@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -44 X-Spam_score: -4.5 X-Spam_bar: ---- X-Spam_report: (-4.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.411, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1746435990268116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Manos Pitsidianakis Signed-off-by: Paolo Bonzini Reviewed-by: Zhao Liu --- docs/devel/rust.rst | 4 -- rust/hw/timer/hpet/src/fw_cfg.rs | 6 +- rust/qemu-api/src/zeroable.rs | 104 +++++-------------------------- 3 files changed, 18 insertions(+), 96 deletions(-) diff --git a/docs/devel/rust.rst b/docs/devel/rust.rst index 8167ff49aa9..13a002cfe69 100644 --- a/docs/devel/rust.rst +++ b/docs/devel/rust.rst @@ -83,10 +83,6 @@ are missing: * "Return position ``impl Trait`` in Traits" (1.75.0, blocker for including the pinned-init create). =20 -* ``MaybeUninit::zeroed()`` as a ``const`` function (1.75.0). QEMU's - ``Zeroable`` trait can be implemented without ``MaybeUninit::zeroed()``, - so this would be just a cleanup. - * ``c"" literals`` (stable in 1.77.0). QEMU provides a ``c_str!()`` macro to define ``CStr`` constants easily =20 diff --git a/rust/hw/timer/hpet/src/fw_cfg.rs b/rust/hw/timer/hpet/src/fw_c= fg.rs index bef03727ea3..aa08d283519 100644 --- a/rust/hw/timer/hpet/src/fw_cfg.rs +++ b/rust/hw/timer/hpet/src/fw_cfg.rs @@ -4,7 +4,7 @@ =20 use std::ptr::addr_of_mut; =20 -use qemu_api::{cell::bql_locked, impl_zeroable, zeroable::Zeroable}; +use qemu_api::{cell::bql_locked, zeroable::Zeroable}; =20 /// Each `HPETState` represents a Event Timer Block. The v1 spec supports /// up to 8 blocks. QEMU only uses 1 block (in PC machine). @@ -18,7 +18,7 @@ pub struct HPETFwEntry { pub min_tick: u16, pub page_prot: u8, } -impl_zeroable!(HPETFwEntry); +unsafe impl Zeroable for HPETFwEntry {} =20 #[repr(C, packed)] #[derive(Copy, Clone, Default)] @@ -26,7 +26,7 @@ pub struct HPETFwConfig { pub count: u8, pub hpet: [HPETFwEntry; HPET_MAX_NUM_EVENT_TIMER_BLOCK], } -impl_zeroable!(HPETFwConfig); +unsafe impl Zeroable for HPETFwConfig {} =20 #[allow(non_upper_case_globals)] #[no_mangle] diff --git a/rust/qemu-api/src/zeroable.rs b/rust/qemu-api/src/zeroable.rs index a3415a2ebcc..e0720345495 100644 --- a/rust/qemu-api/src/zeroable.rs +++ b/rust/qemu-api/src/zeroable.rs @@ -4,89 +4,15 @@ =20 /// Encapsulates the requirement that /// `MaybeUninit::::zeroed().assume_init()` does not cause undefined -/// behavior. This trait in principle could be implemented as just: -/// -/// ``` -/// pub unsafe trait Zeroable: Default { -/// const ZERO: Self =3D unsafe { ::core::mem::MaybeUninit::::ze= roed().assume_init() }; -/// } -/// ``` -/// -/// The need for a manual implementation is only because `zeroed()` cannot -/// be used as a `const fn` prior to Rust 1.75.0. Once we can assume a new -/// enough version of the compiler, we could provide a `#[derive(Zeroable)= ]` -/// macro to check at compile-time that all struct fields are Zeroable, and -/// use the above blanket implementation of the `ZERO` constant. +/// behavior. /// /// # Safety /// -/// Because the implementation of `ZERO` is manual, it does not make -/// any assumption on the safety of `zeroed()`. However, other users of t= he -/// trait could use it that way. Do not add this trait to a type unless -/// all-zeroes is a valid value for the type. In particular, remember that -/// raw pointers can be zero, but references and `NonNull` cannot +/// Do not add this trait to a type unless all-zeroes is a valid value for= the +/// type. In particular, raw pointers can be zero, but references and +/// `NonNull` cannot. pub unsafe trait Zeroable: Default { - const ZERO: Self; -} - -/// A macro that acts similarly to [`core::mem::zeroed()`], only is const -/// -/// ## Safety -/// -/// Similar to `core::mem::zeroed()`, except this zeroes padding bits. Zer= oed -/// padding usually isn't relevant to safety, but might be if a C union is= used. -/// -/// Just like for `core::mem::zeroed()`, an all zero byte pattern might not -/// be a valid value for a type, as is the case for references `&T` and `&= mut -/// T`. Reference types trigger a (denied by default) lint and cause immed= iate -/// undefined behavior if the lint is ignored -/// -/// ```rust compile_fail -/// use const_zero::const_zero; -/// // error: any use of this value will cause an error -/// // note: `#[deny(const_err)]` on by default -/// const STR: &str =3D unsafe{const_zero!(&'static str)}; -/// ``` -/// -/// `const_zero` does not work on unsized types: -/// -/// ```rust compile_fail -/// use const_zero::const_zero; -/// // error[E0277]: the size for values of type `[u8]` cannot be known at= compilation time -/// const BYTES: [u8] =3D unsafe{const_zero!([u8])}; -/// ``` -/// ## Differences with `core::mem::zeroed` -/// -/// `const_zero` zeroes padding bits, while `core::mem::zeroed` doesn't -#[macro_export] -macro_rules! const_zero { - // This macro to produce a type-generic zero constant is taken from the - // const_zero crate (v0.1.1): - // - // https://docs.rs/const-zero/latest/src/const_zero/lib.rs.html - // - // and used under MIT license - ($type_:ty) =3D> {{ - const TYPE_SIZE: ::core::primitive::usize =3D ::core::mem::size_of= ::<$type_>(); - union TypeAsBytes { - bytes: [::core::primitive::u8; TYPE_SIZE], - inner: ::core::mem::ManuallyDrop<$type_>, - } - const ZERO_BYTES: TypeAsBytes =3D TypeAsBytes { - bytes: [0; TYPE_SIZE], - }; - ::core::mem::ManuallyDrop::<$type_>::into_inner(ZERO_BYTES.inner) - }}; -} - -/// A wrapper to implement the `Zeroable` trait through the `const_zero` m= acro. -#[macro_export] -macro_rules! impl_zeroable { - ($type:ty) =3D> { - unsafe impl $crate::zeroable::Zeroable for $type { - const ZERO: Self =3D unsafe { $crate::const_zero!($type) }; - } - }; + const ZERO: Self =3D unsafe { ::core::mem::MaybeUninit::::zeroed= ().assume_init() }; } =20 // bindgen does not derive Default here @@ -97,13 +23,13 @@ fn default() -> Self { } } =20 -impl_zeroable!(crate::bindings::Property__bindgen_ty_1); -impl_zeroable!(crate::bindings::Property); -impl_zeroable!(crate::bindings::VMStateFlags); -impl_zeroable!(crate::bindings::VMStateField); -impl_zeroable!(crate::bindings::VMStateDescription); -impl_zeroable!(crate::bindings::MemoryRegionOps__bindgen_ty_1); -impl_zeroable!(crate::bindings::MemoryRegionOps__bindgen_ty_2); -impl_zeroable!(crate::bindings::MemoryRegionOps); -impl_zeroable!(crate::bindings::MemTxAttrs); -impl_zeroable!(crate::bindings::CharBackend); +unsafe impl Zeroable for crate::bindings::Property__bindgen_ty_1 {} +unsafe impl Zeroable for crate::bindings::Property {} +unsafe impl Zeroable for crate::bindings::VMStateFlags {} +unsafe impl Zeroable for crate::bindings::VMStateField {} +unsafe impl Zeroable for crate::bindings::VMStateDescription {} +unsafe impl Zeroable for crate::bindings::MemoryRegionOps__bindgen_ty_1 {} +unsafe impl Zeroable for crate::bindings::MemoryRegionOps__bindgen_ty_2 {} +unsafe impl Zeroable for crate::bindings::MemoryRegionOps {} +unsafe impl Zeroable for crate::bindings::MemTxAttrs {} +unsafe impl Zeroable for crate::bindings::CharBackend {} --=20 2.49.0 From nobody Fri Dec 19 04:16:58 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1746435944; cv=none; d=zohomail.com; s=zohoarc; b=F4n0B2azRWZWrisv7YGYtMlED+jYLxTZMQbEQcxqigZkVE6VRvP/7Csvhqg4jmoG+7/+cGOF2DfW7dZWgbAknd5+iIzn1jiQDtoXPPTZ4QTzDqX80FCPQFq5iHFi1geoKKUNNFVBJ8LBHBAvugz/obmzKOc7Ve/HCm9+0iZkxIc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1746435944; h=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=vRtlT+rfQp/A6Zs87LxR8mcqRVthqez4BmiYWwSHafw=; b=e8sLq1CliGDuu701nauNWt6pAhXRzDE6QfzkEtMGgqcwRaIRDLiONoZg3FoKtzPVizXGsCvzra3srNosUG1zdB4P4fNNQ5yzgNkKw7yeNSdUK49zqzTy3mulMORJbbGroMxf9FdYGWP4JbEsM8cAPWc+F1pO9nEs/4F8YHZ34x8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1746435944194871.8431742919471; Mon, 5 May 2025 02:05:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uBrlJ-0003ex-8F; Mon, 05 May 2025 05:05:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uBrl3-0003c3-GY for qemu-devel@nongnu.org; Mon, 05 May 2025 05:05:05 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uBrkz-0005m5-9x for qemu-devel@nongnu.org; Mon, 05 May 2025 05:05:03 -0400 Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-306-O_kU_q-WP_OJvkCb0ekMNQ-1; Mon, 05 May 2025 05:04:59 -0400 Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-39130f02631so1034030f8f.2 for ; Mon, 05 May 2025 02:04:59 -0700 (PDT) Received: from [192.168.10.48] ([151.95.54.106]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a099b0ffcasm9765797f8f.74.2025.05.05.02.04.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 May 2025 02:04:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1746435900; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=vRtlT+rfQp/A6Zs87LxR8mcqRVthqez4BmiYWwSHafw=; b=e1Zzg4tbX09QbcOs/xPwcqGuHa4QNul7eI4q/1CTBL2gi8nUlO6qy8mBxY04urkqJwPI61 degWQMWmb49DZ/YuAD9978eizHg+VXPsBT6an/MaWIdfzth5ckrILjm53dIBJK01AO6HBd nIZKctwRi5FK1pT3XBhxxrOqpIyENVA= X-MC-Unique: O_kU_q-WP_OJvkCb0ekMNQ-1 X-Mimecast-MFC-AGG-ID: O_kU_q-WP_OJvkCb0ekMNQ_1746435898 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746435897; x=1747040697; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vRtlT+rfQp/A6Zs87LxR8mcqRVthqez4BmiYWwSHafw=; b=MBQOc6wVpi/w7eNvT8edhxL0nCFjpGjiBA3aQgZa33G1M11w7AW9k8em6J0kWaAk8D wHyWBWzYS2qhT3fl+UnJAgoUQeeExBI3z1jfiCYQNTTX+u09ptG5QDw5N1dmRO8NT4FC rQgFwdZ2nJzowWtasZQESO/u0poxaO+UG8QsNHmofVTdVPQgftN8uaN+yGipwUyE1hrv DCkMSLRT/XjCJAVzoC2c/3Q32lhYd0juyFjZnJl41r9aGdUKv4X4vmRVjkRg+2gM3vjT UbetoXtV0+VYFeibjZsGsO7GkTl0TUkXTrniQ/73RsKUp+2MB5K7tMyB+7En07Vxm+15 wy8g== X-Gm-Message-State: AOJu0YxZXY3PEdxreIhMkftpRphv3VIwW6Bmq4Fv1CZ3gmY9MFN1zvmX 0UQDE77PsvgYjdBo59AfeCaWSc1PSJPofJxKOc7lXLmmBYIPuLkGVfW+QU5+k5oLqp1m6w8wEEe 9iqwfi0Q7lV8h1zq7uZhw+hSXKsR4KhRC+S5OHe49dkCyP1rA93xcrbKv+XWuVCzitd09g283vt 4eNnOIYi3wim8+yBc4Tcr/Mzfx+P4d35CfI+uF X-Gm-Gg: ASbGncvyNfWoT490/pJhR75nUBVxZuy/ERKxLksqw4J8hMYeyLWS75vJVfb+eUSI/5a qQjF4gczV8X9IkcV8Yxuki7U7Aek9zNmgfiWMQp64fY8HU8VZ9JBWULpGFmU8Tofh/VYUsi2Gwr U4GCICP2nnLw6sF3Iou8usOrRR2exjZa21Cji5lgXv5yHPi9vfboI8hKCIL9CCmC8aP8jIOZThu eu78VBakfag22JcHjkGGK9j+F2ctDiuUGrMd20Pz3f3zb7RaWcKogECrGhqx/iYI2boTD0GsFN0 V+eBdm8hK+y81DA= X-Received: by 2002:a05:6000:3113:b0:390:f9d0:5e3 with SMTP id ffacd0b85a97d-3a099ad1aa7mr10556841f8f.1.1746435896897; Mon, 05 May 2025 02:04:56 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHoTVyw8OSZzdXGEOBTSx3zPlsaB4qmHKSedrUa2N0vO7aivae0TFHtWZww5UkTGV9cxyFYyA== X-Received: by 2002:a05:6000:3113:b0:390:f9d0:5e3 with SMTP id ffacd0b85a97d-3a099ad1aa7mr10556810f8f.1.1746435896554; Mon, 05 May 2025 02:04:56 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: manos.pitsidianakis@linaro.org, qemu-rust@nongnu.org Subject: [PATCH 07/11] rust: qom: fix TODO about zeroability of classes Date: Mon, 5 May 2025 11:04:32 +0200 Message-ID: <20250505090438.24992-8-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250505090438.24992-1-pbonzini@redhat.com> References: <20250505090438.24992-1-pbonzini@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -44 X-Spam_score: -4.5 X-Spam_bar: ---- X-Spam_report: (-4.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.411, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1746435945699116600 Content-Type: text/plain; charset="utf-8" The proposed suggestion is not correct. First it is not necessary for *all* classes to be Zeroable, only for Rust-defined ones; classes defined in C never implement ObjectImpl. Second, the parent class field need not be Zeroable. For example, ChardevClass's chr_write and chr_be_event fields cannot be NULL, therefore ChardevClass cannot be Zeroable. However, char_class_init() initializes them, therefore ChardevClass could be subclassed by Rust code. Signed-off-by: Paolo Bonzini Reviewed-by: Manos Pitsidianakis Reviewed-by: Zhao Liu --- rust/qemu-api/src/qom.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/rust/qemu-api/src/qom.rs b/rust/qemu-api/src/qom.rs index 6929e4d33ae..52e3a1ec981 100644 --- a/rust/qemu-api/src/qom.rs +++ b/rust/qemu-api/src/qom.rs @@ -534,9 +534,10 @@ pub trait ObjectImpl: ObjectType + IsA { /// While `klass`'s parent class is initialized on entry, the other fi= elds /// are all zero; it is therefore assumed that all fields in `T` can be /// zeroed, otherwise it would not be possible to provide the class as= a - /// `&mut T`. TODO: add a bound of [`Zeroable`](crate::zeroable::Zero= able) - /// to T; this is more easily done once Zeroable does not require a ma= nual - /// implementation (Rust 1.75.0). + /// `&mut T`. TODO: it may be possible to add an unsafe trait that ch= ecks + /// that all fields *after the parent class* (but not the parent class + /// itself) are Zeroable. This unsafe trait can be added via a derive + /// macro. const CLASS_INIT: fn(&mut Self::Class); } =20 --=20 2.49.0 From nobody Fri Dec 19 04:16:58 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1746436051; cv=none; d=zohomail.com; s=zohoarc; b=QJZY6cfCtEQC1IAKJnqVs9haZLKr3/4p+a0wAzX+5327KxhZRs8aB7sFUr52Xi8maPKfYEioin0cnZ3tZ3+NqbPNnHJ13BLApjW5MHv4RK0UrgGw1CC0vA+lMS415Dvset49zy56UI8/cU901KBQ6/Z1m3VeDMD/zKL/qQD4K8M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1746436051; h=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=id8u6QhmytdWjNgsDYLCFHIvJVm+T0ExWvUr0aO33CQ=; b=ffTi97+QlY+l6rk5WlaaEz7d+NXQfRkP5jH2AKStDHeUnupUGAnPHl9qFoNoI0uvi1TgQPMWVVGpBSyvOoNZsE9TIWwE3IvZUwbTNGbhzx3AeaCIHSTMgyUE3YPv46/2AoXGGPTnAqSj7fFZjIKu+wjpaHIbWO4Yu/Aa3mdAh+Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1746436051049835.0404642755171; Mon, 5 May 2025 02:07:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uBrmV-0005PA-FN; Mon, 05 May 2025 05:06:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uBrl6-0003dy-Im for qemu-devel@nongnu.org; Mon, 05 May 2025 05:05:09 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uBrl2-0005p3-GJ for qemu-devel@nongnu.org; Mon, 05 May 2025 05:05:06 -0400 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-486-vM7LPIIYNne8SujqCdsUVQ-1; Mon, 05 May 2025 05:05:01 -0400 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-441c122fa56so6323165e9.2 for ; Mon, 05 May 2025 02:05:01 -0700 (PDT) Received: from [192.168.10.48] ([151.95.54.106]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-441b89cc441sm128821855e9.3.2025.05.05.02.04.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 May 2025 02:04:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1746435903; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=id8u6QhmytdWjNgsDYLCFHIvJVm+T0ExWvUr0aO33CQ=; b=Btqz8KiE19pvuZhRUTsmI2ASthOgQSstntMI0nmGbcqrXapaAJuSmcSuzNUK22xHnLj9vt J6ho6mjxf3momueq3a6cHbOrIgVdQisVj1JY4UR8cdvUOUs+g3dCIKvvL2B38qsD+T5tFg 14MAQEk/U6+4BxsBDM2tAfc8Z3HWWcs= X-MC-Unique: vM7LPIIYNne8SujqCdsUVQ-1 X-Mimecast-MFC-AGG-ID: vM7LPIIYNne8SujqCdsUVQ_1746435900 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746435899; x=1747040699; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=id8u6QhmytdWjNgsDYLCFHIvJVm+T0ExWvUr0aO33CQ=; b=S2edQJNVeGZsTTlH+N+nJqU2cqoIeF323G6k40CQ/bbqKU3WaM3vMIbK+7DW2MizYB Ih1LkOyyN6z3DZ86nZZvNXSIb9PIyawYZBk0aApeHtHN0ocT4RgJe0x9xrXKEHFyqMAP XuCsQMFE+whQ91o/rz86PF78kZuafpfAxk/8AIEOFuMWCyioujhgcbEyaXoF7vrbsrrh NqTDJjbeluNfSPmOxZcLZDcK+FmdJp+iTGl9ySaGz6Fhof4XsoXH0TW9znoji22ZQ38L yL+ENyLqdfxx8Rq/6/+o1gCjK4y50d5pyxCfGJpdPoWile0cy6oc+31WQkcDhadvoyTG /Tmw== X-Gm-Message-State: AOJu0YzhJDCHnL/TTxaIeaIVLqr7LTi4AOTfYuE8Gn1k1pd4iI3LMl/H KCD1q6a5ndoUBottX19+3MexZnUcOZ/CBZXKgWa9WZGq8TnGCbI6lkBWyBWzSx0GvQoFwS/+GQa v+7f43bWkyJIA3uXh5+br9m7si6KqY1s1QecAUERLj5xWElyv6nUsdPXmJxenrR+oSJgIEvm/m0 l85+zsQnbpKMhVIbbVaY8UCllqtMaGP61Ihodl X-Gm-Gg: ASbGnct/SBDijd8ynpqwQjZmqWEB4Ems5nM+VOAq0GBKhLNwttqioJr+JK/Pg6wIt7A x0E88szkfdeOGFaeM/xLYzBbLPC+JbyHFoeigbUqQMAPsCAI0UzI+0mMMrmVCGmGWnWx9vKjaFK Hyeq0+K7bBtAcMCAJpaR6LA9OCOSMyCbK0Cu1+lSjR/M29OFGXMx20D90HHomHyjQwoyJxWtiBK iVOBsnncZeMnxoYPq+vmuBevOdp/j6CKS+tOIX5xWE15UtPZRlqv5ii3OdCIOjuqE87LnzyvdCg Bdjr61E4xOO/eTE= X-Received: by 2002:a05:600c:4f4b:b0:440:67f8:7589 with SMTP id 5b1f17b1804b1-441c1cfc6c8mr71133245e9.16.1746435899448; Mon, 05 May 2025 02:04:59 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFJ6NOxdsH59R7JFTF2kUdGip0Iis2Q67GL5v7Psp95zL1DwgV1RUtFu6Osg0DlYadflkPw5Q== X-Received: by 2002:a05:600c:4f4b:b0:440:67f8:7589 with SMTP id 5b1f17b1804b1-441c1cfc6c8mr71132845e9.16.1746435898986; Mon, 05 May 2025 02:04:58 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: manos.pitsidianakis@linaro.org, qemu-rust@nongnu.org Subject: [PATCH 08/11] rust: enable clippy::ptr_cast_constness Date: Mon, 5 May 2025 11:04:33 +0200 Message-ID: <20250505090438.24992-9-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250505090438.24992-1-pbonzini@redhat.com> References: <20250505090438.24992-1-pbonzini@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -44 X-Spam_score: -4.5 X-Spam_bar: ---- X-Spam_report: (-4.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.411, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1746436052721116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Manos Pitsidianakis Signed-off-by: Paolo Bonzini Reviewed-by: Zhao Liu --- docs/devel/rust.rst | 2 -- rust/Cargo.toml | 2 +- rust/hw/timer/hpet/src/hpet.rs | 2 +- rust/qemu-api/src/cell.rs | 2 +- rust/qemu-api/src/chardev.rs | 2 +- rust/qemu-api/src/qom.rs | 4 ++-- rust/qemu-api/src/timer.rs | 2 +- 7 files changed, 7 insertions(+), 9 deletions(-) diff --git a/docs/devel/rust.rst b/docs/devel/rust.rst index 13a002cfe69..a315f668865 100644 --- a/docs/devel/rust.rst +++ b/docs/devel/rust.rst @@ -74,8 +74,6 @@ Supported tools QEMU supports rustc version 1.63.0 and newer. Notably, the following feat= ures are missing: =20 -* ``cast_mut()``/``cast_const()`` (1.65.0). Use ``as`` instead. - * Generic Associated Types (1.65.0) =20 * ``CStr::from_bytes_with_nul()`` as a ``const`` function (1.72.0). diff --git a/rust/Cargo.toml b/rust/Cargo.toml index eda7980b31a..a328634d949 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -71,6 +71,7 @@ no_effect_underscore_binding =3D "deny" option_option =3D "deny" or_fun_call =3D "deny" ptr_as_ptr =3D "deny" +ptr_cast_constness =3D "deny" pub_underscore_fields =3D "deny" redundant_clone =3D "deny" redundant_closure_for_method_calls =3D "deny" @@ -92,7 +93,6 @@ used_underscore_binding =3D "deny" =20 # nice to have, but cannot be enabled yet #wildcard_imports =3D "deny" # still have many bindings::* imports -#ptr_cast_constness =3D "deny" # needs 1.65.0 for cast_mut()/cast_const() =20 # these may have false positives #option_if_let_else =3D "deny" diff --git a/rust/hw/timer/hpet/src/hpet.rs b/rust/hw/timer/hpet/src/hpet.rs index d4364f2f2f7..b7a1be05deb 100644 --- a/rust/hw/timer/hpet/src/hpet.rs +++ b/rust/hw/timer/hpet/src/hpet.rs @@ -219,7 +219,7 @@ fn init(&mut self, index: u8, state: &HPETState) { // SAFETY: the HPETTimer will only be used after the timer // is initialized below. qemu_timer: unsafe { Timer::new() }, - state: NonNull::new(state as *const _ as *mut _).unwrap(), + state: NonNull::new((state as *const HPETState).cast_mut()).un= wrap(), config: 0, cmp: 0, fsb: 0, diff --git a/rust/qemu-api/src/cell.rs b/rust/qemu-api/src/cell.rs index ab0785a2692..1cb9fdcd53f 100644 --- a/rust/qemu-api/src/cell.rs +++ b/rust/qemu-api/src/cell.rs @@ -1016,7 +1016,7 @@ pub const fn as_mut_ptr(&self) -> *mut T { =20 /// Returns a raw pointer to the opaque data. pub const fn as_ptr(&self) -> *const T { - self.as_mut_ptr() as *const _ + self.as_mut_ptr().cast_const() } =20 /// Returns a raw pointer to the opaque data that can be passed to a diff --git a/rust/qemu-api/src/chardev.rs b/rust/qemu-api/src/chardev.rs index 146a4852da3..6e0590d758e 100644 --- a/rust/qemu-api/src/chardev.rs +++ b/rust/qemu-api/src/chardev.rs @@ -160,7 +160,7 @@ pub fn enable_handlers< receive_cb, event_cb, None, - (owner as *const T as *mut T).cast::(), + (owner as *const T).cast_mut().cast::(), core::ptr::null_mut(), true, ); diff --git a/rust/qemu-api/src/qom.rs b/rust/qemu-api/src/qom.rs index 52e3a1ec981..41e5a5e29a8 100644 --- a/rust/qemu-api/src/qom.rs +++ b/rust/qemu-api/src/qom.rs @@ -388,7 +388,7 @@ fn as_mut_ptr(&self) -> *mut U { #[allow(clippy::as_ptr_cast_mut)] { - self.as_ptr::() as *mut _ + self.as_ptr::().cast_mut() } } } @@ -638,7 +638,7 @@ pub unsafe fn from_raw(ptr: *const T) -> Self { // SAFETY NOTE: while NonNull requires a mutable pointer, only // Deref is implemented so the pointer passed to from_raw // remains const - Owned(NonNull::new(ptr as *mut T).unwrap()) + Owned(NonNull::new(ptr.cast_mut()).unwrap()) } =20 /// Obtain a raw C pointer from a reference. `src` is consumed diff --git a/rust/qemu-api/src/timer.rs b/rust/qemu-api/src/timer.rs index d697fd742bc..868bd88575f 100644 --- a/rust/qemu-api/src/timer.rs +++ b/rust/qemu-api/src/timer.rs @@ -81,7 +81,7 @@ pub fn init_full<'timer, 'opaque: 'timer, T, F>( scale as c_int, attributes as c_int, Some(timer_cb), - (opaque as *const T).cast::() as *mut c_void, + (opaque as *const T).cast::().cast_mut(), ) } } --=20 2.49.0 From nobody Fri Dec 19 04:16:58 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1746435977; cv=none; d=zohomail.com; s=zohoarc; b=WiZ1wj1OSweaOdBkcsQ1dpz515lsuJ7npkV/b6N1bIP8IY/0i8Nfkk4nrqYd2gPD7fCg+4QBSKKMdDo0A6WusVzToef0qM4/wi73KZq8AQOMJpuD4nyodE7nQm6muAqJ5myJbc3etBw6fOZk5lzzsaifDk8ja0TXcGsdwNDyfmU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1746435977; h=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=ohR/IFn1kHVkRvX8mmR8KUYWUiNtLgR/RJBHE1u57AI=; b=M11efN67jLP5RFlbEXDcRCgWUb05NnEiXyHRKqZyuY026VhAIL19CwBAYCfAQqwFIXNbbXaIJa4u7oeE1TvOgBDPiDaa377fQzfWBUAuqX+a8vrns3n9QQMsQrQHC2Bwggq/XZLvHvlnf2A72AsLKibOx9wVh0swawyGONRgLlA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 174643597788667.35054912739031; Mon, 5 May 2025 02:06:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uBrlz-0004Ot-Kp; Mon, 05 May 2025 05:06:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uBrlE-0003lB-DC for qemu-devel@nongnu.org; Mon, 05 May 2025 05:05:22 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uBrl7-0005yo-BG for qemu-devel@nongnu.org; Mon, 05 May 2025 05:05:12 -0400 Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-352-bc1kknxNPtyqIdpnmvL14w-1; Mon, 05 May 2025 05:05:06 -0400 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-39126c3469fso1061139f8f.3 for ; Mon, 05 May 2025 02:05:06 -0700 (PDT) Received: from [192.168.10.48] ([151.95.54.106]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-441b8a288f0sm126012775e9.27.2025.05.05.02.04.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 May 2025 02:04:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1746435907; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ohR/IFn1kHVkRvX8mmR8KUYWUiNtLgR/RJBHE1u57AI=; b=Sd62hBIWCSZ1RQsP+Z0StmEicMn+yrZpjhoMj5ANtA7W0aUq0fx0GYC9+XIrNqJ3EYwzG6 pLcKuLgp3GAb0JwS1QJ4rXBBN1ZENd0OgkQcr86xpXRUbQKw02RLK5D9VoDM/R3iwSvN62 34l5kC8uNfyFF/XRDcleKr+nbG4IO2Q= X-MC-Unique: bc1kknxNPtyqIdpnmvL14w-1 X-Mimecast-MFC-AGG-ID: bc1kknxNPtyqIdpnmvL14w_1746435905 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746435904; x=1747040704; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ohR/IFn1kHVkRvX8mmR8KUYWUiNtLgR/RJBHE1u57AI=; b=UzhoTXntcXDBWPFrH/e84/BrNnCrURddYTzmheBxKkN6QlXSdv1pf9fw20/3vCUjLI sDhULDIca0v70CKe1m1GDK6VT0MwQ9oN8HvPC3QTazl7lPrwMKaYWa1KbNQWNVGE3XWe 1GBLajFZcedKKS96eCasN4Q/D0Cevv6ZVhcNCFtLpEu6H0bYSuK5cg/CFUi9P/tWcrzP rN4bkSpXrQJYGkpkZdn9GRO5R6MFTGo6BZGcI2Qt9WzHQAzar/p5MlR18gGFoalLAdw+ AZSKP9HUt4bdyjmd8jQMxz+59k0m9n3NOTXibAA7c68wbjvXQ13kDQDC6nY93wsu3eK+ JYEg== X-Gm-Message-State: AOJu0Ywus3ZO72pq4kB6xoOagaou/G+Anh9/cPjeU85Xs3i0tr/Y3dS5 g+JVCkDwv9g2fHxarYTb1vdd6ieyeooF/ZGwmgEnWezAdOzdnaZVgVXkPoyRVpzW4G4cZnMXmE7 QtLXVHoeIWRabHYuUwGMuIOWRWFYtnByaxf5puwRQWVoRtLYW//k9GxPVuL6EfjT8s/miVl77HO UFk/QCmlQbktA7xMOtZrVBWOPR2b0EtNJwfWQv X-Gm-Gg: ASbGnctqmFeAVy1e3SolBPqLyTr7aBV0sP7xqQpTKDxqCG47+d3oOmfGasjlU1F228P mfVvAqf4bgDNP8Lt4HyA7Su09c/JLLQi2le/2Vw9pgjp2iwLq9rWCzL303k2sVgIe3xELyL7XAQ X5vkpUQg1RLHOo/hWwwXMcDSuiPWsVRdeOJp/PwNthRwcyra0dXoNfB1Pil4LqQRbLDlmKsBe23 o065CXOsAuu1PZYZLUUshfLgdiEgtPh+Q9h4MLAXeMSMvAs3Gg5PGLp6tVVhWwQI483/uDFVCEZ qHb/+4yAR5GzZTI= X-Received: by 2002:a05:6000:40db:b0:39f:efb:c2f6 with SMTP id ffacd0b85a97d-3a099adcb13mr8019592f8f.33.1746435903447; Mon, 05 May 2025 02:05:03 -0700 (PDT) X-Google-Smtp-Source: AGHT+IF2PJa7R2R3lT+pajjWsXS0FBoqOMs4T/wqOknoegUdxmAQVPqgx+KRuWrdLeGRKhtZjsmHbw== X-Received: by 2002:a05:6000:40db:b0:39f:efb:c2f6 with SMTP id ffacd0b85a97d-3a099adcb13mr8019551f8f.33.1746435902809; Mon, 05 May 2025 02:05:02 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: manos.pitsidianakis@linaro.org, qemu-rust@nongnu.org Subject: [PATCH 09/11] rust: remove offset_of replacement Date: Mon, 5 May 2025 11:04:34 +0200 Message-ID: <20250505090438.24992-10-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250505090438.24992-1-pbonzini@redhat.com> References: <20250505090438.24992-1-pbonzini@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -44 X-Spam_score: -4.5 X-Spam_bar: ---- X-Spam_report: (-4.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.411, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1746435978961019000 Content-Type: text/plain; charset="utf-8" Reviewed-by: Manos Pitsidianakis Reviewed-by: Zhao Liu --- docs/devel/rust.rst | 6 - rust/Cargo.lock | 1 - rust/Cargo.toml | 2 +- rust/hw/char/pl011/src/device.rs | 4 +- rust/hw/timer/hpet/src/hpet.rs | 4 +- rust/qemu-api-macros/src/lib.rs | 29 +---- rust/qemu-api/Cargo.toml | 3 - rust/qemu-api/build.rs | 7 -- rust/qemu-api/meson.build | 4 - rust/qemu-api/src/lib.rs | 4 - rust/qemu-api/src/offset_of.rs | 168 --------------------------- rust/qemu-api/src/qdev.rs | 6 +- rust/qemu-api/src/vmstate.rs | 10 +- rust/qemu-api/tests/tests.rs | 2 - rust/qemu-api/tests/vmstate_tests.rs | 5 +- 15 files changed, 16 insertions(+), 239 deletions(-) delete mode 100644 rust/qemu-api/src/offset_of.rs diff --git a/docs/devel/rust.rst b/docs/devel/rust.rst index a315f668865..5cfafc532cc 100644 --- a/docs/devel/rust.rst +++ b/docs/devel/rust.rst @@ -84,12 +84,6 @@ are missing: * ``c"" literals`` (stable in 1.77.0). QEMU provides a ``c_str!()`` macro to define ``CStr`` constants easily =20 -* ``offset_of!`` (stable in 1.77.0). QEMU uses ``offset_of!()`` heavily; = it - provides a replacement in the ``qemu_api`` crate, but it does not support - lifetime parameters and therefore ``&'a Something`` fields in the struct - may have to be replaced by ``NonNull``. *Nested* ``offset_of= !`` - was only stabilized in Rust 1.82.0, but it is not used. - * inline const expression (stable in 1.79.0), currently worked around with associated constants in the ``FnCall`` trait. =20 diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 2ebf0a11ea4..13d580c693b 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -108,7 +108,6 @@ version =3D "0.1.0" dependencies =3D [ "libc", "qemu_api_macros", - "version_check", ] =20 [[package]] diff --git a/rust/Cargo.toml b/rust/Cargo.toml index a328634d949..4f6fe17b50f 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -17,7 +17,7 @@ rust-version =3D "1.77.0" [workspace.lints.rust] unexpected_cfgs =3D { level =3D "deny", check-cfg =3D [ 'cfg(MESON)', 'cfg(HAVE_GLIB_WITH_ALIGNED_ALLOC)', - 'cfg(has_offset_of)'] } +] } =20 # Occasionally, we may need to silence warnings and clippy lints that # were only introduced in newer Rust compiler versions. Do not croak diff --git a/rust/hw/char/pl011/src/device.rs b/rust/hw/char/pl011/src/devi= ce.rs index bb2a0f207a5..7c563ade9cd 100644 --- a/rust/hw/char/pl011/src/device.rs +++ b/rust/hw/char/pl011/src/device.rs @@ -74,7 +74,7 @@ fn index(&self, idx: u32) -> &Self::Output { } =20 #[repr(C)] -#[derive(Debug, Default, qemu_api_macros::offsets)] +#[derive(Debug, Default)] pub struct PL011Registers { #[doc(alias =3D "fr")] pub flags: registers::Flags, @@ -98,7 +98,7 @@ pub struct PL011Registers { } =20 #[repr(C)] -#[derive(qemu_api_macros::Object, qemu_api_macros::offsets)] +#[derive(qemu_api_macros::Object)] /// PL011 Device Model in QEMU pub struct PL011State { pub parent_obj: ParentField, diff --git a/rust/hw/timer/hpet/src/hpet.rs b/rust/hw/timer/hpet/src/hpet.rs index b7a1be05deb..719343a20c5 100644 --- a/rust/hw/timer/hpet/src/hpet.rs +++ b/rust/hw/timer/hpet/src/hpet.rs @@ -183,7 +183,7 @@ fn timer_handler(timer_cell: &BqlRefCell) { =20 /// HPET Timer Abstraction #[repr(C)] -#[derive(Debug, qemu_api_macros::offsets)] +#[derive(Debug)] pub struct HPETTimer { /// timer N index within the timer block (`HPETState`) #[doc(alias =3D "tn")] @@ -523,7 +523,7 @@ fn write(&mut self, reg: TimerRegister, value: u64, shi= ft: u32, len: u32) { =20 /// HPET Event Timer Block Abstraction #[repr(C)] -#[derive(qemu_api_macros::Object, qemu_api_macros::offsets)] +#[derive(qemu_api_macros::Object)] pub struct HPETState { parent_obj: ParentField, iomem: MemoryRegion, diff --git a/rust/qemu-api-macros/src/lib.rs b/rust/qemu-api-macros/src/lib= .rs index 0bffd2691b4..dc14cac4ffa 100644 --- a/rust/qemu-api-macros/src/lib.rs +++ b/rust/qemu-api-macros/src/lib.rs @@ -6,7 +6,7 @@ use quote::quote; use syn::{ parse_macro_input, parse_quote, punctuated::Punctuated, spanned::Spann= ed, token::Comma, Data, - DeriveInput, Field, Fields, FieldsUnnamed, Ident, Meta, Path, Token, T= ype, Variant, Visibility, + DeriveInput, Field, Fields, FieldsUnnamed, Ident, Meta, Path, Token, V= ariant, }; =20 mod utils; @@ -151,33 +151,6 @@ pub fn derive_opaque(input: TokenStream) -> TokenStrea= m { TokenStream::from(expanded) } =20 -#[rustfmt::skip::macros(quote)] -fn derive_offsets_or_error(input: DeriveInput) -> Result { - is_c_repr(&input, "#[derive(offsets)]")?; - - let name =3D &input.ident; - let fields =3D get_fields(&input, "#[derive(offsets)]")?; - let field_names: Vec<&Ident> =3D fields.iter().map(|f| f.ident.as_ref(= ).unwrap()).collect(); - let field_types: Vec<&Type> =3D fields.iter().map(|f| &f.ty).collect(); - let field_vis: Vec<&Visibility> =3D fields.iter().map(|f| &f.vis).coll= ect(); - - Ok(quote! { - ::qemu_api::with_offsets! { - struct #name { - #(#field_vis #field_names: #field_types,)* - } - } - }) -} - -#[proc_macro_derive(offsets)] -pub fn derive_offsets(input: TokenStream) -> TokenStream { - let input =3D parse_macro_input!(input as DeriveInput); - let expanded =3D derive_offsets_or_error(input).unwrap_or_else(Into::i= nto); - - TokenStream::from(expanded) -} - #[allow(non_snake_case)] fn get_repr_uN(input: &DeriveInput, msg: &str) -> Result= { let repr =3D input.attrs.iter().find(|attr| attr.path().is_ident("repr= ")); diff --git a/rust/qemu-api/Cargo.toml b/rust/qemu-api/Cargo.toml index ca1b04269fd..c96cf50e7a1 100644 --- a/rust/qemu-api/Cargo.toml +++ b/rust/qemu-api/Cargo.toml @@ -17,9 +17,6 @@ rust-version.workspace =3D true qemu_api_macros =3D { path =3D "../qemu-api-macros" } libc =3D "0.2.162" =20 -[build-dependencies] -version_check =3D "~0.9" - [features] default =3D ["debug_cell"] allocator =3D [] diff --git a/rust/qemu-api/build.rs b/rust/qemu-api/build.rs index 471e6c633df..470be2a4d54 100644 --- a/rust/qemu-api/build.rs +++ b/rust/qemu-api/build.rs @@ -8,8 +8,6 @@ use std::os::windows::fs::symlink_file; use std::{env, fs::remove_file, io::Result, path::Path}; =20 -use version_check as rustc; - fn main() -> Result<()> { // Placing bindings.inc.rs in the source directory is supported // but not documented or encouraged. @@ -38,11 +36,6 @@ fn main() -> Result<()> { } symlink_file(file, dest_path)?; =20 - // Check for available rustc features - if rustc::is_min_version("1.77.0").unwrap_or(false) { - println!("cargo:rustc-cfg=3Dhas_offset_of"); - } - println!("cargo:rerun-if-changed=3Dbuild.rs"); Ok(()) } diff --git a/rust/qemu-api/meson.build b/rust/qemu-api/meson.build index 858685ddd4a..95e65643ae1 100644 --- a/rust/qemu-api/meson.build +++ b/rust/qemu-api/meson.build @@ -5,9 +5,6 @@ _qemu_api_cfg =3D run_command(rustc_args, libc_dep =3D dependency('libc-0.2-rs') =20 # _qemu_api_cfg +=3D ['--cfg', 'feature=3D"allocator"'] -if rustc.version().version_compare('>=3D1.77.0') - _qemu_api_cfg +=3D ['--cfg', 'has_offset_of'] -endif if get_option('debug_mutex') _qemu_api_cfg +=3D ['--cfg', 'feature=3D"debug_cell"'] endif @@ -28,7 +25,6 @@ _qemu_api_rs =3D static_library( 'src/irq.rs', 'src/memory.rs', 'src/module.rs', - 'src/offset_of.rs', 'src/prelude.rs', 'src/qdev.rs', 'src/qom.rs', diff --git a/rust/qemu-api/src/lib.rs b/rust/qemu-api/src/lib.rs index c3641e893b7..90c19636660 100644 --- a/rust/qemu-api/src/lib.rs +++ b/rust/qemu-api/src/lib.rs @@ -23,7 +23,6 @@ pub mod irq; pub mod memory; pub mod module; -pub mod offset_of; pub mod qdev; pub mod qom; pub mod sysbus; @@ -165,6 +164,3 @@ unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) { } } } - -#[cfg(has_offset_of)] -pub use core::mem::offset_of; diff --git a/rust/qemu-api/src/offset_of.rs b/rust/qemu-api/src/offset_of.rs deleted file mode 100644 index 373229bbde9..00000000000 --- a/rust/qemu-api/src/offset_of.rs +++ /dev/null @@ -1,168 +0,0 @@ -// SPDX-License-Identifier: MIT - -#![doc(hidden)] -//! This module provides macros that emulate the functionality of -//! `core::mem::offset_of` on older versions of Rust. -//! -//! Documentation is hidden because it only exposes macros, which -//! are exported directly from `qemu_api`. - -/// This macro provides the same functionality as `core::mem::offset_of`, -/// except that only one level of field access is supported. The declarat= ion -/// of the struct must be wrapped with `with_offsets! { }`. -/// -/// It is needed because `offset_of!` was only stabilized in Rust 1.77. -#[cfg(not(has_offset_of))] -#[macro_export] -macro_rules! offset_of { - ($Container:ty, $field:ident) =3D> { - <$Container>::OFFSET_TO__.$field - }; -} - -/// A wrapper for struct declarations, that allows using `offset_of!` in -/// versions of Rust prior to 1.77 -#[macro_export] -macro_rules! with_offsets { - // This method to generate field offset constants comes from: - // - // https://play.rust-lang.org/?version=3Dstable&mode=3Ddebug&editi= on=3D2018&gist=3D10a22a9b8393abd7b541d8fc844bc0df - // - // used under MIT license with permission of Yandros aka Daniel Henry-= Mantilla - ( - $(#[$struct_meta:meta])* - $struct_vis:vis - struct $StructName:ident { - $( - $(#[$field_meta:meta])* - $field_vis:vis - $field_name:ident : $field_ty:ty - ),* - $(,)? - } - ) =3D> ( - #[cfg(not(has_offset_of))] - const _: () =3D { - struct StructOffsetsHelper(std::marker::PhantomData); - const END_OF_PREV_FIELD: usize =3D 0; - - // populate StructOffsetsHelper with associated consts, - // one for each field - $crate::with_offsets! { - @struct $StructName - @names [ $($field_name)* ] - @tys [ $($field_ty ,)*] - } - - // now turn StructOffsetsHelper's consts into a single stru= ct, - // applying field visibility. This provides better error mess= ages - // than if offset_of! used StructOffsetsHelper:: directly. - pub - struct StructOffsets { - $( - $field_vis - $field_name: usize, - )* - } - impl $StructName { - pub - const OFFSET_TO__: StructOffsets =3D StructOffsets { - $( - $field_name: StructOffsetsHelper::<$StructName>::$= field_name, - )* - }; - } - }; - ); - - ( - @struct $StructName:ident - @names [] - @tys [] - ) =3D> (); - - ( - @struct $StructName:ident - @names [$field_name:ident $($other_names:tt)*] - @tys [$field_ty:ty , $($other_tys:tt)*] - ) =3D> ( - #[allow(non_local_definitions)] - #[allow(clippy::modulo_one)] - impl StructOffsetsHelper<$StructName> { - #[allow(nonstandard_style)] - const $field_name: usize =3D { - const ALIGN: usize =3D std::mem::align_of::<$field_ty>(); - const TRAIL: usize =3D END_OF_PREV_FIELD % ALIGN; - END_OF_PREV_FIELD + (if TRAIL =3D=3D 0 { 0usize } else { A= LIGN - TRAIL }) - }; - } - const _: () =3D { - const END_OF_PREV_FIELD: usize =3D - StructOffsetsHelper::<$StructName>::$field_name + - std::mem::size_of::<$field_ty>() - ; - $crate::with_offsets! { - @struct $StructName - @names [$($other_names)*] - @tys [$($other_tys)*] - } - }; - ); -} - -#[cfg(test)] -mod tests { - use crate::offset_of; - - #[repr(C)] - struct Foo { - a: u16, - b: u32, - c: u64, - d: u16, - } - - #[repr(C)] - struct Bar { - pub a: u16, - pub b: u64, - c: Foo, - d: u64, - } - - crate::with_offsets! { - #[repr(C)] - struct Bar { - pub a: u16, - pub b: u64, - c: Foo, - d: u64, - } - } - - #[repr(C)] - pub struct Baz { - b: u32, - a: u8, - } - crate::with_offsets! { - #[repr(C)] - pub struct Baz { - b: u32, - a: u8, - } - } - - #[test] - fn test_offset_of() { - const OFFSET_TO_C: usize =3D offset_of!(Bar, c); - - assert_eq!(offset_of!(Bar, a), 0); - assert_eq!(offset_of!(Bar, b), 8); - assert_eq!(OFFSET_TO_C, 16); - assert_eq!(offset_of!(Bar, d), 40); - - assert_eq!(offset_of!(Baz, b), 0); - assert_eq!(offset_of!(Baz, a), 4); - } -} diff --git a/rust/qemu-api/src/qdev.rs b/rust/qemu-api/src/qdev.rs index 17c7fecabeb..1279d7a58d5 100644 --- a/rust/qemu-api/src/qdev.rs +++ b/rust/qemu-api/src/qdev.rs @@ -190,7 +190,7 @@ macro_rules! define_property { // use associated function syntax for type checking name: ::std::ffi::CStr::as_ptr($name), info: $prop, - offset: $crate::offset_of!($state, $field) as isize, + offset: ::std::mem::offset_of!($state, $field) as isize, bitnr: $bitnr, set_default: true, defval: $crate::bindings::Property__bindgen_ty_1 { u: $defval = as u64 }, @@ -202,7 +202,7 @@ macro_rules! define_property { // use associated function syntax for type checking name: ::std::ffi::CStr::as_ptr($name), info: $prop, - offset: $crate::offset_of!($state, $field) as isize, + offset: ::std::mem::offset_of!($state, $field) as isize, set_default: true, defval: $crate::bindings::Property__bindgen_ty_1 { u: $defval = as u64 }, ..$crate::zeroable::Zeroable::ZERO @@ -213,7 +213,7 @@ macro_rules! define_property { // use associated function syntax for type checking name: ::std::ffi::CStr::as_ptr($name), info: $prop, - offset: $crate::offset_of!($state, $field) as isize, + offset: ::std::mem::offset_of!($state, $field) as isize, set_default: false, ..$crate::zeroable::Zeroable::ZERO } diff --git a/rust/qemu-api/src/vmstate.rs b/rust/qemu-api/src/vmstate.rs index c0f29f74188..205f35a21fd 100644 --- a/rust/qemu-api/src/vmstate.rs +++ b/rust/qemu-api/src/vmstate.rs @@ -205,8 +205,8 @@ macro_rules! vmstate_of { name: ::core::concat!(::core::stringify!($field_name), "\0") .as_bytes() .as_ptr() as *const ::std::os::raw::c_char, - offset: $crate::offset_of!($struct_name, $field_name), - $(num_offset: $crate::offset_of!($struct_name, $num),)? + offset: ::std::mem::offset_of!($struct_name, $field_name), + $(num_offset: ::std::mem::offset_of!($struct_name, $num),)? $(field_exists: $crate::vmstate_exist_fn!($struct_name, $test_= fn),)? // The calls to `call_func_with_field!` are the magic that // computes most of the VMStateField from the type of the fiel= d. @@ -483,10 +483,10 @@ macro_rules! vmstate_struct { name: ::core::concat!(::core::stringify!($field_name), "\0") .as_bytes() .as_ptr() as *const ::std::os::raw::c_char, - $(num_offset: $crate::offset_of!($struct_name, $num),)? + $(num_offset: ::std::mem::offset_of!($struct_name, $num),)? offset: { $crate::assert_field_type!($struct_name, $field_name, $typ= e $(, num =3D $num)?); - $crate::offset_of!($struct_name, $field_name) + ::std::mem::offset_of!($struct_name, $field_name) }, size: ::core::mem::size_of::<$type>(), flags: $crate::bindings::VMStateFlags::VMS_STRUCT, @@ -518,7 +518,7 @@ macro_rules! vmstate_clock { $field_name, $crate::qom::Owned<$crate::qdev::Clock> $(, num =3D $n= um)? ); - $crate::offset_of!($struct_name, $field_name) + ::std::mem::offset_of!($struct_name, $field_name) }, size: ::core::mem::size_of::<*const $crate::qdev::Clock>(), flags: $crate::bindings::VMStateFlags( diff --git a/rust/qemu-api/tests/tests.rs b/rust/qemu-api/tests/tests.rs index 99a7aab6fed..d045808c3a8 100644 --- a/rust/qemu-api/tests/tests.rs +++ b/rust/qemu-api/tests/tests.rs @@ -26,7 +26,6 @@ ..Zeroable::ZERO }; =20 -#[derive(qemu_api_macros::offsets)] #[repr(C)] #[derive(qemu_api_macros::Object)] pub struct DummyState { @@ -79,7 +78,6 @@ fn vmsd() -> Option<&'static VMStateDescription> { } } =20 -#[derive(qemu_api_macros::offsets)] #[repr(C)] #[derive(qemu_api_macros::Object)] pub struct DummyChildState { diff --git a/rust/qemu-api/tests/vmstate_tests.rs b/rust/qemu-api/tests/vms= tate_tests.rs index 9a56ffd2385..cc3527a9b6a 100644 --- a/rust/qemu-api/tests/vmstate_tests.rs +++ b/rust/qemu-api/tests/vmstate_tests.rs @@ -33,7 +33,7 @@ // - VMSTATE_VARRAY_UINT16_UNSAFE // - VMSTATE_VARRAY_MULTIPLY #[repr(C)] -#[derive(Default, qemu_api_macros::offsets)] +#[derive(Default)] struct FooA { arr: [u8; FOO_ARRAY_MAX], num: u16, @@ -154,7 +154,7 @@ fn test_vmstate_varray_multiply() { // - VMSTATE_ARRAY // - VMSTATE_STRUCT_VARRAY_UINT8 with BqlCell wrapper & test_fn #[repr(C)] -#[derive(Default, qemu_api_macros::offsets)] +#[derive(Default)] struct FooB { arr_a: [FooA; FOO_ARRAY_MAX], num_a: u8, @@ -329,7 +329,6 @@ fn test_vmstate_struct_varray_uint8_wrapper() { impl_vmstate_forward!(FooCWrapper); =20 #[repr(C)] -#[derive(qemu_api_macros::offsets)] struct FooC { ptr: *const i32, ptr_a: NonNull, --=20 2.49.0 From nobody Fri Dec 19 04:16:58 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1746436359; cv=none; d=zohomail.com; s=zohoarc; b=in3ux35pPHgBWOcAPywSkvDCwfC57rWISh9oKlrtxqNZ052jAFIHKEa1bd2gga1/Z4lrmcmHbSHzyZM3rHXCbf+IvAciN7KP0ClZXp42GLvs/Z8oJq5C8wdRt4EOebwubTqBiHjn05opL5buQQ2oMfyOMSgZUX8gr2KUByx4Kyo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1746436359; 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=7J88oCyRyqmwlcOmBvYfmuaIGCYbi8fVE3oSHwEmaGM=; b=kOxLWqReAgSSuW9LO+G7nXznzSBdDvtXHrBL1NIruMG/j5xvObzg7gQV39oHl0WrrwXc275WbwUIgGhM15erJ0N1LlWfxaBctp68QT5jX6hLcAbv659PEedjY5MA7M/hRUAitmZstljpLQvFEuH+V5hnmnLmibAkBkaHP7jFLFw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1746436359035498.5427421354824; Mon, 5 May 2025 02:12:39 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uBrm3-0004aK-4R; Mon, 05 May 2025 05:06:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uBrlE-0003lC-Dm for qemu-devel@nongnu.org; Mon, 05 May 2025 05:05:22 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uBrl8-0005yr-0T for qemu-devel@nongnu.org; Mon, 05 May 2025 05:05:15 -0400 Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-504-FxgcmHP4NMqAVzcOZXvaJA-1; Mon, 05 May 2025 05:05:06 -0400 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-43d5ca7c86aso24552945e9.0 for ; Mon, 05 May 2025 02:05:06 -0700 (PDT) Received: from [192.168.10.48] ([151.95.54.106]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a099ae3b57sm9952232f8f.36.2025.05.05.02.05.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 May 2025 02:05:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1746435907; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7J88oCyRyqmwlcOmBvYfmuaIGCYbi8fVE3oSHwEmaGM=; b=NYvHwRZcnFJZzxxU0KmLiscHR6i4y3wPnjcNOvT6wGvM20HxdqdchGGLRXfRDm0w4uMJXd Nygr2NvHH3Id4/jutfm4CTEfsxrao3VfiUnSDg83dL3oY8l6Qk8rDjdtvdMZiuadT6dM/L nJkPEMN8mvv1svwppnsrr+i4K+K6iZI= X-MC-Unique: FxgcmHP4NMqAVzcOZXvaJA-1 X-Mimecast-MFC-AGG-ID: FxgcmHP4NMqAVzcOZXvaJA_1746435906 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746435905; x=1747040705; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7J88oCyRyqmwlcOmBvYfmuaIGCYbi8fVE3oSHwEmaGM=; b=mqoXfLP2ksw/5fzsFtkFEFtyZ4NGBuGKbpZsHVUGc3NdLNds4HkHycKhAVZOigaPIT I2ITB8pBDrcpJwFub2vK/a48TKHp2D83A9fmETCsfl6EyV6UdjqPrCvDqt1OPRv5qTFR c6uSch6ki3CmcttSSwQ7VoCZrgOOaUcj/+n6t058PYLf8ki6x8sw6OFmlyBcR4kwHA8c eB/IAV9R0gJ0VJsEULpxQYJE+DnArrsRDAZ+AT9QfIuc7/msS6aqZ9hD5t28orflA/v3 xsxUP8IoSIrM7eZ+dxMXTTdZM0JNyLi+eK+RJZy+ZRXXjF0XDRCNl7+CSUDS1+3W/MAh VpAg== X-Gm-Message-State: AOJu0Yxlq4tIhwJeS7JAtd/1612A8z0U3aDCyFKEiTRliGOYRfkD/oi2 +iLFSbhDwu4RFO9XwK7za5a1KA8K3F0HmmL4zWGMq+059WrURxjV+/b2J5JHqgecT6fj6bvfT/L ARMejZ7Ag7ErAw5rahCiMEblg/fk608osRy6+8h4fINkkB5dih4kcZaS2hMcbmRZfIpi4lnSAZI q3xYiElDpHXE7d6Y3KBpDibDrZ1gemMf9vBYM+ X-Gm-Gg: ASbGncvZEKtSgf4SApu/F0r/mx2IFtbZ+mbOlAPraM2XcM5tUDmNLIl4AFj6BKj7f1s FvwmYJmtye3UHy0z8r862s4/yrvoErLYTz6DpxgfimijQ2bdreN2zN0AiivC91eW+1vjs8lNJ+L zy6zxCgXYVN4bJDYFD6ETJtTQfrT5LNApgr2PUvrrqU1ikgwSuKC2DXP1msD7yx73acmuKsBT62 WwkuPOg0Nib5/APWChfsSOAMZkwETO/G3G4IWmEmBwg4YiPHTaP2FPux/eKPb1kRrT/H9SCfh17 HBr5tNnbUWc5X2o= X-Received: by 2002:a05:600c:3507:b0:43c:f8fc:f687 with SMTP id 5b1f17b1804b1-441bbf3bd94mr76075535e9.27.1746435904859; Mon, 05 May 2025 02:05:04 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHHpi1yhWG5GUCkyk3wOjAZTAeBmRGnGHOEx8usjAVmRd3etyNocKpplKJH4fhTUtZpskn5oQ== X-Received: by 2002:a05:600c:3507:b0:43c:f8fc:f687 with SMTP id 5b1f17b1804b1-441bbf3bd94mr76075155e9.27.1746435904220; Mon, 05 May 2025 02:05:04 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: manos.pitsidianakis@linaro.org, qemu-rust@nongnu.org Subject: [PATCH 10/11] rust: replace c_str! with c"" literals Date: Mon, 5 May 2025 11:04:35 +0200 Message-ID: <20250505090438.24992-11-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250505090438.24992-1-pbonzini@redhat.com> References: <20250505090438.24992-1-pbonzini@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -44 X-Spam_score: -4.5 X-Spam_bar: ---- X-Spam_report: (-4.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.411, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1746436361362116600 Reviewed-by: Manos Pitsidianakis Signed-off-by: Paolo Bonzini Reviewed-by: Zhao Liu --- docs/devel/rust.rst | 6 +-- rust/hw/char/pl011/src/device_class.rs | 11 +++-- rust/hw/char/pl011/src/lib.rs | 6 +-- rust/hw/timer/hpet/src/hpet.rs | 19 ++++---- rust/hw/timer/hpet/src/lib.rs | 4 +- rust/qemu-api/meson.build | 1 - rust/qemu-api/src/c_str.rs | 61 -------------------------- rust/qemu-api/src/cell.rs | 4 +- rust/qemu-api/src/lib.rs | 1 - rust/qemu-api/src/vmstate.rs | 2 +- rust/qemu-api/tests/tests.rs | 9 ++-- rust/qemu-api/tests/vmstate_tests.rs | 15 +++---- 12 files changed, 32 insertions(+), 107 deletions(-) delete mode 100644 rust/qemu-api/src/c_str.rs diff --git a/docs/devel/rust.rst b/docs/devel/rust.rst index 5cfafc532cc..557cee72f39 100644 --- a/docs/devel/rust.rst +++ b/docs/devel/rust.rst @@ -81,9 +81,6 @@ are missing: * "Return position ``impl Trait`` in Traits" (1.75.0, blocker for including the pinned-init create). =20 -* ``c"" literals`` (stable in 1.77.0). QEMU provides a ``c_str!()`` macro - to define ``CStr`` constants easily - * inline const expression (stable in 1.79.0), currently worked around with associated constants in the ``FnCall`` trait. =20 @@ -166,7 +163,6 @@ module status ``bitops`` complete ``callbacks`` complete ``cell`` stable -``c_str`` complete ``errno`` complete ``irq`` complete ``memory`` stable @@ -423,7 +419,7 @@ Adding dependencies Generally, the set of dependent crates is kept small. Think twice before adding a new external crate, especially if it comes with a large set of dependencies itself. Sometimes QEMU only needs a small subset of the -functionality; see for example QEMU's ``assertions`` or ``c_str`` modules. +functionality; see for example QEMU's ``assertions`` module. =20 On top of this recommendation, adding external crates to QEMU is a slightly complicated process, mostly due to the need to teach Meson how diff --git a/rust/hw/char/pl011/src/device_class.rs b/rust/hw/char/pl011/sr= c/device_class.rs index cd2dc33c207..d328d846323 100644 --- a/rust/hw/char/pl011/src/device_class.rs +++ b/rust/hw/char/pl011/src/device_class.rs @@ -9,7 +9,6 @@ =20 use qemu_api::{ bindings::{qdev_prop_bool, qdev_prop_chr}, - c_str, prelude::*, vmstate::VMStateDescription, vmstate_clock, vmstate_fields, vmstate_of, vmstate_struct, vmstate_sub= sections, vmstate_unused, @@ -25,7 +24,7 @@ extern "C" fn pl011_clock_needed(opaque: *mut c_void) -> = bool { =20 /// Migration subsection for [`PL011State`] clock. static VMSTATE_PL011_CLOCK: VMStateDescription =3D VMStateDescription { - name: c_str!("pl011/clock").as_ptr(), + name: c"pl011/clock".as_ptr(), version_id: 1, minimum_version_id: 1, needed: Some(pl011_clock_needed), @@ -46,7 +45,7 @@ extern "C" fn pl011_post_load(opaque: *mut c_void, versio= n_id: c_int) -> c_int { } =20 static VMSTATE_PL011_REGS: VMStateDescription =3D VMStateDescription { - name: c_str!("pl011/regs").as_ptr(), + name: c"pl011/regs".as_ptr(), version_id: 2, minimum_version_id: 2, fields: vmstate_fields! { @@ -70,7 +69,7 @@ extern "C" fn pl011_post_load(opaque: *mut c_void, versio= n_id: c_int) -> c_int { }; =20 pub static VMSTATE_PL011: VMStateDescription =3D VMStateDescription { - name: c_str!("pl011").as_ptr(), + name: c"pl011".as_ptr(), version_id: 2, minimum_version_id: 2, post_load: Some(pl011_post_load), @@ -87,14 +86,14 @@ extern "C" fn pl011_post_load(opaque: *mut c_void, vers= ion_id: c_int) -> c_int { qemu_api::declare_properties! { PL011_PROPERTIES, qemu_api::define_property!( - c_str!("chardev"), + c"chardev", PL011State, char_backend, unsafe { &qdev_prop_chr }, CharBackend ), qemu_api::define_property!( - c_str!("migrate-clk"), + c"migrate-clk", PL011State, migrate_clock, unsafe { &qdev_prop_bool }, diff --git a/rust/hw/char/pl011/src/lib.rs b/rust/hw/char/pl011/src/lib.rs index dbae76991c9..5c4fbc9d148 100644 --- a/rust/hw/char/pl011/src/lib.rs +++ b/rust/hw/char/pl011/src/lib.rs @@ -12,13 +12,11 @@ //! See [`PL011State`](crate::device::PL011State) for the device model typ= e and //! the [`registers`] module for register types. =20 -use qemu_api::c_str; - mod device; mod device_class; mod registers; =20 pub use device::pl011_create; =20 -pub const TYPE_PL011: &::std::ffi::CStr =3D c_str!("pl011"); -pub const TYPE_PL011_LUMINARY: &::std::ffi::CStr =3D c_str!("pl011_luminar= y"); +pub const TYPE_PL011: &::std::ffi::CStr =3D c"pl011"; +pub const TYPE_PL011_LUMINARY: &::std::ffi::CStr =3D c"pl011_luminary"; diff --git a/rust/hw/timer/hpet/src/hpet.rs b/rust/hw/timer/hpet/src/hpet.rs index 719343a20c5..779681d6509 100644 --- a/rust/hw/timer/hpet/src/hpet.rs +++ b/rust/hw/timer/hpet/src/hpet.rs @@ -14,7 +14,6 @@ address_space_memory, address_space_stl_le, qdev_prop_bit, qdev_pr= op_bool, qdev_prop_uint32, qdev_prop_uint8, }, - c_str, cell::{BqlCell, BqlRefCell}, irq::InterruptSource, memory::{ @@ -908,7 +907,7 @@ impl ObjectImpl for HPETState { qemu_api::declare_properties! { HPET_PROPERTIES, qemu_api::define_property!( - c_str!("timers"), + c"timers", HPETState, num_timers, unsafe { &qdev_prop_uint8 }, @@ -916,7 +915,7 @@ impl ObjectImpl for HPETState { default =3D HPET_MIN_TIMERS ), qemu_api::define_property!( - c_str!("msi"), + c"msi", HPETState, flags, unsafe { &qdev_prop_bit }, @@ -925,7 +924,7 @@ impl ObjectImpl for HPETState { default =3D false, ), qemu_api::define_property!( - c_str!("hpet-intcap"), + c"hpet-intcap", HPETState, int_route_cap, unsafe { &qdev_prop_uint32 }, @@ -933,7 +932,7 @@ impl ObjectImpl for HPETState { default =3D 0 ), qemu_api::define_property!( - c_str!("hpet-offset-saved"), + c"hpet-offset-saved", HPETState, hpet_offset_saved, unsafe { &qdev_prop_bool }, @@ -974,7 +973,7 @@ impl ObjectImpl for HPETState { } =20 static VMSTATE_HPET_RTC_IRQ_LEVEL: VMStateDescription =3D VMStateDescripti= on { - name: c_str!("hpet/rtc_irq_level").as_ptr(), + name: c"hpet/rtc_irq_level".as_ptr(), version_id: 1, minimum_version_id: 1, needed: Some(hpet_rtc_irq_level_needed), @@ -985,7 +984,7 @@ impl ObjectImpl for HPETState { }; =20 static VMSTATE_HPET_OFFSET: VMStateDescription =3D VMStateDescription { - name: c_str!("hpet/offset").as_ptr(), + name: c"hpet/offset".as_ptr(), version_id: 1, minimum_version_id: 1, needed: Some(hpet_offset_needed), @@ -996,7 +995,7 @@ impl ObjectImpl for HPETState { }; =20 static VMSTATE_HPET_TIMER: VMStateDescription =3D VMStateDescription { - name: c_str!("hpet_timer").as_ptr(), + name: c"hpet_timer".as_ptr(), version_id: 1, minimum_version_id: 1, fields: vmstate_fields! { @@ -1011,10 +1010,10 @@ impl ObjectImpl for HPETState { ..Zeroable::ZERO }; =20 -const VALIDATE_TIMERS_NAME: &CStr =3D c_str!("num_timers must match"); +const VALIDATE_TIMERS_NAME: &CStr =3D c"num_timers must match"; =20 static VMSTATE_HPET: VMStateDescription =3D VMStateDescription { - name: c_str!("hpet").as_ptr(), + name: c"hpet".as_ptr(), version_id: 2, minimum_version_id: 1, pre_save: Some(hpet_pre_save), diff --git a/rust/hw/timer/hpet/src/lib.rs b/rust/hw/timer/hpet/src/lib.rs index 5e7c961c289..1954584a87e 100644 --- a/rust/hw/timer/hpet/src/lib.rs +++ b/rust/hw/timer/hpet/src/lib.rs @@ -7,9 +7,7 @@ //! This library implements a device model for the IA-PC HPET (High //! Precision Event Timers) device in QEMU. =20 -use qemu_api::c_str; - pub mod fw_cfg; pub mod hpet; =20 -pub const TYPE_HPET: &::std::ffi::CStr =3D c_str!("hpet"); +pub const TYPE_HPET: &::std::ffi::CStr =3D c"hpet"; diff --git a/rust/qemu-api/meson.build b/rust/qemu-api/meson.build index 95e65643ae1..1696df705bf 100644 --- a/rust/qemu-api/meson.build +++ b/rust/qemu-api/meson.build @@ -20,7 +20,6 @@ _qemu_api_rs =3D static_library( 'src/callbacks.rs', 'src/cell.rs', 'src/chardev.rs', - 'src/c_str.rs', 'src/errno.rs', 'src/irq.rs', 'src/memory.rs', diff --git a/rust/qemu-api/src/c_str.rs b/rust/qemu-api/src/c_str.rs deleted file mode 100644 index 3fa61b59c76..00000000000 --- a/rust/qemu-api/src/c_str.rs +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2024 Red Hat, Inc. -// Author(s): Paolo Bonzini -// SPDX-License-Identifier: GPL-2.0-or-later - -#![doc(hidden)] -//! This module provides a macro to define a constant of type -//! [`CStr`](std::ffi::CStr), for compatibility with versions of -//! Rust that lack `c""` literals. -//! -//! Documentation is hidden because it only exposes macros, which -//! are exported directly from `qemu_api`. - -#[macro_export] -/// Given a string constant _without_ embedded or trailing NULs, return -/// a `CStr`. -/// -/// Needed for compatibility with Rust <1.77. -macro_rules! c_str { - ($str:expr) =3D> {{ - const STRING: &str =3D concat!($str, "\0"); - const BYTES: &[u8] =3D STRING.as_bytes(); - - // "for" is not allowed in const context... oh well, - // everybody loves some lisp. This could be turned into - // a procedural macro if this is a problem; alternatively - // Rust 1.72 makes CStr::from_bytes_with_nul a const function. - const fn f(b: &[u8], i: usize) { - if i =3D=3D b.len() - 1 { - } else if b[i] =3D=3D 0 { - panic!("c_str argument contains NUL") - } else { - f(b, i + 1) - } - } - f(BYTES, 0); - - // SAFETY: absence of NULs apart from the final byte was checked a= bove - unsafe { std::ffi::CStr::from_bytes_with_nul_unchecked(BYTES) } - }}; -} - -#[cfg(test)] -mod tests { - use std::ffi::CStr; - - use crate::c_str; - - #[test] - fn test_cstr_macro() { - let good =3D c_str!("=F0=9F=A6=80"); - let good_bytes =3D b"\xf0\x9f\xa6\x80\0"; - assert_eq!(good.to_bytes_with_nul(), good_bytes); - } - - #[test] - fn test_cstr_macro_const() { - const GOOD: &CStr =3D c_str!("=F0=9F=A6=80"); - const GOOD_BYTES: &[u8] =3D b"\xf0\x9f\xa6\x80\0"; - assert_eq!(GOOD.to_bytes_with_nul(), GOOD_BYTES); - } -} diff --git a/rust/qemu-api/src/cell.rs b/rust/qemu-api/src/cell.rs index 1cb9fdcd53f..05ce09f6cb6 100644 --- a/rust/qemu-api/src/cell.rs +++ b/rust/qemu-api/src/cell.rs @@ -77,13 +77,13 @@ //! //! ``` //! # use qemu_api::prelude::*; -//! # use qemu_api::{c_str, cell::BqlRefCell, irq::InterruptSource, irq::I= RQState}; +//! # use qemu_api::{cell::BqlRefCell, irq::InterruptSource, irq::IRQState= }; //! # use qemu_api::{sysbus::SysBusDevice, qom::Owned, qom::ParentField}; //! # const N_GPIOS: usize =3D 8; //! # struct PL061Registers { /* ... */ } //! # unsafe impl ObjectType for PL061State { //! # type Class =3D ::Class; -//! # const TYPE_NAME: &'static std::ffi::CStr =3D c_str!("pl061"); +//! # const TYPE_NAME: &'static std::ffi::CStr =3D c"pl061"; //! # } //! struct PL061State { //! parent_obj: ParentField, diff --git a/rust/qemu-api/src/lib.rs b/rust/qemu-api/src/lib.rs index 90c19636660..234a94e3c29 100644 --- a/rust/qemu-api/src/lib.rs +++ b/rust/qemu-api/src/lib.rs @@ -15,7 +15,6 @@ =20 pub mod assertions; pub mod bitops; -pub mod c_str; pub mod callbacks; pub mod cell; pub mod chardev; diff --git a/rust/qemu-api/src/vmstate.rs b/rust/qemu-api/src/vmstate.rs index 205f35a21fd..9c8b2398e9d 100644 --- a/rust/qemu-api/src/vmstate.rs +++ b/rust/qemu-api/src/vmstate.rs @@ -427,7 +427,7 @@ unsafe impl<$base> VMState for $type where $base: VMSta= te $($where)* { macro_rules! vmstate_unused { ($size:expr) =3D> {{ $crate::bindings::VMStateField { - name: $crate::c_str!("unused").as_ptr(), + name: c"unused".as_ptr(), size: $size, info: unsafe { ::core::ptr::addr_of!($crate::bindings::vmstate= _info_unused_buffer) }, flags: $crate::bindings::VMStateFlags::VMS_BUFFER, diff --git a/rust/qemu-api/tests/tests.rs b/rust/qemu-api/tests/tests.rs index d045808c3a8..a658a49fcfd 100644 --- a/rust/qemu-api/tests/tests.rs +++ b/rust/qemu-api/tests/tests.rs @@ -6,7 +6,6 @@ =20 use qemu_api::{ bindings::{module_call_init, module_init_type, qdev_prop_bool}, - c_str, cell::{self, BqlCell}, declare_properties, define_property, prelude::*, @@ -21,7 +20,7 @@ =20 // Test that macros can compile. pub static VMSTATE: VMStateDescription =3D VMStateDescription { - name: c_str!("name").as_ptr(), + name: c"name".as_ptr(), unmigratable: true, ..Zeroable::ZERO }; @@ -48,7 +47,7 @@ pub fn class_init(self: &mut DummyClass) { declare_properties! { DUMMY_PROPERTIES, define_property!( - c_str!("migrate-clk"), + c"migrate-clk", DummyState, migrate_clock, unsafe { &qdev_prop_bool }, @@ -58,7 +57,7 @@ pub fn class_init(self: &mut DummyClass) { =20 unsafe impl ObjectType for DummyState { type Class =3D DummyClass; - const TYPE_NAME: &'static CStr =3D c_str!("dummy"); + const TYPE_NAME: &'static CStr =3D c"dummy"; } =20 impl ObjectImpl for DummyState { @@ -92,7 +91,7 @@ pub struct DummyChildClass { =20 unsafe impl ObjectType for DummyChildState { type Class =3D DummyChildClass; - const TYPE_NAME: &'static CStr =3D c_str!("dummy_child"); + const TYPE_NAME: &'static CStr =3D c"dummy_child"; } =20 impl ObjectImpl for DummyChildState { diff --git a/rust/qemu-api/tests/vmstate_tests.rs b/rust/qemu-api/tests/vms= tate_tests.rs index cc3527a9b6a..ad0fc5cd5dd 100644 --- a/rust/qemu-api/tests/vmstate_tests.rs +++ b/rust/qemu-api/tests/vmstate_tests.rs @@ -14,7 +14,6 @@ vmstate_info_bool, vmstate_info_int32, vmstate_info_int64, vmstate= _info_int8, vmstate_info_uint64, vmstate_info_uint8, vmstate_info_unused_buffe= r, VMStateFlags, }, - c_str, cell::{BqlCell, Opaque}, impl_vmstate_forward, vmstate::{VMStateDescription, VMStateField}, @@ -43,7 +42,7 @@ struct FooA { } =20 static VMSTATE_FOOA: VMStateDescription =3D VMStateDescription { - name: c_str!("foo_a").as_ptr(), + name: c"foo_a".as_ptr(), version_id: 1, minimum_version_id: 1, fields: vmstate_fields! { @@ -173,7 +172,7 @@ fn validate_foob(_state: &FooB, _version_id: u8) -> boo= l { } =20 static VMSTATE_FOOB: VMStateDescription =3D VMStateDescription { - name: c_str!("foo_b").as_ptr(), + name: c"foo_b".as_ptr(), version_id: 2, minimum_version_id: 1, fields: vmstate_fields! { @@ -337,7 +336,7 @@ struct FooC { } =20 static VMSTATE_FOOC: VMStateDescription =3D VMStateDescription { - name: c_str!("foo_c").as_ptr(), + name: c"foo_c".as_ptr(), version_id: 3, minimum_version_id: 1, fields: vmstate_fields! { @@ -452,13 +451,13 @@ fn validate_food_2(_state: &FooD, _version_id: u8) ->= bool { } =20 static VMSTATE_FOOD: VMStateDescription =3D VMStateDescription { - name: c_str!("foo_d").as_ptr(), + name: c"foo_d".as_ptr(), version_id: 3, minimum_version_id: 1, fields: vmstate_fields! { - vmstate_validate!(FooD, c_str!("foo_d_0"), FooD::validate_food_0), - vmstate_validate!(FooD, c_str!("foo_d_1"), FooD::validate_food_1), - vmstate_validate!(FooD, c_str!("foo_d_2"), validate_food_2), + vmstate_validate!(FooD, c"foo_d_0", FooD::validate_food_0), + vmstate_validate!(FooD, c"foo_d_1", FooD::validate_food_1), + vmstate_validate!(FooD, c"foo_d_2", validate_food_2), }, ..Zeroable::ZERO }; --=20 2.49.0 From nobody Fri Dec 19 04:16:58 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1746435988; cv=none; d=zohomail.com; s=zohoarc; b=ZXFs9d11QNLDcaZ9eMoLPxGqMx0AsVq09I07M0R7GnEc8iPUrLlRRofvHLzBCdUAFKWmhoGXQAdi1dTVfaItng9VRfuCLP7T2yl2Cq0aMmefhL1nvjZOtFehMZ7v6k8e9vZeVjbK9fPcy+ASecun7Q38SJzNsdwOz4AmQGS1dTs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1746435988; h=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=0MCBJ5xtAP2sEtwZTxecdsarRiNYOTzsPMvNmsHN5qM=; b=g6TRerOsmsnQxvENoOrasEchkqTGjE6UYweyGxFK5BulmMhiv967HPUFpu1jWb4IKU5fISJ2c2IRdjkZphwg1gPViXCc8oaBMiZIQferQ11T+5EB3XjWOQO/w84crkGhL4C04pmxD4swEnT+26M8Gq6U/XrdX48x79jxfBdrgoY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1746435988255486.2339280072539; Mon, 5 May 2025 02:06:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uBrm1-0004WV-UY; Mon, 05 May 2025 05:06:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uBrlG-0003oJ-Om for qemu-devel@nongnu.org; Mon, 05 May 2025 05:05:22 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uBrlA-0005ze-Vz for qemu-devel@nongnu.org; Mon, 05 May 2025 05:05:17 -0400 Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-150-l4PlO4XcOwW37QD8W-uBaw-1; Mon, 05 May 2025 05:05:09 -0400 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-440667e7f92so24395585e9.3 for ; Mon, 05 May 2025 02:05:09 -0700 (PDT) Received: from [192.168.10.48] ([151.95.54.106]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a099ae8117sm9871638f8f.56.2025.05.05.02.05.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 May 2025 02:05:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1746435910; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=0MCBJ5xtAP2sEtwZTxecdsarRiNYOTzsPMvNmsHN5qM=; b=gth1tbO78smLhJsmpIdinR1TDcpWH2C6D6ki2UFfUvbEcvRmyfxrlDcdc3mmbLWn0X7r3H 3zb8e7tDaCAzdtQhSL+CsefDeVVJ31g/M8I7AEt8T1JuMN5dVIg+MlpGX4mUXcK3np7Djw BuwbRPGXxcz83bCrCun7I48zI4a3asw= X-MC-Unique: l4PlO4XcOwW37QD8W-uBaw-1 X-Mimecast-MFC-AGG-ID: l4PlO4XcOwW37QD8W-uBaw_1746435908 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746435908; x=1747040708; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0MCBJ5xtAP2sEtwZTxecdsarRiNYOTzsPMvNmsHN5qM=; b=RqsxWK4TRAstfvZXAHUObA9acof7ojPFTPJaCQ/gtiZzZN7eiN4ZV4D/+O8dLl2viI h+wVdCpOve4uTEMYrVY5KSA+tgZ/MVoYq53SC7rzGxV5WhGamcOapmegGpks+hgCWYUl YONha8bnaccoR+S0BPcR03XXcS3cpbG6zNeaxETZuqeCkOqPxBACcdc+9rc13XO6OyN4 SBm3g2Lpm4nJ+Z83qTZGR24z9mPRJvdqvlJ14KX65j/xqf2bcP3CrW/3Lhnozqak9dQJ IgyW26X1uGWnbat/gqfNziWN6BVUCLPMmZCzumhUqJOh/KyejIgAolqQzqi04rnCW424 S1pA== X-Gm-Message-State: AOJu0YzN6LrvFVSDvi5LsiSlqa3jkbtKAy393fWRHpzmp8OmFOEXigqT DMegZd+LWxS6wNyRJQhoivZ9vyJOErVaVouXOFfh+XkLZ7L0ibtFgacDblVffgPlknyKxUsE9ar 4IsxJtIGiC9vg7q8IXSIhN7P7wpl5oDbDNzCUpwQfyRLsArzMiNgUUW/lKsAs5WG86hXvkhdVQ3 BmY4ENnFXIWsU1KpXWcP9r5vAa8O1EMOfzojID X-Gm-Gg: ASbGnctN26OAnzXO2KZJ/E4tva7TfTDPmfEifwV9pYZ+SqtJ/lznPBHr7DFWfp6sdvf //7JtgCRNQWzs21bd8Gm0I7T8L9GHboT6lRc0fLqX79zoGNtav0IylClDAqZ0Tsdkn04cL08olY XsB2Oh4aC3/pe8dFovBXHMrf7n06MJa0FPumlb/uKIOX4dLKktUH1gkKVEGx8Eyz56V5xnNghRy sfpFvhAeITVaUo0OU20a5FyxjqDRDr0esaAar61iVOhwCgABp2yanmQ90AOleoKfnWgCoI1KAQO pb4qu/7thWrofVI= X-Received: by 2002:a5d:5f4c:0:b0:39c:2688:6edf with SMTP id ffacd0b85a97d-3a09fd879f5mr4757526f8f.14.1746435907744; Mon, 05 May 2025 02:05:07 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFPfOM+qiJU7HatBpa2hM+iVm4GQzW/ZoZETd4upzkhvkbf8z/Wgti0K0h0gtlBbNcQ2zL3Sg== X-Received: by 2002:a5d:5f4c:0:b0:39c:2688:6edf with SMTP id ffacd0b85a97d-3a09fd879f5mr4757497f8f.14.1746435907318; Mon, 05 May 2025 02:05:07 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: manos.pitsidianakis@linaro.org, qemu-rust@nongnu.org Subject: [PATCH 11/11] docs: rust: update for newer minimum supported version Date: Mon, 5 May 2025 11:04:36 +0200 Message-ID: <20250505090438.24992-12-pbonzini@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250505090438.24992-1-pbonzini@redhat.com> References: <20250505090438.24992-1-pbonzini@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -44 X-Spam_score: -4.5 X-Spam_bar: ---- X-Spam_report: (-4.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.411, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1746435988631019000 Content-Type: text/plain; charset="utf-8" Remove leftover notes for Rust changes between 1.63.0 and 1.77.0. Signed-off-by: Paolo Bonzini Reviewed-by: Manos Pitsidianakis Reviewed-by: Zhao Liu --- docs/devel/rust.rst | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/docs/devel/rust.rst b/docs/devel/rust.rst index 557cee72f39..4de86375021 100644 --- a/docs/devel/rust.rst +++ b/docs/devel/rust.rst @@ -71,16 +71,9 @@ Building Rust code with ``--enable-modules`` is not supp= orted yet. Supported tools ''''''''''''''' =20 -QEMU supports rustc version 1.63.0 and newer. Notably, the following feat= ures +QEMU supports rustc version 1.77.0 and newer. Notably, the following feat= ures are missing: =20 -* Generic Associated Types (1.65.0) - -* ``CStr::from_bytes_with_nul()`` as a ``const`` function (1.72.0). - -* "Return position ``impl Trait`` in Traits" (1.75.0, blocker for including - the pinned-init create). - * inline const expression (stable in 1.79.0), currently worked around with associated constants in the ``FnCall`` trait. =20 @@ -105,12 +98,6 @@ are missing: =20 __ https://github.com/rust-lang/rust/pull/125258 =20 -It is expected that QEMU will advance its minimum supported version of -rustc to 1.77.0 as soon as possible; as of January 2025, blockers -for that right now are Debian bookworm and 32-bit MIPS processors. -This unfortunately means that references to statics in constants will -remain an issue. - QEMU also supports version 0.60.x of bindgen, which is missing option ``--generate-cstr``. This option requires version 0.66.x and will be adopted as soon as supporting these older versions is not necessary --=20 2.49.0