tests/plugins/insn: made arg inline not positional and parse it as bool
authorMahmoud Mandour <ma.mandourr@gmail.com>
Fri, 30 Jul 2021 13:58:14 +0000 (15:58 +0200)
committerAlex Bennée <alex.bennee@linaro.org>
Thu, 2 Sep 2021 10:29:34 +0000 (11:29 +0100)
Made argument "inline" not positional, this has two benefits. First is
that we adhere to how QEMU passes args generally, by taking the last
value of an argument and drop the others. And the second is that this
sets up a framework for potentially adding new args easily.

Signed-off-by: Mahmoud Mandour <ma.mandourr@gmail.com>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20210730135817.17816-11-ma.mandourr@gmail.com>
[AJB: fix check-tcg tests calling arg=inline]
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
tests/plugin/insn.c
tests/tcg/i386/Makefile.softmmu-target
tests/tcg/i386/Makefile.target
tests/tcg/x86_64/Makefile.softmmu-target

index c253980ec8c234786d7d98ddc916553a1e61b77e..0f6a1938c1dbdaa0c1bc7dec3e9aed36d7569a3c 100644 (file)
@@ -62,8 +62,18 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
                                            const qemu_info_t *info,
                                            int argc, char **argv)
 {
-    if (argc && !strcmp(argv[0], "inline")) {
-        do_inline = true;
+    for (int i = 0; i < argc; i++) {
+        char *opt = argv[i];
+        g_autofree char **tokens = g_strsplit(opt, "=", 2);
+        if (g_strcmp0(tokens[0], "inline") == 0) {
+            if (!qemu_plugin_bool_parse(tokens[0], tokens[1], &do_inline)) {
+                fprintf(stderr, "boolean argument parsing failed: %s\n", opt);
+                return -1;
+            }
+        } else {
+            fprintf(stderr, "option parsing failed: %s\n", opt);
+            return -1;
+        }
     }
 
     qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
index fa9b1b9f9024cb27e12925cbe22f014d10b226b7..9b9038d0bef25c92ab6ef9da6aaeb183d763c469 100644 (file)
@@ -38,7 +38,7 @@ run-plugin-%-with-libinsn.so:
        $(call run-test, $@, \
          $(QEMU) -monitor none -display none \
                  -chardev file$(COMMA)path=$@.out$(COMMA)id=output \
-                  -plugin ../../plugin/libinsn.so$(COMMA)arg=inline \
+                  -plugin ../../plugin/libinsn.so$(COMMA)inline=on \
                  -d plugin -D $*-with-libinsn.so.pout \
                  $(QEMU_OPTS) $*, \
                  "$* on $(TARGET_NAME)")
index b0a212898066e40770a2802e3b382740b3c53e3e..a053ca3f15324df6ea800d27d682b51c141c45d6 100644 (file)
@@ -61,7 +61,7 @@ endif
 # non-inline runs will trigger the duplicate instruction heuristics in libinsn.so
 run-plugin-%-with-libinsn.so:
        $(call run-test, $@, $(QEMU) $(QEMU_OPTS) \
-              -plugin ../../plugin/libinsn.so$(COMMA)arg=inline \
+              -plugin ../../plugin/libinsn.so$(COMMA)inline=on \
               -d plugin -D $*-with-libinsn.so.pout $*, \
                "$* (inline) on $(TARGET_NAME)")
 
index 9896319f0e063fa091fb76d879be2a8df23a179c..2afa3298bfb15bc09318f3732b5c19493048dc86 100644 (file)
@@ -38,7 +38,7 @@ run-plugin-%-with-libinsn.so:
        $(call run-test, $@, \
          $(QEMU) -monitor none -display none \
                  -chardev file$(COMMA)path=$@.out$(COMMA)id=output \
-                  -plugin ../../plugin/libinsn.so$(COMMA)arg=inline \
+                  -plugin ../../plugin/libinsn.so$(COMMA)inline=on \
                  -d plugin -D $*-with-libinsn.so.pout \
                  $(QEMU_OPTS) $*, \
                  "$* on $(TARGET_NAME)")