diff options
Diffstat (limited to 'results/classifier/118/none/2035')
| -rw-r--r-- | results/classifier/118/none/2035 | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/results/classifier/118/none/2035 b/results/classifier/118/none/2035 new file mode 100644 index 000000000..6271b6530 --- /dev/null +++ b/results/classifier/118/none/2035 @@ -0,0 +1,84 @@ +graphic: 0.793 +TCG: 0.772 +files: 0.750 +vnc: 0.654 +ppc: 0.631 +debug: 0.611 +risc-v: 0.608 +hypervisor: 0.557 +device: 0.557 +architecture: 0.553 +peripherals: 0.517 +register: 0.512 +PID: 0.489 +assembly: 0.473 +arm: 0.429 +permissions: 0.413 +boot: 0.410 +kernel: 0.348 +performance: 0.342 +virtual: 0.340 +x86: 0.323 +user-level: 0.318 +VMM: 0.287 +network: 0.254 +KVM: 0.249 +semantic: 0.247 +socket: 0.244 +mistranslation: 0.216 +i386: 0.127 + +TCG Plugin exit callback not executing +Description of problem: +I cannot get the plugin exit callback to register/execute. I should see "Goodbye from plugin" but dont. I have also tried using `qemu_plugin_outs` without success. + +**Update: If I make my test binary an infinite loop and kill it with CTRL-C, then the callback is called as expected. Am I just using it wrong?** +Steps to reproduce: +1. Configured QEMU with `--target-list=riscv32-linux-user,riscv64-linux-user --enable-plugins --disable-system` +2. Compiled plugin with +``` +gcc -I./qemu/include/qemu `pkg-config --libs glib-2.0` -O0 -fvisibility=hidden -Wall -shared -fPIC `pkg-config --cflags glib-2.0` +``` +3. Compiled test binary (just a hello world) with `riscv64-unknown-elf-gcc test_qemu.c -o test_qemu` +4. Ran ./qemu/build/qemu-riscv64 -plugin ./test_plugin.so -d plugin ./test_qemu +Additional information: +test_plugin.c +``` +#include <inttypes.h> +#include <assert.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <stdio.h> +#include <qemu-plugin.h> + +QEMU_PLUGIN_EXPORT int qemu_plugin_version = QEMU_PLUGIN_VERSION; + +static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb) +{ + int n_insns = qemu_plugin_tb_n_insns(tb); + printf("> New TB of size %d\n", n_insns); + + for (int i = 0; i < n_insns; i++) { + struct qemu_plugin_insn * insn = qemu_plugin_tb_get_insn(tb, i); + char * disassembly = qemu_plugin_insn_disas(insn); + printf(" > Instruciton: %s\n", disassembly); + } +} + +static void plugin_exit(qemu_plugin_id_t id, void *p) +{ + printf("> Goodbye from plugin. %d\n", id); +} + +QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id, + const qemu_info_t *info, + int argc, char **argv) +{ + printf("> Hello From Plugin!\n"); + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans); + qemu_plugin_register_atexit_cb(id, plugin_exit, NULL); + printf("> Everything was registered\n"); + return 0; +} +``` |