From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3529E2D5C91; Thu, 11 Dec 2025 19:29:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765481395; cv=none; b=aQ2VkX6EjzgUds2gu8l8HVZ18aty7tBpkCtcM3IssWLNhnGJTUYFg+6/nUHeffHs0t6syUBePOV3YVSve+Zo+Cxry1g6o9gTZt06UWMuQrZXM2J/susm3GAHPrlqEToGUcR4Ytja0VsPu6V37rmScuqE7uGhJha6ifXwiPB8WQY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765481395; c=relaxed/simple; bh=ARAX3BCerEubKzWbkqRQwyMKnhBoh/wXeqkt8COXy6k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=a2NY+tt7hRsyp1ZBCkv64n/2e5QMs9HvXUxazJpjdi6LtNho+hBLNCDCEbos4EwUQhqJ2l6n7wqbo6o6ZpDfaITJO26MqCtHBYlVYgKj2fAn4SpLboz8Iyrm0X6y8b7glAXixNNa+o/Z/STtVNwzvJIsZ/AUbt7AEkBZ8TEgumQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=I3F3BDrC; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="I3F3BDrC" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B2DA7C4CEFB; Thu, 11 Dec 2025 19:29:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1765481394; bh=ARAX3BCerEubKzWbkqRQwyMKnhBoh/wXeqkt8COXy6k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:Reply-To:From; b=I3F3BDrCYOxkp71ZM/Psatbf6fb0p6ORJMu0sdQ42YNvYM73CBerbrtn/lvRxlEPn tpetUj2+QGlluzVkVAwDzY4ykYEF6xqab2WMkwUpJtDpXZ/4jFClxGEVnFklL5uS+/ 9rsvm3CcRLpNYwYjWMjw/AWJ8vIh7USDe7w/v6SLpKQZHoq1A47xX2OZoIjaOrR/eD coibTjnCNzpZLm4ahecjD6UL8+iI1mgcSa8Y0cv8sXNtGN4stxhqXD/U2/YgcTeZ7g GDRRqZHdEMlfSHn8Y21bD33pD0pzW3OyYCHGab6o3403KZPBFSRQLoC7G3UbseCll/ ZUYjbltJ1bLow== From: Gary Guo To: Miguel Ojeda , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Greg Kroah-Hartman , Fiona Behrens , =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= , Igor Korotin , Tamir Duberstein Cc: rust-for-linux@vger.kernel.org, David Gow , linux-kernel@vger.kernel.org Subject: [PATCH 06/11] rust: macros: convert `#[export]` to use `syn` Date: Thu, 11 Dec 2025 18:56:46 +0000 Message-ID: <20251211185805.2835633-7-gary@kernel.org> X-Mailer: git-send-email 2.51.2 In-Reply-To: <20251211185805.2835633-1-gary@kernel.org> References: <20251211185805.2835633-1-gary@kernel.org> Reply-To: Gary Guo Precedence: bulk X-Mailing-List: rust-for-linux@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Gary Guo This eliminates the custom `function_name` helper. Signed-off-by: Gary Guo --- rust/macros/export.rs | 24 +++++++++--------------- rust/macros/helpers.rs | 18 ------------------ rust/macros/lib.rs | 5 +++-- 3 files changed, 12 insertions(+), 35 deletions(-) diff --git a/rust/macros/export.rs b/rust/macros/export.rs index 92d9b30971929..6d53521f62fc7 100644 --- a/rust/macros/export.rs +++ b/rust/macros/export.rs @@ -3,19 +3,14 @@ use proc_macro2::TokenStream; use quote::quote; -use crate::helpers::function_name; - /// Please see [`crate::export`] for documentation. -pub(crate) fn export(_attr: TokenStream, ts: TokenStream) -> TokenStream { - let Some(name) = function_name(ts.clone()) else { - return "::core::compile_error!(\"The #[export] attribute must be used on a function.\");" - .parse::() - .unwrap(); - }; +pub(crate) fn export(f: syn::ItemFn) -> TokenStream { + let name = &f.sig.ident; - // This verifies that the function has the same signature as the declaration generated by - // bindgen. It makes use of the fact that all branches of an if/else must have the same type. - let signature_check = quote!( + quote! { + // This verifies that the function has the same signature as the declaration generated by + // bindgen. It makes use of the fact that all branches of an if/else must have the same + // type. const _: () = { if true { ::kernel::bindings::#name @@ -23,9 +18,8 @@ pub(crate) fn export(_attr: TokenStream, ts: TokenStream) -> TokenStream { #name }; }; - ); - - let no_mangle = quote!(#[no_mangle]); - TokenStream::from_iter([signature_check, no_mangle, ts]) + #[no_mangle] + #f + } } diff --git a/rust/macros/helpers.rs b/rust/macros/helpers.rs index f6bbdb02d9d7d..754c827cc21e1 100644 --- a/rust/macros/helpers.rs +++ b/rust/macros/helpers.rs @@ -2,7 +2,6 @@ use proc_macro2::{ token_stream, - Ident, TokenStream, TokenTree, // }; @@ -50,23 +49,6 @@ pub(crate) fn value(&self) -> String { } } -/// Given a function declaration, finds the name of the function. -pub(crate) fn function_name(input: TokenStream) -> Option { - let mut input = input.into_iter(); - while let Some(token) = input.next() { - match token { - TokenTree::Ident(i) if i.to_string() == "fn" => { - if let Some(TokenTree::Ident(i)) = input.next() { - return Some(i); - } - return None; - } - _ => continue, - } - } - None -} - pub(crate) fn file() -> String { #[cfg(not(CONFIG_RUSTC_HAS_SPAN_FILE))] { diff --git a/rust/macros/lib.rs b/rust/macros/lib.rs index 4e440deaed853..870a42d41ac91 100644 --- a/rust/macros/lib.rs +++ b/rust/macros/lib.rs @@ -206,8 +206,9 @@ pub fn vtable(attr: TokenStream, input: TokenStream) -> TokenStream { /// This macro is *not* the same as the C macros `EXPORT_SYMBOL_*`. All Rust symbols are currently /// automatically exported with `EXPORT_SYMBOL_GPL`. #[proc_macro_attribute] -pub fn export(attr: TokenStream, ts: TokenStream) -> TokenStream { - export::export(attr.into(), ts.into()).into() +pub fn export(attr: TokenStream, input: TokenStream) -> TokenStream { + parse_macro_input!(attr as syn::parse::Nothing); + export::export(parse_macro_input!(input)).into() } /// Like [`core::format_args!`], but automatically wraps arguments in [`kernel::fmt::Adapter`]. -- 2.51.2