Re: [PATCH V14 5/7] rust: Make __udivdi3() and __umoddi3() panic

Mukesh Kumar Chaurasiya
2026-04-26T11:55:03Z

On Sun, Apr 26, 2026 at 12:49:21PM +0100, David Laight wrote:
> On Sun, 26 Apr 2026 14:27:23 +0530
> "Mukesh Kumar Chaurasiya (IBM)" <mkchauras@gmail.com> wrote:
>
> > From: Link Mauve <linkmauve@linkmauve.fr>
> >
> > 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.
> >
> > 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.
>
> This needs resolving properly.
>
Hey David,

Yeah I agree, we need to find a proper fix for this. This is under my
todo list. Currently we are enabling experimental support for powerpc
and we are trying to get the basic kernel to work as of now. panicking
kernel also doesn't seems like a good idea as of now to me, we are
working towards it, we'll come up with a solution soon. Meanwhile we
want atleast the build to work.

Regards,
Mukesh
> >
> > Signed-off-by: Link Mauve <linkmauve@linkmauve.fr>
> > Signed-off-by: Mukesh Kumar Chaurasiya (IBM) <mkchauras@gmail.com>
> > ---
> > rust/Makefile | 4 ++++
> > rust/compiler_builtins.rs | 6 ++++++
> > 2 files changed, 10 insertions(+)
> >
> > diff --git a/rust/Makefile b/rust/Makefile
> > index f6369d121c50..9aa18cff2fae 100644
> > --- a/rust/Makefile
> > +++ b/rust/Makefile
> > @@ -615,6 +615,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`.
>