[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 20/26] target-s390x: PER instruction-fetch event supp
From: |
Alexander Graf |
Subject: |
[Qemu-devel] [PULL 20/26] target-s390x: PER instruction-fetch event support |
Date: |
Wed, 17 Jun 2015 12:43:03 +0200 |
From: Aurelien Jarno <address@hidden>
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.
Signed-off-by: Aurelien Jarno <address@hidden>
Signed-off-by: Alexander Graf <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 89197cb..7e06119 100644
--- a/target-s390x/helper.h
+++ b/target-s390x/helper.h
@@ -118,6 +118,7 @@ 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)
DEF_HELPER_2(xsch, void, env, i64)
DEF_HELPER_2(csch, void, env, i64)
diff --git a/target-s390x/misc_helper.c b/target-s390x/misc_helper.c
index bc28f9d..73d0193 100644
--- a/target-s390x/misc_helper.c
+++ b/target-s390x/misc_helper.c
@@ -619,4 +619,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 0387806..d69fb5c 100644
--- a/target-s390x/translate.c
+++ b/target-s390x/translate.c
@@ -5187,6 +5187,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;
--
1.7.12.4
- [Qemu-devel] [PULL 03/26] virtio-ccw: disable ioevent bit when ioeventfds are not enabled, (continued)
- [Qemu-devel] [PULL 03/26] virtio-ccw: disable ioevent bit when ioeventfds are not enabled, Alexander Graf, 2015/06/17
- [Qemu-devel] [PULL 09/26] target-s390x: wire up DIAG REIPL in TCG mode, Alexander Graf, 2015/06/17
- [Qemu-devel] [PULL 05/26] target-s390x: correctly initialize ext interrupt queue, Alexander Graf, 2015/06/17
- [Qemu-devel] [PULL 01/26] s390/ioinst: fix IO_INT_WORD_ISC macro, Alexander Graf, 2015/06/17
- [Qemu-devel] [PULL 12/26] target-s390x: function to adjust the length wrt page boundary, Alexander Graf, 2015/06/17
- [Qemu-devel] [PULL 16/26] target-s390x: add get_per_atmid function, Alexander Graf, 2015/06/17
- [Qemu-devel] [PULL 11/26] softmmu: provide tlb_vaddr_to_host function for user mode, Alexander Graf, 2015/06/17
- [Qemu-devel] [PULL 26/26] s390x: Switch to s390-ccw machine as default, Alexander Graf, 2015/06/17
- [Qemu-devel] [PULL 23/26] target-s390x: PER store-using-real-address event support, Alexander Graf, 2015/06/17
- [Qemu-devel] [PULL 07/26] target-s390x: fix s390_cpu_initial_reset, Alexander Graf, 2015/06/17
- [Qemu-devel] [PULL 20/26] target-s390x: PER instruction-fetch event support,
Alexander Graf <=
- [Qemu-devel] [PULL 13/26] target-s390x: mvc_fast_memset: access memory through softmmu, Alexander Graf, 2015/06/17
- [Qemu-devel] [PULL 08/26] target-s390x: wire up DIAG IPL in TCG mode, Alexander Graf, 2015/06/17
- [Qemu-devel] [PULL 02/26] s390/ioinst: fix endianness in ioinst_schib_valid, Alexander Graf, 2015/06/17
- [Qemu-devel] [PULL 18/26] target-s390x: basic PER event handling, Alexander Graf, 2015/06/17
- [Qemu-devel] [PULL 10/26] target-s390x: wire up I/O instructions in TCG mode, Alexander Graf, 2015/06/17
- [Qemu-devel] [PULL 21/26] translate-all: fix watchpoints if retranslation not possible, Alexander Graf, 2015/06/17
- [Qemu-devel] [PULL 14/26] target-s390x: mvc_fast_memmove: access memory through softmmu, Alexander Graf, 2015/06/17
- [Qemu-devel] [PULL 22/26] target-s390x: PER storage-alteration event support, Alexander Graf, 2015/06/17
- [Qemu-devel] [PULL 25/26] target-s390x: PER: add Breaking-Event-Address register, Alexander Graf, 2015/06/17
- [Qemu-devel] [PULL 19/26] target-s390x: PER successful-branching event support, Alexander Graf, 2015/06/17