On Thu, Sep 10, 2026 at 10:24:17PM +0900, FUJITA Tomonori wrote:
> On Thu, 10 Sep 2026 13:05:27 +0100
> "Gary Guo" <[email protected]> wrote:
> 
> > On Thu Sep 10, 2026 at 11:08 AM BST, Mukesh Kumar Chaurasiya (IBM) wrote:
> >> The Rust kernel infrastructure generates inline asm for WARN() via
> >> ARCH_WARN_ASM(file, line, flags, size), expanding it through a C
> >> preprocessor pass (generated_arch_warn_asm.rs.S) to produce an
> >> arch-specific asm template string for use in Rust's core::arch macros.
> >>
> >> powerpc currently lacks ARCH_WARN_ASM and ARCH_WARN_REACHABLE, causing
> >> Rust builds to fail on powerpc with
> >> ```
> >> error: no rules expected `ARCH_WARN_ASM`
> >>    --> 
> >> /home/linkmauve/dev/linux/wii/rust/kernel/generated_arch_warn_asm.rs:1:28
> >>     |
> >>   1 | ::kernel::concat_literals!(ARCH_WARN_ASM("{file}", "{line}", 
> >> "{flags}", "{size}"))
> > 
> > I think we probably want to catch this earlier by have something like
> > 
> > #ifndef ARCH_WARN_ASM
> > #error "ARCH_WARM_ASM is not defined"
> > #endif
> > 
> > in generated_arch_warn_asm.rs.S.
> 
> Good idea.
> 
> One thing needs to be fixed first. arm and loongarch do not define
> ARCH_WARN_ASM. rust/kernel/bug.rs uses bindings::WARN_ON() on those
> architectures, so it never includes generated_arch_warn_asm.rs. But
> rust/Makefile still generates the file for them. With #error, their
> builds would break.
> 
> I think we should add a condition to rust/Makefile to stop generating
> the file for arm and loongarch. Then #error can be unconditional.
> 
> Does that sound reasonable? I can send patches.
> 
Hey,

Sounds fair to me.
> 
> >>  arch/powerpc/include/asm/bug.h | 36 +++++++++++++++++++---------------
> >>  1 file changed, 20 insertions(+), 16 deletions(-)
> >>
> >> diff --git a/arch/powerpc/include/asm/bug.h 
> >> b/arch/powerpc/include/asm/bug.h
> >> index 0db48977c70c..df2183c35945 100644
> >> --- a/arch/powerpc/include/asm/bug.h
> >> +++ b/arch/powerpc/include/asm/bug.h
> >> @@ -32,34 +32,38 @@
> >>  #endif /* verbose */
> >>  
> >>  #else /* !__ASSEMBLER__ */
> >> -/* _EMIT_BUG_ENTRY expects args %0,%1,%2,%3 to be FILE, LINE, flags and
> >> -   sizeof(struct bug_entry), respectively */
> >>  #ifdef CONFIG_DEBUG_BUGVERBOSE
> >> -#define _EMIT_BUG_ENTRY                           \
> >> -  ".section __bug_table,\"aw\"\n"         \
> >> -  "2:     .4byte 1b - .\n"                \
> >> -  "       .4byte %0 - .\n"                \
> >> -  "       .short %1, %2\n"                \
> >> -  ".org 2b+%3\n"                          \
> >> -  ".previous\n"
> >> +#define _EMIT_BUG_ENTRY(label, file, line, flags) \
> >> +  ".section __bug_table,\"aw\"\n"                 \
> >> +  "2:     .4byte " label "b - .\n"                \
> > 
> > "b" is part of the label. "1b" itself is a label and "1" is just an integer.
> > 
> > If the code uses
> > 
> >     _EMIT_BUG_ENTRY(..)
> >     "1: ..."
> > 
> > then the correct label would be "1f".
> 
> Agreed.
> 
> I think keeping the label fixed, as v2 did, would be fine too. x86,
> arm64 and riscv all hardcode it. A comment that says the caller must
> put the trap at 1: might be enough.
> 
Enforcing the label would be a better idea so that we can avoid
mistakes. I'll fix these and send out a new one.

Regards,
Mukesh

Reply via email to