• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /*--------------------------------------------------------------------*/
3 /*--- The translation table and cache.                             ---*/
4 /*---                                          pub_core_transtab.h ---*/
5 /*--------------------------------------------------------------------*/
6 
7 /*
8    This file is part of Valgrind, a dynamic binary instrumentation
9    framework.
10 
11    Copyright (C) 2000-2011 Julian Seward
12       jseward@acm.org
13 
14    This program is free software; you can redistribute it and/or
15    modify it under the terms of the GNU General Public License as
16    published by the Free Software Foundation; either version 2 of the
17    License, or (at your option) any later version.
18 
19    This program is distributed in the hope that it will be useful, but
20    WITHOUT ANY WARRANTY; without even the implied warranty of
21    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
22    General Public License for more details.
23 
24    You should have received a copy of the GNU General Public License
25    along with this program; if not, write to the Free Software
26    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
27    02111-1307, USA.
28 
29    The GNU General Public License is contained in the file COPYING.
30 */
31 
32 #ifndef __PUB_CORE_TRANSTAB_H
33 #define __PUB_CORE_TRANSTAB_H
34 
35 //--------------------------------------------------------------------
36 // PURPOSE: This module is responsible for caching translations, and
37 // enabling fast look-ups of them.
38 //--------------------------------------------------------------------
39 
40 #include "pub_core_transtab_asm.h"
41 
42 /* The fast-cache for tt-lookup, and for finding counters.  Unused
43    entries are denoted by .guest == 1, which is assumed to be a bogus
44    address for all guest code. */
45 typedef
46    struct {
47       Addr guest;
48       Addr host;
49    }
50    FastCacheEntry;
51 
52 extern __attribute__((aligned(16)))
53        FastCacheEntry VG_(tt_fast) [VG_TT_FAST_SIZE];
54 
55 #define TRANSTAB_BOGUS_GUEST_ADDR ((Addr)1)
56 
57 extern UInt*          VG_(tt_fastN)[VG_TT_FAST_SIZE];
58 
59 extern void VG_(init_tt_tc)       ( void );
60 
61 extern
62 void VG_(add_to_transtab)( VexGuestExtents* vge,
63                            Addr64           entry,
64                            AddrH            code,
65                            UInt             code_len,
66                            Bool             is_self_checking );
67 
68 extern Bool VG_(search_transtab) ( /*OUT*/AddrH* result,
69                                    Addr64        guest_addr,
70                                    Bool          upd_cache );
71 
72 extern void VG_(discard_translations) ( Addr64 start, ULong range,
73                                         HChar* who );
74 
75 extern void VG_(print_tt_tc_stats) ( void );
76 
77 extern UInt VG_(get_bbs_translated) ( void );
78 
79 /* Add to / search the auxiliary, small, unredirected translation
80    table. */
81 
82 extern
83 void VG_(add_to_unredir_transtab)( VexGuestExtents* vge,
84                                    Addr64           entry,
85                                    AddrH            code,
86                                    UInt             code_len );
87 extern
88 Bool VG_(search_unredir_transtab) ( /*OUT*/AddrH* result,
89                                     Addr64        guest_addr );
90 
91 // BB profiling stuff
92 
93 typedef struct _BBProfEntry {
94    Addr64 addr;
95    ULong  score;
96 } BBProfEntry;
97 
98 extern ULong VG_(get_BB_profile) ( BBProfEntry tops[], UInt n_tops );
99 
100 #endif   // __PUB_CORE_TRANSTAB_H
101 
102 /*--------------------------------------------------------------------*/
103 /*--- end                                                          ---*/
104 /*--------------------------------------------------------------------*/
105