pub_core_transtab.h revision 597314210494248b4fbefd45525a748439629218
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. */ 44typedef 45 struct { 46 Addr guest; 47 Addr host; 48 } 49 FastCacheEntry; 50 51extern __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. */ 60extern 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 79extern 80void 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 88extern 89void VG_(tt_tc_do_chaining) ( void* from__patch_addr, 90 UInt to_sNo, 91 UInt to_tteNo, 92 Bool to_fastEP ); 93 94extern Bool VG_(search_transtab) ( /*OUT*/AddrH* res_hcode, 95 /*OUT*/UInt* res_sNo, 96 /*OUT*/UInt* res_tteNo, 97 Addr64 guest_addr, 98 Bool upd_cache ); 99 100extern void VG_(discard_translations) ( Addr64 start, ULong range, 101 const HChar* who ); 102 103extern void VG_(print_tt_tc_stats) ( void ); 104 105extern UInt VG_(get_bbs_translated) ( void ); 106 107/* Add to / search the auxiliary, small, unredirected translation 108 table. */ 109 110extern 111void VG_(add_to_unredir_transtab)( VexGuestExtents* vge, 112 Addr64 entry, 113 AddrH code, 114 UInt code_len ); 115extern 116Bool VG_(search_unredir_transtab) ( /*OUT*/AddrH* result, 117 Addr64 guest_addr ); 118 119// SB profiling stuff 120 121typedef struct _SBProfEntry { 122 Addr64 addr; 123 ULong score; 124} SBProfEntry; 125 126extern ULong VG_(get_SB_profile) ( SBProfEntry tops[], UInt n_tops ); 127 128#endif // __PUB_CORE_TRANSTAB_H 129 130/*--------------------------------------------------------------------*/ 131/*--- end ---*/ 132/*--------------------------------------------------------------------*/ 133