lkml.org 
[lkml]   [2019]   [Mar]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 1/3] riscv: support trap-based WARN()
    Date
    The WARN() related function will trigger a debug exception. This can help
    developers to analyze the cause of WARN() because if the debugger is
    connected, the control flow will be transferred to debugging
    environment.

    Signed-off-by: Vincent Chen <vincentc@andestech.com>
    ---
    arch/riscv/include/asm/bug.h | 28 ++++++++++++++++++----------
    1 files changed, 18 insertions(+), 10 deletions(-)

    diff --git a/arch/riscv/include/asm/bug.h b/arch/riscv/include/asm/bug.h
    index bfc7f09..4d906d8 100644
    --- a/arch/riscv/include/asm/bug.h
    +++ b/arch/riscv/include/asm/bug.h
    @@ -38,38 +38,46 @@
    #define __BUG_ENTRY \
    __BUG_ENTRY_ADDR "\n\t" \
    __BUG_ENTRY_FILE "\n\t" \
    - RISCV_SHORT " %1"
    + RISCV_SHORT " %1\n\t" \
    + RISCV_SHORT " %2"
    #else
    #define __BUG_ENTRY \
    - __BUG_ENTRY_ADDR
    + __BUG_ENTRY_ADDR "\n\t" \
    + RISCV_SHORT " %2"
    #endif

    -#define BUG() \
    +#define __BUG_FLAGS(flags) \
    do { \
    __asm__ __volatile__ ( \
    "1:\n\t" \
    "ebreak\n" \
    - ".pushsection __bug_table,\"a\"\n\t" \
    + ".pushsection __bug_table,\"aw\"\n\t" \
    "2:\n\t" \
    __BUG_ENTRY "\n\t" \
    - ".org 2b + %2\n\t" \
    + ".org 2b + %3\n\t" \
    ".popsection" \
    : \
    : "i" (__FILE__), "i" (__LINE__), \
    - "i" (sizeof(struct bug_entry))); \
    - unreachable(); \
    + "i" (flags), \
    + "i" (sizeof(struct bug_entry))); \
    } while (0)
    +
    #endif /* !__ASSEMBLY__ */
    #else /* CONFIG_GENERIC_BUG */
    #ifndef __ASSEMBLY__
    -#define BUG() \
    -do { \
    +#define __BUG_FLAGS(flags) do { \
    __asm__ __volatile__ ("ebreak\n"); \
    - unreachable(); \
    } while (0)
    #endif /* !__ASSEMBLY__ */
    #endif /* CONFIG_GENERIC_BUG */

    +#define BUG() do { \
    + __BUG_FLAGS(0); \
    + unreachable(); \
    +} while (0)
    +
    +#define __WARN_FLAGS(flags) __BUG_FLAGS(BUGFLAG_WARNING|(flags))
    +
    #define HAVE_ARCH_BUG

    #include <asm-generic/bug.h>
    --
    1.7.1
    \
     
     \ /
      Last update: 2019-03-05 04:24    [W:3.099 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site