rpm  5.4.10
debug.h
Go to the documentation of this file.
1 
4 #ifndef H_DEBUG
5 #define H_DEBUG
6 
7 #ifdef HAVE_ASSERT_H
8 #undef assert /* XXX <beecrypt/api.h> tries to retrofit an assert(x) macro */
9 #include <assert.h>
10 #endif
11 
12 #ifdef __LCLINT__
13 #define ntohl(_x) (_x)
14 #define ntohs(_x) (_x)
15 #define htonl(_x) (_x)
16 #define htons(_x) (_x)
17 #endif
18 
19 #if defined(_OPENMP)
20 #include <omp.h>
21 #endif
22 
23 #ifdef WITH_DMALLOC
24 #include <dmalloc.h>
25 #endif
26 
27 /* If using GCC, wrap __builtin_expect() (reduces overhead in lookup3.c) */
28 #if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__)
29 # define UNLIKELY(value) __builtin_expect((value), 0)
30 #else
31 # define UNLIKELY(value) (value)
32 #endif
33 
34 #if defined(WITH_VALGRIND) && defined(HAVE_VALGRIND_VALGRIND_H)
35 
36 #include <valgrind/valgrind.h>
37 #include <valgrind/memcheck.h>
38 #include <valgrind/callgrind.h>
39 #include <valgrind/helgrind.h>
40 #include <valgrind/drd.h>
41 
42 #if !defined(ANNOTATE_BENIGN_RACE_SIZED)
43 #define ANNOTATE_BENIGN_RACE_SIZED(_a, _b, _c)
44 #endif
45 
46 static inline void * DRD_xmalloc(size_t nb)
47 {
48  void * ptr = xmalloc(nb);
49 ANNOTATE_BENIGN_RACE_SIZED(ptr, nb, __FUNCTION__); /* XXX tsan sanity. */
50  return ptr;
51 }
52 
53 static inline void * DRD_xcalloc(size_t nmemb, size_t size)
54 {
55  size_t nb = nmemb * size;
56  void * ptr = DRD_xmalloc(nb);
57  memset(ptr, 0, nb);
58  return ptr;
59 }
60 
61 static inline void * DRD_xrealloc(void * ptr, size_t size)
62 {
63  ptr = xrealloc(ptr, size);
64 ANNOTATE_BENIGN_RACE_SIZED(ptr, size, __FUNCTION__); /* XXX tsan sanity. */
65  return ptr;
66 }
67 
68 static inline char * DRD_xstrdup(const char * s)
69 {
70  size_t nb = strlen(s) + 1;
71  char * t = (char *) DRD_xmalloc(nb);
72  return strcpy(t, s);
73 }
74 
75 #else
76 
77 /* XXX list most everything just to see the valgrind namespace. */
78 
79 #define RUNNING_ON_VALGRIND (0)
80 #define VALGRIND_DISCARD_TRANSLATIONS(_qzz_addr,_qzz_len)
81 
82 #define VALGRIND_MALLOCLIKE_BLOCK(addr, sizeB, rzB, is_zeroed)
83 #define VALGRIND_FREELIKE_BLOCK(addr, rzB)
84 
85 #define VALGRIND_CREATE_MEMPOOL(pool, rzB, is_zeroed)
86 #define VALGRIND_DESTROY_MEMPOOL(pool)
87 #define VALGRIND_MEMPOOL_ALLOC(pool, addr, size)
88 #define VALGRIND_MEMPOOL_FREE(pool, addr)
89 #define VALGRIND_MEMPOOL_TRIM(pool, addr, size)
90 #define VALGRIND_MOVE_MEMPOOL(poolA, poolB)
91 #define VALGRIND_MEMPOOL_CHANGE(pool, addrA, addrB, size)
92 #define VALGRIND_MEMPOOL_EXISTS(pool) (0)
93 
94 #define VALGRIND_MAKE_MEM_NOACCESS(_qzz_addr,_qzz_len)
95 #define VALGRIND_MAKE_MEM_UNDEFINED(_qzz_addr,_qzz_len)
96 #define VALGRIND_MAKE_MEM_DEFINED(_qzz_addr,_qzz_len)
97 #define VALGRIND_MAKE_MEM_DEFINED_IF_ADDRESSABLE(_qzz_addr,_qzz_len)
98 #define VALGRIND_CREATE_BLOCK(_qzz_addr,_qzz_len, _qzz_desc)
99 #define VALGRIND_DISCARD(_qzz_blkindex)
100 #define VALGRIND_CHECK_MEM_IS_ADDRESSABLE(_qzz_addr,_qzz_len)
101 #define VALGRIND_CHECK_MEM_IS_DEFINED(_qzz_addr,_qzz_len)
102 #define VALGRIND_CHECK_VALUE_IS_DEFINED(__lvalue)
103 #define VALGRIND_DO_LEAK_CHECK
104 #define VALGRIND_DO_QUICK_LEAK_CHECK
105 #define VALGRIND_COUNT_LEAKS(leaked, dubious, reachable, suppressed)
106 #define VALGRIND_COUNT_LEAK_BLOCKS(leaked, dubious, reachable, suppressed)
107 #define VALGRIND_GET_VBITS(zza,zzvbits,zznbytes)
108 #define VALGRIND_SET_VBITS(zza,zzvbits,zznbytes)
109 
110 #define CALLGRIND_DUMP_STATS
111 #define CALLGRIND_DUMP_STATS_AT(pos_str)
112 #define CALLGRIND_ZERO_STATS
113 #define CALLGRIND_TOGGLE_COLLECT
114 #define CALLGRIND_START_INSTRUMENTATION
115 #define CALLGRIND_STOP_INSTRUMENTATION
116 
117 #define VALGRIND_HG_MUTEX_INIT_POST(_mutex, _mbRec)
118 #define VALGRIND_HG_MUTEX_LOCK_PRE(_mutex, _isTryLock)
119 #define VALGRIND_HG_MUTEX_LOCK_POST(_mutex)
120 #define VALGRIND_HG_MUTEX_UNLOCK_PRE(_mutex)
121 #define VALGRIND_HG_MUTEX_UNLOCK_POST(_mutex)
122 #define VALGRIND_HG_MUTEX_DESTROY_PRE(_mutex)
123 #define VALGRIND_HG_SEM_INIT_POST(_sem, _value)
124 #define VALGRIND_HG_SEM_WAIT_POST(_sem)
125 #define VALGRIND_HG_SEM_POST_PRE(_sem)
126 #define VALGRIND_HG_SEM_DESTROY_PRE(_sem)
127 #define VALGRIND_HG_BARRIER_INIT_PRE(_bar, _count, _resizable)
128 #define VALGRIND_HG_BARRIER_WAIT_PRE(_bar)
129 #define VALGRIND_HG_BARRIER_RESIZE_PRE(_bar, _newcount)
130 #define VALGRIND_HG_BARRIER_DESTROY_PRE(_bar)
131 #define VALGRIND_HG_CLEAN_MEMORY(_qzz_start, _qzz_len)
132 #define VALGRIND_HG_CLEAN_MEMORY_HEAPBLOCK(_qzz_blockstart)
133 #define VALGRIND_HG_DISABLE_CHECKING(_qzz_start, _qzz_len)
134 #define VALGRIND_HG_ENABLE_CHECKING(_qzz_start, _qzz_len)
135 
136 #define DRD_GET_VALGRIND_THREADID
137 #define DRD_GET_DRD_THREADID
138 #define DRD_IGNORE_VAR(x)
139 #define DRD_STOP_IGNORING_VAR(x)
140 #define DRD_TRACE_VAR(x)
141 
142 #define ANNOTATE_HAPPENS_BEFORE(_obj)
143 #define ANNOTATE_HAPPENS_AFTER(_obj)
144 
145 #define ANNOTATE_RWLOCK_CREATE(rwlock)
146 #define ANNOTATE_RWLOCK_DESTROY(rwlock)
147 #define ANNOTATE_RWLOCK_ACQUIRED(rwlock, is_w)
148 #define ANNOTATE_READERLOCK_ACQUIRED(rwlock)
149 #define ANNOTATE_WRITERLOCK_ACQUIRED(rwlock)
150 #define ANNOTATE_RWLOCK_RELEASED(rwlock, is_w)
151 #define ANNOTATE_READERLOCK_RELEASED(rwlock)
152 #define ANNOTATE_WRITERLOCK_RELEASED(rwlock)
153 
154 #define ANNOTATE_BARRIER_INIT(barrier, count, reinitialization_allowed)
155 #define ANNOTATE_BARRIER_DESTROY(barrier)
156 #define ANNOTATE_BARRIER_WAIT_BEFORE(barrier)
157 #define ANNOTATE_BARRIER_WAIT_AFTER(barrier)
158 
159 #define ANNOTATE_BENIGN_RACE(_a, _b)
160 #define ANNOTATE_BENIGN_RACE_SIZED(_a, _b, _c)
161 
162 #define ANNOTATE_IGNORE_READS_BEGIN()
163 #define ANNOTATE_IGNORE_READS_END()
164 #define ANNOTATE_IGNORE_WRITES_BEGIN()
165 #define ANNOTATE_IGNORE_WRITES_END()
166 #define ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN()
167 #define ANNOTATE_IGNORE_READS_AND_WRITES_END()
168 
169 #define ANNOTATE_NEW_MEMORY(_addr, _size)
170 #define ANNOTATE_TRACE_MEMORY(_addr)
171 #define ANNOTATE_THREAD_NAME(_name)
172 
173 #define DRD_xmalloc(_nb) xmalloc(_nb)
174 #define DRD_xcalloc(_nmemb, _size) xcalloc(_nmemb, _size)
175 #define DRD_xrealloc(_ptr, _size) xrealloc(_ptr, _size)
176 #define DRD_xstrdup(_str) xstrdup(_str)
177 
178 #endif
179 
180 #endif /* H_DEBUG */