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-2013 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. Unused entries are denoted by .guest 43 == 1, which is assumed to be a bogus address for all guest code. */ 44 typedef 45 struct { 46 Addr guest; 47 Addr host; 48 } 49 FastCacheEntry; 50 51 extern __attribute__((aligned(16))) 52 FastCacheEntry VG_(tt_fast) [VG_TT_FAST_SIZE]; 53 54 #define TRANSTAB_BOGUS_GUEST_ADDR ((Addr)1) 55 56 57 /* Initialises the TC, using VG_(clo_num_transtab_sectors). 58 VG_(clo_num_transtab_sectors) must be >= MIN_N_SECTORS 59 and <= MAX_N_SECTORS. */ 60 extern void VG_(init_tt_tc) ( void ); 61 62 63 /* Limits for number of sectors the TC is divided into. If you need a larger 64 overall translation cache, increase MAX_N_SECTORS. */ 65 #define MIN_N_SECTORS 2 66 #define MAX_N_SECTORS 24 67 68 /* Default for the nr of sectors, if not overriden by command line. 69 On Android, space is limited, so try to get by with fewer sectors. 70 On other platforms we can go to town. 16 sectors gives theoretical 71 capacity of about 440MB of JITted code in 1.05 million translations 72 (realistically, about 2/3 of that) for Memcheck. */ 73 #if defined(VGPV_arm_linux_android) || defined(VGPV_x86_linux_android) 74 # define N_SECTORS_DEFAULT 6 75 #else 76 # define N_SECTORS_DEFAULT 16 77 #endif 78 79 extern 80 void VG_(add_to_transtab)( VexGuestExtents* vge, 81 Addr64 entry, 82 AddrH code, 83 UInt code_len, 84 Bool is_self_checking, 85 Int offs_profInc, 86 UInt n_guest_instrs, 87 VexArch arch_host ); 88 89 extern 90 void VG_(tt_tc_do_chaining) ( void* from__patch_addr, 91 UInt to_sNo, 92 UInt to_tteNo, 93 Bool to_fastEP ); 94 95 extern Bool VG_(search_transtab) ( /*OUT*/AddrH* res_hcode, 96 /*OUT*/UInt* res_sNo, 97 /*OUT*/UInt* res_tteNo, 98 Addr64 guest_addr, 99 Bool upd_cache ); 100 101 extern void VG_(discard_translations) ( Addr64 start, ULong range, 102 const HChar* who ); 103 104 extern void VG_(print_tt_tc_stats) ( void ); 105 106 extern UInt VG_(get_bbs_translated) ( void ); 107 108 /* Add to / search the auxiliary, small, unredirected translation 109 table. */ 110 111 extern 112 void VG_(add_to_unredir_transtab)( VexGuestExtents* vge, 113 Addr64 entry, 114 AddrH code, 115 UInt code_len ); 116 extern 117 Bool VG_(search_unredir_transtab) ( /*OUT*/AddrH* result, 118 Addr64 guest_addr ); 119 120 // SB profiling stuff 121 122 typedef struct _SBProfEntry { 123 Addr64 addr; 124 ULong score; 125 } SBProfEntry; 126 127 extern ULong VG_(get_SB_profile) ( SBProfEntry tops[], UInt n_tops ); 128 129 #endif // __PUB_CORE_TRANSTAB_H 130 131 /*--------------------------------------------------------------------*/ 132 /*--- end ---*/ 133 /*--------------------------------------------------------------------*/ 134