qemu/include/exec/plugin-gen.h
<<
>>
Prefs
   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
  72