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