diff options
author | njn25 <njn25@a5019735-40e9-0310-863c-91ae7b9d1cf9> | 2002-09-23 09:36:25 +0000 |
---|---|---|
committer | njn25 <njn25@a5019735-40e9-0310-863c-91ae7b9d1cf9> | 2002-09-23 09:36:25 +0000 |
commit | e49d8e7dfd3a9c96feb9935b5920973dfc0b170a (patch) | |
tree | c593e3093e1c55cfa3dd5e0c9a67d3ecad5b8451 /include/valgrind.h | |
parent | bcd3ed35562377298c4facd543531e11ac2b06c5 (diff) | |
download | valgrind-e49d8e7dfd3a9c96feb9935b5920973dfc0b170a.tar.gz |
Files updated, added and removed in order to turn the ERASER branch into HEAD
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1086 a5019735-40e9-0310-863c-91ae7b9d1cf9
Diffstat (limited to 'include/valgrind.h')
-rw-r--r-- | include/valgrind.h | 200 |
1 files changed, 54 insertions, 146 deletions
diff --git a/include/valgrind.h b/include/valgrind.h index 5a819c78a..fe880dbb1 100644 --- a/include/valgrind.h +++ b/include/valgrind.h @@ -1,27 +1,58 @@ /* + ---------------------------------------------------------------- + + Notice that the following BSD-style license applies to this one + file (valgrind.h) only. The entire rest of Valgrind is licensed + under the terms of the GNU General Public License, version 2. See + the COPYING file in the source distribution for details. + + ---------------------------------------------------------------- + This file is part of Valgrind, an x86 protected-mode emulator designed for debugging and profiling binaries on x86-Unixes. - Copyright (C) 2000-2002 Julian Seward - jseward@acm.org + Copyright (C) 2000-2002 Julian Seward. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. + 3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + 4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307, USA. + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - The GNU General Public License is contained in the file LICENSE. + ---------------------------------------------------------------- + + Notice that the above BSD-style license applies to this one file + (valgrind.h) only. The entire rest of Valgrind is licensed under + the terms of the GNU General Public License, version 2. See the + COPYING file in the source distribution for details. + + ---------------------------------------------------------------- */ @@ -31,8 +62,8 @@ /* This file is for inclusion into client (your!) code. - You can use these macros to manipulate and query memory permissions - inside your own programs. + You can use these macros to manipulate and query Valgrind's + execution inside your own programs. The resulting executables will still run without Valgrind, just a little bit more slowly than they otherwise would, but otherwise @@ -84,121 +115,14 @@ /* Some request codes. There are many more of these, but most are not exposed to end-user view. These are the public ones, all of the - form 0x1000 + small_number. + form 0x1000 + small_number. */ -#define VG_USERREQ__MAKE_NOACCESS 0x1001 -#define VG_USERREQ__MAKE_WRITABLE 0x1002 -#define VG_USERREQ__MAKE_READABLE 0x1003 -#define VG_USERREQ__DISCARD 0x1004 -#define VG_USERREQ__CHECK_WRITABLE 0x1005 -#define VG_USERREQ__CHECK_READABLE 0x1006 -#define VG_USERREQ__MAKE_NOACCESS_STACK 0x1007 -#define VG_USERREQ__RUNNING_ON_VALGRIND 0x1008 -#define VG_USERREQ__DO_LEAK_CHECK 0x1009 /* untested */ -#define VG_USERREQ__DISCARD_TRANSLATIONS 0x100A - - -/* Client-code macros to manipulate the state of memory. */ - -/* Mark memory at _qzz_addr as unaddressible and undefined for - _qzz_len bytes. Returns an int handle pertaining to the block - descriptions Valgrind will use in subsequent error messages. */ -#define VALGRIND_MAKE_NOACCESS(_qzz_addr,_qzz_len) \ - ({unsigned int _qzz_res; \ - VALGRIND_MAGIC_SEQUENCE(_qzz_res, 0 /* default return */, \ - VG_USERREQ__MAKE_NOACCESS, \ - _qzz_addr, _qzz_len, 0, 0); \ - _qzz_res; \ - }) - -/* Similarly, mark memory at _qzz_addr as addressible but undefined - for _qzz_len bytes. */ -#define VALGRIND_MAKE_WRITABLE(_qzz_addr,_qzz_len) \ - ({unsigned int _qzz_res; \ - VALGRIND_MAGIC_SEQUENCE(_qzz_res, 0 /* default return */, \ - VG_USERREQ__MAKE_WRITABLE, \ - _qzz_addr, _qzz_len, 0, 0); \ - _qzz_res; \ - }) - -/* Similarly, mark memory at _qzz_addr as addressible and defined - for _qzz_len bytes. */ -#define VALGRIND_MAKE_READABLE(_qzz_addr,_qzz_len) \ - ({unsigned int _qzz_res; \ - VALGRIND_MAGIC_SEQUENCE(_qzz_res, 0 /* default return */, \ - VG_USERREQ__MAKE_READABLE, \ - _qzz_addr, _qzz_len, 0, 0); \ - _qzz_res; \ - }) - -/* Discard a block-description-handle obtained from the above three - macros. After this, Valgrind will no longer be able to relate - addressing errors to the user-defined block associated with the - handle. The permissions settings associated with the handle remain - in place. Returns 1 for an invalid handle, 0 for a valid - handle. */ -#define VALGRIND_DISCARD(_qzz_blkindex) \ - ({unsigned int _qzz_res; \ - VALGRIND_MAGIC_SEQUENCE(_qzz_res, 0 /* default return */, \ - VG_USERREQ__DISCARD, \ - 0, _qzz_blkindex, 0, 0); \ - _qzz_res; \ - }) - - - -/* Client-code macros to check the state of memory. */ - -/* Check that memory at _qzz_addr is addressible for _qzz_len bytes. - If suitable addressibility is not established, Valgrind prints an - error message and returns the address of the first offending byte. - Otherwise it returns zero. */ -#define VALGRIND_CHECK_WRITABLE(_qzz_addr,_qzz_len) \ - ({unsigned int _qzz_res; \ - VALGRIND_MAGIC_SEQUENCE(_qzz_res, 0, \ - VG_USERREQ__CHECK_WRITABLE, \ - _qzz_addr, _qzz_len, 0, 0); \ - _qzz_res; \ - }) - -/* Check that memory at _qzz_addr is addressible and defined for - _qzz_len bytes. If suitable addressibility and definedness are not - established, Valgrind prints an error message and returns the - address of the first offending byte. Otherwise it returns zero. */ -#define VALGRIND_CHECK_READABLE(_qzz_addr,_qzz_len) \ - ({unsigned int _qzz_res; \ - VALGRIND_MAGIC_SEQUENCE(_qzz_res, 0, \ - VG_USERREQ__CHECK_READABLE, \ - _qzz_addr, _qzz_len, 0, 0); \ - _qzz_res; \ - }) - - -/* Use this macro to force the definedness and addressibility of a - value to be checked. If suitable addressibility and definedness - are not established, Valgrind prints an error message and returns - the address of the first offending byte. Otherwise it returns - zero. */ -#define VALGRIND_CHECK_DEFINED(__lvalue) \ - (void) \ - VALGRIND_CHECK_READABLE( \ - (volatile unsigned char *)&(__lvalue), \ - (unsigned int)(sizeof (__lvalue))) - - - -/* Mark memory, intended to be on the client's stack, at _qzz_addr as - unaddressible and undefined for _qzz_len bytes. Does not return a - value. The record associated with this setting will be - automatically removed by Valgrind when the containing routine - exits. */ -#define VALGRIND_MAKE_NOACCESS_STACK(_qzz_addr,_qzz_len) \ - {unsigned int _qzz_res; \ - VALGRIND_MAGIC_SEQUENCE(_qzz_res, 0, \ - VG_USERREQ__MAKE_NOACCESS_STACK, \ - _qzz_addr, _qzz_len, 0, 0); \ - } +typedef + enum { VG_USERREQ__RUNNING_ON_VALGRIND = 0x1001, + VG_USERREQ__DISCARD_TRANSLATIONS, + VG_USERREQ__FINAL_DUMMY_CLIENT_REQUEST, + } Vg_ClientRequest; /* Returns 1 if running on Valgrind, 0 if running on the real CPU. @@ -212,22 +136,6 @@ }) -/* Mark memory, intended to be on the client's stack, at _qzz_addr as - unaddressible and undefined for _qzz_len bytes. Does not return a - value. The record associated with this setting will be - automatically removed by Valgrind when the containing routine - exits. - - Currently implemented but untested. -*/ -#define VALGRIND_DO_LEAK_CHECK \ - {unsigned int _qzz_res; \ - VALGRIND_MAGIC_SEQUENCE(_qzz_res, 0, \ - VG_USERREQ__DO_LEAK_CHECK, \ - 0, 0, 0, 0); \ - } - - /* Discard translation of code in the range [_qzz_addr .. _qzz_addr + _qzz_len - 1]. Useful if you are debugging a JITter or some such, since it provides a way to make sure valgrind will retranslate the |