From f0e0d817c22539cd2ce1bcb5487e076f117b04c0 Mon Sep 17 00:00:00 2001 From: Aurelien Jarno Date: Sat, 13 Jun 2015 00:45:58 +0200 Subject: 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 Signed-off-by: Alexander Graf --- target-s390x/misc_helper.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'target-s390x/misc_helper.c') diff --git a/target-s390x/misc_helper.c b/target-s390x/misc_helper.c index bc28f9d13d..73d01935be 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 -- cgit v1.2.3