rpm  5.4.4
debug.h
Go to the documentation of this file.
00001 
00004 #ifndef H_DEBUG
00005 #define H_DEBUG
00006 
00007 #ifdef HAVE_ASSERT_H
00008 #undef  assert  /* XXX <beecrypt/api.h> tries to retrofit an assert(x) macro */
00009 #include <assert.h>
00010 #endif
00011 
00012 #ifdef  __LCLINT__
00013 #define ntohl(_x)       (_x)
00014 #define ntohs(_x)       (_x)
00015 #define htonl(_x)       (_x)
00016 #define htons(_x)       (_x)
00017 #endif
00018 
00019 #if defined(_OPENMP)
00020 #include <omp.h>
00021 #endif
00022 
00023 #ifdef  WITH_DMALLOC
00024 #include <dmalloc.h>
00025 #endif
00026 
00027 /* If using GCC, wrap __builtin_expect() (reduces overhead in lookup3.c) */
00028 #if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__)
00029 #  define UNLIKELY(value) __builtin_expect((value), 0)
00030 #else
00031 #  define UNLIKELY(value) (value)
00032 #endif
00033 
00034 #if defined(WITH_VALGRIND) && defined(HAVE_VALGRIND_VALGRIND_H)
00035 
00036 #include <valgrind/valgrind.h>
00037 #include <valgrind/memcheck.h>
00038 #include <valgrind/callgrind.h>
00039 #include <valgrind/helgrind.h>
00040 #include <valgrind/drd.h>
00041 
00042 #if !defined(ANNOTATE_BENIGN_RACE_SIZED)
00043 #define ANNOTATE_BENIGN_RACE_SIZED(_a, _b, _c)
00044 #endif
00045 
00046 static inline void * DRD_xmalloc(size_t nb)
00047 {
00048     void * ptr = xmalloc(nb);
00049 ANNOTATE_BENIGN_RACE_SIZED(ptr, nb, __FUNCTION__);      /* XXX tsan sanity. */
00050     return ptr;
00051 }
00052 
00053 static inline void * DRD_xcalloc(size_t nmemb, size_t size)
00054 {
00055     size_t nb = nmemb * size;
00056     void * ptr = DRD_xmalloc(nb);
00057     memset(ptr, 0, nb);
00058     return ptr;
00059 }
00060 
00061 static inline void * DRD_xrealloc(void * ptr, size_t size)
00062 {
00063     ptr = xrealloc(ptr, size);
00064 ANNOTATE_BENIGN_RACE_SIZED(ptr, size, __FUNCTION__);    /* XXX tsan sanity. */
00065     return ptr;
00066 }
00067 
00068 static inline char * DRD_xstrdup(const char * s)
00069 {
00070     size_t nb = strlen(s) + 1;
00071     char * t = (char *) DRD_xmalloc(nb);
00072     return strcpy(t, s);
00073 }
00074 
00075 #else
00076 
00077 /* XXX list most everything just to see the valgrind namespace. */
00078 
00079 #define RUNNING_ON_VALGRIND     (0)
00080 #define VALGRIND_DISCARD_TRANSLATIONS(_qzz_addr,_qzz_len)
00081 
00082 #define VALGRIND_MALLOCLIKE_BLOCK(addr, sizeB, rzB, is_zeroed)
00083 #define VALGRIND_FREELIKE_BLOCK(addr, rzB)
00084 
00085 #define VALGRIND_CREATE_MEMPOOL(pool, rzB, is_zeroed)
00086 #define VALGRIND_DESTROY_MEMPOOL(pool)
00087 #define VALGRIND_MEMPOOL_ALLOC(pool, addr, size)
00088 #define VALGRIND_MEMPOOL_FREE(pool, addr)
00089 #define VALGRIND_MEMPOOL_TRIM(pool, addr, size)
00090 #define VALGRIND_MOVE_MEMPOOL(poolA, poolB)
00091 #define VALGRIND_MEMPOOL_CHANGE(pool, addrA, addrB, size)
00092 #define VALGRIND_MEMPOOL_EXISTS(pool)   (0)
00093 
00094 #define VALGRIND_MAKE_MEM_NOACCESS(_qzz_addr,_qzz_len)
00095 #define VALGRIND_MAKE_MEM_UNDEFINED(_qzz_addr,_qzz_len)
00096 #define VALGRIND_MAKE_MEM_DEFINED(_qzz_addr,_qzz_len)
00097 #define VALGRIND_MAKE_MEM_DEFINED_IF_ADDRESSABLE(_qzz_addr,_qzz_len)
00098 #define VALGRIND_CREATE_BLOCK(_qzz_addr,_qzz_len, _qzz_desc)
00099 #define VALGRIND_DISCARD(_qzz_blkindex)
00100 #define VALGRIND_CHECK_MEM_IS_ADDRESSABLE(_qzz_addr,_qzz_len)
00101 #define VALGRIND_CHECK_MEM_IS_DEFINED(_qzz_addr,_qzz_len)
00102 #define VALGRIND_CHECK_VALUE_IS_DEFINED(__lvalue)
00103 #define VALGRIND_DO_LEAK_CHECK
00104 #define VALGRIND_DO_QUICK_LEAK_CHECK
00105 #define VALGRIND_COUNT_LEAKS(leaked, dubious, reachable, suppressed)
00106 #define VALGRIND_COUNT_LEAK_BLOCKS(leaked, dubious, reachable, suppressed)
00107 #define VALGRIND_GET_VBITS(zza,zzvbits,zznbytes)
00108 #define VALGRIND_SET_VBITS(zza,zzvbits,zznbytes)
00109 
00110 #define CALLGRIND_DUMP_STATS
00111 #define CALLGRIND_DUMP_STATS_AT(pos_str)
00112 #define CALLGRIND_ZERO_STATS
00113 #define CALLGRIND_TOGGLE_COLLECT
00114 #define CALLGRIND_START_INSTRUMENTATION
00115 #define CALLGRIND_STOP_INSTRUMENTATION
00116 
00117 #define VALGRIND_HG_MUTEX_INIT_POST(_mutex, _mbRec)
00118 #define VALGRIND_HG_MUTEX_LOCK_PRE(_mutex, _isTryLock)
00119 #define VALGRIND_HG_MUTEX_LOCK_POST(_mutex)
00120 #define VALGRIND_HG_MUTEX_UNLOCK_PRE(_mutex)
00121 #define VALGRIND_HG_MUTEX_UNLOCK_POST(_mutex)
00122 #define VALGRIND_HG_MUTEX_DESTROY_PRE(_mutex)
00123 #define VALGRIND_HG_SEM_INIT_POST(_sem, _value)
00124 #define VALGRIND_HG_SEM_WAIT_POST(_sem)
00125 #define VALGRIND_HG_SEM_POST_PRE(_sem)
00126 #define VALGRIND_HG_SEM_DESTROY_PRE(_sem)
00127 #define VALGRIND_HG_BARRIER_INIT_PRE(_bar, _count, _resizable)
00128 #define VALGRIND_HG_BARRIER_WAIT_PRE(_bar)
00129 #define VALGRIND_HG_BARRIER_RESIZE_PRE(_bar, _newcount)
00130 #define VALGRIND_HG_BARRIER_DESTROY_PRE(_bar)
00131 #define VALGRIND_HG_CLEAN_MEMORY(_qzz_start, _qzz_len)
00132 #define VALGRIND_HG_CLEAN_MEMORY_HEAPBLOCK(_qzz_blockstart)
00133 #define VALGRIND_HG_DISABLE_CHECKING(_qzz_start, _qzz_len)
00134 #define VALGRIND_HG_ENABLE_CHECKING(_qzz_start, _qzz_len)
00135 
00136 #define DRD_GET_VALGRIND_THREADID
00137 #define DRD_GET_DRD_THREADID
00138 #define DRD_IGNORE_VAR(x)
00139 #define DRD_STOP_IGNORING_VAR(x)
00140 #define DRD_TRACE_VAR(x)
00141 
00142 #define ANNOTATE_HAPPENS_BEFORE(_obj)
00143 #define ANNOTATE_HAPPENS_AFTER(_obj)
00144 
00145 #define ANNOTATE_RWLOCK_CREATE(rwlock)
00146 #define ANNOTATE_RWLOCK_DESTROY(rwlock)
00147 #define ANNOTATE_RWLOCK_ACQUIRED(rwlock, is_w)
00148 #define ANNOTATE_READERLOCK_ACQUIRED(rwlock)
00149 #define ANNOTATE_WRITERLOCK_ACQUIRED(rwlock)
00150 #define ANNOTATE_RWLOCK_RELEASED(rwlock, is_w)
00151 #define ANNOTATE_READERLOCK_RELEASED(rwlock)
00152 #define ANNOTATE_WRITERLOCK_RELEASED(rwlock)
00153 
00154 #define ANNOTATE_BARRIER_INIT(barrier, count, reinitialization_allowed)
00155 #define ANNOTATE_BARRIER_DESTROY(barrier)
00156 #define ANNOTATE_BARRIER_WAIT_BEFORE(barrier)
00157 #define ANNOTATE_BARRIER_WAIT_AFTER(barrier)
00158 
00159 #define ANNOTATE_BENIGN_RACE(_a, _b)
00160 #define ANNOTATE_BENIGN_RACE_SIZED(_a, _b, _c)
00161 
00162 #define ANNOTATE_IGNORE_READS_BEGIN()
00163 #define ANNOTATE_IGNORE_READS_END()
00164 #define ANNOTATE_IGNORE_WRITES_BEGIN()
00165 #define ANNOTATE_IGNORE_WRITES_END()
00166 #define ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN()
00167 #define ANNOTATE_IGNORE_READS_AND_WRITES_END()
00168 
00169 #define ANNOTATE_NEW_MEMORY(_addr, _size)
00170 #define ANNOTATE_TRACE_MEMORY(_addr)
00171 #define ANNOTATE_THREAD_NAME(_name)
00172 
00173 #define DRD_xmalloc(_nb)                xmalloc(_nb)
00174 #define DRD_xcalloc(_nmemb, _size)      xcalloc(_nmemb, _size)
00175 #define DRD_xrealloc(_ptr, _size)       xrealloc(_ptr, _size)
00176 #define DRD_xstrdup(_str)               xstrdup(_str)
00177 
00178 #endif
00179 
00180 #endif  /* H_DEBUG */