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