Message ID | 20250213135759.190006-3-fujita.tomonori@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | rust: Add bug/warn abstractions | expand |
Hi FUJITA, On 13/02/2025 14:57, FUJITA Tomonori wrote: > Add new ARCH_WARN_ASM macro for BUG/WARN assembly code sharing with > Rust to avoid the duplication. > > No functional changes. > > Signed-off-by: FUJITA Tomonori <fujita.tomonori@gmail.com> > --- > arch/riscv/include/asm/bug.h | 37 +++++++++++++++++++++--------------- > 1 file changed, 22 insertions(+), 15 deletions(-) > > diff --git a/arch/riscv/include/asm/bug.h b/arch/riscv/include/asm/bug.h > index 1aaea81fb141..6ab13b56feb0 100644 > --- a/arch/riscv/include/asm/bug.h > +++ b/arch/riscv/include/asm/bug.h > @@ -31,40 +31,45 @@ typedef u32 bug_insn_t; > > #ifdef CONFIG_GENERIC_BUG_RELATIVE_POINTERS > #define __BUG_ENTRY_ADDR RISCV_INT " 1b - ." > -#define __BUG_ENTRY_FILE RISCV_INT " %0 - ." > +#define __BUG_ENTRY_FILE(file) RISCV_INT " " file " - ." > #else > #define __BUG_ENTRY_ADDR RISCV_PTR " 1b" > -#define __BUG_ENTRY_FILE RISCV_PTR " %0" > +#define __BUG_ENTRY_FILE(file) RISCV_PTR " " file > #endif > > #ifdef CONFIG_DEBUG_BUGVERBOSE > -#define __BUG_ENTRY \ > +#define __BUG_ENTRY(file, line, flags) \ > __BUG_ENTRY_ADDR "\n\t" \ > - __BUG_ENTRY_FILE "\n\t" \ > - RISCV_SHORT " %1\n\t" \ > - RISCV_SHORT " %2" > + __BUG_ENTRY_FILE(file) "\n\t" \ > + RISCV_SHORT " " line "\n\t" \ > + RISCV_SHORT " " flags > #else > -#define __BUG_ENTRY \ > - __BUG_ENTRY_ADDR "\n\t" \ > - RISCV_SHORT " %2" > +#define __BUG_ENTRY(file, line, flags) \ > + __BUG_ENTRY_ADDR "\n\t" \ > + RISCV_SHORT " " flags > #endif > > #ifdef CONFIG_GENERIC_BUG > -#define __BUG_FLAGS(flags) \ > -do { \ > - __asm__ __volatile__ ( \ > + > +#define ARCH_WARN_ASM(file, line, flags, size) \ > "1:\n\t" \ > "ebreak\n" \ > ".pushsection __bug_table,\"aw\"\n\t" \ > "2:\n\t" \ > - __BUG_ENTRY "\n\t" \ > - ".org 2b + %3\n\t" \ > - ".popsection" \ > + __BUG_ENTRY(file, line, flags) "\n\t" \ > + ".org 2b + " size "\n\t" \ > + ".popsection\n" \ > + > +#define __BUG_FLAGS(flags) \ > +do { \ > + __asm__ __volatile__ ( \ > + ARCH_WARN_ASM("%0", "%1", "%2", "%3") \ > : \ > : "i" (__FILE__), "i" (__LINE__), \ > "i" (flags), \ > "i" (sizeof(struct bug_entry))); \ > } while (0) > + > #else /* CONFIG_GENERIC_BUG */ > #define __BUG_FLAGS(flags) do { \ > __asm__ __volatile__ ("ebreak\n"); \ > @@ -78,6 +83,8 @@ do { \ > > #define __WARN_FLAGS(flags) __BUG_FLAGS(BUGFLAG_WARNING|(flags)) > > +#define ARCH_WARN_REACHABLE > + > #define HAVE_ARCH_BUG > > #include <asm-generic/bug.h> This looks good to me so: Acked-by: Alexandre Ghiti <alexghiti@rivosinc.com> Thanks, Alex
diff --git a/arch/riscv/include/asm/bug.h b/arch/riscv/include/asm/bug.h index 1aaea81fb141..6ab13b56feb0 100644 --- a/arch/riscv/include/asm/bug.h +++ b/arch/riscv/include/asm/bug.h @@ -31,40 +31,45 @@ typedef u32 bug_insn_t; #ifdef CONFIG_GENERIC_BUG_RELATIVE_POINTERS #define __BUG_ENTRY_ADDR RISCV_INT " 1b - ." -#define __BUG_ENTRY_FILE RISCV_INT " %0 - ." +#define __BUG_ENTRY_FILE(file) RISCV_INT " " file " - ." #else #define __BUG_ENTRY_ADDR RISCV_PTR " 1b" -#define __BUG_ENTRY_FILE RISCV_PTR " %0" +#define __BUG_ENTRY_FILE(file) RISCV_PTR " " file #endif #ifdef CONFIG_DEBUG_BUGVERBOSE -#define __BUG_ENTRY \ +#define __BUG_ENTRY(file, line, flags) \ __BUG_ENTRY_ADDR "\n\t" \ - __BUG_ENTRY_FILE "\n\t" \ - RISCV_SHORT " %1\n\t" \ - RISCV_SHORT " %2" + __BUG_ENTRY_FILE(file) "\n\t" \ + RISCV_SHORT " " line "\n\t" \ + RISCV_SHORT " " flags #else -#define __BUG_ENTRY \ - __BUG_ENTRY_ADDR "\n\t" \ - RISCV_SHORT " %2" +#define __BUG_ENTRY(file, line, flags) \ + __BUG_ENTRY_ADDR "\n\t" \ + RISCV_SHORT " " flags #endif #ifdef CONFIG_GENERIC_BUG -#define __BUG_FLAGS(flags) \ -do { \ - __asm__ __volatile__ ( \ + +#define ARCH_WARN_ASM(file, line, flags, size) \ "1:\n\t" \ "ebreak\n" \ ".pushsection __bug_table,\"aw\"\n\t" \ "2:\n\t" \ - __BUG_ENTRY "\n\t" \ - ".org 2b + %3\n\t" \ - ".popsection" \ + __BUG_ENTRY(file, line, flags) "\n\t" \ + ".org 2b + " size "\n\t" \ + ".popsection\n" \ + +#define __BUG_FLAGS(flags) \ +do { \ + __asm__ __volatile__ ( \ + ARCH_WARN_ASM("%0", "%1", "%2", "%3") \ : \ : "i" (__FILE__), "i" (__LINE__), \ "i" (flags), \ "i" (sizeof(struct bug_entry))); \ } while (0) + #else /* CONFIG_GENERIC_BUG */ #define __BUG_FLAGS(flags) do { \ __asm__ __volatile__ ("ebreak\n"); \ @@ -78,6 +83,8 @@ do { \ #define __WARN_FLAGS(flags) __BUG_FLAGS(BUGFLAG_WARNING|(flags)) +#define ARCH_WARN_REACHABLE + #define HAVE_ARCH_BUG #include <asm-generic/bug.h>
Add new ARCH_WARN_ASM macro for BUG/WARN assembly code sharing with Rust to avoid the duplication. No functional changes. Signed-off-by: FUJITA Tomonori <fujita.tomonori@gmail.com> --- arch/riscv/include/asm/bug.h | 37 +++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-)