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
