1/* Copyright (C) 2007-2010 The Android Open Source Project 2** 3** This software is licensed under the terms of the GNU General Public 4** License version 2, as published by the Free Software Foundation, and 5** may be copied, distributed, and modified under those terms. 6** 7** This program is distributed in the hope that it will be useful, 8** but WITHOUT ANY WARRANTY; without even the implied warranty of 9** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10** GNU General Public License for more details. 11*/ 12 13/* 14 * Contains declarations of memchecker external variables and routines, used by 15 * other qemu components. 16 */ 17 18#ifndef QEMU_MEMCHECK_MEMCHECK_API_H 19#define QEMU_MEMCHECK_MEMCHECK_API_H 20 21/* This file should compile iff qemu is built with memory checking 22 * configuration turned on. */ 23#ifndef CONFIG_MEMCHECK 24#error CONFIG_MEMCHECK is not defined. 25#endif // CONFIG_MEMCHECK 26 27/* Global flag, indicating whether or not memchecking has been enabled 28 * for the current emulator session. 1 means that memchecking has been 29 * enabled, 0 means that memchecking has not been enabled. The variable 30 * is declared in memchec/memcheck.c */ 31extern int memcheck_enabled; 32 33/* Flags wether or not mmu instrumentation is enabled by memchecker. 34 * 1 - enabled, 0 - is not enabled. */ 35extern int memcheck_instrument_mmu; 36 37/* Global flag, indicating whether or not memchecker is collecting call stack. 38 * 1 - call stack is being collected, 0 means that stack is not being 39 * collected. The variable is declared in memchec/memcheck.c */ 40extern int memcheck_watch_call_stack; 41 42/* Array of (tb_pc, guest_pc) pairs, big enough for all translations. This 43 * array is used to obtain guest PC address from a translated PC address. 44 * tcg_gen_code_common will fill it up when memchecker is enabled. The array is 45 * declared in ./translate_all.c */ 46extern void** gen_opc_tpc2gpc_ptr; 47 48/* Number of (tb_pc, guest_pc) pairs stored in gen_opc_tpc2gpc array. 49 * The variable is declared in ./translate_all.c */ 50extern unsigned int gen_opc_tpc2gpc_pairs; 51 52/* Checks if given address range in the context of the current process is 53 * under surveillance by memchecker. 54 * Param: 55 * addr - Starting address of a range. 56 * size - Range size. 57 * Return: 58 * boolean: 1 if address range contains memory that requires access 59 * violation detection, or 0 if given address range is in no interest to 60 * the memchecker. */ 61int memcheck_is_checked(target_ulong addr, uint32_t size); 62 63/* Validates __ldx_mmu operations. 64 * Param: 65 * addr - Virtual address in the guest space where memory is read. 66 * data_size - Size of the read. 67 * retaddr - Code address (in TB) that accesses memory. 68 * Return: 69 * 1 Address should be invalidated in TLB cache, in order to ensure that 70 * subsequent attempts to read from that page will launch __ld/__stx_mmu. 71 * If this routine returns zero, no page invalidation is requried. 72 */ 73int memcheck_validate_ld(target_ulong addr, 74 uint32_t data_size, 75 target_ulong retaddr); 76 77/* Validates __stx_mmu operations. 78 * Param: 79 * addr - Virtual address in the guest space where memory is written. 80 * data_size - Size of the write. 81 * value - Value to be written. Note that we typecast all values to 64 bits, 82 * since this will fit all data sizes. 83 * retaddr - Code address (in TB) that accesses memory. 84 * Return: 85 * 1 Address should be invalidated in TLB cache, in order to ensure that 86 * subsequent attempts to read from that page will launch __ld/__stx_mmu. 87 * If this routine returns zero, no page invalidation is requried. 88 */ 89int memcheck_validate_st(target_ulong addr, 90 uint32_t data_size, 91 uint64_t value, 92 target_ulong retaddr); 93 94/* Memchecker's handler for on_call callback. 95 * Param: 96 * pc - Guest address where call has been made. 97 * ret - Guest address where called routine will return. 98 */ 99void memcheck_on_call(target_ulong pc, target_ulong ret); 100 101/* Memchecker's handler for on_ret callback. 102 * Param: 103 * pc - Guest address where routine has returned. 104 */ 105void memcheck_on_ret(target_ulong pc); 106 107#endif // QEMU_MEMCHECK_MEMCHECK_API_H 108