qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

plugin-gen.h (1982B)


      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 struct DisasContextBase *db,
     23                          bool supress);
     24 void plugin_gen_tb_end(CPUState *cpu);
     25 void plugin_gen_insn_start(CPUState *cpu, const struct DisasContextBase *db);
     26 void plugin_gen_insn_end(void);
     27 
     28 void plugin_gen_disable_mem_helpers(void);
     29 void plugin_gen_empty_mem_callback(TCGv addr, uint32_t info);
     30 
     31 static inline void plugin_insn_append(abi_ptr pc, const void *from, size_t size)
     32 {
     33     struct qemu_plugin_insn *insn = tcg_ctx->plugin_insn;
     34     abi_ptr off;
     35 
     36     if (insn == NULL) {
     37         return;
     38     }
     39     off = pc - insn->vaddr;
     40     if (off < insn->data->len) {
     41         g_byte_array_set_size(insn->data, off);
     42     } else if (off > insn->data->len) {
     43         /* we have an unexpected gap */
     44         g_assert_not_reached();
     45     }
     46 
     47     insn->data = g_byte_array_append(insn->data, from, size);
     48 }
     49 
     50 #else /* !CONFIG_PLUGIN */
     51 
     52 static inline bool
     53 plugin_gen_tb_start(CPUState *cpu, const struct DisasContextBase *db, bool sup)
     54 {
     55     return false;
     56 }
     57 
     58 static inline
     59 void plugin_gen_insn_start(CPUState *cpu, const struct DisasContextBase *db)
     60 { }
     61 
     62 static inline void plugin_gen_insn_end(void)
     63 { }
     64 
     65 static inline void plugin_gen_tb_end(CPUState *cpu)
     66 { }
     67 
     68 static inline void plugin_gen_disable_mem_helpers(void)
     69 { }
     70 
     71 static inline void plugin_gen_empty_mem_callback(TCGv addr, uint32_t info)
     72 { }
     73 
     74 static inline void plugin_insn_append(abi_ptr pc, const void *from, size_t size)
     75 { }
     76 
     77 #endif /* CONFIG_PLUGIN */
     78 
     79 #endif /* QEMU_PLUGIN_GEN_H */
     80