LCOV - code coverage report
Current view: top level - include/linux - debugobjects.h (source / functions) Hit Total Coverage
Test: combined.info Lines: 3 3 100.0 %
Date: 2022-03-28 15:32:58 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: GPL-2.0 */
       2                 :            : #ifndef _LINUX_DEBUGOBJECTS_H
       3                 :            : #define _LINUX_DEBUGOBJECTS_H
       4                 :            : 
       5                 :            : #include <linux/list.h>
       6                 :            : #include <linux/spinlock.h>
       7                 :            : 
       8                 :            : enum debug_obj_state {
       9                 :            :         ODEBUG_STATE_NONE,
      10                 :            :         ODEBUG_STATE_INIT,
      11                 :            :         ODEBUG_STATE_INACTIVE,
      12                 :            :         ODEBUG_STATE_ACTIVE,
      13                 :            :         ODEBUG_STATE_DESTROYED,
      14                 :            :         ODEBUG_STATE_NOTAVAILABLE,
      15                 :            :         ODEBUG_STATE_MAX,
      16                 :            : };
      17                 :            : 
      18                 :            : struct debug_obj_descr;
      19                 :            : 
      20                 :            : /**
      21                 :            :  * struct debug_obj - representaion of an tracked object
      22                 :            :  * @node:       hlist node to link the object into the tracker list
      23                 :            :  * @state:      tracked object state
      24                 :            :  * @astate:     current active state
      25                 :            :  * @object:     pointer to the real object
      26                 :            :  * @descr:      pointer to an object type specific debug description structure
      27                 :            :  */
      28                 :            : struct debug_obj {
      29                 :            :         struct hlist_node       node;
      30                 :            :         enum debug_obj_state    state;
      31                 :            :         unsigned int            astate;
      32                 :            :         void                    *object;
      33                 :            :         struct debug_obj_descr  *descr;
      34                 :            : };
      35                 :            : 
      36                 :            : /**
      37                 :            :  * struct debug_obj_descr - object type specific debug description structure
      38                 :            :  *
      39                 :            :  * @name:               name of the object typee
      40                 :            :  * @debug_hint:         function returning address, which have associated
      41                 :            :  *                      kernel symbol, to allow identify the object
      42                 :            :  * @is_static_object:   return true if the obj is static, otherwise return false
      43                 :            :  * @fixup_init:         fixup function, which is called when the init check
      44                 :            :  *                      fails. All fixup functions must return true if fixup
      45                 :            :  *                      was successful, otherwise return false
      46                 :            :  * @fixup_activate:     fixup function, which is called when the activate check
      47                 :            :  *                      fails
      48                 :            :  * @fixup_destroy:      fixup function, which is called when the destroy check
      49                 :            :  *                      fails
      50                 :            :  * @fixup_free:         fixup function, which is called when the free check
      51                 :            :  *                      fails
      52                 :            :  * @fixup_assert_init:  fixup function, which is called when the assert_init
      53                 :            :  *                      check fails
      54                 :            :  */
      55                 :            : struct debug_obj_descr {
      56                 :            :         const char              *name;
      57                 :            :         void *(*debug_hint)(void *addr);
      58                 :            :         bool (*is_static_object)(void *addr);
      59                 :            :         bool (*fixup_init)(void *addr, enum debug_obj_state state);
      60                 :            :         bool (*fixup_activate)(void *addr, enum debug_obj_state state);
      61                 :            :         bool (*fixup_destroy)(void *addr, enum debug_obj_state state);
      62                 :            :         bool (*fixup_free)(void *addr, enum debug_obj_state state);
      63                 :            :         bool (*fixup_assert_init)(void *addr, enum debug_obj_state state);
      64                 :            : };
      65                 :            : 
      66                 :            : #ifdef CONFIG_DEBUG_OBJECTS
      67                 :            : extern void debug_object_init      (void *addr, struct debug_obj_descr *descr);
      68                 :            : extern void
      69                 :            : debug_object_init_on_stack(void *addr, struct debug_obj_descr *descr);
      70                 :            : extern int debug_object_activate  (void *addr, struct debug_obj_descr *descr);
      71                 :            : extern void debug_object_deactivate(void *addr, struct debug_obj_descr *descr);
      72                 :            : extern void debug_object_destroy   (void *addr, struct debug_obj_descr *descr);
      73                 :            : extern void debug_object_free      (void *addr, struct debug_obj_descr *descr);
      74                 :            : extern void debug_object_assert_init(void *addr, struct debug_obj_descr *descr);
      75                 :            : 
      76                 :            : /*
      77                 :            :  * Active state:
      78                 :            :  * - Set at 0 upon initialization.
      79                 :            :  * - Must return to 0 before deactivation.
      80                 :            :  */
      81                 :            : extern void
      82                 :            : debug_object_active_state(void *addr, struct debug_obj_descr *descr,
      83                 :            :                           unsigned int expect, unsigned int next);
      84                 :            : 
      85                 :            : extern void debug_objects_early_init(void);
      86                 :            : extern void debug_objects_mem_init(void);
      87                 :            : #else
      88                 :            : static inline void
      89                 :            : debug_object_init      (void *addr, struct debug_obj_descr *descr) { }
      90                 :            : static inline void
      91                 :            : debug_object_init_on_stack(void *addr, struct debug_obj_descr *descr) { }
      92                 :            : static inline int
      93                 :            : debug_object_activate  (void *addr, struct debug_obj_descr *descr) { return 0; }
      94                 :            : static inline void
      95                 :            : debug_object_deactivate(void *addr, struct debug_obj_descr *descr) { }
      96                 :            : static inline void
      97                 :            : debug_object_destroy   (void *addr, struct debug_obj_descr *descr) { }
      98                 :            : static inline void
      99                 :            : debug_object_free      (void *addr, struct debug_obj_descr *descr) { }
     100                 :            : static inline void
     101                 :            : debug_object_assert_init(void *addr, struct debug_obj_descr *descr) { }
     102                 :            : 
     103                 :         28 : static inline void debug_objects_early_init(void) { }
     104                 :         28 : static inline void debug_objects_mem_init(void) { }
     105                 :            : #endif
     106                 :            : 
     107                 :            : #ifdef CONFIG_DEBUG_OBJECTS_FREE
     108                 :            : extern void debug_check_no_obj_freed(const void *address, unsigned long size);
     109                 :            : #else
     110                 :            : static inline void
     111                 :     305346 : debug_check_no_obj_freed(const void *address, unsigned long size) { }
     112                 :            : #endif
     113                 :            : 
     114                 :            : #endif

Generated by: LCOV version 1.14