On Wed, Apr 08, 2026 at 05:23:39PM +0530, Mukesh Kumar Chaurasiya wrote:
> On Wed, Apr 08, 2026 at 11:51:40AM +0200, Link Mauve wrote:
> > Hi,
> >
> > (This email is a resent, my IP address got flagged by spamhaus again
> > because I’m on a residential range, hopefully this incident is
> > resolved…)
> >
> > On Tue, Apr 07, 2026 at 01:31:45AM +0530, Mukesh Kumar Chaurasiya (IBM)
> > wrote:
> > > Enable experimental rust support for ppc64le and ppc32be. The patch for
> > > ppc32 has been provided by Link Mauve[1] and ppc64le support[2] has been
> > > merged over it. ppc32 needs some toolchain fixes mentioned in the patch
> > > `rust: Add PowerPC support` and the discussion for that is done here[1].
> > >
> > > This has been tested on
> > > - powernv9 hardware
> > > - pseries P11 hardware
> > > - pseries(9, 10) qemu
> > > - powernv(9, 10) qemu
> > > - rustdoc on x86 and powerpc64le
> > > - rusttest on x86 and powerpc64le
> >
> > I just tested your series for the Wii, so targeting powerpc (32, be),
> > and got this error:
> > ```
> > error[E0463]: can't find crate for `pin_init_internal`
> > --> ../rust/pin-init/src/lib.rs:365:11
> > |
> > 365 | pub use ::pin_init_internal::pin_data;
> > | ^^^^^^^^^^^^^^^^^ can't find crate
> >
> > error: aborting due to 1 previous error
> >
> > For more information about this error, try `rustc --explain E0463`.
> > ```
> >
> > I didn’t get this error in a previous version of your series, would you
> > want me to bisect them?
> >
> > Thanks for your continuous work on it anyway!
> >
>
> Hey Link,
>
> Thanks for testing this.
>
> Can you give me the command generated via make with V=1
> e.g. `make LLVM=1 V=1`
Here it is:
```
% make ARCH=powerpc CROSS_COMPILE=powerpc-linux-musl- O=wii W=1 V=1 -j1
make -C /home/linkmauve/dev/linux/wii \
-f /home/linkmauve/dev/linux/Makefile
make[1]: Entering directory '/home/linkmauve/dev/linux/wii'
make --no-print-directory -C /home/linkmauve/dev/linux/wii \
-f /home/linkmauve/dev/linux/Makefile
ln -fsn .. source
# GEN Makefile
{ echo "# Automatically generated by /home/linkmauve/dev/linux/Makefile:
don't edit"; echo "export KBUILD_OUTPUT = /home/linkmauve/dev/linux/wii"; echo
"include /home/linkmauve/dev/linux/Makefile"; } > Makefile
test -e .gitignore || \
{ echo "# this is build directory, ignore it"; echo "*"; } > .gitignore
make -f ../scripts/Makefile.build obj=arch/powerpc/kernel/syscalls all
make -f ../scripts/Makefile.build obj=scripts/basic
make -f ../scripts/Makefile.build obj=scripts/dtc
make -f ../scripts/Makefile.build obj=scripts
make -f ../scripts/Makefile.build obj=scripts/gcc-plugins \
need-builtin= \
need-modorder= \
set -e; mkdir -p include/config/; trap "rm -f
include/config/.tmp_kernel.release" EXIT; { ../scripts/setlocalversion ..; } >
include/config/.tmp_kernel.release; if [ ! -r include/config/kernel.release ]
|| ! cmp -s include/config/kernel.release include/config/.tmp_kernel.release;
then : ' UPD include/config/kernel.release'; mv -f
include/config/.tmp_kernel.release include/config/kernel.release; fi
make -f ../scripts/Makefile.asm-headers
obj=arch/powerpc/include/generated/uapi/asm \
generic=include/uapi/asm-generic
make -f ../scripts/Makefile.asm-headers obj=arch/powerpc/include/generated/asm \
generic=include/asm-generic
set -e; mkdir -p include/generated/uapi/linux/; trap "rm -f
include/generated/uapi/linux/.tmp_version.h" EXIT; { if [ 0 -gt 255 ];
then echo \#define LINUX_VERSION_CODE 459007; else echo \#define
LINUX_VERSION_CODE 458752; fi; echo '#define KERNEL_VERSION(a,b,c) (((a) << 16)
+ ((b) << 8) + ((c) > 255 ? 255 : (c)))'; echo \#define LINUX_VERSION_MAJOR 7;
echo \#define LINUX_VERSION_PATCHLEVEL 0; echo \#define LINUX_VERSION_SUBLEVEL
0; } > include/generated/uapi/linux/.tmp_version.h; if [ ! -r
include/generated/uapi/linux/version.h ] || ! cmp -s
include/generated/uapi/linux/version.h
include/generated/uapi/linux/.tmp_version.h; then : ' UPD
include/generated/uapi/linux/version.h'; mv -f
include/generated/uapi/linux/.tmp_version.h
include/generated/uapi/linux/version.h; fi
set -e; mkdir -p include/generated/; trap "rm -f
include/generated/.tmp_utsrelease.h" EXIT; { if [ `echo -n "7.0.0-rc7-wii+" |
wc -c ` -gt 64 ]; then echo '"7.0.0-rc7-wii+" exceeds 64 characters' >&2; exit
1; fi; echo \#define UTS_RELEASE \"7.0.0-rc7-wii+\"; } >
include/generated/.tmp_utsrelease.h; if [ ! -r include/generated/utsrelease.h ]
|| ! cmp -s include/generated/utsrelease.h include/generated/.tmp_utsrelease.h;
then : ' UPD include/generated/utsrelease.h'; mv -f
include/generated/.tmp_utsrelease.h include/generated/utsrelease.h; fi
set -e; mkdir -p include/generated/; trap "rm -f
include/generated/.tmp_compile.h" EXIT; { ../scripts/mkcompile_h "ppc"
"powerpc-linux-musl-gcc (GCC) 14.2.1 20250405" "powerpc-linux-musl-ld"; } >
include/generated/.tmp_compile.h; if [ ! -r include/generated/compile.h ] || !
cmp -s include/generated/compile.h include/generated/.tmp_compile.h; then : '
UPD include/generated/compile.h'; mv -f include/generated/.tmp_compile.h
include/generated/compile.h; fi
../scripts/remove-stale-files
make -f ../scripts/Makefile.build obj=scripts/mod
set -e; mkdir -p scripts/mod/; trap "rm -f
scripts/mod/.tmp_devicetable-offsets.h" EXIT; { echo "#ifndef
__DEVICETABLE_OFFSETS_H__"; echo "#define __DEVICETABLE_OFFSETS_H__"; echo
"/*"; echo " * DO NOT MODIFY."; echo " *"; echo " * This file was generated by
Kbuild"; echo " */"; echo ""; sed -ne
's:^[[:space:]]*\.ascii[[:space:]]*"\(.*\)".*:\1:; /^->/{s:->#\(.*\):/* \1 */:;
s:^->\([^ ]*\) [\$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; s:->::; p;}' <
scripts/mod/devicetable-offsets.s; echo ""; echo "#endif"; } >
scripts/mod/.tmp_devicetable-offsets.h; if [ ! -r
scripts/mod/devicetable-offsets.h ] || ! cmp -s
scripts/mod/devicetable-offsets.h scripts/mod/.tmp_devicetable-offsets.h; then
: ' UPD scripts/mod/devicetable-offsets.h'; mv -f
scripts/mod/.tmp_devicetable-offsets.h scripts/mod/devicetable-offsets.h; fi
make -f ../scripts/Makefile.build obj=. prepare
set -e; mkdir -p include/generated/; trap "rm -f
include/generated/.tmp_timeconst.h" EXIT; { echo 1000 | bc -q
../kernel/time/timeconst.bc; } > include/generated/.tmp_timeconst.h; if [ ! -r
include/generated/timeconst.h ] || ! cmp -s include/generated/timeconst.h
include/generated/.tmp_timeconst.h; then : ' UPD
include/generated/timeconst.h'; mv -f include/generated/.tmp_timeconst.h
include/generated/timeconst.h; fi
set -e; mkdir -p include/generated/; trap "rm -f
include/generated/.tmp_bounds.h" EXIT; { echo "#ifndef
__LINUX_BOUNDS_H__"; echo "#define __LINUX_BOUNDS_H__"; echo "/*"; echo " * DO
NOT MODIFY."; echo " *"; echo " * This file was generated by Kbuild"; echo "
*/"; echo ""; sed -ne 's:^[[:space:]]*\.ascii[[:space:]]*"\(.*\)".*:\1:;
/^->/{s:->#\(.*\):/* \1 */:; s:^->\([^ ]*\) [\$#]*\([^ ]*\) \(.*\):#define \1
\2 /* \3 */:; s:->::; p;}' < kernel/bounds.s; echo ""; echo "#endif"; } >
include/generated/.tmp_bounds.h; if [ ! -r include/generated/bounds.h ] || !
cmp -s include/generated/bounds.h include/generated/.tmp_bounds.h; then : '
UPD include/generated/bounds.h'; mv -f include/generated/.tmp_bounds.h
include/generated/bounds.h; fi
set -e; mkdir -p include/generated/; trap "rm -f
include/generated/.tmp_asm-offsets.h" EXIT; { echo "#ifndef
__ASM_OFFSETS_H__"; echo "#define __ASM_OFFSETS_H__"; echo "/*"; echo " * DO
NOT MODIFY."; echo " *"; echo " * This file was generated by Kbuild"; echo "
*/"; echo ""; sed -ne 's:^[[:space:]]*\.ascii[[:space:]]*"\(.*\)".*:\1:;
/^->/{s:->#\(.*\):/* \1 */:; s:^->\([^ ]*\) [\$#]*\([^ ]*\) \(.*\):#define \1
\2 /* \3 */:; s:->::; p;}' < arch/powerpc/kernel/asm-offsets.s; echo ""; echo
"#endif"; } > include/generated/.tmp_asm-offsets.h; if [ ! -r
include/generated/asm-offsets.h ] || ! cmp -s include/generated/asm-offsets.h
include/generated/.tmp_asm-offsets.h; then : ' UPD
include/generated/asm-offsets.h'; mv -f include/generated/.tmp_asm-offsets.h
include/generated/asm-offsets.h; fi
set -e; mkdir -p include/generated/; trap "rm -f
include/generated/.tmp_rq-offsets.h" EXIT; { echo "#ifndef
__RQ_OFFSETS_H__"; echo "#define __RQ_OFFSETS_H__"; echo "/*"; echo " * DO NOT
MODIFY."; echo " *"; echo " * This file was generated by Kbuild"; echo " */";
echo ""; sed -ne 's:^[[:space:]]*\.ascii[[:space:]]*"\(.*\)".*:\1:;
/^->/{s:->#\(.*\):/* \1 */:; s:^->\([^ ]*\) [\$#]*\([^ ]*\) \(.*\):#define \1
\2 /* \3 */:; s:->::; p;}' < kernel/sched/rq-offsets.s; echo ""; echo "#endif";
} > include/generated/.tmp_rq-offsets.h; if [ ! -r
include/generated/rq-offsets.h ] || ! cmp -s include/generated/rq-offsets.h
include/generated/.tmp_rq-offsets.h; then : ' UPD
include/generated/rq-offsets.h'; mv -f include/generated/.tmp_rq-offsets.h
include/generated/rq-offsets.h; fi
# CALL ../scripts/checksyscalls.sh
sh ../scripts/checksyscalls.sh powerpc-linux-musl-gcc
-Wp,-MMD,./.missing-syscalls.d -nostdinc -I../arch/powerpc/include
-I./arch/powerpc/include/generated -I../include -I./include
-I../arch/powerpc/include/uapi -I./arch/powerpc/include/generated/uapi
-I../include/uapi -I./include/generated/uapi -include
../include/linux/compiler-version.h -include ../include/linux/kconfig.h
-include ../include/linux/compiler_types.h -D__KERNEL__ -mbig-endian -m32 -I
../arch/powerpc -fmacro-prefix-map=../= -Wundef -DKBUILD_EXTRA_WARN1 -std=gnu11
-fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing
-msoft-float -ffixed-r2 -mmultiple -mno-readonly-in-sdata -mcpu=powerpc
-mno-prefixed -mno-pcrel -mno-altivec -mno-vsx -mno-mma
-fno-asynchronous-unwind-tables -mno-string -mbig-endian
-fno-delete-null-pointer-checks -Os -fno-allow-store-data-races
-fno-stack-protector -fomit-frame-pointer -ftrivial-auto-var-init=zero
-fno-stack-clash-protection -fmin-function-alignment=4 -fstrict-flex-arrays=3
-fms-extensions -fno-strict-overflow -fno-stack-check -fconserve-stack
-fno-builtin-wcslen -Wall -Wextra -Wundef -Werror=implicit-function-declaration
-Werror=implicit-int -Werror=return-type -Werror=strict-prototypes
-Wno-format-security -Wno-trigraphs -Wno-frame-address
-Wno-address-of-packed-member -Wmissing-declarations -Wmissing-prototypes
-Wframe-larger-than=1280 -Wno-main -Wno-type-limits -Wno-dangling-pointer
-Wvla-larger-than=1 -Wno-pointer-sign -Wcast-function-type -Wno-array-bounds
-Wno-stringop-overflow -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5
-Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init
-Wenum-conversion -Wunused -Wmissing-format-attribute -Wmissing-include-dirs
-Wunused-const-variable -Wno-missing-field-initializers
-Wno-shift-negative-value -Wno-maybe-uninitialized -Wno-sign-compare
-Wno-unused-parameter -DGCC_PLUGINS -I../. -I.
-DKBUILD_MODFILE='"./missing-syscalls"' -DKBUILD_BASENAME='"missing_syscalls"'
-DKBUILD_MODNAME='"missing_syscalls"' -D__KBUILD_MODNAME=missing_syscalls
make -f ../scripts/Makefile.build obj=arch/powerpc/kernel/vdso
include/generated/vdso32-offsets.h
mkdir -p ./tools
make O=/home/linkmauve/dev/linux/wii subdir=tools -C ../tools/ objtool
mkdir -p /home/linkmauve/dev/linux/wii/tools/objtool && make
O=/home/linkmauve/dev/linux/wii subdir=tools/objtool --no-print-directory -C
objtool
make -C /home/linkmauve/dev/linux/tools/build CFLAGS= LDFLAGS=
/home/linkmauve/dev/linux/wii/tools/objtool/fixdep
if [ ! -f /home/linkmauve/dev/linux/wii/tools/objtool/fixdep ]; then
\
make -f /home/linkmauve/dev/linux/tools/build/Makefile.build dir=.
obj=fixdep HOSTCFLAGS="-Wall -Wmissing-prototypes -Wstrict-prototypes -O2
-fomit-frame-pointer -std=gnu11 -I ../scripts/include"; \
rm -f /home/linkmauve/dev/linux/wii/tools/objtool/fixdep.o;
\
fi
make -f /home/linkmauve/dev/linux/tools/build/Makefile.build dir=. obj=fixdep
HOSTCFLAGS="-Wall -Wmissing-prototypes -Wstrict-prototypes -O2
-fomit-frame-pointer -std=gnu11 -I ../scripts/include"
make -C /home/linkmauve/dev/linux/tools/lib/subcmd/
O=/home/linkmauve/dev/linux/wii/tools/objtool/libsubcmd \
DESTDIR=/home/linkmauve/dev/linux/wii/tools/objtool/libsubcmd prefix=
subdir= \
CC="gcc" LD="ld" AR="ar" EXTRA_CFLAGS="-std=gnu11 -fomit-frame-pointer
-O2 -g -Werror -Wall -Wextra -Wmissing-prototypes -Wmissing-declarations
-Wwrite-strings -Wno-implicit-fallthrough -Wno-sign-compare
-Wno-unused-parameter -I/home/linkmauve/dev/linux/tools/include
-I/home/linkmauve/dev/linux/tools/include/uapi
-I/home/linkmauve/dev/linux/tools/arch/x86/include/uapi
-I/home/linkmauve/dev/linux/tools/arch/powerpc/include
-I/home/linkmauve/dev/linux/tools/objtool/include
-I/home/linkmauve/dev/linux/tools/objtool/arch/powerpc/include
-I/home/linkmauve/dev/linux/wii/tools/objtool/libsubcmd/include " \
/home/linkmauve/dev/linux/wii/tools/objtool/libsubcmd/libsubcmd.a
install_headers
make -C /home/linkmauve/dev/linux/tools/build CFLAGS= LDFLAGS=
/home/linkmauve/dev/linux/wii/tools/objtool/libsubcmd/fixdep
if [ ! -f /home/linkmauve/dev/linux/wii/tools/objtool/libsubcmd/fixdep ]; then
\
make -f /home/linkmauve/dev/linux/tools/build/Makefile.build dir=.
obj=fixdep HOSTCFLAGS="-Wall -Wmissing-prototypes -Wstrict-prototypes -O2
-fomit-frame-pointer -std=gnu11 -I ../scripts/include"; \
rm -f /home/linkmauve/dev/linux/wii/tools/objtool/libsubcmd/fixdep.o;
\
fi
make -f /home/linkmauve/dev/linux/tools/build/Makefile.build dir=. obj=fixdep
HOSTCFLAGS="-Wall -Wmissing-prototypes -Wstrict-prototypes -O2
-fomit-frame-pointer -std=gnu11 -I ../scripts/include"
make[5]: 'install_headers' is up to date.
sh ./sync-check.sh
make -f /home/linkmauve/dev/linux/tools/build/Makefile.build dir=. obj=objtool
CC="gcc" LD="ld" AR="ar" CFLAGS="-std=gnu11 -fomit-frame-pointer -O2 -g -Werror
-Wall -Wextra -Wmissing-prototypes -Wmissing-declarations -Wwrite-strings
-Wno-implicit-fallthrough -Wno-sign-compare -Wno-unused-parameter
-I/home/linkmauve/dev/linux/tools/include
-I/home/linkmauve/dev/linux/tools/include/uapi
-I/home/linkmauve/dev/linux/tools/arch/x86/include/uapi
-I/home/linkmauve/dev/linux/tools/arch/powerpc/include
-I/home/linkmauve/dev/linux/tools/objtool/include
-I/home/linkmauve/dev/linux/tools/objtool/arch/powerpc/include
-I/home/linkmauve/dev/linux/wii/tools/objtool/libsubcmd/include " \
LDFLAGS="/home/linkmauve/dev/linux/wii/tools/objtool/libsubcmd/libsubcmd.a
-lelf "
make -f /home/linkmauve/dev/linux/tools/build/Makefile.build dir=./arch/powerpc
obj=objtool
sh ../scripts/rust_is_available.sh
make -f ../scripts/Makefile.build obj=rust
# RUSTC L rust/pin_init.o
OBJTREE=/home/linkmauve/dev/linux/wii rustc --edition=2021
-Zbinary_dep_depinfo=y -Astable_features -Aunused_features -Dnon_ascii_idents
-Dunsafe_op_in_unsafe_fn -Wmissing_docs -Wrust_2018_idioms -Wunreachable_pub
-Wclippy::all -Wclippy::as_ptr_cast_mut -Wclippy::as_underscore
-Wclippy::cast_lossless -Wclippy::ignored_unit_patterns -Wclippy::mut_mut
-Wclippy::needless_bitwise_bool -Aclippy::needless_lifetimes
-Wclippy::no_mangle_with_rust_abi -Wclippy::ptr_as_ptr
-Wclippy::ptr_cast_constness -Wclippy::ref_as_ptr
-Wclippy::undocumented_unsafe_blocks -Wclippy::unnecessary_safety_comment
-Wclippy::unnecessary_safety_doc -Wrustdoc::missing_crate_level_docs
-Wrustdoc::unescaped_backticks -Cpanic=abort -Cembed-bitcode=n -Clto=n
-Cforce-unwind-tables=n -Ccodegen-units=1 -Csymbol-mangling-version=v0
-Crelocation-model=static -Zfunction-sections=n -Wclippy::float_arithmetic
--target=powerpc-unknown-linux-gnu -Copt-level=s -Cdebug-assertions=n
-Coverflow-checks=y @./include/generated/rustc_cfg --extern pin_init_internal
--extern macros --cfg='kernel' --emit=dep-info=rust/.pin_init.o.d
--emit=obj=rust/pin_init.o --emit=metadata=rust/libpin_init.rmeta --crate-type
rlib -L./rust --crate-name pin_init ../rust/pin-init/src/lib.rs
--sysroot=/dev/null -Zunstable-options ; ./tools/objtool/objtool
--static-call rust/pin_init.o
error[E0463]: can't find crate for `pin_init_internal`
--> ../rust/pin-init/src/lib.rs:365:11
|
365 | pub use ::pin_init_internal::pin_data;
| ^^^^^^^^^^^^^^^^^ can't find crate
error: aborting due to 1 previous error
For more information about this error, try `rustc --explain E0463`.
make[3]: *** [../rust/Makefile:681: rust/pin_init.o] Error 1
make[2]: *** [/home/linkmauve/dev/linux/Makefile:1343: prepare] Error 2
make[1]: *** [/home/linkmauve/dev/linux/Makefile:248: __sub-make] Error 2
make[1]: Leaving directory '/home/linkmauve/dev/linux/wii'
make: *** [Makefile:248: __sub-make] Error 2
make ARCH=powerpc CROSS_COMPILE=powerpc-linux-musl- O=wii W=1 V=1 -j1 1.15s
user 0.56s system 100% cpu 1.695 total
```
>
> Regards,
> Mukesh
>
> > >
> > > We are actively working with our LLVM team to get the target for ppc,
> > > ppc64 and ppc64le in the rust compiler.
> > >
> > >
> > > [1]
> > > https://lore.kernel.org/all/[email protected]
> > > [2] https://lore.kernel.org/all/[email protected]
> > >
> > > Changelog:
> > > V9 -> V10:
> > > - rust/Makefile updated with review comments from Miguel
> > > - Patch 1/4 updated with commit message and subject
> > > V9:
> > > https://lore.kernel.org/all/[email protected]/
> > >
> > > V8 -> V9:
> > > - rust/Makefile updated with a directory instead of abspath
> > > V8:
> > > https://lore.kernel.org/all/[email protected]/
> > >
> > > V7 -> V8:
> > > - rust/Makefile updated to separate host libraries from target
> > > V7:
> > > https://lore.kernel.org/all/[email protected]/
> > >
> > > Changelog:
> > > V6 -> V7:
> > > - Documentation removed as powerpc is still under development
> > > - Added a fix for race condition in rust/Makefile
> > > V6:
> > > https://lore.kernel.org/all/[email protected]
> > >
> > > V5 -> V6:
> > > - Added a missing Tested by from Venkat which got missed since V3
> > > - Support is marked as Maintained instead of experimental
> > > V5:
> > > https://lore.kernel.org/all/[email protected]
> > >
> > > V4 -> V5:
> > > - Removed a nested ifdef from PPC64 for Little endian toolchain
> > > V4:
> > > https://lore.kernel.org/all/[email protected]
> > >
> > > V3 -> V4:
> > > - Co-developed-by header added in patch 1
> > > V3:
> > > https://lore.kernel.org/all/[email protected]
> > >
> > > V2 -> V3:
> > > - Splited HAVE_RUST in 2 lines
> > > - BINDGEN_TARGET_powerpc initialized before assigning the same to
> > > BINDGEN_TARGET
> > > V2:
> > > https://lore.kernel.org/all/[email protected]
> > >
> > > V1 -> V2:
> > > - jump label fix for rust has been moved to a separate patch
> > > - PPC32 support has been taken
> > > - rust support has been marked experimental
> > > - target.json dependency has been removed
> > > - HAVE_RUST now depends on CPU_LITTLE_ENDIAN for PPC64
> > >
> > > Link Mauve (1):
> > > rust: Add PowerPC support
> > >
> > > Mukesh Kumar Chaurasiya (IBM) (3):
> > > rust: Fix "multiple candidates for rmeta dependency core" error
> > > powerpc/jump_label: adjust inline asm to be consistent
> > > powerpc: Enable Rust for ppc64le
> > >
> > > arch/powerpc/Kconfig | 2 +
> > > arch/powerpc/Makefile | 7 +++
> > > arch/powerpc/include/asm/jump_label.h | 23 ++++++----
> > > rust/Makefile | 66 ++++++++++++++++-----------
> > > 4 files changed, 61 insertions(+), 37 deletions(-)
> > >
> > > --
> > > 2.53.0
> > >
> > >
> >
> > --
> > Link Mauve
> >
--
Link Mauve