[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 22/25] plugins: Set final instruction count in plugin_gen_tb_end
From: |
Alex Bennée |
Subject: |
[PATCH 22/25] plugins: Set final instruction count in plugin_gen_tb_end |
Date: |
Mon, 9 Oct 2023 17:41:01 +0100 |
From: Matt Borgerson <contact@mborgerson.com>
Translation logic may partially decode an instruction, then abort and
remove the instruction from the TB. This can happen for example when an
instruction spans two pages. In this case, plugins may get an incorrect
result when calling qemu_plugin_tb_n_insns to query for the number of
instructions in the TB. This patch updates plugin_gen_tb_end to set the
final instruction count.
Signed-off-by: Matt Borgerson <contact@mborgerson.com>
[AJB: added g_assert to defed API]
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <CADc=-s5RwGViNTR-h5cq3np673W3RRFfhr4vCGJp0EoDUxvhog@mail.gmail.com>
---
include/exec/plugin-gen.h | 4 ++--
accel/tcg/plugin-gen.c | 6 +++++-
accel/tcg/translator.c | 2 +-
3 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/include/exec/plugin-gen.h b/include/exec/plugin-gen.h
index 52828781bc..c4552b5061 100644
--- a/include/exec/plugin-gen.h
+++ b/include/exec/plugin-gen.h
@@ -20,7 +20,7 @@ struct DisasContextBase;
bool plugin_gen_tb_start(CPUState *cpu, const struct DisasContextBase *db,
bool supress);
-void plugin_gen_tb_end(CPUState *cpu);
+void plugin_gen_tb_end(CPUState *cpu, size_t num_insns);
void plugin_gen_insn_start(CPUState *cpu, const struct DisasContextBase *db);
void plugin_gen_insn_end(void);
@@ -42,7 +42,7 @@ void plugin_gen_insn_start(CPUState *cpu, const struct
DisasContextBase *db)
static inline void plugin_gen_insn_end(void)
{ }
-static inline void plugin_gen_tb_end(CPUState *cpu)
+static inline void plugin_gen_tb_end(CPUState *cpu, size_t num_insns)
{ }
static inline void plugin_gen_disable_mem_helpers(void)
diff --git a/accel/tcg/plugin-gen.c b/accel/tcg/plugin-gen.c
index d31c9993ea..39b3c9351f 100644
--- a/accel/tcg/plugin-gen.c
+++ b/accel/tcg/plugin-gen.c
@@ -866,10 +866,14 @@ void plugin_gen_insn_end(void)
* do any clean-up here and make sure things are reset in
* plugin_gen_tb_start.
*/
-void plugin_gen_tb_end(CPUState *cpu)
+void plugin_gen_tb_end(CPUState *cpu, size_t num_insns)
{
struct qemu_plugin_tb *ptb = tcg_ctx->plugin_tb;
+ /* translator may have removed instructions, update final count */
+ g_assert(num_insns <= ptb->n);
+ ptb->n = num_insns;
+
/* collect instrumentation requests */
qemu_plugin_tb_trans_cb(cpu, ptb);
diff --git a/accel/tcg/translator.c b/accel/tcg/translator.c
index c5da7b32a5..575b9812ad 100644
--- a/accel/tcg/translator.c
+++ b/accel/tcg/translator.c
@@ -210,7 +210,7 @@ void translator_loop(CPUState *cpu, TranslationBlock *tb,
int *max_insns,
gen_tb_end(tb, cflags, icount_start_insn, db->num_insns);
if (plugin_enabled) {
- plugin_gen_tb_end(cpu);
+ plugin_gen_tb_end(cpu, db->num_insns);
}
/* The disas_log hook may use these values rather than recompute. */
--
2.39.2
- [PATCH 14/25] hw/core/cpu: Return static value with gdb_arch_name(), (continued)
- [PATCH 14/25] hw/core/cpu: Return static value with gdb_arch_name(), Alex Bennée, 2023/10/09
- [PATCH 13/25] target/arm: Move the reference to arm-core.xml, Alex Bennée, 2023/10/09
- [PATCH 23/25] contrib/plugins: fix coverity warning in cache, Alex Bennée, 2023/10/09
- [PATCH 11/25] contrib/plugins: Use GRWLock in execlog, Alex Bennée, 2023/10/09
- [PATCH 12/25] gdbstub: Introduce GDBFeature structure, Alex Bennée, 2023/10/09
- [PATCH 25/25] contrib/plugins: fix coverity warning in hotblocks, Alex Bennée, 2023/10/09
- [PATCH 19/25] gdbstub: Replace gdb_regs with an array, Alex Bennée, 2023/10/09
- [PATCH 22/25] plugins: Set final instruction count in plugin_gen_tb_end,
Alex Bennée <=
- [PATCH 15/25] gdbstub: Use g_markup_printf_escaped(), Alex Bennée, 2023/10/09
- [PATCH 21/25] target/sh4: Disable decode_gusa when plugins enabled, Alex Bennée, 2023/10/09
- [PATCH 20/25] accel/tcg: Add plugin_enabled to DisasContextBase, Alex Bennée, 2023/10/09
- [PATCH 16/25] target/arm: Remove references to gdb_has_xml, Alex Bennée, 2023/10/09
- [PATCH 17/25] target/ppc: Remove references to gdb_has_xml, Alex Bennée, 2023/10/09
- [PATCH 18/25] gdbstub: Remove gdb_has_xml variable, Alex Bennée, 2023/10/09
- [PATCH 24/25] contrib/plugins: fix coverity warning in lockstep, Alex Bennée, 2023/10/09