All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: peter.maydell@linaro.org
Cc: "Alex Bennée" <alex.bennee@linaro.org>,
	"Mahmoud Mandour" <ma.mandourr@gmail.com>,
	richard.henderson@linaro.org, qemu-devel@nongnu.org,
	"Alexandre Iooss" <erdnaxe@crans.org>
Subject: [PULL 16/21] tests/plugins: extend the insn plugin to track opcode sizes
Date: Wed,  3 Nov 2021 17:05:53 +0000	[thread overview]
Message-ID: <20211103170558.717981-17-alex.bennee@linaro.org> (raw)
In-Reply-To: <20211103170558.717981-1-alex.bennee@linaro.org>

This is mostly a convenience feature for identifying frontends that do
multiple repeat loads so I can test changes to the instruction
tracking interface.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20211026102234.3961636-20-alex.bennee@linaro.org>

diff --git a/tests/plugin/insn.c b/tests/plugin/insn.c
index 0f6a1938c1..d229fdc001 100644
--- a/tests/plugin/insn.c
+++ b/tests/plugin/insn.c
@@ -18,6 +18,8 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_version = QEMU_PLUGIN_VERSION;
 
 static uint64_t insn_count;
 static bool do_inline;
+static bool do_size;
+static GArray *sizes;
 
 static void vcpu_insn_exec_before(unsigned int cpu_index, void *udata)
 {
@@ -49,13 +51,35 @@ static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
                 insn, vcpu_insn_exec_before, QEMU_PLUGIN_CB_NO_REGS,
                 GUINT_TO_POINTER(vaddr));
         }
+
+        if (do_size) {
+            size_t sz = qemu_plugin_insn_size(insn);
+            if (sz > sizes->len) {
+                g_array_set_size(sizes, sz);
+            }
+            unsigned long *cnt = &g_array_index(sizes, unsigned long, sz);
+            (*cnt)++;
+        }
     }
 }
 
 static void plugin_exit(qemu_plugin_id_t id, void *p)
 {
-    g_autofree gchar *out = g_strdup_printf("insns: %" PRIu64 "\n", insn_count);
-    qemu_plugin_outs(out);
+    g_autoptr(GString) out = g_string_new(NULL);
+
+    if (do_size) {
+        int i;
+        for (i = 0; i <= sizes->len; i++) {
+            unsigned long *cnt = &g_array_index(sizes, unsigned long, i);
+            if (*cnt) {
+                g_string_append_printf(out,
+                                       "len %d bytes: %ld insns\n", i, *cnt);
+            }
+        }
+    } else {
+        g_string_append_printf(out, "insns: %" PRIu64 "\n", insn_count);
+    }
+    qemu_plugin_outs(out->str);
 }
 
 QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
@@ -70,12 +94,21 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
                 fprintf(stderr, "boolean argument parsing failed: %s\n", opt);
                 return -1;
             }
+        } else if (g_strcmp0(tokens[0], "sizes") == 0) {
+            if (!qemu_plugin_bool_parse(tokens[0], tokens[1], &do_size)) {
+                fprintf(stderr, "boolean argument parsing failed: %s\n", opt);
+                return -1;
+            }
         } else {
             fprintf(stderr, "option parsing failed: %s\n", opt);
             return -1;
         }
     }
 
+    if (do_size) {
+        sizes = g_array_new(true, true, sizeof(unsigned long));
+    }
+
     qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
     qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
     return 0;
-- 
2.30.2



  parent reply	other threads:[~2021-11-03 17:21 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-03 17:05 [PULL for 6.2 00/21] testing, plugin and gdbstub updates Alex Bennée
2021-11-03 17:05 ` [PULL 01/21] tests/docker: Update debian-hexagon-cross to a newer toolchain Alex Bennée
2021-11-03 17:05 ` [PULL 02/21] gitlab-ci: Remove special casing for hexagon testing Alex Bennée
2021-11-03 17:05 ` [PULL 03/21] tests/docker: Add debian-nios2-cross image Alex Bennée
2021-11-03 17:05 ` [PULL 04/21] tests/docker: Add debian-microblaze-cross image Alex Bennée
2021-11-03 17:05 ` [PULL 05/21] tests/tcg: Enable container_cross_cc for microblaze Alex Bennée
2021-11-03 17:05 ` [PULL 06/21] tests/tcg: Fix some targets default cross compiler path Alex Bennée
2021-11-03 17:05 ` [PULL 07/21] tests/docker: split PARTIAL into PARTIAL and VIRTUAL images Alex Bennée
2021-11-03 17:05 ` [PULL 08/21] tests/tcg: enable debian-nios2-cross for test building Alex Bennée
2021-11-03 17:05 ` [PULL 09/21] ebpf: really include it only in system emulators Alex Bennée
2021-11-03 17:05 ` [PULL 10/21] plugins/cache: freed heap-allocated mutexes Alex Bennée
2021-11-03 17:05 ` [PULL 11/21] plugins/cache: implement unified L2 cache emulation Alex Bennée
2021-11-03 17:05 ` [PULL 12/21] plugins/cache: split command line arguments into name and value Alex Bennée
2021-11-03 17:05 ` [PULL 13/21] plugins/cache: make L2 emulation optional through args Alex Bennée
2021-11-03 17:05 ` [PULL 14/21] docs/tcg-plugins: add L2 arguments to cache docs Alex Bennée
2021-11-03 17:05 ` [PULL 15/21] chardev: don't exit() straight away on C-a x Alex Bennée
2021-11-03 17:05 ` Alex Bennée [this message]
2021-11-03 17:05 ` [PULL 17/21] plugins: try and make plugin_insn_append more ergonomic Alex Bennée
2021-11-03 17:05 ` [PULL 18/21] tests/tcg: remove duplicate EXTRA_RUNS Alex Bennée
2021-11-03 17:05 ` [PULL 19/21] gdbstub: Switch to the thread receiving a signal Alex Bennée
2021-11-03 17:05 ` [PULL 20/21] tests/tcg: remove debug polluting make output Alex Bennée
2021-11-03 17:05 ` [PULL 21/21] tests/vm/openbsd: Update to release 7.0 Alex Bennée
2021-11-03 17:20 ` [PULL for 6.2 00/21] testing, plugin and gdbstub updates Alex Bennée
2021-11-03 19:32   ` Taylor Simpson
2021-11-04  4:45     ` Richard Henderson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211103170558.717981-17-alex.bennee@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=erdnaxe@crans.org \
    --cc=ma.mandourr@gmail.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.