LCOV - code coverage report
Current view: top level - include/linux - bug.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 1 1 100.0 %
Date: 2021-04-22 12:43:58 Functions: 0 0 -

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : #ifndef _LINUX_BUG_H
       3             : #define _LINUX_BUG_H
       4             : 
       5             : #include <asm/bug.h>
       6             : #include <linux/compiler.h>
       7             : #include <linux/build_bug.h>
       8             : 
       9             : enum bug_trap_type {
      10             :         BUG_TRAP_TYPE_NONE = 0,
      11             :         BUG_TRAP_TYPE_WARN = 1,
      12             :         BUG_TRAP_TYPE_BUG = 2,
      13             : };
      14             : 
      15             : struct pt_regs;
      16             : 
      17             : #ifdef __CHECKER__
      18             : #define MAYBE_BUILD_BUG_ON(cond) (0)
      19             : #else /* __CHECKER__ */
      20             : 
      21             : #define MAYBE_BUILD_BUG_ON(cond)                        \
      22             :         do {                                            \
      23             :                 if (__builtin_constant_p((cond)))       \
      24             :                         BUILD_BUG_ON(cond);             \
      25             :                 else                                    \
      26             :                         BUG_ON(cond);                   \
      27             :         } while (0)
      28             : 
      29             : #endif  /* __CHECKER__ */
      30             : 
      31             : #ifdef CONFIG_GENERIC_BUG
      32             : #include <asm-generic/bug.h>
      33             : 
      34             : static inline int is_warning_bug(const struct bug_entry *bug)
      35             : {
      36             :         return bug->flags & BUGFLAG_WARNING;
      37             : }
      38             : 
      39             : struct bug_entry *find_bug(unsigned long bugaddr);
      40             : 
      41             : enum bug_trap_type report_bug(unsigned long bug_addr, struct pt_regs *regs);
      42             : 
      43             : /* These are defined by the architecture */
      44             : int is_valid_bugaddr(unsigned long addr);
      45             : 
      46             : void generic_bug_clear_once(void);
      47             : 
      48             : #else   /* !CONFIG_GENERIC_BUG */
      49             : 
      50             : static inline void *find_bug(unsigned long bugaddr)
      51             : {
      52             :         return NULL;
      53             : }
      54             : 
      55             : static inline enum bug_trap_type report_bug(unsigned long bug_addr,
      56             :                                             struct pt_regs *regs)
      57             : {
      58             :         return BUG_TRAP_TYPE_BUG;
      59             : }
      60             : 
      61             : 
      62             : static inline void generic_bug_clear_once(void) {}
      63             : 
      64             : #endif  /* CONFIG_GENERIC_BUG */
      65             : 
      66             : /*
      67             :  * Since detected data corruption should stop operation on the affected
      68             :  * structures. Return value must be checked and sanely acted on by caller.
      69             :  */
      70      442496 : static inline __must_check bool check_data_corruption(bool v) { return v; }
      71             : #define CHECK_DATA_CORRUPTION(condition, fmt, ...)                       \
      72             :         check_data_corruption(({                                         \
      73             :                 bool corruption = unlikely(condition);                   \
      74             :                 if (corruption) {                                        \
      75             :                         if (IS_ENABLED(CONFIG_BUG_ON_DATA_CORRUPTION)) { \
      76             :                                 pr_err(fmt, ##__VA_ARGS__);              \
      77             :                                 BUG();                                   \
      78             :                         } else                                           \
      79             :                                 WARN(1, fmt, ##__VA_ARGS__);             \
      80             :                 }                                                        \
      81             :                 corruption;                                              \
      82             :         }))
      83             : 
      84             : #endif  /* _LINUX_BUG_H */

Generated by: LCOV version 1.14