plugin-gen.h (1679B)
1/* 2 * Copyright (C) 2017, Emilio G. Cota <cota@braap.org> 3 * 4 * License: GNU GPL, version 2 or later. 5 * See the COPYING file in the top-level directory. 6 * 7 * plugin-gen.h - TCG-dependent definitions for generating plugin code 8 * 9 * This header should be included only from plugin.c and C files that emit 10 * TCG code. 11 */ 12#ifndef QEMU_PLUGIN_GEN_H 13#define QEMU_PLUGIN_GEN_H 14 15#include "qemu/plugin.h" 16#include "tcg/tcg.h" 17 18struct DisasContextBase; 19 20#ifdef CONFIG_PLUGIN 21 22bool plugin_gen_tb_start(CPUState *cpu, const TranslationBlock *tb, bool supress); 23void plugin_gen_tb_end(CPUState *cpu); 24void plugin_gen_insn_start(CPUState *cpu, const struct DisasContextBase *db); 25void plugin_gen_insn_end(void); 26 27void plugin_gen_disable_mem_helpers(void); 28void plugin_gen_empty_mem_callback(TCGv addr, uint32_t info); 29 30static inline void plugin_insn_append(const void *from, size_t size) 31{ 32 struct qemu_plugin_insn *insn = tcg_ctx->plugin_insn; 33 34 if (insn == NULL) { 35 return; 36 } 37 38 insn->data = g_byte_array_append(insn->data, from, size); 39} 40 41#else /* !CONFIG_PLUGIN */ 42 43static inline 44bool plugin_gen_tb_start(CPUState *cpu, const TranslationBlock *tb, bool supress) 45{ 46 return false; 47} 48 49static inline 50void plugin_gen_insn_start(CPUState *cpu, const struct DisasContextBase *db) 51{ } 52 53static inline void plugin_gen_insn_end(void) 54{ } 55 56static inline void plugin_gen_tb_end(CPUState *cpu) 57{ } 58 59static inline void plugin_gen_disable_mem_helpers(void) 60{ } 61 62static inline void plugin_gen_empty_mem_callback(TCGv addr, uint32_t info) 63{ } 64 65static inline void plugin_insn_append(const void *from, size_t size) 66{ } 67 68#endif /* CONFIG_PLUGIN */ 69 70#endif /* QEMU_PLUGIN_GEN_H */ 71