iPXE
memcheck.h File Reference
#include "valgrind.h"

Go to the source code of this file.

Macros

#define VALGRIND_MAKE_MEM_NOACCESS(_qzz_addr, _qzz_len)
#define VALGRIND_MAKE_MEM_UNDEFINED(_qzz_addr, _qzz_len)
#define VALGRIND_MAKE_MEM_DEFINED(_qzz_addr, _qzz_len)
#define VALGRIND_MAKE_MEM_DEFINED_IF_ADDRESSABLE(_qzz_addr, _qzz_len)
#define VALGRIND_CREATE_BLOCK(_qzz_addr, _qzz_len, _qzz_desc)
#define VALGRIND_DISCARD(_qzz_blkindex)
#define VALGRIND_CHECK_MEM_IS_ADDRESSABLE(_qzz_addr, _qzz_len)
#define VALGRIND_CHECK_MEM_IS_DEFINED(_qzz_addr, _qzz_len)
#define VALGRIND_CHECK_VALUE_IS_DEFINED(__lvalue)
#define VALGRIND_DO_LEAK_CHECK
#define VALGRIND_DO_QUICK_LEAK_CHECK
#define VALGRIND_COUNT_LEAKS(leaked, dubious, reachable, suppressed)
#define VALGRIND_COUNT_LEAK_BLOCKS(leaked, dubious, reachable, suppressed)
#define VALGRIND_GET_VBITS(zza, zzvbits, zznbytes)
#define VALGRIND_SET_VBITS(zza, zzvbits, zznbytes)

Enumerations

enum  Vg_MemCheckClientRequest {
  VG_USERREQ__MAKE_MEM_NOACCESS = VG_USERREQ_TOOL_BASE('M','C') , VG_USERREQ__MAKE_MEM_UNDEFINED , VG_USERREQ__MAKE_MEM_DEFINED , VG_USERREQ__DISCARD ,
  VG_USERREQ__CHECK_MEM_IS_ADDRESSABLE , VG_USERREQ__CHECK_MEM_IS_DEFINED , VG_USERREQ__DO_LEAK_CHECK , VG_USERREQ__COUNT_LEAKS ,
  VG_USERREQ__GET_VBITS , VG_USERREQ__SET_VBITS , VG_USERREQ__CREATE_BLOCK , VG_USERREQ__MAKE_MEM_DEFINED_IF_ADDRESSABLE ,
  VG_USERREQ__COUNT_LEAK_BLOCKS , _VG_USERREQ__MEMCHECK_RECORD_OVERLAP_ERROR = VG_USERREQ_TOOL_BASE('M','C') + 256
}

Functions

 FILE_LICENCE (BSD3)
 FILE_SECBOOT (PERMITTED)

Macro Definition Documentation

◆ VALGRIND_MAKE_MEM_NOACCESS

#define VALGRIND_MAKE_MEM_NOACCESS ( _qzz_addr,
_qzz_len )
Value:
(__extension__({unsigned long _qzz_res; \
VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0 /* default return */, \
_qzz_addr, _qzz_len, 0, 0, 0); \
_qzz_res; \
}))
@ VG_USERREQ__MAKE_MEM_NOACCESS
Definition memcheck.h:83
#define __extension__
Definition valgrind.h:4169

Definition at line 112 of file memcheck.h.

112#define VALGRIND_MAKE_MEM_NOACCESS(_qzz_addr,_qzz_len) \
113 (__extension__({unsigned long _qzz_res; \
114 VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0 /* default return */, \
115 VG_USERREQ__MAKE_MEM_NOACCESS, \
116 _qzz_addr, _qzz_len, 0, 0, 0); \
117 _qzz_res; \
118 }))

Referenced by heap_alloc_block(), heap_free_block(), heap_realloc(), init_heap(), and valgrind_make_blocks_noaccess().

◆ VALGRIND_MAKE_MEM_UNDEFINED

#define VALGRIND_MAKE_MEM_UNDEFINED ( _qzz_addr,
_qzz_len )
Value:
(__extension__({unsigned long _qzz_res; \
VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0 /* default return */, \
_qzz_addr, _qzz_len, 0, 0, 0); \
_qzz_res; \
}))
@ VG_USERREQ__MAKE_MEM_UNDEFINED
Definition memcheck.h:84

Definition at line 122 of file memcheck.h.

