112 #define VALGRIND_MAKE_MEM_NOACCESS(_qzz_addr,_qzz_len) \ 113 (__extension__({unsigned long _qzz_res; \ 114 VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0 , \ 115 VG_USERREQ__MAKE_MEM_NOACCESS, \ 116 _qzz_addr, _qzz_len, 0, 0, 0); \ 122 #define VALGRIND_MAKE_MEM_UNDEFINED(_qzz_addr,_qzz_len) \ 123 (__extension__({unsigned long _qzz_res; \ 124 VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0 , \ 125 VG_USERREQ__MAKE_MEM_UNDEFINED, \ 126 _qzz_addr, _qzz_len, 0, 0, 0); \ 132 #define VALGRIND_MAKE_MEM_DEFINED(_qzz_addr,_qzz_len) \ 133 (__extension__({unsigned long _qzz_res; \ 134 VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0 , \ 135 VG_USERREQ__MAKE_MEM_DEFINED, \ 136 _qzz_addr, _qzz_len, 0, 0, 0); \ 143 #define VALGRIND_MAKE_MEM_DEFINED_IF_ADDRESSABLE(_qzz_addr,_qzz_len) \ 144 (__extension__({unsigned long _qzz_res; \ 145 VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0 , \ 146 VG_USERREQ__MAKE_MEM_DEFINED_IF_ADDRESSABLE, \ 147 _qzz_addr, _qzz_len, 0, 0, 0); \ 155 #define VALGRIND_CREATE_BLOCK(_qzz_addr,_qzz_len, _qzz_desc) \ 156 (__extension__({unsigned long _qzz_res; \ 157 VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0 , \ 158 VG_USERREQ__CREATE_BLOCK, \ 159 _qzz_addr, _qzz_len, _qzz_desc, \ 166 #define VALGRIND_DISCARD(_qzz_blkindex) \ 167 (__extension__ ({unsigned long _qzz_res; \ 168 VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0 , \ 169 VG_USERREQ__DISCARD, \ 170 0, _qzz_blkindex, 0, 0, 0); \ 181 #define VALGRIND_CHECK_MEM_IS_ADDRESSABLE(_qzz_addr,_qzz_len) \ 182 (__extension__({unsigned long _qzz_res; \ 183 VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ 184 VG_USERREQ__CHECK_MEM_IS_ADDRESSABLE,\ 185 _qzz_addr, _qzz_len, 0, 0, 0); \ 193 #define VALGRIND_CHECK_MEM_IS_DEFINED(_qzz_addr,_qzz_len) \ 194 (__extension__({unsigned long _qzz_res; \ 195 VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ 196 VG_USERREQ__CHECK_MEM_IS_DEFINED, \ 197 _qzz_addr, _qzz_len, 0, 0, 0); \ 206 #define VALGRIND_CHECK_VALUE_IS_DEFINED(__lvalue) \ 207 VALGRIND_CHECK_MEM_IS_DEFINED( \ 208 (volatile unsigned char *)&(__lvalue), \ 209 (unsigned long)(sizeof (__lvalue))) 213 #define VALGRIND_DO_LEAK_CHECK \ 214 {unsigned long _qzz_res; \ 215 VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ 216 VG_USERREQ__DO_LEAK_CHECK, \ 221 #define VALGRIND_DO_QUICK_LEAK_CHECK \ 222 {unsigned long _qzz_res; \ 223 VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ 224 VG_USERREQ__DO_LEAK_CHECK, \ 230 #define VALGRIND_COUNT_LEAKS(leaked, dubious, reachable, suppressed) \ 237 {unsigned long _qzz_res; \ 238 unsigned long _qzz_leaked = 0, _qzz_dubious = 0; \ 239 unsigned long _qzz_reachable = 0, _qzz_suppressed = 0; \ 240 VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ 241 VG_USERREQ__COUNT_LEAKS, \ 242 &_qzz_leaked, &_qzz_dubious, \ 243 &_qzz_reachable, &_qzz_suppressed, 0); \ 244 leaked = _qzz_leaked; \ 245 dubious = _qzz_dubious; \ 246 reachable = _qzz_reachable; \ 247 suppressed = _qzz_suppressed; \ 252 #define VALGRIND_COUNT_LEAK_BLOCKS(leaked, dubious, reachable, suppressed) \ 259 {unsigned long _qzz_res; \ 260 unsigned long _qzz_leaked = 0, _qzz_dubious = 0; \ 261 unsigned long _qzz_reachable = 0, _qzz_suppressed = 0; \ 262 VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ 263 VG_USERREQ__COUNT_LEAK_BLOCKS, \ 264 &_qzz_leaked, &_qzz_dubious, \ 265 &_qzz_reachable, &_qzz_suppressed, 0); \ 266 leaked = _qzz_leaked; \ 267 dubious = _qzz_dubious; \ 268 reachable = _qzz_reachable; \ 269 suppressed = _qzz_suppressed; \ 282 #define VALGRIND_GET_VBITS(zza,zzvbits,zznbytes) \ 283 (__extension__({unsigned long _qzz_res; \ 284 char* czza = (char*)zza; \ 285 char* czzvbits = (char*)zzvbits; \ 286 VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ 287 VG_USERREQ__GET_VBITS, \ 288 czza, czzvbits, zznbytes, 0, 0 ); \ 301 #define VALGRIND_SET_VBITS(zza,zzvbits,zznbytes) \ 302 (__extension__({unsigned int _qzz_res; \ 303 char* czza = (char*)zza; \ 304 char* czzvbits = (char*)zzvbits; \ 305 VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ 306 VG_USERREQ__SET_VBITS, \ 307 czza, czzvbits, zznbytes, 0, 0 ); \
#define VG_USERREQ_TOOL_BASE(a, b)