[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 10/15] target-s390x: PER instruction-fetch event sup
From: |
Aurelien Jarno |
Subject: |
[Qemu-devel] [PATCH 10/15] target-s390x: PER instruction-fetch event support |
Date: |
Sat, 13 Jun 2015 00:45:58 +0200 |
For the PER instruction-fetch, we can't use the QEMU breakpoint
infrastructure as it triggers for a single address and not a full
address range, and as it actually stop before the instruction and
not before.
We therefore call an helper with the just fetched instruction address,
which check if the address is within the PER address range. If it is
the case, an event is recorded and will be signaled through an
exception.
Note that we implement here the PER-3 behaviour, that is an invalid
opcode is not considered as an instruction fetch. Without PER-3 this
behavious is undefined.
Cc: Alexander Graf <address@hidden>
Cc: Richard Henderson <address@hidden>
Signed-off-by: Aurelien Jarno <address@hidden>
---
target-s390x/helper.h | 1 +
target-s390x/misc_helper.c | 8 ++++++++
target-s390x/translate.c | 8 ++++++++
3 files changed, 17 insertions(+)
diff --git a/target-s390x/helper.h b/target-s390x/helper.h
index 8d89cff..f789cdf 100644
--- a/target-s390x/helper.h
+++ b/target-s390x/helper.h
@@ -118,4 +118,5 @@ DEF_HELPER_FLAGS_3(stura, TCG_CALL_NO_WG, void, env, i64,
i64)
DEF_HELPER_FLAGS_3(sturg, TCG_CALL_NO_WG, void, env, i64, i64)
DEF_HELPER_1(per_check_exception, void, env)
DEF_HELPER_FLAGS_3(per_branch, TCG_CALL_NO_RWG, void, env, i64, i64)
+DEF_HELPER_FLAGS_2(per_ifetch, TCG_CALL_NO_RWG, void, env, i64)
#endif
diff --git a/target-s390x/misc_helper.c b/target-s390x/misc_helper.c
index 8972929..ca3aabe 100644
--- a/target-s390x/misc_helper.c
+++ b/target-s390x/misc_helper.c
@@ -519,4 +519,12 @@ void HELPER(per_branch)(CPUS390XState *env, uint64_t from,
uint64_t to)
}
}
}
+
+void HELPER(per_ifetch)(CPUS390XState *env, uint64_t addr)
+{
+ if ((env->cregs[9] & PER_CR9_EVENT_IFETCH) && get_per_in_range(env, addr))
{
+ env->per_address = addr;
+ env->per_perc_atmid = PER_CODE_EVENT_IFETCH | get_per_atmid(env);
+ }
+}
#endif
diff --git a/target-s390x/translate.c b/target-s390x/translate.c
index 897486c..98e8224 100644
--- a/target-s390x/translate.c
+++ b/target-s390x/translate.c
@@ -5091,6 +5091,14 @@ static ExitStatus translate_one(CPUS390XState *env,
DisasContext *s)
return EXIT_NORETURN;
}
+#ifndef CONFIG_USER_ONLY
+ if (s->tb->flags & FLAG_MASK_PER) {
+ TCGv_i64 addr = tcg_const_i64(s->pc);
+ gen_helper_per_ifetch(cpu_env, addr);
+ tcg_temp_free_i64(addr);
+ }
+#endif
+
/* Check for insn specification exceptions. */
if (insn->spec) {
int spec = insn->spec, excp = 0, r;
--
2.1.4
- [Qemu-devel] [PATCH 00/15] target-s390x: add Program-Event Recording feature, Aurelien Jarno, 2015/06/12
- [Qemu-devel] [PATCH 05/15] target-s390x: add PER related constants, Aurelien Jarno, 2015/06/12
- [Qemu-devel] [PATCH 02/15] target-s390x: function to adjust the length wrt page boundary, Aurelien Jarno, 2015/06/12
- [Qemu-devel] [PATCH 01/15] softmmu: provide tlb_vaddr_to_host function for user mode, Aurelien Jarno, 2015/06/12
- [Qemu-devel] [PATCH 06/15] target-s390x: add get_per_atmid function, Aurelien Jarno, 2015/06/12
- [Qemu-devel] [PATCH 07/15] target-s390x: add get_per_in_range function, Aurelien Jarno, 2015/06/12
- [Qemu-devel] [PATCH 11/15] translate-all: fix watchpoints if retranslation not possible, Aurelien Jarno, 2015/06/12
- [Qemu-devel] [PATCH 04/15] target-s390x: mvc_fast_memmove: access memory through softmmu, Aurelien Jarno, 2015/06/12
- [Qemu-devel] [PATCH 03/15] target-s390x: mvc_fast_memset: access memory through softmmu, Aurelien Jarno, 2015/06/12
- [Qemu-devel] [PATCH 09/15] target-s390x: PER successful-branching event support, Aurelien Jarno, 2015/06/12
- [Qemu-devel] [PATCH 10/15] target-s390x: PER instruction-fetch event support,
Aurelien Jarno <=
- [Qemu-devel] [PATCH 08/15] target-s390x: basic PER event handling, Aurelien Jarno, 2015/06/12
- [Qemu-devel] [PATCH 14/15] target-s390x: PER instruction-fetch nullification event support, Aurelien Jarno, 2015/06/12
- [Qemu-devel] [PATCH 13/15] target-s390x: PER store-using-real-address event support, Aurelien Jarno, 2015/06/12
- [Qemu-devel] [PATCH 15/15] target-s390x: PER: add Breaking-Event-Address register, Aurelien Jarno, 2015/06/12
- [Qemu-devel] [PATCH 12/15] target-s390x: PER storage-alteration event support, Aurelien Jarno, 2015/06/12
- Re: [Qemu-devel] [PATCH 00/15] target-s390x: add Program-Event Recording feature, Alexander Graf, 2015/06/16