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: fam@euphon.net, berrange@redhat.com, robert.foley@linaro.org,
	pbonzini@redhat.com, stefanb@linux.vnet.ibm.com,
	"Alex Bennée" <alex.bennee@linaro.org>,
	richard.henderson@linaro.org, f4bug@amsat.org,
	robhenry@microsoft.com, qemu-stable@nongnu.org,
	marcandre.lureau@redhat.com, aaron@os.amperecomputing.com,
	cota@braap.org, stefanha@redhat.com, kuhn.chenqun@huawei.com,
	peter.puhov@linaro.org, aurelien@aurel32.net,
	"Richard Henderson" <rth@twiddle.net>
Subject: [PATCH  v3 17/19] tcg: save vaddr temp for plugin usage
Date: Tue, 25 Feb 2020 12:47:08 +0000	[thread overview]
Message-ID: <20200225124710.14152-18-alex.bennee@linaro.org> (raw)
In-Reply-To: <20200225124710.14152-1-alex.bennee@linaro.org>

From: Richard Henderson <richard.henderson@linaro.org>

While do_gen_mem_cb does copy (via extu_tl_i64) vaddr into a new temp
this won't help if the vaddr temp gets clobbered by the actual
load/store op. To avoid this clobbering we explicitly copy vaddr
before the op to ensure it is live my the time we do the
instrumentation.

Suggested-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Emilio G. Cota <cota@braap.org>
Cc: qemu-stable@nongnu.org
---
 tcg/tcg-op.c | 23 ++++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)

diff --git a/tcg/tcg-op.c b/tcg/tcg-op.c
index 7d782002e3f..e2e25ebf7db 100644
--- a/tcg/tcg-op.c
+++ b/tcg/tcg-op.c
@@ -2794,13 +2794,26 @@ static void tcg_gen_req_mo(TCGBar type)
     }
 }
 
+static inline TCGv plugin_prep_mem_callbacks(TCGv vaddr)
+{
+#ifdef CONFIG_PLUGIN
+    if (tcg_ctx->plugin_insn != NULL) {
+        /* Save a copy of the vaddr for use after a load.  */
+        TCGv temp = tcg_temp_new();
+        tcg_gen_mov_tl(temp, vaddr);
+        return temp;
+    }
+#endif
+    return vaddr;
+}
+
 static inline void plugin_gen_mem_callbacks(TCGv vaddr, uint16_t info)
 {
 #ifdef CONFIG_PLUGIN
-    if (tcg_ctx->plugin_insn == NULL) {
-        return;
+    if (tcg_ctx->plugin_insn != NULL) {
+        plugin_gen_empty_mem_callback(vaddr, info);
+        tcg_temp_free(vaddr);
     }
-    plugin_gen_empty_mem_callback(vaddr, info);
 #endif
 }
 
@@ -2822,6 +2835,7 @@ void tcg_gen_qemu_ld_i32(TCGv_i32 val, TCGv addr, TCGArg idx, MemOp memop)
         }
     }
 
+    addr = plugin_prep_mem_callbacks(addr);
     gen_ldst_i32(INDEX_op_qemu_ld_i32, val, addr, memop, idx);
     plugin_gen_mem_callbacks(addr, info);
 
@@ -2868,6 +2882,7 @@ void tcg_gen_qemu_st_i32(TCGv_i32 val, TCGv addr, TCGArg idx, MemOp memop)
         memop &= ~MO_BSWAP;
     }
 
+    addr = plugin_prep_mem_callbacks(addr);
     gen_ldst_i32(INDEX_op_qemu_st_i32, val, addr, memop, idx);
     plugin_gen_mem_callbacks(addr, info);
 
@@ -2905,6 +2920,7 @@ void tcg_gen_qemu_ld_i64(TCGv_i64 val, TCGv addr, TCGArg idx, MemOp memop)
         }
     }
 
+    addr = plugin_prep_mem_callbacks(addr);
     gen_ldst_i64(INDEX_op_qemu_ld_i64, val, addr, memop, idx);
     plugin_gen_mem_callbacks(addr, info);
 
