Re: [RFC] rust: kernel: Add KUnit tests for ARCH_WARN_ASM bug table emission
flat view
From: Mukesh Kumar Chaurasiya <hidden>
Date: 2026-09-23 06:28:45
Also in:
linux-riscv, linux-s390, lkml, llvm, rust-for-linux
On Tue, Sep 22, 2026 at 08:47:35AM +0200, Peter Zijlstra wrote:
On Tue, Sep 22, 2026 at 11:20:00AM +0530, Mukesh Kumar Chaurasiya (IBM) wrote:quoted
Verify that the __bug_table entry emitted by ARCH_WARN_ASM has a correct bug_addr displacement — i.e. the arch's trap label reference resolves to the trap instruction — by calling find_bug() with the exact virtual address of the trap, mirroring what the real trap handler does. To support all architectures, each arch that implements ARCH_WARN_ASM now defines ARCH_WARN_ASM_TRAP_LABEL, a string constant naming the local label at which the trap instruction is placed: x86 "1" (ud2 at label 1:) powerpc "1" (twi at label 1:) riscv "1" (ebreak at label 1:) arm64 "14471" (brk placed at 14471: by __BUG_ENTRY_END) s390 "0" (mc at label 0:) The label is used consistently: in ARCH_WARN_ASM itself, in the bug_addr back-reference inside __BUG_ENTRY / _EMIT_BUG_ENTRY,quoted
diff --git a/arch/x86/include/asm/bug.h b/arch/x86/include/asm/bug.h index 23ab05438269..6cca8880660e 100644 --- a/arch/x86/include/asm/bug.h +++ b/arch/x86/include/asm/bug.h@@ -62,8 +62,9 @@ extern void __WARN_trap(struct bug_entry *bug, ...); #define HAVE_ARCH_BUG_FORMAT_ARGS #endif +#define ARCH_WARN_ASM_TRAP_LABEL "1" #define __BUG_ENTRY(format, file, line, flags) \ - "\t.long 1b - ." "\t# bug_entry::bug_addr\n" \ + "\t.long " ARCH_WARN_ASM_TRAP_LABEL "b - ." "\t# bug_entry::bug_addr\n" \ __BUG_ENTRY_FORMAT(format) \ __BUG_ENTRY_VERBOSE(file, line) \ "\t.word " flags "\t# bug_entry::flags\n"@@ -101,7 +102,7 @@ do { \ "99:\n" \ "\t.string \"\"\n" \ ".popsection\n" \ - "1:\t " ASM_UD2 "\n" \ + ARCH_WARN_ASM_TRAP_LABEL ":\t " ASM_UD2 "\n" \ _BUG_FLAGS_ASM("99b", file, line, flags, size, "") #elseNot really a fan of that. And I can't really tell what you're doing with it either. The kunit is in Rust and thus unreadable :-( I would rather you fix up is_valid_bugaddr(), some architectures seem to have an always true stub because of the callchains always being from the break instruction.
Hey Peter, thanks for the suggestion. I will fix up the is_valid_bugaddr for powerpc. I am not very good with other archs asm but i can do it for ppc32 and ppc64. Regards, Mukesh