[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC 23/48] translator: add plugin_insn argument to tra
From: |
Emilio G. Cota |
Subject: |
Re: [Qemu-devel] [RFC 23/48] translator: add plugin_insn argument to translate_insn |
Date: |
Tue, 27 Nov 2018 20:12:17 -0500 |
User-agent: |
Mutt/1.9.4 (2018-02-28) |
On Tue, Nov 27, 2018 at 19:54:02 -0500, Emilio G. Cota wrote:
> To avoid altering the signature of .translate_insn, I've modified
> arm_ldl_code directly, as follows:
>
> uint32_t insn = cpu_ldl_code(env, addr);
> +
> if (bswap_code(sctlr_b)) {
> - return bswap32(insn);
> + insn = bswap32(insn);
> + }
> + if (tcg_ctx->plugin_insn) {
> + qemu_plugin_insn_append(tcg_ctx->plugin_insn, &insn, sizeof(insn));
> }
> return insn;
> }
Turns out it got even more complicated with thumb, since instructions
can be 16 or 32 bits.
I ended up with the appended (qemu_plugin_insn_append() returns
when the first argument is NULL).
Emilio
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
index 88195ab949..e6caaff976 100644
--- a/target/arm/translate-a64.c
+++ b/target/arm/translate-a64.c
@@ -38,6 +38,7 @@
#include "trace-tcg.h"
#include "translate-a64.h"
#include "qemu/atomic128.h"
+#include "qemu/plugin.h"
static TCGv_i64 cpu_X[32];
static TCGv_i64 cpu_pc;
@@ -13321,6 +13322,7 @@ static void disas_a64_insn(CPUARMState *env,
DisasContext *s)
uint32_t insn;
insn = arm_ldl_code(env, s->pc, s->sctlr_b);
+ qemu_plugin_insn_append(tcg_ctx->plugin_insn, &insn, sizeof(insn));
s->insn = insn;
s->pc += 4;
diff --git a/target/arm/translate.c b/target/arm/translate.c
index 7c4675ffd8..7523257b85 100644
--- a/target/arm/translate.c
+++ b/target/arm/translate.c
@@ -36,6 +36,7 @@
#include "trace-tcg.h"
#include "exec/log.h"
+#include "qemu/plugin.h"
#define ENABLE_ARCH_4T arm_dc_feature(s, ARM_FEATURE_V4T)
@@ -13234,6 +13235,7 @@ static void arm_tr_translate_insn(DisasContextBase
*dcbase, CPUState *cpu)
}
insn = arm_ldl_code(env, dc->pc, dc->sctlr_b);
+ qemu_plugin_insn_append(tcg_ctx->plugin_insn, &insn, sizeof(insn));
dc->insn = insn;
dc->pc += 4;
disas_arm_insn(dc, insn);
@@ -13304,11 +13306,16 @@ static void thumb_tr_translate_insn(DisasContextBase
*dcbase, CPUState *cpu)
insn = arm_lduw_code(env, dc->pc, dc->sctlr_b);
is_16bit = thumb_insn_is_16bit(dc, insn);
dc->pc += 2;
- if (!is_16bit) {
+ if (is_16bit) {
+ uint16_t insn16 = insn;
+
+ qemu_plugin_insn_append(tcg_ctx->plugin_insn, &insn16, sizeof(insn16));
+ } else {
uint32_t insn2 = arm_lduw_code(env, dc->pc, dc->sctlr_b);
insn = insn << 16 | insn2;
dc->pc += 2;
+ qemu_plugin_insn_append(tcg_ctx->plugin_insn, &insn, sizeof(insn));
}
dc->insn = insn;
- Re: [Qemu-devel] [RFC 23/48] translator: add plugin_insn argument to translate_insn, Alex Bennée, 2018/11/26
- Re: [Qemu-devel] [RFC 23/48] translator: add plugin_insn argument to translate_insn, Richard Henderson, 2018/11/26
- Re: [Qemu-devel] [RFC 23/48] translator: add plugin_insn argument to translate_insn, Alex Bennée, 2018/11/26
- Re: [Qemu-devel] [RFC 23/48] translator: add plugin_insn argument to translate_insn, Emilio G. Cota, 2018/11/26
- Re: [Qemu-devel] [RFC 23/48] translator: add plugin_insn argument to translate_insn, Richard Henderson, 2018/11/26
- Re: [Qemu-devel] [RFC 23/48] translator: add plugin_insn argument to translate_insn, Emilio G. Cota, 2018/11/26
- Re: [Qemu-devel] [RFC 23/48] translator: add plugin_insn argument to translate_insn, Emilio G. Cota, 2018/11/27
- Re: [Qemu-devel] [RFC 23/48] translator: add plugin_insn argument to translate_insn,
Emilio G. Cota <=
- Re: [Qemu-devel] [RFC 23/48] translator: add plugin_insn argument to translate_insn, Alex Bennée, 2018/11/28
- Re: [Qemu-devel] [RFC 23/48] translator: add plugin_insn argument to translate_insn, Emilio G. Cota, 2018/11/28
- Re: [Qemu-devel] [RFC 23/48] translator: add plugin_insn argument to translate_insn, Pavel Dovgalyuk, 2018/11/27