summaryrefslogtreecommitdiffstats
path: root/target-s390x/translate.c
diff options
context:
space:
mode:
authorAurelien Jarno <aurelien@aurel32.net>2015-06-13 00:45:58 +0200
committerAlexander Graf <agraf@suse.de>2015-06-17 12:40:52 +0200
commitf0e0d817c22539cd2ce1bcb5487e076f117b04c0 (patch)
tree654992ba9d6cbb96cfade0d5826de97ca7da4bbc /target-s390x/translate.c
parent2c2275eb41c612df4bd115cf71d6e651d105f69c (diff)
downloadhqemu-f0e0d817c22539cd2ce1bcb5487e076f117b04c0.zip
hqemu-f0e0d817c22539cd2ce1bcb5487e076f117b04c0.tar.gz
target-s390x: PER instruction-fetch event support
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 <aurelien@aurel32.net> Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'target-s390x/translate.c')
-rw-r--r--target-s390x/translate.c8
1 files changed, 8 insertions, 0 deletions
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;
OpenPOWER on IntegriCloud