@samitouri / QOSamiQemu / commits / 285c40aaac

plugins: add userdata to qemu_plugin_vcpu_tb_trans_cb_t

Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> Link: https://lore.kernel.org/qemu-devel/20260615193526.2883349-17-pierrick.bouvier@oss.qualcomm.com Signed-off-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>

Pierrick Bouvier committed Jun 15, 2026 at 12:35 UTC 285c40aaac55df3fe40869f526f7b54e01d02943
26 files changed +58 -53
contrib/plugins/bbv.c
+2 -2
@@ -102,7 +102,7 @@ static void vcpu_interval_exec(unsigned int vcpu_index, void *udata)
102 fputc('\n', vcpu->file);
103 }
104
105 -static void vcpu_tb_trans(struct qemu_plugin_tb *tb)
105 +static void vcpu_tb_trans(struct qemu_plugin_tb *tb, void *userdata)
106 {
107 uint64_t n_insns = qemu_plugin_tb_n_insns(tb);
108 uint64_t vaddr = qemu_plugin_tb_vaddr(tb);
@@ -157,7 +157,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
157 vcpus = qemu_plugin_scoreboard_new(sizeof(Vcpu));
158 qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
159 qemu_plugin_register_vcpu_init_cb(id, vcpu_init, NULL);
160 - qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
160 + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans, NULL);
161
162 return 0;
163 }
contrib/plugins/cache.c
+2 -2
@@ -462,7 +462,7 @@ static void vcpu_insn_exec(unsigned int vcpu_index, void *userdata)
462 g_mutex_unlock(&l2_ucache_locks[cache_idx]);
463 }
464
465 -static void vcpu_tb_trans(struct qemu_plugin_tb *tb)
465 +static void vcpu_tb_trans(struct qemu_plugin_tb *tb, void *userdata)
466 {
467 size_t n_insns;
468 size_t i;
@@ -844,7 +844,7 @@ int qemu_plugin_install(qemu_plugin_id_t id, const qemu_info_t *info,
844 l1_icache_locks = g_new0(GMutex, cores);
845 l2_ucache_locks = use_l2 ? g_new0(GMutex, cores) : NULL;
846
847 - qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
847 + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans, NULL);
848 qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
849
850 miss_ht = g_hash_table_new_full(g_int64_hash, g_int64_equal, NULL, insn_free);
contrib/plugins/cflow.c
+2 -2
@@ -297,7 +297,7 @@ static void vcpu_tb_branched_exec(unsigned int cpu_index, void *udata)
297 * instructions for their execution.
298 *
299 */
300 -static void vcpu_tb_trans(struct qemu_plugin_tb *tb)
300 +static void vcpu_tb_trans(struct qemu_plugin_tb *tb, void *userdata)
301 {
302 uint64_t pc = qemu_plugin_tb_vaddr(tb);
303 size_t insns = qemu_plugin_tb_n_insns(tb);
@@ -387,7 +387,7 @@ int qemu_plugin_install(qemu_plugin_id_t id, const qemu_info_t *info,
387
388 plugin_init();
389
390 - qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
390 + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans, NULL);
391 qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
392 return 0;
393 }
contrib/plugins/cpp.cpp
+2 -2
@@ -363,7 +363,7 @@
363
364 QEMU_PLUGIN_EXPORT int qemu_plugin_version = QEMU_PLUGIN_VERSION;
365
366 -static void vcpu_tb_trans(struct qemu_plugin_tb *tb)
366 +static void vcpu_tb_trans(struct qemu_plugin_tb *tb, void *userdata)
367 {
368 }
369
@@ -371,6 +371,6 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
371 const qemu_info_t *info,
372 int argc, char **argv)
373 {
374 - qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
374 + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans, NULL);
375 return 0;
376 }
contrib/plugins/drcov.c
+2 -2
@@ -119,7 +119,7 @@ static void vcpu_tb_exec(unsigned int cpu_index, void *udata)
119 g_mutex_unlock(&lock);
120 }
121
122 -static void vcpu_tb_trans(struct qemu_plugin_tb *tb)
122 +static void vcpu_tb_trans(struct qemu_plugin_tb *tb, void *userdata)
123 {
124 uint64_t pc = qemu_plugin_tb_vaddr(tb);
125 size_t n = qemu_plugin_tb_n_insns(tb);
@@ -156,7 +156,7 @@ int qemu_plugin_install(qemu_plugin_id_t id, const qemu_info_t *info,
156
157 plugin_init();
158
159 - qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
159 + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans, NULL);
160 qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
161
162 return 0;
contrib/plugins/execlog.c
+2 -2
@@ -177,7 +177,7 @@ static void vcpu_insn_exec(unsigned int cpu_index, void *udata)
177 * QEMU convert code by translation block (TB). By hooking here we can then hook
178 * a callback on each instruction and memory access.
179 */
180 -static void vcpu_tb_trans(struct qemu_plugin_tb *tb)
180 +static void vcpu_tb_trans(struct qemu_plugin_tb *tb, void *userdata)
181 {
182 struct qemu_plugin_insn *insn;
183 bool skip = (imatches || amatches);
@@ -482,7 +482,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
482
483 /* Register init, translation block and exit callbacks */
484 qemu_plugin_register_vcpu_init_cb(id, vcpu_init, NULL);
485 - qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
485 + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans, NULL);
486 qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
487
488 return 0;
contrib/plugins/hotblocks.c
+2 -2
@@ -121,7 +121,7 @@ static void vcpu_tb_exec(unsigned int cpu_index, void *udata)
121 * Otherwise a helper is inserted which calls the vcpu_tb_exec
122 * callback.
123 */
124 -static void vcpu_tb_trans(struct qemu_plugin_tb *tb)
124 +static void vcpu_tb_trans(struct qemu_plugin_tb *tb, void *userdata)
125 {
126 ExecCount *cnt;
127 uint64_t pc = qemu_plugin_tb_vaddr(tb);
@@ -186,7 +186,7 @@ int qemu_plugin_install(qemu_plugin_id_t id, const qemu_info_t *info,
186
187 plugin_init();
188
189 - qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
189 + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans, NULL);
190 qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
191 return 0;
192 }
contrib/plugins/hotpages.c
+2 -2
@@ -148,7 +148,7 @@ static void vcpu_haddr(unsigned int cpu_index, qemu_plugin_meminfo_t meminfo,
148 g_mutex_unlock(&lock);
149 }
150
151 -static void vcpu_tb_trans(struct qemu_plugin_tb *tb)
151 +static void vcpu_tb_trans(struct qemu_plugin_tb *tb, void *userdata)
152 {
153 size_t n = qemu_plugin_tb_n_insns(tb);
154 size_t i;
@@ -197,7 +197,7 @@ int qemu_plugin_install(qemu_plugin_id_t id, const qemu_info_t *info,
197
198 plugin_init();
199
200 - qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
200 + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans, NULL);
201 qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
202 return 0;
203 }
contrib/plugins/howvec.c
+2 -2
@@ -310,7 +310,7 @@ static struct qemu_plugin_scoreboard *find_counter(
310 return NULL;
311 }
312
313 -static void vcpu_tb_trans(struct qemu_plugin_tb *tb)
313 +static void vcpu_tb_trans(struct qemu_plugin_tb *tb, void *userdata)
314 {
315 size_t n = qemu_plugin_tb_n_insns(tb);
316 size_t i;
@@ -392,7 +392,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
392
393 plugin_init();
394
395 - qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
395 + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans, NULL);
396 qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
397 return 0;
398 }
contrib/plugins/hwprofile.c
+2 -2
@@ -242,7 +242,7 @@ static void vcpu_haddr(unsigned int cpu_index, qemu_plugin_meminfo_t meminfo,
242 }
243 }
244
245 -static void vcpu_tb_trans(struct qemu_plugin_tb *tb)
245 +static void vcpu_tb_trans(struct qemu_plugin_tb *tb, void *userdata)
246 {
247 size_t n = qemu_plugin_tb_n_insns(tb);
248 size_t i;
@@ -319,7 +319,7 @@ int qemu_plugin_install(qemu_plugin_id_t id, const qemu_info_t *info,
319
320 plugin_init();
321
322 - qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
322 + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans, NULL);
323 qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
324 return 0;
325 }
contrib/plugins/ips.c
+2 -2
@@ -110,7 +110,7 @@ static void every_quantum_insn(unsigned int cpu_index, void *udata)
110 update_system_time(vcpu);
111 }
112
113 -static void vcpu_tb_trans(struct qemu_plugin_tb *tb)
113 +static void vcpu_tb_trans(struct qemu_plugin_tb *tb, void *userdata)
114 {
115 size_t n_insns = qemu_plugin_tb_n_insns(tb);
116 qemu_plugin_u64 quantum_insn =
@@ -206,7 +206,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
206 time_handle = qemu_plugin_request_time_control();
207 g_assert(time_handle);
208
209 - qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
209 + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans, NULL);
210 qemu_plugin_register_vcpu_init_cb(id, vcpu_init, NULL);
211 qemu_plugin_register_vcpu_exit_cb(id, vcpu_exit, NULL);
212 qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
contrib/plugins/lockstep.c
+2 -2
@@ -249,7 +249,7 @@ static void vcpu_tb_exec(unsigned int cpu_index, void *udata)
249 log = g_slist_prepend(log, exec);
250 }
251
252 -static void vcpu_tb_trans(struct qemu_plugin_tb *tb)
252 +static void vcpu_tb_trans(struct qemu_plugin_tb *tb, void *userdata)
253 {
254 BlockInfo *bi = g_new0(BlockInfo, 1);
255 bi->pc = qemu_plugin_tb_vaddr(tb);
@@ -392,7 +392,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
392
393 our_id = id;
394
395 - qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
395 + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans, NULL);
396 qemu_plugin_register_atexit_cb(id, plugin_exit, (void *)id);
397 return 0;
398 }
contrib/plugins/stoptrigger.c
+2 -2
@@ -64,7 +64,7 @@ static void exit_address_reached(unsigned int cpu_index, void *udata)
64 exit_emulation(ei->exit_code, msg);
65 }
66
67 -static void vcpu_tb_trans(struct qemu_plugin_tb *tb)
67 +static void vcpu_tb_trans(struct qemu_plugin_tb *tb, void *userdata)
68 {
69 size_t tb_n = qemu_plugin_tb_n_insns(tb);
70 for (size_t i = 0; i < tb_n; i++) {
@@ -150,7 +150,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
150 }
151
152 /* Register translation block and exit callbacks */
153 - qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
153 + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans, NULL);
154 qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
155
156 return 0;
contrib/plugins/uftrace.c
+2 -2
@@ -838,7 +838,7 @@ static void track_callstack(unsigned int cpu_index, void *udata)
838 trace_enter_stack(t, cs, timestamp);
839 }
840
841 -static void vcpu_tb_trans(struct qemu_plugin_tb *tb)
841 +static void vcpu_tb_trans(struct qemu_plugin_tb *tb, void *userdata)
842 {
843 size_t n_insns = qemu_plugin_tb_n_insns(tb);
844 uintptr_t tb_pc = qemu_plugin_tb_vaddr(tb);
@@ -987,7 +987,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
987 score = qemu_plugin_scoreboard_new(sizeof(Cpu));
988 qemu_plugin_register_vcpu_init_cb(id, vcpu_init, NULL);
989 qemu_plugin_register_atexit_cb(id, at_exit, (void *) info->system_emulation);
990 - qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
990 + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans, NULL);
991
992 return 0;
993 }
include/plugins/qemu-plugin.h
+6 -2
@@ -418,13 +418,16 @@ enum qemu_plugin_cond {
418 /**
419 * typedef qemu_plugin_vcpu_tb_trans_cb_t - translation callback
420 * @tb: opaque handle used for querying and instrumenting a block.
421 + * @userdata: any plugin data to pass to the @cb
422 */
422 -typedef void (*qemu_plugin_vcpu_tb_trans_cb_t)(struct qemu_plugin_tb *tb);
423 +typedef void (*qemu_plugin_vcpu_tb_trans_cb_t)(struct qemu_plugin_tb *tb,
424 + void *userdata);
425
426 /**
427 * qemu_plugin_register_vcpu_tb_trans_cb() - register a translate cb
428 * @id: plugin ID
429 * @cb: callback function
430 + * @userdata: any plugin data to pass to the @cb
431 *
432 * The @cb function is called every time a translation occurs. The @cb
433 * function is passed an opaque qemu_plugin_type which it can query
@@ -435,7 +438,8 @@ typedef void (*qemu_plugin_vcpu_tb_trans_cb_t)(struct qemu_plugin_tb *tb);
438 */
439 QEMU_PLUGIN_API
440 void qemu_plugin_register_vcpu_tb_trans_cb(qemu_plugin_id_t id,
438 - qemu_plugin_vcpu_tb_trans_cb_t cb);
441 + qemu_plugin_vcpu_tb_trans_cb_t cb,
442 + void *userdata);
443
444 /**
445 * qemu_plugin_register_vcpu_tb_exec_cb() - register execution callback
plugins/api.c
+3 -2
@@ -195,9 +195,10 @@ void qemu_plugin_register_vcpu_mem_inline_per_vcpu(
195 }
196
197 void qemu_plugin_register_vcpu_tb_trans_cb(qemu_plugin_id_t id,
198 - qemu_plugin_vcpu_tb_trans_cb_t cb)
198 + qemu_plugin_vcpu_tb_trans_cb_t cb,
199 + void *userdata)
200 {
200 - plugin_register_cb(id, QEMU_PLUGIN_EV_VCPU_TB_TRANS, cb);
201 + plugin_register_cb_udata(id, QEMU_PLUGIN_EV_VCPU_TB_TRANS, cb, userdata);
202 }
203
204 void qemu_plugin_register_vcpu_syscall_cb(qemu_plugin_id_t id,
plugins/core.c
+1 -1
@@ -488,7 +488,7 @@ void qemu_plugin_tb_trans_cb(CPUState *cpu, struct qemu_plugin_tb *tb)
488 qemu_plugin_vcpu_tb_trans_cb_t func = cb->f.vcpu_tb_trans;
489
490 qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_RW_REGS);
491 - func(tb);
491 + func(tb, cb->udata);
492 qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_NO_REGS);
493 }
494 }
tests/tcg/plugins/bb.c
+2 -2
@@ -77,7 +77,7 @@ static void vcpu_tb_exec(unsigned int cpu_index, void *udata)
77 count->bb_count++;
78 }
79
80 -static void vcpu_tb_trans(struct qemu_plugin_tb *tb)
80 +static void vcpu_tb_trans(struct qemu_plugin_tb *tb, void *userdata)
81 {
82 size_t n_insns = qemu_plugin_tb_n_insns(tb);
83
@@ -127,7 +127,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
127 qemu_plugin_register_vcpu_idle_cb(id, vcpu_idle, NULL);
128 }
129
130 - qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
130 + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans, NULL);
131 qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
132 return 0;
133 }
tests/tcg/plugins/discons.c
+2 -2
@@ -147,7 +147,7 @@ static void insn_exec(unsigned int vcpu_index, void *userdata)
147 }
148 }
149
150 -static void vcpu_tb_trans(struct qemu_plugin_tb *tb)
150 +static void vcpu_tb_trans(struct qemu_plugin_tb *tb, void *userdata)
151 {
152 size_t n_insns = qemu_plugin_tb_n_insns(tb);
153 for (size_t i = 0; i < n_insns; i++) {
@@ -215,7 +215,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
215
216 qemu_plugin_register_vcpu_discon_cb(id, QEMU_PLUGIN_DISCON_ALL,
217 vcpu_discon, NULL);
218 - qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
218 + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans, NULL);
219
220 return 0;
221 }
tests/tcg/plugins/empty.c
+2 -2
@@ -20,13 +20,13 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_version = QEMU_PLUGIN_VERSION;
20 * This allows us to measure the overhead of injecting and then
21 * removing empty instrumentation.
22 */
23 -static void vcpu_tb_trans(struct qemu_plugin_tb *tb)
23 +static void vcpu_tb_trans(struct qemu_plugin_tb *tb, void *userdata)
24 { }
25
26 QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
27 const qemu_info_t *info,
28 int argc, char **argv)
29 {
30 - qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
30 + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans, NULL);
31 return 0;
32 }
tests/tcg/plugins/inline.c
+2 -2
@@ -223,7 +223,7 @@ static void vcpu_mem_access(unsigned int cpu_index,
223 g_mutex_unlock(&mem_lock);
224 }
225
226 -static void vcpu_tb_trans(struct qemu_plugin_tb *tb)
226 +static void vcpu_tb_trans(struct qemu_plugin_tb *tb, void *userdata)
227 {
228 void *tb_store = tb;
229 qemu_plugin_register_vcpu_tb_exec_inline_per_vcpu(
@@ -303,7 +303,7 @@ int qemu_plugin_install(qemu_plugin_id_t id, const qemu_info_t *info,
303 data_tb = qemu_plugin_scoreboard_u64_in_struct(data, CPUData, data_tb);
304 data_mem = qemu_plugin_scoreboard_u64_in_struct(data, CPUData, data_mem);
305
306 - qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
306 + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans, NULL);
307 qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
308
309 return 0;
tests/tcg/plugins/insn.c
+2 -2
@@ -138,7 +138,7 @@ static void vcpu_insn_matched_exec_before(unsigned int cpu_index, void *udata)
138 }
139 }
140
141 -static void vcpu_tb_trans(struct qemu_plugin_tb *tb)
141 +static void vcpu_tb_trans(struct qemu_plugin_tb *tb, void *userdata)
142 {
143 size_t n = qemu_plugin_tb_n_insns(tb);
144 size_t i;
@@ -297,7 +297,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
297
298 /* Register init, translation block and exit callbacks */
299 qemu_plugin_register_vcpu_init_cb(id, vcpu_init, NULL);
300 - qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
300 + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans, NULL);
301 qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
302 return 0;
303 }
tests/tcg/plugins/mem.c
+2 -2
@@ -266,7 +266,7 @@ static void print_access(unsigned int cpu_index, qemu_plugin_meminfo_t meminfo,
266 qemu_plugin_outs(out->str);
267 }
268
269 -static void vcpu_tb_trans(struct qemu_plugin_tb *tb)
269 +static void vcpu_tb_trans(struct qemu_plugin_tb *tb, void *userdata)
270 {
271 size_t n = qemu_plugin_tb_n_insns(tb);
272 size_t i;
@@ -374,7 +374,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
374 mem_count = qemu_plugin_scoreboard_u64_in_struct(
375 counts, CPUCount, mem_count);
376 io_count = qemu_plugin_scoreboard_u64_in_struct(counts, CPUCount, io_count);
377 - qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
377 + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans, NULL);
378 qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
379 return 0;
380 }
tests/tcg/plugins/patch.c
+2 -2
@@ -130,7 +130,7 @@ static void patch_vaddr(unsigned int vcpu_index, void *userdata)
130 /*
131 * Callback on translation of a translation block.
132 */
133 -static void vcpu_tb_trans_cb(struct qemu_plugin_tb *tb)
133 +static void vcpu_tb_trans_cb(struct qemu_plugin_tb *tb, void *userdata)
134 {
135 g_autoptr(GByteArray) insn_data = g_byte_array_new();
136 uintptr_t addr = 0;
@@ -245,7 +245,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
245 return -1;
246 }
247
248 - qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans_cb);
248 + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans_cb, NULL);
249
250 return 0;
251 }
tests/tcg/plugins/reset.c
+4 -4
@@ -27,7 +27,7 @@ static void tb_exec_after_reset(unsigned int vcpu_index, void *userdata)
27 qemu_plugin_uninstall(plugin_id, after_uninstall, NULL);
28 }
29
30 -static void tb_trans_after_reset(struct qemu_plugin_tb *tb)
30 +static void tb_trans_after_reset(struct qemu_plugin_tb *tb, void *userdata)
31 {
32 g_assert(was_reset && !was_uninstalled);
33 qemu_plugin_register_vcpu_tb_exec_cb(tb, tb_exec_after_reset,
@@ -40,7 +40,7 @@ static void after_reset(void *userdata)
40 g_assert(!was_reset && !was_uninstalled);
41 qemu_plugin_outs("reset done\n");
42 was_reset = true;
43 - qemu_plugin_register_vcpu_tb_trans_cb(id, tb_trans_after_reset);
43 + qemu_plugin_register_vcpu_tb_trans_cb(id, tb_trans_after_reset, NULL);
44 }
45
46 static void tb_exec_before_reset(unsigned int vcpu_index, void *userdata)
@@ -49,7 +49,7 @@ static void tb_exec_before_reset(unsigned int vcpu_index, void *userdata)
49 qemu_plugin_reset(plugin_id, after_reset, (void *) plugin_id);
50 }
51
52 -static void tb_trans_before_reset(struct qemu_plugin_tb *tb)
52 +static void tb_trans_before_reset(struct qemu_plugin_tb *tb, void *userdata)
53 {
54 g_assert(!was_reset && !was_uninstalled);
55 qemu_plugin_register_vcpu_tb_exec_cb(tb, tb_exec_before_reset,
@@ -61,7 +61,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
61 int argc, char **argv)
62 {
63 plugin_id = id;
64 - qemu_plugin_register_vcpu_tb_trans_cb(id, tb_trans_before_reset);
64 + qemu_plugin_register_vcpu_tb_trans_cb(id, tb_trans_before_reset, NULL);
65 return 0;
66 }
67
tests/tcg/plugins/setpc.c
+2 -2
@@ -73,7 +73,7 @@ static void vcpu_mem_access(unsigned int vcpu_index,
73 }
74 }
75
76 -static void vcpu_tb_trans(struct qemu_plugin_tb *tb)
76 +static void vcpu_tb_trans(struct qemu_plugin_tb *tb, void *userdata)
77 {
78 size_t insns = qemu_plugin_tb_n_insns(tb);
79 for (size_t i = 0; i < insns; i++) {
@@ -100,6 +100,6 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
100 {
101
102 qemu_plugin_register_vcpu_syscall_filter_cb(id, vcpu_syscall_filter);
103 - qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
103 + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans, NULL);
104 return 0;
105 }