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-2010 Nicholas Nethercote 13 njn (at) valgrind.org 14 Copyright (C) 2008-2010 OpenWorks Ltd 15 info (at) 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 44 static inline Bool is_known_segment(Seg* teg) { 45 return (UNKNOWN != teg && BOTTOM != teg && NONPTR != teg); 46 // better? teg <= BOTTOM 47 } 48 49 void Seg__cmp(Seg* seg, Addr a, Int* cmp, UWord* n); 50 Bool Seg__is_freed(Seg* seg); 51 ExeContext* Seg__where(Seg* seg); 52 SizeT Seg__size(Seg* seg); 53 Addr Seg__addr(Seg* seg); 54 55 void h_pre_clo_init ( void ); 56 void h_post_clo_init ( void ); 57 void h_fini ( Int exitcode ); 58 59 void* h_replace_malloc ( ThreadId tid, SizeT n ); 60 void* h_replace___builtin_new ( ThreadId tid, SizeT n ); 61 void* h_replace___builtin_vec_new ( ThreadId tid, SizeT n ); 62 void* h_replace_memalign ( ThreadId tid, SizeT align, SizeT n ); 63 void* h_replace_calloc ( ThreadId tid, SizeT nmemb, SizeT size1 ); 64 void h_replace_free ( ThreadId tid, void* p ); 65 void h_replace___builtin_delete ( ThreadId tid, void* p ); 66 void h_replace___builtin_vec_delete ( ThreadId tid, void* p ); 67 void* h_replace_realloc ( ThreadId tid, void* p_old, SizeT new_size ); 68 SizeT h_replace_malloc_usable_size ( ThreadId tid, void* p ); 69 70 void h_new_mem_startup( Addr a, SizeT len, 71 Bool rr, Bool ww, Bool xx, ULong di_handle ); 72 void h_new_mem_mmap( Addr a, SizeT len, 73 Bool rr, Bool ww, Bool xx, ULong di_handle ); 74 void h_die_mem_munmap( Addr a, SizeT len ); 75 void h_pre_mem_access ( CorePart part, ThreadId tid, Char* s, 76 Addr base, SizeT size ); 77 void h_pre_mem_read_asciiz ( CorePart part, ThreadId tid, 78 Char* s, Addr lo ); 79 80 void h_post_reg_write_demux ( CorePart part, ThreadId tid, 81 PtrdiffT guest_state_offset, SizeT size); 82 void h_post_reg_write_clientcall(ThreadId tid, PtrdiffT guest_state_offset, 83 SizeT size, Addr f ); 84 85 void h_pre_syscall ( ThreadId tid, UInt syscallno, 86 UWord* args, UInt nArgs ); 87 void h_post_syscall ( ThreadId tid, UInt syscallno, 88 UWord* args, UInt nArgs, SysRes res ); 89 90 /* Note that this also does the sg_ instrumentation. */ 91 IRSB* h_instrument ( VgCallbackClosure* closure, 92 IRSB* sbIn, 93 VexGuestLayout* layout, 94 VexGuestExtents* vge, 95 IRType gWordTy, IRType hWordTy ); 96 97 #endif 98 99 /*--------------------------------------------------------------------*/ 100 /*--- end h_main.h ---*/ 101 /*--------------------------------------------------------------------*/ 102