122#define VALGRIND_MAKE_MEM_UNDEFINED(_qzz_addr,_qzz_len) \
123 (__extension__({unsigned long _qzz_res; \
124 VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0 /* default return */, \
125 VG_USERREQ__MAKE_MEM_UNDEFINED, \
126 _qzz_addr, _qzz_len, 0, 0, 0); \
127 _qzz_res; \
128 }))

Referenced by heap_alloc_block(), and heap_free_block().

◆ VALGRIND_MAKE_MEM_DEFINED

#define VALGRIND_MAKE_MEM_DEFINED ( _qzz_addr,
_qzz_len )
Value:
(__extension__({unsigned long _qzz_res; \
VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0 /* default return */, \
_qzz_addr, _qzz_len, 0, 0, 0); \
_qzz_res; \
}))
@ VG_USERREQ__MAKE_MEM_DEFINED
Definition memcheck.h:85

Definition at line 132 of file memcheck.h.

132#define VALGRIND_MAKE_MEM_DEFINED(_qzz_addr,_qzz_len) \
133 (__extension__({unsigned long _qzz_res; \
134 VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0 /* default return */, \
135 VG_USERREQ__MAKE_MEM_DEFINED, \
136 _qzz_addr, _qzz_len, 0, 0, 0); \
137 _qzz_res; \
138 }))

Referenced by heap_realloc(), valgrind_make_blocks_defined(), and valgrind_make_blocks_noaccess().

◆ VALGRIND_MAKE_MEM_DEFINED_IF_ADDRESSABLE

#define VALGRIND_MAKE_MEM_DEFINED_IF_ADDRESSABLE ( _qzz_addr,
_qzz_len )
Value:
(__extension__({unsigned long _qzz_res; \
VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0 /* default return */, \
_qzz_addr, _qzz_len, 0, 0, 0); \
_qzz_res; \
}))
@ VG_USERREQ__MAKE_MEM_DEFINED_IF_ADDRESSABLE
Definition memcheck.h:97

Definition at line 143 of file memcheck.h.

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 /* default return */, \
146 VG_USERREQ__MAKE_MEM_DEFINED_IF_ADDRESSABLE, \
147 _qzz_addr, _qzz_len, 0, 0, 0); \
148 _qzz_res; \
149 }))

◆ VALGRIND_CREATE_BLOCK

#define VALGRIND_CREATE_BLOCK ( _qzz_addr,
_qzz_len,
_qzz_desc )
Value:
(__extension__({unsigned long _qzz_res; \
VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0 /* default return */, \
_qzz_addr, _qzz_len, _qzz_desc, \
0, 0); \
_qzz_res; \
}))
@ VG_USERREQ__CREATE_BLOCK
Definition memcheck.h:95

Definition at line 155 of file memcheck.h.

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 /* default return */, \
158 VG_USERREQ__CREATE_BLOCK, \
159 _qzz_addr, _qzz_len, _qzz_desc, \
160 0, 0); \
161 _qzz_res; \
162 }))

◆ VALGRIND_DISCARD

#define VALGRIND_DISCARD ( _qzz_blkindex)
Value:
(__extension__ ({unsigned long _qzz_res; \
VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0 /* default return */, \
0, _qzz_blkindex, 0, 0, 0); \
_qzz_res; \
}))
@ VG_USERREQ__DISCARD
Definition memcheck.h:86

Definition at line 166 of file memcheck.h.

166#define VALGRIND_DISCARD(_qzz_blkindex) \
167 (__extension__ ({unsigned long _qzz_res; \
168 VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0 /* default return */, \
169 VG_USERREQ__DISCARD, \
170 0, _qzz_blkindex, 0, 0, 0); \
171 _qzz_res; \
172 }))

◆ VALGRIND_CHECK_MEM_IS_ADDRESSABLE

#define VALGRIND_CHECK_MEM_IS_ADDRESSABLE ( _qzz_addr,
_qzz_len )
Value:
(__extension__({unsigned long _qzz_res; \
VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \
_qzz_addr, _qzz_len, 0, 0, 0); \
_qzz_res; \
}))
@ VG_USERREQ__CHECK_MEM_IS_ADDRESSABLE
Definition memcheck.h:87

Definition at line 181 of file memcheck.h.

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); \
186 _qzz_res; \
187 }))

◆ VALGRIND_CHECK_MEM_IS_DEFINED

