On Fri, Apr 24, 2026 at 10:14:25AM +0100, David Laight wrote: > On Fri, 24 Apr 2026 11:17:40 +0530 > "Mukesh Kumar Chaurasiya (IBM)" <[email protected]> wrote: > > > From: Link Mauve <[email protected]> > > > > The core crate currently depends on these two functions for i64/u64/ > > i128/u128/core::time::Duration formatting, but we shouldn’t use that in > > the kernel so let’s panic if they are ever called. > > Ugg. > Surely you can make it a link-time failure? > Or change the underlying code to avoid the divide.
This is currently a link-time failure, which means if any of the core crate or drm_panic_qr are linked in, the kernel will fail to link. And since we rely on core, that means no kernel can be built on PowerPC without this patch. A possible solution would be to change the core crate to not divide u64s, but the last time I tried to do that I couldn’t quite figure out how to do formatting without it, maybe I will just open an issue against Rust. > > David > > > > > This doesn’t yet fix drm_panic_qr.rs, which also uses __udivdi3 when > > CONFIG_CC_OPTIMIZE_FOR_SIZE=y, but at least makes the rest of the kernel > > build on PPC32. > > > > Signed-off-by: Link Mauve <[email protected]> > > Signed-off-by: Mukesh Kumar Chaurasiya (IBM) <[email protected]> > > --- > > rust/Makefile | 4 ++++ > > rust/compiler_builtins.rs | 6 ++++++ > > 2 files changed, 10 insertions(+) > > > > diff --git a/rust/Makefile b/rust/Makefile > > index 2a5428a5503d..ee11fba7a03d 100644 > > --- a/rust/Makefile > > +++ b/rust/Makefile > > @@ -616,6 +616,10 @@ ifneq ($(or $(CONFIG_ARM64),$(and > > $(CONFIG_RISCV),$(CONFIG_64BIT))),) > > __ashrti3 \ > > __ashlti3 __lshrti3 > > endif > > +ifdef CONFIG_PPC32 > > + redirect-intrinsics += \ > > + __udivdi3 __umoddi3 > > +endif > > > > ifdef CONFIG_MODVERSIONS > > cmd_gendwarfksyms = $(if $(skip_gendwarfksyms),, \ > > diff --git a/rust/compiler_builtins.rs b/rust/compiler_builtins.rs > > index dd16c1dc899c..fc6b54636dd5 100644 > > --- a/rust/compiler_builtins.rs > > +++ b/rust/compiler_builtins.rs > > @@ -97,5 +97,11 @@ pub extern "C" fn $ident() { > > __aeabi_uldivmod, > > }); > > > > +#[cfg(target_arch = "powerpc")] > > +define_panicking_intrinsics!("`u64` division/modulo should not be used", { > > + __udivdi3, > > + __umoddi3, > > +}); > > + > > // NOTE: if you are adding a new intrinsic here, you should also add it to > > // `redirect-intrinsics` in `rust/Makefile`. > > -- Link Mauve
