mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2026-01-27 12:47:24 +01:00
rust: macros: enable use of hyphens in module names
Some modules might need naming that contains hyphens "-" to match the auto-probing by name in the platform devices that comes from the device tree. But Rust identifier cannot contain hyphens, so replace them with underscores. Signed-off-by: Anisse Astier <anisse@astier.eu> Reviewed-by: Alice Ryhl <aliceryhl@google.com> [ Viresh: Replace "-" with '-', minor commit log fix, rename variable and fix line length checkpatch warnings ] Reviewed-by: Benno Lossin <lossin@kernel.org> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
This commit is contained in:
parent
d01d702056
commit
a4e3b76e4d
|
|
@ -185,7 +185,9 @@ pub(crate) fn module(ts: TokenStream) -> TokenStream {
|
|||
|
||||
let info = ModuleInfo::parse(&mut it);
|
||||
|
||||
let mut modinfo = ModInfoBuilder::new(info.name.as_ref());
|
||||
// Rust does not allow hyphens in identifiers, use underscore instead.
|
||||
let ident = info.name.replace('-', "_");
|
||||
let mut modinfo = ModInfoBuilder::new(ident.as_ref());
|
||||
if let Some(author) = info.author {
|
||||
modinfo.emit("author", &author);
|
||||
}
|
||||
|
|
@ -310,14 +312,15 @@ pub(crate) fn module(ts: TokenStream) -> TokenStream {
|
|||
#[doc(hidden)]
|
||||
#[link_section = \"{initcall_section}\"]
|
||||
#[used]
|
||||
pub static __{name}_initcall: extern \"C\" fn() -> kernel::ffi::c_int = __{name}_init;
|
||||
pub static __{ident}_initcall: extern \"C\" fn() ->
|
||||
kernel::ffi::c_int = __{ident}_init;
|
||||
|
||||
#[cfg(not(MODULE))]
|
||||
#[cfg(CONFIG_HAVE_ARCH_PREL32_RELOCATIONS)]
|
||||
core::arch::global_asm!(
|
||||
r#\".section \"{initcall_section}\", \"a\"
|
||||
__{name}_initcall:
|
||||
.long __{name}_init - .
|
||||
__{ident}_initcall:
|
||||
.long __{ident}_init - .
|
||||
.previous
|
||||
\"#
|
||||
);
|
||||
|
|
@ -325,7 +328,7 @@ pub(crate) fn module(ts: TokenStream) -> TokenStream {
|
|||
#[cfg(not(MODULE))]
|
||||
#[doc(hidden)]
|
||||
#[no_mangle]
|
||||
pub extern \"C\" fn __{name}_init() -> kernel::ffi::c_int {{
|
||||
pub extern \"C\" fn __{ident}_init() -> kernel::ffi::c_int {{
|
||||
// SAFETY: This function is inaccessible to the outside due to the double
|
||||
// module wrapping it. It is called exactly once by the C side via its
|
||||
// placement above in the initcall section.
|
||||
|
|
@ -335,13 +338,13 @@ pub(crate) fn module(ts: TokenStream) -> TokenStream {
|
|||
#[cfg(not(MODULE))]
|
||||
#[doc(hidden)]
|
||||
#[no_mangle]
|
||||
pub extern \"C\" fn __{name}_exit() {{
|
||||
pub extern \"C\" fn __{ident}_exit() {{
|
||||
// SAFETY:
|
||||
// - This function is inaccessible to the outside due to the double
|
||||
// module wrapping it. It is called exactly once by the C side via its
|
||||
// unique name,
|
||||
// - furthermore it is only called after `__{name}_init` has returned `0`
|
||||
// (which delegates to `__init`).
|
||||
// - furthermore it is only called after `__{ident}_init` has
|
||||
// returned `0` (which delegates to `__init`).
|
||||
unsafe {{ __exit() }}
|
||||
}}
|
||||
|
||||
|
|
@ -381,6 +384,7 @@ pub(crate) fn module(ts: TokenStream) -> TokenStream {
|
|||
",
|
||||
type_ = info.type_,
|
||||
name = info.name,
|
||||
ident = ident,
|
||||
modinfo = modinfo.buffer,
|
||||
initcall_section = ".initcall6.init"
|
||||
)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user