#define VALGRIND_CHECK_MEM_IS_DEFINED ( _qzz_addr,
_qzz_len )
Value:
(__extension__({unsigned long _qzz_res; \
VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \
_qzz_addr, _qzz_len, 0, 0, 0); \
_qzz_res; \
}))
@ VG_USERREQ__CHECK_MEM_IS_DEFINED
Definition memcheck.h:88

Definition at line 193 of file memcheck.h.

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); \
198 _qzz_res; \
199 }))

◆ VALGRIND_CHECK_VALUE_IS_DEFINED

#define VALGRIND_CHECK_VALUE_IS_DEFINED ( __lvalue)
Value:
(volatile unsigned char *)&(__lvalue), \
(unsigned long)(sizeof (__lvalue)))
#define VALGRIND_CHECK_MEM_IS_DEFINED(_qzz_addr, _qzz_len)
Definition memcheck.h:193

Definition at line 206 of file memcheck.h.

206#define VALGRIND_CHECK_VALUE_IS_DEFINED(__lvalue) \
207 VALGRIND_CHECK_MEM_IS_DEFINED( \
208 (volatile unsigned char *)&(__lvalue), \
209 (unsigned long)(sizeof (__lvalue)))

◆ VALGRIND_DO_LEAK_CHECK

#define VALGRIND_DO_LEAK_CHECK
Value:
{unsigned long _qzz_res; \
VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \
0, 0, 0, 0, 0); \
}
@ VG_USERREQ__DO_LEAK_CHECK
Definition memcheck.h:89

Definition at line 213 of file memcheck.h.

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, \
217 0, 0, 0, 0, 0); \
218 }

◆ VALGRIND_DO_QUICK_LEAK_CHECK

#define VALGRIND_DO_QUICK_LEAK_CHECK
Value:
{unsigned long _qzz_res; \
VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \
1, 0, 0, 0, 0); \
}

Definition at line 221 of file memcheck.h.

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, \
225 1, 0, 0, 0, 0); \
226 }

◆ VALGRIND_COUNT_LEAKS

#define VALGRIND_COUNT_LEAKS ( leaked,
dubious,
reachable,
suppressed )
Value:
/* For safety on 64-bit platforms we assign the results to private
unsigned long variables, then assign these to the lvalues the user
specified, which works no matter what type 'leaked', 'dubious', etc
are. We also initialise '_qzz_leaked', etc because
VG_USERREQ__COUNT_LEAKS doesn't mark the values returned as
defined. */ \
{unsigned long _qzz_res; \
unsigned long _qzz_leaked = 0, _qzz_dubious = 0; \
unsigned long _qzz_reachable = 0, _qzz_suppressed = 0; \
VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \
&_qzz_leaked, &_qzz_dubious, \
&_qzz_reachable, &_qzz_suppressed, 0); \
leaked = _qzz_leaked; \
dubious = _qzz_dubious; \
reachable = _qzz_reachable; \
suppressed = _qzz_suppressed; \
}
@ VG_USERREQ__COUNT_LEAKS
Definition memcheck.h:90

Definition at line 230 of file memcheck.h.

230#define VALGRIND_COUNT_LEAKS(leaked, dubious, reachable, suppressed) \
231 /* For safety on 64-bit platforms we assign the results to private
232 unsigned long variables, then assign these to the lvalues the user
233 specified, which works no matter what type 'leaked', 'dubious', etc
234 are. We also initialise '_qzz_leaked', etc because
235 VG_USERREQ__COUNT_LEAKS doesn't mark the values returned as
236 defined. */ \
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); \

◆ VALGRIND_COUNT_LEAK_BLOCKS

#define VALGRIND_COUNT_LEAK_BLOCKS ( leaked,
dubious,
reachable,
suppressed )
Value:
/* For safety on 64-bit platforms we assign the results to private
unsigned long variables, then assign these to the lvalues the user
specified, which works no matter what type 'leaked', 'dubious', etc
are. We also initialise '_qzz_leaked', etc because
VG_USERREQ__COUNT_LEAKS doesn't mark the values returned as
defined. */ \
{unsigned long _qzz_res; \
unsigned long _qzz_leaked = 0, _qzz_dubious = 0; \
unsigned long _qzz_reachable = 0, _qzz_suppressed = 0; \
VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \
&_qzz_leaked, &_qzz_dubious, \
&_qzz_reachable, &_qzz_suppressed, 0); \
leaked = _qzz_leaked; \
dubious = _qzz_dubious; \
reachable = _qzz_reachable; \
suppressed = _qzz_suppressed; \
}
@ VG_USERREQ__COUNT_LEAK_BLOCKS
Definition memcheck.h:100

