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

From: "Gary Guo" <[email-masked]>
Date: Sun, 26 Apr 2026 15:20:31 +0100

On Sun Apr 26, 2026 at 8:52 AM BST, Mukesh Kumar Chaurasiya wrote:
> On Fri, Apr 24, 2026 at 01:43:43PM +0100, Gary Guo wrote:
>> On Fri Apr 24, 2026 at 6:47 AM BST, Mukesh Kumar Chaurasiya (IBM) wrote:
>> > From: Link Mauve <[email-masked]>
>> >
>> > 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.
>> 
>> Can we always build libcore with `-C opt-level=2` even if
>> `CONFIG_CC_OPTIMIZE_FOR_SIZE` is specified? It feels like a better fix than
>> stubbing things out.
>> 
>> Best,
>> Gary
>> 
> The issue is not coming from libcore itself. It's the driver that's
> causing this.

Sorry. I quoted the wrong part. I was asking if compiling libcore with O2 gets
rid of its use of the builtins, as that's what the change this commit is for.

Formatting of u64 will be needed, so we should make sure that these works as
intended.

Best,
Gary

>
> Regards,
> Mukesh
>> >
>> > Signed-off-by: Link Mauve <[email-masked]>
>> > Signed-off-by: Mukesh Kumar Chaurasiya (IBM) <[email-masked]>
>> > ---
>> >  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`.
>>