On Tue Jun 23, 2026 at 7:29 AM BST, Alvin Sun wrote: > Add a `LocalModule` struct with a null-pointer `ModuleMetadata` impl > in the doctest harness, so that `crate::LocalModule` (auto-inserted > by `#[vtable]`) resolves correctly when there is no `module!` macro. > > Reviewed-by: Andreas Hindborg <[email protected]> > Signed-off-by: Alvin Sun <[email protected]> > --- > scripts/rustdoc_test_gen.rs | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/scripts/rustdoc_test_gen.rs b/scripts/rustdoc_test_gen.rs > index ee76e96b41eea..198af4e446c8c 100644 > --- a/scripts/rustdoc_test_gen.rs > +++ b/scripts/rustdoc_test_gen.rs > @@ -239,6 +239,22 @@ macro_rules! assert_eq {{ > > const __LOG_PREFIX: &[u8] = b"rust_doctests_kernel\0"; > > +/// Dummy module type for doctest context. > +struct LocalModule; > + > +use kernel::{{ > + str::CStr, > + ModuleMetadata, > + ThisModule, // > +}}; > +use core::ptr::null_mut; > + > +impl ModuleMetadata for LocalModule {{ > + const NAME: &'static CStr = c"rust_doctests_kernel"; > + // SAFETY: `try_module_get`/`module_put` handle null module pointers > gracefully. > + const THIS_MODULE: ThisModule = unsafe {{ > ThisModule::from_ptr(null_mut()) }}; > +}}
We probably a macro for crates that are built-in or are not the main crate of a multi-crate module, and this would be able to use that mechanism. But this looks okay for now. Reviewed-by: Gary Guo <[email protected]> > + > {rust_tests} > "# > )

