138b47b19SEmilio G. Cota /* 238b47b19SEmilio G. Cota * Copyright (C) 2017, Emilio G. Cota <cota@braap.org> 338b47b19SEmilio G. Cota * 438b47b19SEmilio G. Cota * License: GNU GPL, version 2 or later. 538b47b19SEmilio G. Cota * See the COPYING file in the top-level directory. 638b47b19SEmilio G. Cota * 738b47b19SEmilio G. Cota * plugin-gen.h - TCG-dependent definitions for generating plugin code 838b47b19SEmilio G. Cota * 938b47b19SEmilio G. Cota * This header should be included only from plugin.c and C files that emit 1038b47b19SEmilio G. Cota * TCG code. 1138b47b19SEmilio G. Cota */ 1238b47b19SEmilio G. Cota #ifndef QEMU_PLUGIN_GEN_H 1338b47b19SEmilio G. Cota #define QEMU_PLUGIN_GEN_H 1438b47b19SEmilio G. Cota 1538b47b19SEmilio G. Cota #include "qemu/plugin.h" 1638b47b19SEmilio G. Cota #include "tcg/tcg.h" 1738b47b19SEmilio G. Cota 1838b47b19SEmilio G. Cota struct DisasContextBase; 1938b47b19SEmilio G. Cota 2038b47b19SEmilio G. Cota #ifdef CONFIG_PLUGIN 2138b47b19SEmilio G. Cota 22*cfd405eaSAlex Bennée bool plugin_gen_tb_start(CPUState *cpu, const TranslationBlock *tb, bool supress); 2338b47b19SEmilio G. Cota void plugin_gen_tb_end(CPUState *cpu); 2438b47b19SEmilio G. Cota void plugin_gen_insn_start(CPUState *cpu, const struct DisasContextBase *db); 2538b47b19SEmilio G. Cota void plugin_gen_insn_end(void); 2638b47b19SEmilio G. Cota 2738b47b19SEmilio G. Cota void plugin_gen_disable_mem_helpers(void); 2838b47b19SEmilio G. Cota void plugin_gen_empty_mem_callback(TCGv addr, uint32_t info); 2938b47b19SEmilio G. Cota 30763f7e12SEmilio G. Cota static inline void plugin_insn_append(const void *from, size_t size) 31763f7e12SEmilio G. Cota { 32763f7e12SEmilio G. Cota struct qemu_plugin_insn *insn = tcg_ctx->plugin_insn; 33763f7e12SEmilio G. Cota 34763f7e12SEmilio G. Cota if (insn == NULL) { 35763f7e12SEmilio G. Cota return; 36763f7e12SEmilio G. Cota } 37763f7e12SEmilio G. Cota 38763f7e12SEmilio G. Cota insn->data = g_byte_array_append(insn->data, from, size); 39763f7e12SEmilio G. Cota } 40763f7e12SEmilio G. Cota 4138b47b19SEmilio G. Cota #else /* !CONFIG_PLUGIN */ 4238b47b19SEmilio G. Cota 4338b47b19SEmilio G. Cota static inline 44*cfd405eaSAlex Bennée bool plugin_gen_tb_start(CPUState *cpu, const TranslationBlock *tb, bool supress) 4538b47b19SEmilio G. Cota { 4638b47b19SEmilio G. Cota return false; 4738b47b19SEmilio G. Cota } 4838b47b19SEmilio G. Cota 4938b47b19SEmilio G. Cota static inline 5038b47b19SEmilio G. Cota void plugin_gen_insn_start(CPUState *cpu, const struct DisasContextBase *db) 5138b47b19SEmilio G. Cota { } 5238b47b19SEmilio G. Cota 5338b47b19SEmilio G. Cota static inline void plugin_gen_insn_end(void) 5438b47b19SEmilio G. Cota { } 5538b47b19SEmilio G. Cota 5638b47b19SEmilio G. Cota static inline void plugin_gen_tb_end(CPUState *cpu) 5738b47b19SEmilio G. Cota { } 5838b47b19SEmilio G. Cota 5938b47b19SEmilio G. Cota static inline void plugin_gen_disable_mem_helpers(void) 6038b47b19SEmilio G. Cota { } 6138b47b19SEmilio G. Cota 6238b47b19SEmilio G. Cota static inline void plugin_gen_empty_mem_callback(TCGv addr, uint32_t info) 6338b47b19SEmilio G. Cota { } 6438b47b19SEmilio G. Cota 65763f7e12SEmilio G. Cota static inline void plugin_insn_append(const void *from, size_t size) 66763f7e12SEmilio G. Cota { } 67763f7e12SEmilio G. Cota 6838b47b19SEmilio G. Cota #endif /* CONFIG_PLUGIN */ 6938b47b19SEmilio G. Cota 7038b47b19SEmilio G. Cota #endif /* QEMU_PLUGIN_GEN_H */ 7138b47b19SEmilio G. Cota 72