Definition at line 247 of file memcheck.h.

247 suppressed = _qzz_suppressed; \
248 }
249
250/* Return number of leaked, dubious, reachable and suppressed bytes found by
251 all previous leak checks. They must be lvalues. */
252#define VALGRIND_COUNT_LEAK_BLOCKS(leaked, dubious, reachable, suppressed) \
253 /* For safety on 64-bit platforms we assign the results to private
254 unsigned long variables, then assign these to the lvalues the user
255 specified, which works no matter what type 'leaked', 'dubious', etc
256 are. We also initialise '_qzz_leaked', etc because
257 VG_USERREQ__COUNT_LEAKS doesn't mark the values returned as
258 defined. */ \
259 {unsigned long _qzz_res; \
260 unsigned long _qzz_leaked = 0, _qzz_dubious = 0; \

◆ VALGRIND_GET_VBITS

#define VALGRIND_GET_VBITS ( zza,
zzvbits,
zznbytes )
Value:
(__extension__({unsigned long _qzz_res; \
char* czza = (char*)zza; \
char* czzvbits = (char*)zzvbits; \
VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \
czza, czzvbits, zznbytes, 0, 0 ); \
_qzz_res; \
}))
@ VG_USERREQ__GET_VBITS
Definition memcheck.h:92

Definition at line 272 of file memcheck.h.

272
273/* Get the validity data for addresses [zza..zza+zznbytes-1] and copy it
274 into the provided zzvbits array. Return values:
275 0 if not running on valgrind
276 1 success
277 2 [previously indicated unaligned arrays; these are now allowed]
278 3 if any parts of zzsrc/zzvbits are not addressable.
279 The metadata is not copied in cases 0, 2 or 3 so it should be
280 impossible to segfault your system by using this call.

◆ VALGRIND_SET_VBITS

#define VALGRIND_SET_VBITS ( zza,
zzvbits,
zznbytes )
Value:
(__extension__({unsigned int _qzz_res; \
char* czza = (char*)zza; \
char* czzvbits = (char*)zzvbits; \
VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \
czza, czzvbits, zznbytes, 0, 0 ); \
_qzz_res; \
}))
@ VG_USERREQ__SET_VBITS
Definition memcheck.h:93

Definition at line 291 of file memcheck.h.

291
292/* Set the validity data for addresses [zza..zza+zznbytes-1], copying it
293 from the provided zzvbits array. Return values:
294 0 if not running on valgrind
295 1 success
296 2 [previously indicated unaligned arrays; these are now allowed]
297 3 if any parts of zza/zzvbits are not addressable.
298 The metadata is not copied in cases 0, 2 or 3 so it should be
299 impossible to segfault your system by using this call.

Enumeration Type Documentation

◆ Vg_MemCheckClientRequest

Enumerator
VG_USERREQ__MAKE_MEM_NOACCESS 
VG_USERREQ__MAKE_MEM_UNDEFINED 
VG_USERREQ__MAKE_MEM_DEFINED 
VG_USERREQ__DISCARD 
VG_USERREQ__CHECK_MEM_IS_ADDRESSABLE 
VG_USERREQ__CHECK_MEM_IS_DEFINED 
VG_USERREQ__DO_LEAK_CHECK 
VG_USERREQ__COUNT_LEAKS 
VG_USERREQ__GET_VBITS 
VG_USERREQ__SET_VBITS 
VG_USERREQ__CREATE_BLOCK 
VG_USERREQ__MAKE_MEM_DEFINED_IF_ADDRESSABLE 
VG_USERREQ__COUNT_LEAK_BLOCKS 
_VG_USERREQ__MEMCHECK_RECORD_OVERLAP_ERROR 

Definition at line 81 of file memcheck.h.

82 {
91
94
96
98
99 /* Not next to VG_USERREQ__COUNT_LEAKS because it was added later. */
101
102 /* This is just for memcheck's internal use - don't use it */
104 = VG_USERREQ_TOOL_BASE('M','C') + 256
Vg_MemCheckClientRequest
Definition memcheck.h:82
@ _VG_USERREQ__MEMCHECK_RECORD_OVERLAP_ERROR
Definition memcheck.h:103
#define VG_USERREQ_TOOL_BASE(a, b)
Definition valgrind.h:4104

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( BSD3 )

◆ FILE_SECBOOT()

FILE_SECBOOT ( PERMITTED )