diff options
Diffstat (limited to 'results/classifier/118/TCG-arm/2570')
| -rw-r--r-- | results/classifier/118/TCG-arm/2570 | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/results/classifier/118/TCG-arm/2570 b/results/classifier/118/TCG-arm/2570 new file mode 100644 index 000000000..86a8f142e --- /dev/null +++ b/results/classifier/118/TCG-arm/2570 @@ -0,0 +1,115 @@ +TCG: 0.883 +debug: 0.837 +graphic: 0.832 +PID: 0.824 +architecture: 0.802 +arm: 0.802 +x86: 0.800 +mistranslation: 0.794 +files: 0.794 +register: 0.784 +vnc: 0.782 +virtual: 0.777 +peripherals: 0.770 +semantic: 0.763 +ppc: 0.759 +network: 0.749 +socket: 0.745 +VMM: 0.744 +performance: 0.742 +permissions: 0.730 +device: 0.724 +risc-v: 0.715 +i386: 0.699 +user-level: 0.690 +kernel: 0.677 +boot: 0.674 +assembly: 0.633 +hypervisor: 0.612 +KVM: 0.575 +-------------------- +i386: 0.899 +TCG: 0.861 +x86: 0.822 +debug: 0.645 +virtual: 0.440 +user-level: 0.298 +files: 0.078 +PID: 0.044 +hypervisor: 0.033 +kernel: 0.021 +register: 0.014 +device: 0.010 +assembly: 0.009 +architecture: 0.009 +performance: 0.008 +semantic: 0.008 +network: 0.006 +VMM: 0.004 +socket: 0.004 +boot: 0.004 +graphic: 0.004 +permissions: 0.002 +KVM: 0.002 +ppc: 0.002 +peripherals: 0.002 +vnc: 0.001 +risc-v: 0.001 +mistranslation: 0.001 +arm: 0.000 + +TCG Plugins: "Code should not be reached" error after resetting plugin from vcpu_tb_trans callback +Description of problem: +In a TCG plugin, using the `qemu_plugin_reset` method from within a `vcpu_tb_trans` callback produces the following error. If this isn't a supported use case, it should probably be described in the documentation. If this is supposed to work, it doesn't seem to. + +``` +** +ERROR:/home/user/git/qemu/tcg/i386/tcg-target.c.inc:3018:tcg_out_op: code should not be reached +Bail out! ERROR:/home/user/git/qemu/tcg/i386/tcg-target.c.inc:3018:tcg_out_op: code should not be reached +Aborted (core dumped) +``` +Steps to reproduce: +1. Build the current head of master (4b7ea33074450bc6148c8e1545d78f179e64adb4) with the below `min` plugin (i.e., add to contrib/plugins and update contrib/plugins/Makefile so it is built) +2. `../configure --enable-plugins --target-list=x86_64-softmmu --disable-docs` +3. `make && make plugins` +4. Get a qcow, e.g., the Ubuntu Bionic qcow from [here](https://panda.re/qcows/linux/ubuntu/1804/x86_64/bionic-server-cloudimg-amd64-noaslr-nokaslr.qcow2). +5. `./qemu-system-x86_64 -plugin contrib/plugins/libmin.so bionic-server-cloudimg-amd64-noaslr-nokaslr.qcow2 -nographic` + +The first three lines are output by the plugin as expected, the error after that and the abort are unexpected: +``` +Translating basic block +Reset request issued +Reset finished +** +ERROR:/home/user/git/qemu/tcg/i386/tcg-target.c.inc:3018:tcg_out_op: code should not be reached +Bail out! ERROR:/home/user/git/qemu/tcg/i386/tcg-target.c.inc:3018:tcg_out_op: code should not be reached +Aborted (core dumped) +``` +Additional information: +contrib/plugins/min.c +```c +#include <stdio.h> +#include <qemu-plugin.h> + +QEMU_PLUGIN_EXPORT int qemu_plugin_version = QEMU_PLUGIN_VERSION; + +qemu_plugin_id_t plugin_id = {0}; + +static void post_reset(qemu_plugin_id_t id) { + printf("Reset finished\n"); +} + +static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb) { + printf("Translating basic block\n"); + qemu_plugin_reset(plugin_id, post_reset); + printf("Reset request issued\n"); +} + +QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id, + const qemu_info_t *info, int argc, char **argv) { + + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans); + plugin_id = id; + return 0; +} +``` |