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 18 struct DisasContextBase; 19 20 #ifdef CONFIG_PLUGIN 21 22 bool plugin_gen_tb_start(CPUState *cpu, const TranslationBlock *tb); 23 void plugin_gen_tb_end(CPUState *cpu); 24 void plugin_gen_insn_start(CPUState *cpu, const struct DisasContextBase *db); 25 void plugin_gen_insn_end(void); 26 27 void plugin_gen_disable_mem_helpers(void); 28 void plugin_gen_empty_mem_callback(TCGv addr, uint32_t info); 29 30 static 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 43 static inline 44 bool plugin_gen_tb_start(CPUState *cpu, const TranslationBlock *tb) 45 { 46 return false; 47 } 48 49 static inline 50 void plugin_gen_insn_start(CPUState *cpu, const struct DisasContextBase *db) 51 { } 52 53 static inline void plugin_gen_insn_end(void) 54 { } 55 56 static inline void plugin_gen_tb_end(CPUState *cpu) 57 { } 58 59 static inline void plugin_gen_disable_mem_helpers(void) 60 { } 61 62 static inline void plugin_gen_empty_mem_callback(TCGv addr, uint32_t info) 63 { } 64 65 static 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 72