Lines Matching +full:enum +full:- +full:as +full:- +full:flags

14  * As such all the public functions in here are exported in
15 * qemu-plugin.h.
17 * The general life-cycle of a plugin is:
19 * - plugin is loaded, public qemu_plugin_install called
20 * - the install func registers callbacks for events
21 * - usually an atexit_cb is registered to dump info at the end
22 * - when a registered event occurs the plugin is called
23 * - some events pass additional info
24 * - during translation the plugin can decide to instrument any
26 * - when QEMU exits all the registered atexit callbacks are called
32 * See the COPYING file in the top-level directory.
34 * SPDX-License-Identifier: GPL-2.0-or-later
39 #include "qemu/main-loop.h"
45 #include "exec/translation-block.h"
83 return tb_cflags(tcg_ctx->gen_tb) & CF_MEMI_ONLY; in tb_is_mem_only()
88 enum qemu_plugin_cb_flags flags, in qemu_plugin_register_vcpu_tb_exec_cb() argument
92 plugin_register_dyn_cb__udata(&tb->cbs, cb, flags, udata); in qemu_plugin_register_vcpu_tb_exec_cb()
98 enum qemu_plugin_cb_flags flags, in qemu_plugin_register_vcpu_tb_exec_cond_cb() argument
99 enum qemu_plugin_cond cond, in qemu_plugin_register_vcpu_tb_exec_cond_cb()
108 qemu_plugin_register_vcpu_tb_exec_cb(tb, cb, flags, udata); in qemu_plugin_register_vcpu_tb_exec_cond_cb()
111 plugin_register_dyn_cond_cb__udata(&tb->cbs, cb, flags, in qemu_plugin_register_vcpu_tb_exec_cond_cb()
117 enum qemu_plugin_op op, in qemu_plugin_register_vcpu_tb_exec_inline_per_vcpu()
122 plugin_register_inline_op_on_entry(&tb->cbs, 0, op, entry, imm); in qemu_plugin_register_vcpu_tb_exec_inline_per_vcpu()
128 enum qemu_plugin_cb_flags flags, in qemu_plugin_register_vcpu_insn_exec_cb() argument
132 plugin_register_dyn_cb__udata(&insn->insn_cbs, cb, flags, udata); in qemu_plugin_register_vcpu_insn_exec_cb()
139 enum qemu_plugin_cb_flags flags, in qemu_plugin_register_vcpu_insn_exec_cond_cb() argument
140 enum qemu_plugin_cond cond, in qemu_plugin_register_vcpu_insn_exec_cond_cb()
149 qemu_plugin_register_vcpu_insn_exec_cb(insn, cb, flags, udata); in qemu_plugin_register_vcpu_insn_exec_cond_cb()
152 plugin_register_dyn_cond_cb__udata(&insn->insn_cbs, cb, flags, in qemu_plugin_register_vcpu_insn_exec_cond_cb()
158 enum qemu_plugin_op op, in qemu_plugin_register_vcpu_insn_exec_inline_per_vcpu()
163 plugin_register_inline_op_on_entry(&insn->insn_cbs, 0, op, entry, imm); in qemu_plugin_register_vcpu_insn_exec_inline_per_vcpu()
174 enum qemu_plugin_cb_flags flags, in qemu_plugin_register_vcpu_mem_cb() argument
175 enum qemu_plugin_mem_rw rw, in qemu_plugin_register_vcpu_mem_cb()
178 plugin_register_vcpu_mem_cb(&insn->mem_cbs, cb, flags, rw, udata); in qemu_plugin_register_vcpu_mem_cb()
183 enum qemu_plugin_mem_rw rw, in qemu_plugin_register_vcpu_mem_inline_per_vcpu()
184 enum qemu_plugin_op op, in qemu_plugin_register_vcpu_mem_inline_per_vcpu()
188 plugin_register_inline_op_on_entry(&insn->mem_cbs, rw, op, entry, imm); in qemu_plugin_register_vcpu_mem_inline_per_vcpu()
228 return tb->n; in qemu_plugin_tb_n_insns()
233 const DisasContextBase *db = tcg_ctx->plugin_db; in qemu_plugin_tb_vaddr()
234 return db->pc_first; in qemu_plugin_tb_vaddr()
240 if (unlikely(idx >= tb->n)) { in qemu_plugin_tb_get_insn()
243 return g_ptr_array_index(tb->insns, idx); in qemu_plugin_tb_get_insn()
256 const DisasContextBase *db = tcg_ctx->plugin_db; in qemu_plugin_insn_data()
258 len = MIN(len, insn->len); in qemu_plugin_insn_data()
259 return translator_st(db, dest, insn->vaddr, len) ? len : 0; in qemu_plugin_insn_data()
264 return insn->len; in qemu_plugin_insn_size()
269 return insn->vaddr; in qemu_plugin_insn_vaddr()
274 const DisasContextBase *db = tcg_ctx->plugin_db; in qemu_plugin_insn_haddr()
275 vaddr page0_last = db->pc_first | ~qemu_target_page_mask(); in qemu_plugin_insn_haddr()
277 if (db->fake_insn) { in qemu_plugin_insn_haddr()
283 * but as a proxy for address space and physical address. in qemu_plugin_insn_haddr()
287 if (insn->vaddr <= page0_last) { in qemu_plugin_insn_haddr()
288 if (db->host_addr[0] == NULL) { in qemu_plugin_insn_haddr()
291 return db->host_addr[0] + insn->vaddr - db->pc_first; in qemu_plugin_insn_haddr()
293 if (db->host_addr[1] == NULL) { in qemu_plugin_insn_haddr()
296 return db->host_addr[1] + insn->vaddr - (page0_last + 1); in qemu_plugin_insn_haddr()
302 return plugin_disas(tcg_ctx->cpu, tcg_ctx->plugin_db, in qemu_plugin_insn_disas()
303 insn->vaddr, insn->len); in qemu_plugin_insn_disas()
308 const char *sym = lookup_symbol(insn->vaddr); in qemu_plugin_insn_symbol()
342 uint64_t low = current_cpu->neg.plugin_mem_value_low; in qemu_plugin_mem_get_value()
365 value.data.u128.high = current_cpu->neg.plugin_mem_value_high; in qemu_plugin_mem_get_value()
398 * authors are not tempted to treat them as numbers.
409 for (int i = 0; i < gdbstub_regs->len; i++) { in create_register_handles()
413 /* skip "un-named" regs */ in create_register_handles()
414 if (!grd->name) { in create_register_handles()
419 desc.handle = GINT_TO_POINTER(grd->gdb_reg + 1); in create_register_handles()
420 desc.name = g_intern_string(grd->name); in create_register_handles()
421 desc.feature = g_intern_string(grd->feature_name); in create_register_handles()
446 int result = cpu_memory_rw_debug(current_cpu, addr, data->data, in qemu_plugin_read_memory_vaddr()
447 data->len, false); in qemu_plugin_read_memory_vaddr()
460 return gdb_read_register(current_cpu, buf, GPOINTER_TO_INT(reg) - 1); in qemu_plugin_read_register()
478 char *base_ptr = score->data->data; in qemu_plugin_scoreboard_find()
479 return base_ptr + vcpu_index * g_array_get_element_size(score->data); in qemu_plugin_scoreboard_find()