Home | History | Annotate | Download | only in exp-ptrcheck
      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