qemu-devel.nongnu.org archive mirror
 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).