File: /Users/paulross/dev/linux/linux-3.13/include/linux/debugobjects.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

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