Hi, On Tue, Apr 21, 2026 at 04:59:11PM +0100, Gary Guo wrote: > On Tue Apr 21, 2026 at 11:26 AM BST, Link Mauve wrote: > > From 2c0a3ec3da6fa1f0151225c05159f7a812317d32 Mon Sep 17 00:00:00 2001 > > From: Link Mauve > > Date: Fri, 10 Apr 2026 13:51:24 +0200 > > Subject: [PATCH 3/3] XXX: Workaround for __udivdi3() and __umoddi3() > > MIME-Version: 1.0 > > Content-Type: text/plain; charset=UTF-8 > > Content-Transfer-Encoding: 8bit > > > > 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. > > --- > > rust/exports.c | 9 +++++++++ > > 1 file changed, 9 insertions(+) > > > > diff --git a/rust/exports.c b/rust/exports.c > > index 587f0e776aba..5f1cdf13882e 100644 > > --- a/rust/exports.c > > +++ b/rust/exports.c > > @@ -12,6 +12,7 @@ > > */ > > > > #include > > +#include > > > > #define EXPORT_SYMBOL_RUST_GPL(sym) extern int sym; EXPORT_SYMBOL_GPL(sym) > > > > @@ -20,6 +21,14 @@ > > #include "exports_bindings_generated.h" > > #include "exports_kernel_generated.h" > > > > +void __udivdi3(void) { > > + panic("__udivdi3() called but shouldn’t be made available on this architecture!\n"); > > +} > > + > > +void __umoddi3(void) { > > + panic("__umoddi3() called but shouldn’t be made available on this architecture!\n"); > > +} > > + > > This should be added to compiler_builtins.rs and gated for PPC32. Thanks for the suggestion, this already seems like a much better location for that! This works fine for the core crate, but now panic_qr also gets the same issue, here it is with V=1: ``` + powerpc-linux-musl-ld -EB -m elf32ppc -z noexecstack --no-warn-rwx-segments -Bstatic --build-id=sha1 --orphan-handling=warn --script=./arch/powerpc/kernel/vmlinux.lds --strip-debug -o .tmp_vmlinux1 --whole-archive vmlinux.a .vmlinux.export.o init/version-timestamp.o --no-whole-archive --start-group --end-group .tmp_vmlinux0.kallsyms.o powerpc-linux-musl-ld: drivers/gpu/drm/drm_panic_qr.o: in function `::next': drm_panic_qr.f39a15fa3c72e9fe-cgu.0:(.text+0x200c): undefined reference to `__udivdi3' ``` From a cursory look at the SegmentIterator::next() function I don’t understand where the division could come up, but it’s actually nice to get an error when operations which shouldn’t happen happen anyway, it makes it more likely to get them fixed. > > Best, > Gary > > > // For modules using `rust/build_error.rs`. > > #ifdef CONFIG_RUST_BUILD_ASSERT_ALLOW > > EXPORT_SYMBOL_RUST_GPL(rust_build_error); > -- Link Mauve