@@ -2967,6 +2983,7 @@ void tcg_gen_qemu_st_i64(TCGv_i64 val, TCGv addr, TCGArg idx, MemOp memop)
         memop &= ~MO_BSWAP;
     }
 
+    addr = plugin_prep_mem_callbacks(addr);
     gen_ldst_i64(INDEX_op_qemu_st_i64, val, addr, memop, idx);
     plugin_gen_mem_callbacks(addr, info);
 
-- 
2.20.1



  parent reply	other threads:[~2020-02-25 13:51 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-25 12:46 [PATCH v3 00/19] testing & plugin updates Alex Bennée
2020-02-25 12:46 ` [PATCH v3 01/19] tests/tcg: include a skip runner for pauth3 with plugins Alex Bennée
2020-02-25 12:46 ` [PATCH v3 02/19] tests/rcutorture: update usage hint Alex Bennée
2020-02-25 12:46 ` [PATCH v3 03/19] tests/rcutorture: better document locking of stats Alex Bennée
2020-02-25 12:46 ` [PATCH v3 04/19] tests/rcutorture: mild documenting refactor of update thread Alex Bennée
2020-02-25 12:46 ` [PATCH v3 05/19] travis.yml: Test the s390-ccw build, too Alex Bennée
2020-02-25 12:46 ` [PATCH v3 06/19] travis.yml: Fix Travis YAML configuration warnings Alex Bennée
2020-02-25 12:46 ` [PATCH v3 07/19] travis.yml: single-thread build-tcg stages Alex Bennée
2020-02-25 12:46 ` [PATCH v3 08/19] tests/iotests: be a little more forgiving on the size test Alex Bennée
2020-02-25 14:11   ` Robert Foley
2020-02-25 18:22   ` Stefan Berger
2020-02-25 18:39     ` Philippe Mathieu-Daudé
2020-02-25 12:47 ` [PATCH v3 09/19] tracing: only allow -trace to override -D if set Alex Bennée
2020-02-25 12:47 ` [PATCH v3 10/19] docs/devel: document query handle lifetimes Alex Bennée
2020-02-25 12:47 ` [PATCH v3 11/19] plugins/core: add missing break in cb_to_tcg_flags Alex Bennée
2020-02-25 12:47 ` [PATCH v3 12/19] tests/plugin: prevent uninitialized warning Alex Bennée
2020-02-26 13:59   ` Philippe Mathieu-Daudé
2020-02-27  7:01     ` Chenqun (kuhn)
2020-02-25 12:47 ` [PATCH v3 13/19] qemu/bitops.h: Add extract8 and extract16 Alex Bennée
2020-02-25 14:04   ` Philippe Mathieu-Daudé
2020-02-25 12:47 ` [PATCH v3 14/19] target/riscv: progressively load the instruction during decode Alex Bennée
2020-02-25 12:47 ` [PATCH v3 15/19] tests/plugins: make howvec clean-up after itself Alex Bennée
2020-02-25 12:47 ` [PATCH v3 16/19] tests/tcg: give debug builds a little bit longer Alex Bennée
2020-02-25 12:47 ` Alex Bennée [this message]
2020-02-25 12:47 ` [PATCH v3 18/19] tests/tcg: fix typo in configure.sh test for v8.3 Alex Bennée
2020-02-25 12:47 ` [PATCH v3 19/19] tests/tcg: take into account expected clashes pauth-4 Alex Bennée
2020-02-26 13:36 ` [PATCH v3 00/19] testing & plugin updates 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=20200225124710.14152-18-alex.bennee@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=aaron@os.amperecomputing.com \
    --cc=aurelien@aurel32.net \
    --cc=berrange@redhat.com \
    --cc=cota@braap.org \
    --cc=f4bug@amsat.org \
    --cc=fam@euphon.net \
    --cc=kuhn.chenqun@huawei.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.puhov@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-stable@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=robert.foley@linaro.org \
    --cc=robhenry@microsoft.com \
    --cc=rth@twiddle.net \
    --cc=stefanb@linux.vnet.ibm.com \
    --cc=stefanha@redhat.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).