All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: qemu-devel@nongnu.org
Cc: kuhn.chenqun@huawei.com, aaron@os.amperecomputing.com,
	cota@braap.org, "Alex Bennée" <alex.bennee@linaro.org>,
	robhenry@microsoft.com
Subject: [PATCH v1 05/12] tests/plugin: expand insn test to detect duplicate instructions
Date: Tue,  9 Feb 2021 18:27:41 +0000	[thread overview]
Message-ID: <20210209182749.31323-6-alex.bennee@linaro.org> (raw)
In-Reply-To: <20210209182749.31323-1-alex.bennee@linaro.org>

A duplicate insn is one that is appears to be executed twice in a row.
This is currently possible due to -icount and cpu_io_recompile()
causing a re-translation of a block. On it's own this won't trigger
any tests though.

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

---
[AJB: well not quite, the x86_64 test trips over this due to some
weirdness in the way we handle rep insns, e.g. rep movsb (%esi),
%es:(%edi) in the x86 bios code]
---
 tests/plugin/insn.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/tests/plugin/insn.c b/tests/plugin/insn.c
index a9a6e41237..c253980ec8 100644
--- a/tests/plugin/insn.c
+++ b/tests/plugin/insn.c
@@ -21,6 +21,14 @@ static bool do_inline;
 
 static void vcpu_insn_exec_before(unsigned int cpu_index, void *udata)
 {
+    static uint64_t last_pc;
+    uint64_t this_pc = GPOINTER_TO_UINT(udata);
+    if (this_pc == last_pc) {
+        g_autofree gchar *out = g_strdup_printf("detected repeat execution @ 0x%"
+                                                PRIx64 "\n", this_pc);
+        qemu_plugin_outs(out);
+    }
+    last_pc = this_pc;
     insn_count++;
 }
 
@@ -36,8 +44,10 @@ static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
             qemu_plugin_register_vcpu_insn_exec_inline(
                 insn, QEMU_PLUGIN_INLINE_ADD_U64, &insn_count, 1);
         } else {
+            uint64_t vaddr = qemu_plugin_insn_vaddr(insn);
             qemu_plugin_register_vcpu_insn_exec_cb(
-                insn, vcpu_insn_exec_before, QEMU_PLUGIN_CB_NO_REGS, NULL);
+                insn, vcpu_insn_exec_before, QEMU_PLUGIN_CB_NO_REGS,
+                GUINT_TO_POINTER(vaddr));
         }
     }
 }
-- 
2.20.1



  parent reply	other threads:[~2021-02-09 18:30 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-09 18:27 [PATCH v1 00/12] fix plugins double counting with mmio, cleanup CF_ flags Alex Bennée
2021-02-09 18:27 ` [PATCH v1 01/12] exec: Move TranslationBlock typedef to qemu/typedefs.h Alex Bennée
2021-02-09 18:27 ` [PATCH v1 02/12] accel/tcg: Create io_recompile_replay_branch hook Alex Bennée
2021-02-09 18:27 ` [PATCH v1 03/12] target/mips: Create mips_io_recompile_replay_branch Alex Bennée
2021-02-09 18:27 ` [PATCH v1 04/12] target/sh4: Create superh_io_recompile_replay_branch Alex Bennée
2021-02-09 18:27 ` Alex Bennée [this message]
2021-02-09 18:34   ` [PATCH v1 05/12] tests/plugin: expand insn test to detect duplicate instructions Richard Henderson
2021-02-09 20:48     ` Alex Bennée
2021-02-09 18:27 ` [PATCH v1 06/12] tests/acceptance: add a new set of tests to exercise plugins Alex Bennée
2021-02-09 18:27 ` [PATCH v1 07/12] accel/tcg: actually cache our partial icount TB Alex Bennée
2021-02-09 18:41   ` Richard Henderson
2021-02-09 20:49     ` Alex Bennée
2021-02-09 18:27 ` [PATCH v1 08/12] accel/tcg: cache single instruction TB on pending replay exception Alex Bennée
2021-02-09 18:27 ` [PATCH v1 09/12] accel/tcg: re-factor non-RAM execution code Alex Bennée
2021-02-09 18:27 ` [PATCH v1 10/12] accel/tcg: remove CF_NOCACHE and special cases Alex Bennée
2021-02-09 21:03   ` Richard Henderson
2021-02-09 18:27 ` [PATCH v1 11/12] accel/tcg: allow plugin instrumentation to be disable via cflags Alex Bennée
2021-02-09 21:05   ` Richard Henderson
2021-02-09 18:27 ` [PATCH v1 12/12] tests/acceptance: add a new tests to detect counting errors Alex Bennée
2021-02-11 11:28 ` [PATCH v1 00/12] fix plugins double counting with mmio, cleanup CF_ flags no-reply

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=20210209182749.31323-6-alex.bennee@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=aaron@os.amperecomputing.com \
    --cc=cota@braap.org \
    --cc=kuhn.chenqun@huawei.com \
    --cc=qemu-devel@nongnu.org \
    --cc=robhenry@microsoft.com \
    /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.