Home | History | Annotate | Download | only in exp-sgcheck
      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 (at) valgrind.org
     14    Copyright (C) 2008-2013 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 /* Note that this also does the sg_ instrumentation. */
     71 IRSB* h_instrument ( VgCallbackClosure* closure,
     72                      IRSB* sbIn,
     73                      VexGuestLayout* layout,
     74                      VexGuestExtents* vge,
     75                      VexArchInfo* archinfo_host,
     76                      IRType gWordTy, IRType hWordTy );
     77 
     78 #endif
     79 
     80 /*--------------------------------------------------------------------*/
     81 /*--- end                                                 h_main.h ---*/
     82 /*--------------------------------------------------------------------*/
     83