xref: /aosp_15_r20/external/cronet/base/third_party/valgrind/memcheck.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker 
2*6777b538SAndroid Build Coastguard Worker /*
3*6777b538SAndroid Build Coastguard Worker    ----------------------------------------------------------------
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker    Notice that the following BSD-style license applies to this one
6*6777b538SAndroid Build Coastguard Worker    file (memcheck.h) only.  The rest of Valgrind is licensed under the
7*6777b538SAndroid Build Coastguard Worker    terms of the GNU General Public License, version 2, unless
8*6777b538SAndroid Build Coastguard Worker    otherwise indicated.  See the COPYING file in the source
9*6777b538SAndroid Build Coastguard Worker    distribution for details.
10*6777b538SAndroid Build Coastguard Worker 
11*6777b538SAndroid Build Coastguard Worker    ----------------------------------------------------------------
12*6777b538SAndroid Build Coastguard Worker 
13*6777b538SAndroid Build Coastguard Worker    This file is part of MemCheck, a heavyweight Valgrind tool for
14*6777b538SAndroid Build Coastguard Worker    detecting memory errors.
15*6777b538SAndroid Build Coastguard Worker 
16*6777b538SAndroid Build Coastguard Worker    Copyright (C) 2000-2010 Julian Seward.  All rights reserved.
17*6777b538SAndroid Build Coastguard Worker 
18*6777b538SAndroid Build Coastguard Worker    Redistribution and use in source and binary forms, with or without
19*6777b538SAndroid Build Coastguard Worker    modification, are permitted provided that the following conditions
20*6777b538SAndroid Build Coastguard Worker    are met:
21*6777b538SAndroid Build Coastguard Worker 
22*6777b538SAndroid Build Coastguard Worker    1. Redistributions of source code must retain the above copyright
23*6777b538SAndroid Build Coastguard Worker       notice, this list of conditions and the following disclaimer.
24*6777b538SAndroid Build Coastguard Worker 
25*6777b538SAndroid Build Coastguard Worker    2. The origin of this software must not be misrepresented; you must
26*6777b538SAndroid Build Coastguard Worker       not claim that you wrote the original software.  If you use this
27*6777b538SAndroid Build Coastguard Worker       software in a product, an acknowledgment in the product
28*6777b538SAndroid Build Coastguard Worker       documentation would be appreciated but is not required.
29*6777b538SAndroid Build Coastguard Worker 
30*6777b538SAndroid Build Coastguard Worker    3. Altered source versions must be plainly marked as such, and must
31*6777b538SAndroid Build Coastguard Worker       not be misrepresented as being the original software.
32*6777b538SAndroid Build Coastguard Worker 
33*6777b538SAndroid Build Coastguard Worker    4. The name of the author may not be used to endorse or promote
34*6777b538SAndroid Build Coastguard Worker       products derived from this software without specific prior written
35*6777b538SAndroid Build Coastguard Worker       permission.
36*6777b538SAndroid Build Coastguard Worker 
37*6777b538SAndroid Build Coastguard Worker    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
38*6777b538SAndroid Build Coastguard Worker    OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
39*6777b538SAndroid Build Coastguard Worker    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
40*6777b538SAndroid Build Coastguard Worker    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
41*6777b538SAndroid Build Coastguard Worker    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
42*6777b538SAndroid Build Coastguard Worker    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
43*6777b538SAndroid Build Coastguard Worker    GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
44*6777b538SAndroid Build Coastguard Worker    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
45*6777b538SAndroid Build Coastguard Worker    WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
46*6777b538SAndroid Build Coastguard Worker    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
47*6777b538SAndroid Build Coastguard Worker    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
48*6777b538SAndroid Build Coastguard Worker 
49*6777b538SAndroid Build Coastguard Worker    ----------------------------------------------------------------
50*6777b538SAndroid Build Coastguard Worker 
51*6777b538SAndroid Build Coastguard Worker    Notice that the above BSD-style license applies to this one file
52*6777b538SAndroid Build Coastguard Worker    (memcheck.h) only.  The entire rest of Valgrind is licensed under
53*6777b538SAndroid Build Coastguard Worker    the terms of the GNU General Public License, version 2.  See the
54*6777b538SAndroid Build Coastguard Worker    COPYING file in the source distribution for details.
55*6777b538SAndroid Build Coastguard Worker 
56*6777b538SAndroid Build Coastguard Worker    ----------------------------------------------------------------
57*6777b538SAndroid Build Coastguard Worker */
58*6777b538SAndroid Build Coastguard Worker 
59*6777b538SAndroid Build Coastguard Worker 
60*6777b538SAndroid Build Coastguard Worker #ifndef __MEMCHECK_H
61*6777b538SAndroid Build Coastguard Worker #define __MEMCHECK_H
62*6777b538SAndroid Build Coastguard Worker 
63*6777b538SAndroid Build Coastguard Worker 
64*6777b538SAndroid Build Coastguard Worker /* This file is for inclusion into client (your!) code.
65*6777b538SAndroid Build Coastguard Worker 
66*6777b538SAndroid Build Coastguard Worker    You can use these macros to manipulate and query memory permissions
67*6777b538SAndroid Build Coastguard Worker    inside your own programs.
68*6777b538SAndroid Build Coastguard Worker 
69*6777b538SAndroid Build Coastguard Worker    See comment near the top of valgrind.h on how to use them.
70*6777b538SAndroid Build Coastguard Worker */
71*6777b538SAndroid Build Coastguard Worker 
72*6777b538SAndroid Build Coastguard Worker #include "valgrind.h"
73*6777b538SAndroid Build Coastguard Worker 
74*6777b538SAndroid Build Coastguard Worker /* !! ABIWARNING !! ABIWARNING !! ABIWARNING !! ABIWARNING !!
75*6777b538SAndroid Build Coastguard Worker    This enum comprises an ABI exported by Valgrind to programs
76*6777b538SAndroid Build Coastguard Worker    which use client requests.  DO NOT CHANGE THE ORDER OF THESE
77*6777b538SAndroid Build Coastguard Worker    ENTRIES, NOR DELETE ANY -- add new ones at the end. */
78*6777b538SAndroid Build Coastguard Worker typedef
79*6777b538SAndroid Build Coastguard Worker    enum {
80*6777b538SAndroid Build Coastguard Worker       VG_USERREQ__MAKE_MEM_NOACCESS = VG_USERREQ_TOOL_BASE('M','C'),
81*6777b538SAndroid Build Coastguard Worker       VG_USERREQ__MAKE_MEM_UNDEFINED,
82*6777b538SAndroid Build Coastguard Worker       VG_USERREQ__MAKE_MEM_DEFINED,
83*6777b538SAndroid Build Coastguard Worker       VG_USERREQ__DISCARD,
84*6777b538SAndroid Build Coastguard Worker       VG_USERREQ__CHECK_MEM_IS_ADDRESSABLE,
85*6777b538SAndroid Build Coastguard Worker       VG_USERREQ__CHECK_MEM_IS_DEFINED,
86*6777b538SAndroid Build Coastguard Worker       VG_USERREQ__DO_LEAK_CHECK,
87*6777b538SAndroid Build Coastguard Worker       VG_USERREQ__COUNT_LEAKS,
88*6777b538SAndroid Build Coastguard Worker 
89*6777b538SAndroid Build Coastguard Worker       VG_USERREQ__GET_VBITS,
90*6777b538SAndroid Build Coastguard Worker       VG_USERREQ__SET_VBITS,
91*6777b538SAndroid Build Coastguard Worker 
92*6777b538SAndroid Build Coastguard Worker       VG_USERREQ__CREATE_BLOCK,
93*6777b538SAndroid Build Coastguard Worker 
94*6777b538SAndroid Build Coastguard Worker       VG_USERREQ__MAKE_MEM_DEFINED_IF_ADDRESSABLE,
95*6777b538SAndroid Build Coastguard Worker 
96*6777b538SAndroid Build Coastguard Worker       /* Not next to VG_USERREQ__COUNT_LEAKS because it was added later. */
97*6777b538SAndroid Build Coastguard Worker       VG_USERREQ__COUNT_LEAK_BLOCKS,
98*6777b538SAndroid Build Coastguard Worker 
99*6777b538SAndroid Build Coastguard Worker       /* This is just for memcheck's internal use - don't use it */
100*6777b538SAndroid Build Coastguard Worker       _VG_USERREQ__MEMCHECK_RECORD_OVERLAP_ERROR
101*6777b538SAndroid Build Coastguard Worker          = VG_USERREQ_TOOL_BASE('M','C') + 256
102*6777b538SAndroid Build Coastguard Worker    } Vg_MemCheckClientRequest;
103*6777b538SAndroid Build Coastguard Worker 
104*6777b538SAndroid Build Coastguard Worker 
105*6777b538SAndroid Build Coastguard Worker 
106*6777b538SAndroid Build Coastguard Worker /* Client-code macros to manipulate the state of memory. */
107*6777b538SAndroid Build Coastguard Worker 
108*6777b538SAndroid Build Coastguard Worker /* Mark memory at _qzz_addr as unaddressable for _qzz_len bytes. */
109*6777b538SAndroid Build Coastguard Worker #define VALGRIND_MAKE_MEM_NOACCESS(_qzz_addr,_qzz_len)           \
110*6777b538SAndroid Build Coastguard Worker     VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */,      \
111*6777b538SAndroid Build Coastguard Worker                             VG_USERREQ__MAKE_MEM_NOACCESS,       \
112*6777b538SAndroid Build Coastguard Worker                             (_qzz_addr), (_qzz_len), 0, 0, 0)
113*6777b538SAndroid Build Coastguard Worker 
114*6777b538SAndroid Build Coastguard Worker /* Similarly, mark memory at _qzz_addr as addressable but undefined
115*6777b538SAndroid Build Coastguard Worker    for _qzz_len bytes. */
116*6777b538SAndroid Build Coastguard Worker #define VALGRIND_MAKE_MEM_UNDEFINED(_qzz_addr,_qzz_len)          \
117*6777b538SAndroid Build Coastguard Worker     VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */,      \
118*6777b538SAndroid Build Coastguard Worker                             VG_USERREQ__MAKE_MEM_UNDEFINED,      \
119*6777b538SAndroid Build Coastguard Worker                             (_qzz_addr), (_qzz_len), 0, 0, 0)
120*6777b538SAndroid Build Coastguard Worker 
121*6777b538SAndroid Build Coastguard Worker /* Similarly, mark memory at _qzz_addr as addressable and defined
122*6777b538SAndroid Build Coastguard Worker    for _qzz_len bytes. */
123*6777b538SAndroid Build Coastguard Worker #define VALGRIND_MAKE_MEM_DEFINED(_qzz_addr,_qzz_len)            \
124*6777b538SAndroid Build Coastguard Worker     VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */,      \
125*6777b538SAndroid Build Coastguard Worker                             VG_USERREQ__MAKE_MEM_DEFINED,        \
126*6777b538SAndroid Build Coastguard Worker                             (_qzz_addr), (_qzz_len), 0, 0, 0)
127*6777b538SAndroid Build Coastguard Worker 
128*6777b538SAndroid Build Coastguard Worker /* Similar to VALGRIND_MAKE_MEM_DEFINED except that addressability is
129*6777b538SAndroid Build Coastguard Worker    not altered: bytes which are addressable are marked as defined,
130*6777b538SAndroid Build Coastguard Worker    but those which are not addressable are left unchanged. */
131*6777b538SAndroid Build Coastguard Worker #define VALGRIND_MAKE_MEM_DEFINED_IF_ADDRESSABLE(_qzz_addr,_qzz_len)     \
132*6777b538SAndroid Build Coastguard Worker     VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */,              \
133*6777b538SAndroid Build Coastguard Worker                             VG_USERREQ__MAKE_MEM_DEFINED_IF_ADDRESSABLE, \
134*6777b538SAndroid Build Coastguard Worker                             (_qzz_addr), (_qzz_len), 0, 0, 0)
135*6777b538SAndroid Build Coastguard Worker 
136*6777b538SAndroid Build Coastguard Worker /* Create a block-description handle.  The description is an ascii
137*6777b538SAndroid Build Coastguard Worker    string which is included in any messages pertaining to addresses
138*6777b538SAndroid Build Coastguard Worker    within the specified memory range.  Has no other effect on the
139*6777b538SAndroid Build Coastguard Worker    properties of the memory range. */
140*6777b538SAndroid Build Coastguard Worker #define VALGRIND_CREATE_BLOCK(_qzz_addr,_qzz_len, _qzz_desc)	   \
141*6777b538SAndroid Build Coastguard Worker     VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */,        \
142*6777b538SAndroid Build Coastguard Worker                             VG_USERREQ__CREATE_BLOCK,              \
143*6777b538SAndroid Build Coastguard Worker                             (_qzz_addr), (_qzz_len), (_qzz_desc),  \
144*6777b538SAndroid Build Coastguard Worker                             0, 0)
145*6777b538SAndroid Build Coastguard Worker 
146*6777b538SAndroid Build Coastguard Worker /* Discard a block-description-handle. Returns 1 for an
147*6777b538SAndroid Build Coastguard Worker    invalid handle, 0 for a valid handle. */
148*6777b538SAndroid Build Coastguard Worker #define VALGRIND_DISCARD(_qzz_blkindex)                          \
149*6777b538SAndroid Build Coastguard Worker     VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */,      \
150*6777b538SAndroid Build Coastguard Worker                             VG_USERREQ__DISCARD,                 \
151*6777b538SAndroid Build Coastguard Worker                             0, (_qzz_blkindex), 0, 0, 0)
152*6777b538SAndroid Build Coastguard Worker 
153*6777b538SAndroid Build Coastguard Worker 
154*6777b538SAndroid Build Coastguard Worker /* Client-code macros to check the state of memory. */
155*6777b538SAndroid Build Coastguard Worker 
156*6777b538SAndroid Build Coastguard Worker /* Check that memory at _qzz_addr is addressable for _qzz_len bytes.
157*6777b538SAndroid Build Coastguard Worker    If suitable addressibility is not established, Valgrind prints an
158*6777b538SAndroid Build Coastguard Worker    error message and returns the address of the first offending byte.
159*6777b538SAndroid Build Coastguard Worker    Otherwise it returns zero. */
160*6777b538SAndroid Build Coastguard Worker #define VALGRIND_CHECK_MEM_IS_ADDRESSABLE(_qzz_addr,_qzz_len)      \
161*6777b538SAndroid Build Coastguard Worker     VALGRIND_DO_CLIENT_REQUEST_EXPR(0,                             \
162*6777b538SAndroid Build Coastguard Worker                             VG_USERREQ__CHECK_MEM_IS_ADDRESSABLE,  \
163*6777b538SAndroid Build Coastguard Worker                             (_qzz_addr), (_qzz_len), 0, 0, 0)
164*6777b538SAndroid Build Coastguard Worker 
165*6777b538SAndroid Build Coastguard Worker /* Check that memory at _qzz_addr is addressable and defined for
166*6777b538SAndroid Build Coastguard Worker    _qzz_len bytes.  If suitable addressibility and definedness are not
167*6777b538SAndroid Build Coastguard Worker    established, Valgrind prints an error message and returns the
168*6777b538SAndroid Build Coastguard Worker    address of the first offending byte.  Otherwise it returns zero. */
169*6777b538SAndroid Build Coastguard Worker #define VALGRIND_CHECK_MEM_IS_DEFINED(_qzz_addr,_qzz_len)        \
170*6777b538SAndroid Build Coastguard Worker     VALGRIND_DO_CLIENT_REQUEST_EXPR(0,                           \
171*6777b538SAndroid Build Coastguard Worker                             VG_USERREQ__CHECK_MEM_IS_DEFINED,    \
172*6777b538SAndroid Build Coastguard Worker                             (_qzz_addr), (_qzz_len), 0, 0, 0)
173*6777b538SAndroid Build Coastguard Worker 
174*6777b538SAndroid Build Coastguard Worker /* Use this macro to force the definedness and addressibility of an
175*6777b538SAndroid Build Coastguard Worker    lvalue to be checked.  If suitable addressibility and definedness
176*6777b538SAndroid Build Coastguard Worker    are not established, Valgrind prints an error message and returns
177*6777b538SAndroid Build Coastguard Worker    the address of the first offending byte.  Otherwise it returns
178*6777b538SAndroid Build Coastguard Worker    zero. */
179*6777b538SAndroid Build Coastguard Worker #define VALGRIND_CHECK_VALUE_IS_DEFINED(__lvalue)                \
180*6777b538SAndroid Build Coastguard Worker    VALGRIND_CHECK_MEM_IS_DEFINED(                                \
181*6777b538SAndroid Build Coastguard Worker       (volatile unsigned char *)&(__lvalue),                     \
182*6777b538SAndroid Build Coastguard Worker                       (unsigned long)(sizeof (__lvalue)))
183*6777b538SAndroid Build Coastguard Worker 
184*6777b538SAndroid Build Coastguard Worker 
185*6777b538SAndroid Build Coastguard Worker /* Do a full memory leak check (like --leak-check=full) mid-execution. */
186*6777b538SAndroid Build Coastguard Worker #define VALGRIND_DO_LEAK_CHECK                                   \
187*6777b538SAndroid Build Coastguard Worker    {unsigned long _qzz_res;                                      \
188*6777b538SAndroid Build Coastguard Worker     VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                      \
189*6777b538SAndroid Build Coastguard Worker                             VG_USERREQ__DO_LEAK_CHECK,           \
190*6777b538SAndroid Build Coastguard Worker                             0, 0, 0, 0, 0);                      \
191*6777b538SAndroid Build Coastguard Worker    }
192*6777b538SAndroid Build Coastguard Worker 
193*6777b538SAndroid Build Coastguard Worker /* Do a summary memory leak check (like --leak-check=summary) mid-execution. */
194*6777b538SAndroid Build Coastguard Worker #define VALGRIND_DO_QUICK_LEAK_CHECK				 \
195*6777b538SAndroid Build Coastguard Worker    {unsigned long _qzz_res;                                      \
196*6777b538SAndroid Build Coastguard Worker     VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                      \
197*6777b538SAndroid Build Coastguard Worker                             VG_USERREQ__DO_LEAK_CHECK,           \
198*6777b538SAndroid Build Coastguard Worker                             1, 0, 0, 0, 0);                      \
199*6777b538SAndroid Build Coastguard Worker    }
200*6777b538SAndroid Build Coastguard Worker 
201*6777b538SAndroid Build Coastguard Worker /* Return number of leaked, dubious, reachable and suppressed bytes found by
202*6777b538SAndroid Build Coastguard Worker    all previous leak checks.  They must be lvalues.  */
203*6777b538SAndroid Build Coastguard Worker #define VALGRIND_COUNT_LEAKS(leaked, dubious, reachable, suppressed)     \
204*6777b538SAndroid Build Coastguard Worker    /* For safety on 64-bit platforms we assign the results to private
205*6777b538SAndroid Build Coastguard Worker       unsigned long variables, then assign these to the lvalues the user
206*6777b538SAndroid Build Coastguard Worker       specified, which works no matter what type 'leaked', 'dubious', etc
207*6777b538SAndroid Build Coastguard Worker       are.  We also initialise '_qzz_leaked', etc because
208*6777b538SAndroid Build Coastguard Worker       VG_USERREQ__COUNT_LEAKS doesn't mark the values returned as
209*6777b538SAndroid Build Coastguard Worker       defined. */                                                        \
210*6777b538SAndroid Build Coastguard Worker    {unsigned long _qzz_res;                                              \
211*6777b538SAndroid Build Coastguard Worker     unsigned long _qzz_leaked    = 0, _qzz_dubious    = 0;               \
212*6777b538SAndroid Build Coastguard Worker     unsigned long _qzz_reachable = 0, _qzz_suppressed = 0;               \
213*6777b538SAndroid Build Coastguard Worker     VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                              \
214*6777b538SAndroid Build Coastguard Worker                                VG_USERREQ__COUNT_LEAKS,                  \
215*6777b538SAndroid Build Coastguard Worker                                &_qzz_leaked, &_qzz_dubious,              \
216*6777b538SAndroid Build Coastguard Worker                                &_qzz_reachable, &_qzz_suppressed, 0);    \
217*6777b538SAndroid Build Coastguard Worker     leaked     = _qzz_leaked;                                            \
218*6777b538SAndroid Build Coastguard Worker     dubious    = _qzz_dubious;                                           \
219*6777b538SAndroid Build Coastguard Worker     reachable  = _qzz_reachable;                                         \
220*6777b538SAndroid Build Coastguard Worker     suppressed = _qzz_suppressed;                                        \
221*6777b538SAndroid Build Coastguard Worker    }
222*6777b538SAndroid Build Coastguard Worker 
223*6777b538SAndroid Build Coastguard Worker /* Return number of leaked, dubious, reachable and suppressed bytes found by
224*6777b538SAndroid Build Coastguard Worker    all previous leak checks.  They must be lvalues.  */
225*6777b538SAndroid Build Coastguard Worker #define VALGRIND_COUNT_LEAK_BLOCKS(leaked, dubious, reachable, suppressed) \
226*6777b538SAndroid Build Coastguard Worker    /* For safety on 64-bit platforms we assign the results to private
227*6777b538SAndroid Build Coastguard Worker       unsigned long variables, then assign these to the lvalues the user
228*6777b538SAndroid Build Coastguard Worker       specified, which works no matter what type 'leaked', 'dubious', etc
229*6777b538SAndroid Build Coastguard Worker       are.  We also initialise '_qzz_leaked', etc because
230*6777b538SAndroid Build Coastguard Worker       VG_USERREQ__COUNT_LEAKS doesn't mark the values returned as
231*6777b538SAndroid Build Coastguard Worker       defined. */                                                        \
232*6777b538SAndroid Build Coastguard Worker    {unsigned long _qzz_res;                                              \
233*6777b538SAndroid Build Coastguard Worker     unsigned long _qzz_leaked    = 0, _qzz_dubious    = 0;               \
234*6777b538SAndroid Build Coastguard Worker     unsigned long _qzz_reachable = 0, _qzz_suppressed = 0;               \
235*6777b538SAndroid Build Coastguard Worker     VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                              \
236*6777b538SAndroid Build Coastguard Worker                                VG_USERREQ__COUNT_LEAK_BLOCKS,            \
237*6777b538SAndroid Build Coastguard Worker                                &_qzz_leaked, &_qzz_dubious,              \
238*6777b538SAndroid Build Coastguard Worker                                &_qzz_reachable, &_qzz_suppressed, 0);    \
239*6777b538SAndroid Build Coastguard Worker     leaked     = _qzz_leaked;                                            \
240*6777b538SAndroid Build Coastguard Worker     dubious    = _qzz_dubious;                                           \
241*6777b538SAndroid Build Coastguard Worker     reachable  = _qzz_reachable;                                         \
242*6777b538SAndroid Build Coastguard Worker     suppressed = _qzz_suppressed;                                        \
243*6777b538SAndroid Build Coastguard Worker    }
244*6777b538SAndroid Build Coastguard Worker 
245*6777b538SAndroid Build Coastguard Worker 
246*6777b538SAndroid Build Coastguard Worker /* Get the validity data for addresses [zza..zza+zznbytes-1] and copy it
247*6777b538SAndroid Build Coastguard Worker    into the provided zzvbits array.  Return values:
248*6777b538SAndroid Build Coastguard Worker       0   if not running on valgrind
249*6777b538SAndroid Build Coastguard Worker       1   success
250*6777b538SAndroid Build Coastguard Worker       2   [previously indicated unaligned arrays;  these are now allowed]
251*6777b538SAndroid Build Coastguard Worker       3   if any parts of zzsrc/zzvbits are not addressable.
252*6777b538SAndroid Build Coastguard Worker    The metadata is not copied in cases 0, 2 or 3 so it should be
253*6777b538SAndroid Build Coastguard Worker    impossible to segfault your system by using this call.
254*6777b538SAndroid Build Coastguard Worker */
255*6777b538SAndroid Build Coastguard Worker #define VALGRIND_GET_VBITS(zza,zzvbits,zznbytes)                \
256*6777b538SAndroid Build Coastguard Worker     VALGRIND_DO_CLIENT_REQUEST_EXPR(0,                          \
257*6777b538SAndroid Build Coastguard Worker                                     VG_USERREQ__GET_VBITS,      \
258*6777b538SAndroid Build Coastguard Worker                                     (const char*)(zza),         \
259*6777b538SAndroid Build Coastguard Worker                                     (char*)(zzvbits),           \
260*6777b538SAndroid Build Coastguard Worker                                     (zznbytes), 0, 0)
261*6777b538SAndroid Build Coastguard Worker 
262*6777b538SAndroid Build Coastguard Worker /* Set the validity data for addresses [zza..zza+zznbytes-1], copying it
263*6777b538SAndroid Build Coastguard Worker    from the provided zzvbits array.  Return values:
264*6777b538SAndroid Build Coastguard Worker       0   if not running on valgrind
265*6777b538SAndroid Build Coastguard Worker       1   success
266*6777b538SAndroid Build Coastguard Worker       2   [previously indicated unaligned arrays;  these are now allowed]
267*6777b538SAndroid Build Coastguard Worker       3   if any parts of zza/zzvbits are not addressable.
268*6777b538SAndroid Build Coastguard Worker    The metadata is not copied in cases 0, 2 or 3 so it should be
269*6777b538SAndroid Build Coastguard Worker    impossible to segfault your system by using this call.
270*6777b538SAndroid Build Coastguard Worker */
271*6777b538SAndroid Build Coastguard Worker #define VALGRIND_SET_VBITS(zza,zzvbits,zznbytes)                \
272*6777b538SAndroid Build Coastguard Worker     VALGRIND_DO_CLIENT_REQUEST_EXPR(0,                          \
273*6777b538SAndroid Build Coastguard Worker                                     VG_USERREQ__SET_VBITS,      \
274*6777b538SAndroid Build Coastguard Worker                                     (const char*)(zza),         \
275*6777b538SAndroid Build Coastguard Worker                                     (const char*)(zzvbits),     \
276*6777b538SAndroid Build Coastguard Worker                                     (zznbytes), 0, 0 )
277*6777b538SAndroid Build Coastguard Worker 
278*6777b538SAndroid Build Coastguard Worker #endif
279*6777b538SAndroid Build Coastguard Worker 
280