1 2/*--------------------------------------------------------------------*/ 3/*--- Ptrcheck: a pointer-use checker. ---*/ 4/*--- Exports for heap access checking. ---*/ 5/*--- h_main.h ---*/ 6/*--------------------------------------------------------------------*/ 7 8/* 9 This file is part of Ptrcheck, a Valgrind tool for checking pointer 10 use in programs. 11 12 Copyright (C) 2003-2013 Nicholas Nethercote 13 njn@valgrind.org 14 Copyright (C) 2008-2013 OpenWorks Ltd 15 info@open-works.co.uk 16 17 This program is free software; you can redistribute it and/or 18 modify it under the terms of the GNU General Public License as 19 published by the Free Software Foundation; either version 2 of the 20 License, or (at your option) any later version. 21 22 This program is distributed in the hope that it will be useful, but 23 WITHOUT ANY WARRANTY; without even the implied warranty of 24 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 25 General Public License for more details. 26 27 You should have received a copy of the GNU General Public License 28 along with this program; if not, write to the Free Software 29 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 30 02111-1307, USA. 31 32 The GNU General Public License is contained in the file COPYING. 33*/ 34 35#ifndef __H_MAIN_H 36 37#define __H_MAIN_H 38 39// Choose values that couldn't possibly be pointers 40#define NONPTR ((Seg*)0xA1) 41#define UNKNOWN ((Seg*)0xB2) 42#define BOTTOM ((Seg*)0xC3) 43 44static inline Bool is_known_segment(Seg* teg) { 45 return (UNKNOWN != teg && BOTTOM != teg && NONPTR != teg); 46 // better? teg <= BOTTOM 47} 48 49void Seg__cmp(Seg* seg, Addr a, Int* cmp, UWord* n); 50Bool Seg__is_freed(Seg* seg); 51ExeContext* Seg__where(Seg* seg); 52SizeT Seg__size(Seg* seg); 53Addr Seg__addr(Seg* seg); 54 55void h_pre_clo_init ( void ); 56void h_post_clo_init ( void ); 57void h_fini ( Int exitcode ); 58 59void* h_replace_malloc ( ThreadId tid, SizeT n ); 60void* h_replace___builtin_new ( ThreadId tid, SizeT n ); 61void* h_replace___builtin_vec_new ( ThreadId tid, SizeT n ); 62void* h_replace_memalign ( ThreadId tid, SizeT align, SizeT n ); 63void* h_replace_calloc ( ThreadId tid, SizeT nmemb, SizeT size1 ); 64void h_replace_free ( ThreadId tid, void* p ); 65void h_replace___builtin_delete ( ThreadId tid, void* p ); 66void h_replace___builtin_vec_delete ( ThreadId tid, void* p ); 67void* h_replace_realloc ( ThreadId tid, void* p_old, SizeT new_size ); 68SizeT h_replace_malloc_usable_size ( ThreadId tid, void* p ); 69 70/* Note that this also does the sg_ instrumentation. */ 71IRSB* h_instrument ( VgCallbackClosure* closure, 72 IRSB* sbIn, 73 const VexGuestLayout* layout, 74 const VexGuestExtents* vge, 75 const VexArchInfo* archinfo_host, 76 IRType gWordTy, IRType hWordTy ); 77 78#endif 79 80/*--------------------------------------------------------------------*/ 81/*--- end h_main.h ---*/ 82/*--------------------------------------------------------------------*/ 83